Намутил немного CRUD'a: вывод списка, удаление записи и создание новой записи
This commit is contained in:
		
							parent
							
								
									75bfe72bc7
								
							
						
					
					
						commit
						aa485fa2b1
					
				|  | @ -1,9 +1,18 @@ | |||
| .link-no-decor { | ||||
|     color: white; | ||||
|     text-decoration: none; | ||||
|     cursor: pointer; | ||||
|     color: white!important; | ||||
|     text-decoration: none!important; | ||||
|     cursor: pointer!important; | ||||
| } | ||||
| 
 | ||||
| .link-no-decor:hover { | ||||
|     color: #093160; | ||||
|     color: #093160!important; | ||||
| } | ||||
| 
 | ||||
| .cursor-pointer { | ||||
|     cursor: pointer!important; | ||||
| } | ||||
| 
 | ||||
| .card-bg { | ||||
|     background-color: #212022!important; | ||||
|     color: white!important; | ||||
| } | ||||
|  |  | |||
|  | @ -9,15 +9,15 @@ export const useWishStore = defineStore('wish', { | |||
|         pushWish(wish){ | ||||
|             this.wishesList.push(wish); | ||||
|         }, | ||||
|         async getUserWishes(user_id, token){ | ||||
|         async getUserWishes(user_id){ | ||||
|             let result = null; | ||||
|             await axios.get(`/api/wish/user_wishes/${user_id.toString()}`, | ||||
|                 { | ||||
|                     headers: { | ||||
|                         Authorization: `Bearer ${token}`, | ||||
|                         token: token | ||||
|                     } | ||||
|                 } | ||||
|                 // {
 | ||||
|                 //     headers: {
 | ||||
|                 //         Authorization: `Bearer ${token}`,
 | ||||
|                 //         token: token
 | ||||
|                 //     }
 | ||||
|                 // }
 | ||||
|             ).then((response)=>{ | ||||
|                 result = response.data; | ||||
|             }); | ||||
|  | @ -42,6 +42,21 @@ export const useWishStore = defineStore('wish', { | |||
|                 newWish = {status: response.status, statusText: response.statusText, data: response.data}; | ||||
|             }); | ||||
|             return newWish; | ||||
|         }, | ||||
|         async remove(id, token){ | ||||
|             await axios.post(`/api/wish/destroy`, | ||||
|                 { | ||||
|                     id: id | ||||
|                 }, | ||||
|                 { | ||||
|                     headers: { | ||||
|                         Authorization: `Bearer ${token}`, | ||||
|                         token: token | ||||
|                     }, | ||||
|                 } | ||||
|             ).then((response)=>{ | ||||
|                 return response; | ||||
|             }); | ||||
|         } | ||||
|     }, | ||||
| }) | ||||
|  |  | |||
|  | @ -12,15 +12,31 @@ export default { | |||
|     data: () => ({ | ||||
|         userStore: useUserStore(), | ||||
|         valid: false, | ||||
|         email: '', | ||||
|         password: '', | ||||
|         email: null, | ||||
|         password: null, | ||||
|         rememberMe: false, | ||||
|         errorMessage: '', | ||||
|         errorMessageContainerStyle: '', | ||||
|         showPassword: false | ||||
|     }), | ||||
|     methods: { | ||||
|         validate(){ | ||||
|             let emailValidation = rules.email(this.email); | ||||
|             let passwordValidation = rules.notNull(this.password); | ||||
|             if (typeof emailValidation == "boolean" && typeof passwordValidation == "boolean"){ | ||||
|                 return emailValidation && passwordValidation; | ||||
|             } else if (typeof emailValidation == "string") { | ||||
|                 return emailValidation; | ||||
|             } else if (typeof passwordValidation == "string") { | ||||
|                 return passwordValidation; | ||||
|             } | ||||
|         }, | ||||
|         loginAction(){ | ||||
|             let validation = this.validate(); | ||||
|             if (validation !== true){ | ||||
|                 alert(validation); | ||||
|                 return; | ||||
|             } | ||||
|             this.userStore.login(this.email, this.password, this.rememberMe).then((isLogged) => { | ||||
|                 if (typeof isLogged == "boolean") { | ||||
|                     if (isLogged){ | ||||
|  |  | |||
|  | @ -7,10 +7,10 @@ export default { | |||
|     data: () => ({ | ||||
|         userStore: useUserStore(), | ||||
|         valid: false, | ||||
|         login: '', | ||||
|         email: '', | ||||
|         password: '', | ||||
|         repeatPassword: '', | ||||
|         login: null, | ||||
|         email: null, | ||||
|         password: null, | ||||
|         repeatPassword: null, | ||||
|         errorMessage: '', | ||||
|         errorMessageContainerStyle: 'display: none;', | ||||
|         showPassword: false, | ||||
|  | @ -22,7 +22,26 @@ export default { | |||
|         } | ||||
|     }, | ||||
|     methods: { | ||||
|         validate(){ | ||||
|             let emailValidation = rules.email(this.email); | ||||
|             let loginValidation = rules.notNull(this.login); | ||||
|             let passwordValidation = rules.notNull(this.password); | ||||
|             let repeatPasswordValidation = rules.notNull(this.repeatPassword); | ||||
|             let validation = [emailValidation, loginValidation, passwordValidation, repeatPasswordValidation]; | ||||
|             let check = null; | ||||
|             validation.forEach((element)=>{ | ||||
|                 if (typeof element !== "boolean"){ | ||||
|                     check = element; | ||||
|                 } | ||||
|             }) | ||||
|             return check === null ? true : check; | ||||
|         }, | ||||
|         registrationAction(){ | ||||
|             let validation = this.validate(); | ||||
|             if (validation !== true){ | ||||
|                 alert(validation); | ||||
|                 return; | ||||
|             } | ||||
|             this.userStore.registration(this.login, this.email, this.password, this.repeatPassword).then((isRegistred)=>{ | ||||
|                 if (typeof isRegistred == "boolean") { | ||||
|                     if (isRegistred){ | ||||
|  |  | |||
|  | @ -63,9 +63,4 @@ export default { | |||
|     height: 100vh; | ||||
| } | ||||
| 
 | ||||
| .card-bg { | ||||
|     background-color: #212022; | ||||
|     color: white; | ||||
| } | ||||
| 
 | ||||
| </style> | ||||
|  |  | |||
|  | @ -0,0 +1,61 @@ | |||
| <script> | ||||
| import {useUserStore} from "../../store/user.js"; | ||||
| import {useWishStore} from "../../store/wish.js"; | ||||
| import {rules} from "../../js/rules.js"; | ||||
| export default { | ||||
|     name: "CreateWish", | ||||
|     data: () => ({ | ||||
|         userStore: useUserStore(), | ||||
|         wishStore: useWishStore(), | ||||
|         name: null, | ||||
|         price: null, | ||||
|         url: null | ||||
|     }), | ||||
|     computed: { | ||||
|         rules() { | ||||
|             return rules | ||||
|         } | ||||
|     }, | ||||
|     props: { | ||||
|         dialogCreate: Function, | ||||
|         updateFrontWishes: Function | ||||
|     }, | ||||
|     methods: { | ||||
|         validate(){ | ||||
|             return rules.notNull(this.name); | ||||
|         }, | ||||
|         createWish(){ | ||||
|             let validation = this.validate(); | ||||
|             if (typeof validation !== "boolean"){ | ||||
|                 alert(validation); | ||||
|                 return; | ||||
|             } | ||||
|             this.wishStore.create(this.userStore.user['id'], this.name, this.price, this.url, this.userStore.token).then(()=>{ | ||||
|                 this.updateFrontWishes(); | ||||
|                 this.dialogCreate(); | ||||
|             }); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| </script> | ||||
| 
 | ||||
| <template> | ||||
|     <v-card class="card-bg"> | ||||
|         <v-card-title class="d-flex justify-space-between"> | ||||
|             <span>Создать новый элемент</span> | ||||
|             <span> | ||||
|                 <v-icon @click="dialogCreate" class="cursor-pointer" color="white" icon="mdi-close-thick"></v-icon> | ||||
|             </span> | ||||
|         </v-card-title> | ||||
|         <v-card-text class="d-flex align-center flex-column w-100"> | ||||
|             <v-text-field class="w-100" label="Наименование" v-model="name" :rules="[rules.notNull]"></v-text-field> | ||||
|             <v-text-field class="w-100" label="Стоимость" v-model="price"></v-text-field> | ||||
|             <v-text-field class="w-100" label="Ссылка" v-model="url"></v-text-field> | ||||
|             <v-btn class="w-33" @click="createWish">Создать</v-btn> | ||||
|         </v-card-text> | ||||
|     </v-card> | ||||
| </template> | ||||
| 
 | ||||
| <style scoped> | ||||
| 
 | ||||
| </style> | ||||
|  | @ -1,36 +1,87 @@ | |||
| <script> | ||||
| import {useUserStore} from "../../store/user.js"; | ||||
| import {useWishStore} from "../../store/wish.js"; | ||||
| import axios from "axios"; | ||||
| import CreateWish from "./CreateWish.vue"; | ||||
| import {ref} from "vue"; | ||||
| export default { | ||||
|     name: "Wishlist", | ||||
|     components: {CreateWish}, | ||||
|     data: () => ({ | ||||
|         userStore: useUserStore(), | ||||
|         wishStore: useWishStore() | ||||
|         wishStore: useWishStore(), | ||||
|         wishesList: [], | ||||
|         fetching: true, | ||||
|         dialogCreate: ref(false), | ||||
|         dialogEdit: ref(false) | ||||
|     }), | ||||
|     mounted() { | ||||
|         this.wishStore.getUserWishes(this.userStore.user['id']).then((wishes)=>{ | ||||
|             this.wishesList = wishes; | ||||
|             this.fetching = false | ||||
|         }); | ||||
|     }, | ||||
|     methods: { | ||||
|         tryWishes(){ | ||||
|             let token = this.userStore.token; | ||||
|             let user_id = this.userStore.user['id']; | ||||
|             // get wish list | ||||
|             this.wishStore.getUserWishes(user_id, token).then((result)=>{ | ||||
|                 console.log(result); | ||||
|                 // push new wish | ||||
|                 this.wishStore.create(user_id, 'Google', 42000, 'http://google.com/', token).then((response)=>{ | ||||
|                     console.log(response); | ||||
|                     // get wish list | ||||
|                     this.wishStore.getUserWishes(user_id, token).then((resultOfResponse)=>{ | ||||
|                         console.log(resultOfResponse); | ||||
|                     }); | ||||
|         dialogCreateClose(){ | ||||
|             this.dialogCreate = false; | ||||
|         }, | ||||
|         dialogEditClose(){ | ||||
|             this.dialogEdit = false; | ||||
|         }, | ||||
|         updateFrontWishes(){ | ||||
|             this.fetching = true; | ||||
|             this.wishStore.getUserWishes(this.userStore.user['id']).then((wishes)=>{ | ||||
|                 this.wishesList = wishes; | ||||
|                 this.fetching = false | ||||
|             }); | ||||
|         }, | ||||
|         removeWish(id){ | ||||
|             this.fetching = true; | ||||
|             this.wishStore.remove(id, this.userStore.token).then(()=>{ | ||||
|                 this.wishStore.getUserWishes(this.userStore.user['id']).then((wishes)=>{ | ||||
|                     this.wishesList = wishes; | ||||
|                     this.fetching = false; | ||||
|                 }); | ||||
|             }) | ||||
|         }, | ||||
|         editWish(id){ | ||||
| 
 | ||||
|         }, | ||||
|         createWish(){ | ||||
| 
 | ||||
|         } | ||||
|     } | ||||
| } | ||||
| </script> | ||||
| 
 | ||||
| <template> | ||||
|     <v-label class="link-no-decor" @click="this.tryWishes">Hello world!</v-label> | ||||
| <!--    <v-label class="link-no-decor" @click="this.tryWishes">Hello world!</v-label>--> | ||||
|     <v-skeleton-loader color="grey-darken-4" type="table" v-if="fetching"></v-skeleton-loader> | ||||
|     <v-table v-else class="card-bg w-100 h-auto mt-5 pa-3"> | ||||
|         <thead> | ||||
|             <tr> | ||||
|                 <th>Наименование</th> | ||||
|                 <th>Цена</th> | ||||
|                 <th>Ссылка</th> | ||||
|                 <th></th> | ||||
|                 <th></th> | ||||
|             </tr> | ||||
|         </thead> | ||||
|         <tbody> | ||||
|             <tr v-for="wish in wishesList"> | ||||
|                 <td>{{ wish['name'] }}</td> | ||||
|                 <td>{{ wish['price'] }}</td> | ||||
|                 <td><a target="_blank" :href="wish['url']">{{ wish['url'] }}</a></td> | ||||
|                 <td><v-icon @click="" class="cursor-pointer" color="white" icon="mdi-pencil"></v-icon></td> | ||||
|                 <td><v-icon @click="removeWish(wish['id'])" class="cursor-pointer" color="white" icon="mdi-trash-can"></v-icon></td> | ||||
|             </tr> | ||||
|             <tr class="text-center"> | ||||
|                 <td colspan="5"><v-btn @click="dialogCreate = true" color="#212022" elevation="0" block><v-icon class="cursor-pointer" icon="mdi-plus-thick"></v-icon></v-btn></td> | ||||
|             </tr> | ||||
|         </tbody> | ||||
|         <v-dialog v-model="dialogCreate" class="w-66"> | ||||
|             <CreateWish :dialogCreate="dialogCreateClose" :updateFrontWishes="updateFrontWishes"/> | ||||
|         </v-dialog> | ||||
|     </v-table> | ||||
| </template> | ||||
| 
 | ||||
| <style scoped> | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue