Added loading placeholders and couple functionalities
This commit is contained in:
		
							
								
								
									
										148
									
								
								src/App.vue
									
									
									
									
									
								
							
							
						
						
									
										148
									
								
								src/App.vue
									
									
									
									
									
								
							| @@ -1,44 +1,42 @@ | |||||||
| <template> | <template> | ||||||
|   <NavBar @form="switchToFrom" @order="switchToOrders"/> |   <NavBar @form="switchToFrom" @order="switchToOrders"/> | ||||||
|  |  | ||||||
|   <div v-if="isForm"> |   <div v-if="isLoading"> | ||||||
|     <MainForm |     <LoadingComponent/> | ||||||
|       v-if="order == undefined || order.MZN_Bufor==1" |  | ||||||
|       :is-dark-theme="isDarkTheme" |  | ||||||
|       v-model:order-uuid="uuid" |  | ||||||
|       v-model:contractors="contractors" |  | ||||||
|       v-model:categories="categories" |  | ||||||
|       v-model:contractor="contractor" |  | ||||||
|       v-model:delivery-date="deliveryDate" |  | ||||||
|       v-model:show-modal="showModal" |  | ||||||
|     /> |  | ||||||
|     <ConfirmedForm v-else-if="order.MZN_Bufor==0" |  | ||||||
|       :order-date="orderDate" |  | ||||||
|       :uuid = "uuid" |  | ||||||
|       :delivery-date="deliveryDate" |  | ||||||
|       v-model:contractor="contractor" |  | ||||||
|       v-model:categories="categories" |  | ||||||
|       v-model:order="order"> |  | ||||||
|     </ConfirmedForm> |  | ||||||
|   </div> |   </div> | ||||||
|   <OrdersSelector class="box is-shadowless" v-else-if="isOrders" |   <div v-else> | ||||||
|                   v-model:uuid="uuid" |     <div v-if="isForm"> | ||||||
|                   v-model:orders="orders" |       <MainForm | ||||||
|                   v-model:contractor="contractor" |         v-if="order == undefined || order.MZN_Bufor==1" | ||||||
|                   v-model:delivery-date="deliveryDate" |         :is-dark-theme="isDarkTheme" | ||||||
|                   v-model:categories="categories" |         v-model:order-uuid="uuid" | ||||||
|                   v-model:contractors="contractors" |         v-model:contractors="contractors" | ||||||
|                   v-model:order="order" |         v-model:categories="categories" | ||||||
|                   @order="viewOrder" |         v-model:contractor="contractor" | ||||||
|   /> |         v-model:delivery-date="deliveryDate" | ||||||
|  |         v-model:show-modal="showModal" | ||||||
|   <ConfirmationModal v-show="showModal" @close="showModal = false" :order-uuid="uuid"></ConfirmationModal> |       /> | ||||||
|  |       <ConfirmedForm v-else-if="order.MZN_Bufor==0" | ||||||
|  |                      :order-date="orderDate" | ||||||
|  |                      :uuid = "uuid" | ||||||
|  |                      :delivery-date="deliveryDate" | ||||||
|  |                      v-model:contractor="contractor" | ||||||
|  |                      v-model:categories="categories" | ||||||
|  |                      v-model:order="order"> | ||||||
|  |       </ConfirmedForm> | ||||||
|  |     </div> | ||||||
|  |     <OrdersSelector class="box is-shadowless" v-else-if="isOrders" | ||||||
|  |                     v-model:orders="orders" | ||||||
|  |                     @order="viewOrder" | ||||||
|  |     /> | ||||||
|  |   </div> | ||||||
|  |   <ConfirmationModal v-show="showModal" @close="showModal = false" @confirm="closeModal" :order-uuid="uuid"></ConfirmationModal> | ||||||
| </template> | </template> | ||||||
|  |  | ||||||
| <script setup lang="ts"> | <script setup lang="ts"> | ||||||
| import './assets/style.scss' | import './assets/style.scss' | ||||||
| import type { Category, Contractor, Order } from '@/main' | import type { Category, Contractor, Order } from '@/main' | ||||||
| import { ref, watch } from 'vue' | import { ref } from 'vue' | ||||||
|  |  | ||||||
| const contractors = ref<Array<Contractor>>(); | const contractors = ref<Array<Contractor>>(); | ||||||
| const contractor = ref<Contractor>(); | const contractor = ref<Contractor>(); | ||||||
| @@ -52,17 +50,19 @@ const isForm = ref<boolean>(true); | |||||||
| const isOrders = ref<boolean>(false); | const isOrders = ref<boolean>(false); | ||||||
| const showModal = ref<boolean>(false); | const showModal = ref<boolean>(false); | ||||||
| const isDarkTheme = ref<boolean>(false); | const isDarkTheme = ref<boolean>(false); | ||||||
|  | const isLoading = ref<boolean>(true); | ||||||
|  |  | ||||||
| async function  fetchData() { | async function fetchContractors() { | ||||||
|   const response1 = await fetch('https://zamowienia.mleczarnia-kuzma.pl/api/kontrahenci'); |   const response = await fetch('https://zamowienia.mleczarnia-kuzma.pl/api/kontrahenci'); | ||||||
|   contractors.value = await response1.json(); |   contractors.value = await response.json(); | ||||||
|   console.log(contractors.value); | } | ||||||
|   const response2 = await fetch('https://zamowienia.mleczarnia-kuzma.pl/api/towary'); |  | ||||||
|   categories.value = await response2.json(); | async function fetchCategories() { | ||||||
|   console.log(categories.value); |   const response = await fetch('https://zamowienia.mleczarnia-kuzma.pl/api/towary'); | ||||||
|  |   categories.value = await response.json(); | ||||||
|   if(categories.value != undefined) { |   if(categories.value != undefined) { | ||||||
|     for (let kategoria of categories.value) { |     for (let category of categories.value) { | ||||||
|       for (let product of kategoria.Towary) { |       for (let product of category.Towary) { | ||||||
|         product.Options = new Array(product.Twr_JM); |         product.Options = new Array(product.Twr_JM); | ||||||
|         product.ChosenOption = product.Twr_JM; |         product.ChosenOption = product.Twr_JM; | ||||||
|         if (product.Twr_JMZ != null) { |         if (product.Twr_JMZ != null) { | ||||||
| @@ -71,14 +71,26 @@ async function  fetchData() { | |||||||
|       } |       } | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|   const response3 = await fetch('https://zamowienia.mleczarnia-kuzma.pl/api/zamowienia/bufor'); | async function fetchOrdersInBuffer() { | ||||||
|   let ordersTemp : Array<Order> = await response3.json(); |   const response = await fetch('https://zamowienia.mleczarnia-kuzma.pl/api/zamowienia/bufor'); | ||||||
|  |   let ordersTemp : Array<Order> = await response.json(); | ||||||
|   orders.value.push(...ordersTemp); |   orders.value.push(...ordersTemp); | ||||||
|   const response4 = await fetch('https://zamowienia.mleczarnia-kuzma.pl/api/zamowienia'); | } | ||||||
|   ordersTemp = await response4.json(); |  | ||||||
|  | async function fetchOrdersOutOfBuffer() { | ||||||
|  |   const response = await fetch('https://zamowienia.mleczarnia-kuzma.pl/api/zamowienia'); | ||||||
|  |   let ordersTemp : Array<Order> = await response.json(); | ||||||
|   orders.value.push(...ordersTemp); |   orders.value.push(...ordersTemp); | ||||||
|   console.log(orders.value); | } | ||||||
|  |  | ||||||
|  | async function  fetchData() { | ||||||
|  |   await fetchContractors(); | ||||||
|  |   await fetchCategories(); | ||||||
|  |   await fetchOrdersInBuffer(); | ||||||
|  |   await fetchOrdersOutOfBuffer(); | ||||||
|  |   isLoading.value = false; | ||||||
| } | } | ||||||
|  |  | ||||||
| function switchToFrom() { | function switchToFrom() { | ||||||
| @@ -88,41 +100,65 @@ function switchToFrom() { | |||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| function switchToOrders() { | async function switchToOrders() { | ||||||
|   if(!isOrders.value) { |   if(!isOrders.value) { | ||||||
|  |     isLoading.value = true; | ||||||
|     isForm.value = false; |     isForm.value = false; | ||||||
|     isOrders.value = true; |     isOrders.value = true; | ||||||
|  |     orders.value = new Array<Order>(); | ||||||
|  |     await fetchOrdersInBuffer(); | ||||||
|  |     await fetchOrdersOutOfBuffer(); | ||||||
|  |     isLoading.value = false; | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| function activateModal(event : Event) { |  | ||||||
|   event.preventDefault(); |  | ||||||
|   showModal.value = true; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| function checkTheme() { | function checkTheme() { | ||||||
|   isDarkTheme.value = !!window?.matchMedia?.('(prefers-color-scheme:dark)')?.matches; |   isDarkTheme.value = !!window?.matchMedia?.('(prefers-color-scheme:dark)')?.matches; | ||||||
| } | } | ||||||
|  |  | ||||||
| async function viewOrder(event : Event) { | function viewOrder(event : Event) { | ||||||
|   console.log('parent'); |   console.log('parent'); | ||||||
|   isForm.value=true; |   isForm.value=true; | ||||||
|   isOrders.value=false; |   isOrders.value=false; | ||||||
|   window.scrollTo(0, 0); |   window.scrollTo(0, 0); | ||||||
|   console.log(event.MZN_UUID); |   console.log(event.MZN_UUID); | ||||||
|   if (categories.value == undefined) return; |   if (categories.value == undefined) return; | ||||||
|  |   isLoading.value = true; | ||||||
|  |   loadOrder(event.MZN_UUID, false); | ||||||
|  | } | ||||||
|  |  | ||||||
|   const response = await fetch('https://zamowienia.mleczarnia-kuzma.pl/api/zamowienie/' + event.MZN_UUID); | function closeModal() { | ||||||
|  |   showModal.value = false; | ||||||
|  |   if (uuid.value != undefined) { | ||||||
|  |     isLoading.value = true; | ||||||
|  |     loadOrder(uuid.value, true); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | async function loadOrder(uuid: string, confirmed: boolean) { | ||||||
|  |   const response = await fetch('https://zamowienia.mleczarnia-kuzma.pl/api/zamowienie/' + uuid); | ||||||
|   let tempOrder = await response.json(); |   let tempOrder = await response.json(); | ||||||
|  |  | ||||||
|  |   if(confirmed) { | ||||||
|  |     tempOrder.MZN_Bufor = 0; | ||||||
|  |   } | ||||||
|  |  | ||||||
|   contractor.value = contractors.value?.find((contractor) => contractor.Knt_KntId == tempOrder.MZN_PodID); |   contractor.value = contractors.value?.find((contractor) => contractor.Knt_KntId == tempOrder.MZN_PodID); | ||||||
|   deliveryDate.value = new Date(tempOrder.MZN_DataDos); |   deliveryDate.value = new Date(tempOrder.MZN_DataDos); | ||||||
|   orderDate.value = new Date(tempOrder.MZN_DataZam); |   orderDate.value = new Date(tempOrder.MZN_DataZam); | ||||||
|   order.value = tempOrder; |   order.value = tempOrder; | ||||||
|  |  | ||||||
|  |   if(categories.value == undefined) { | ||||||
|  |     isLoading.value = false; | ||||||
|  |     return; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   console.log(order.value); | ||||||
|  |  | ||||||
|   for(let orderProduct of tempOrder.MZamElem){ |   for(let orderProduct of tempOrder.MZamElem){ | ||||||
|     for(let category of categories.value) { |     for(let category of categories.value) { | ||||||
|       let product = category.Towary.find(product => (product.Twr_TwrId == orderProduct.MZE_TwrId)); |       let product = category.Towary.find(product => (product.Twr_TwrId == orderProduct.MZE_TwrId)); | ||||||
|       if(product != undefined) { |       if(product != undefined && orderProduct.MZE_TwrCena != null) { | ||||||
|         product.Twr_Cena = orderProduct.MZE_TwrCena.slice(0, -2); |         product.Twr_Cena = orderProduct.MZE_TwrCena.slice(0, -2); | ||||||
|         product.Quantity = orderProduct.MZE_TwrIlosc.slice(0, -2); |         product.Quantity = orderProduct.MZE_TwrIlosc.slice(0, -2); | ||||||
|         category.isVisible = true; |         category.isVisible = true; | ||||||
| @@ -130,7 +166,7 @@ async function viewOrder(event : Event) { | |||||||
|       } |       } | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|   window.scrollTo(0, 0); |   isLoading.value = false; | ||||||
| } | } | ||||||
|  |  | ||||||
| fetchData(); | fetchData(); | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| <script setup lang="ts"> | <script setup lang="ts"> | ||||||
| const emit = defineEmits(['close']); | const emit = defineEmits(['close', 'confirm']); | ||||||
|  |  | ||||||
| const props = defineProps( | const props = defineProps( | ||||||
|   { |   { | ||||||
| @@ -8,7 +8,7 @@ const props = defineProps( | |||||||
| ); | ); | ||||||
|  |  | ||||||
| function confirmOrder() { | function confirmOrder() { | ||||||
|   emit('close'); |   emit('confirm'); | ||||||
|   fetch('https://zamowienia.mleczarnia-kuzma.pl/api/zamowienie/' + props.orderUuid, { |   fetch('https://zamowienia.mleczarnia-kuzma.pl/api/zamowienie/' + props.orderUuid, { | ||||||
|     method: 'PUT' |     method: 'PUT' | ||||||
|   }); |   }); | ||||||
|   | |||||||
| @@ -12,10 +12,13 @@ const props = defineProps({ | |||||||
|   deliveryDate: Date |   deliveryDate: Date | ||||||
| }) | }) | ||||||
|  |  | ||||||
|  | function cancelOrder(event: Event) { | ||||||
|  |   event.preventDefault(); | ||||||
|  | } | ||||||
| </script> | </script> | ||||||
|  |  | ||||||
| <template> | <template> | ||||||
|   <form class="box" @submit="createJSON" style="min-height: 93.5vh"> |   <form class="box" style="min-height: 93.5vh"> | ||||||
|     <div class="mb-3"> |     <div class="mb-3"> | ||||||
|       <div class="box"> |       <div class="box"> | ||||||
|         <h1 class="is-large mb-3"><b>ZAMÓWIENIE</b></h1> |         <h1 class="is-large mb-3"><b>ZAMÓWIENIE</b></h1> | ||||||
| @@ -55,6 +58,7 @@ const props = defineProps({ | |||||||
|               hide-input-icon/> |               hide-input-icon/> | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|  |         <button class="button is-primary" @click="cancelOrder">Anuluj zamówienie</button> | ||||||
|       </div> |       </div> | ||||||
|     </div> |     </div> | ||||||
|     <div v-for="category in categories" :key="category.Kod"> |     <div v-for="category in categories" :key="category.Kod"> | ||||||
|   | |||||||
							
								
								
									
										16
									
								
								src/components/LoadingComponent.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								src/components/LoadingComponent.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | |||||||
|  | <script setup lang="ts"> | ||||||
|  |  | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <template> | ||||||
|  |   <div class="box"> | ||||||
|  |     <div class="box is-skeleton m-3" style="height: 40vh"></div> | ||||||
|  |     <div class="box is-skeleton mb-3 mx-3" style="height: 20vh"></div> | ||||||
|  |     <div class="box is-skeleton mb-3 mx-3" style="height: 20vh"></div> | ||||||
|  |   </div> | ||||||
|  |  | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <style scoped> | ||||||
|  |  | ||||||
|  | </style> | ||||||
| @@ -1,19 +1,12 @@ | |||||||
| <script setup lang="ts"> | <script setup lang="ts"> | ||||||
| import VueDatePicker from '@vuepic/vue-datepicker'; | import VueDatePicker from '@vuepic/vue-datepicker'; | ||||||
| import {ref, watch} from 'vue' | import { onRenderTriggered, ref, watch } from 'vue' | ||||||
| import type { Category, Contractor, Order } from '@/main' | import type { Order } from '@/main' | ||||||
|  |  | ||||||
| const searchOrderDate = ref<Date>(); | const searchOrderDate = ref<Date>(); | ||||||
| const isOutOfBufor = ref<boolean>(false); | const isOutOfBufor = ref<boolean>(false); | ||||||
| const isInBufor = ref<boolean>(false); | const isInBufor = ref<boolean>(false); | ||||||
| const orders = defineModel<Array<Order>>('orders'); | const orders = defineModel<Array<Order>>('orders'); | ||||||
| const uuid = defineModel<string>('uuid'); |  | ||||||
| const contractor = defineModel<Contractor>('contractor'); |  | ||||||
| const contractors = defineModel<Array<Contractor>>('contractors'); |  | ||||||
| const deliveryDate = defineModel<Date>('deliveryDate'); |  | ||||||
| const categories = defineModel<Array<Category>>('categories'); |  | ||||||
| const order = defineModel<Order>('order'); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| const emit = defineEmits<{ | const emit = defineEmits<{ | ||||||
|   order: [order: Order] |   order: [order: Order] | ||||||
| @@ -36,12 +29,32 @@ watch(isOutOfBufor, (val) => { | |||||||
| }); | }); | ||||||
|  |  | ||||||
| function viewOrder(event: Event | undefined) { | function viewOrder(event: Event | undefined) { | ||||||
|   console.log(event?.target?.name); |  | ||||||
|   let tempOrder = orders.value?.find(order => (order.MZN_UUID == event?.target?.name)); |   let tempOrder = orders.value?.find(order => (order.MZN_UUID == event?.target?.name)); | ||||||
|   if (tempOrder == undefined) return; |   if (tempOrder == undefined) return; | ||||||
|   console.log(tempOrder); |  | ||||||
|   emit('order', tempOrder); |   emit('order', tempOrder); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | async function fetchOrdersInBuffer() { | ||||||
|  |   const response = await fetch('https://zamowienia.mleczarnia-kuzma.pl/api/zamowienia/bufor'); | ||||||
|  |   let ordersTemp : Array<Order> = await response.json(); | ||||||
|  |   orders.value = ordersTemp; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | async function fetchOrdersOutOfBuffer() { | ||||||
|  |   const response = await fetch('https://zamowienia.mleczarnia-kuzma.pl/api/zamowienia'); | ||||||
|  |   let ordersTemp : Array<Order> = await response.json(); | ||||||
|  |   orders.value = ordersTemp; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | async function fetchOrders(event : Event) { | ||||||
|  |   event.preventDefault(); | ||||||
|  |   if(isInBufor.value) { | ||||||
|  |     fetchOrdersInBuffer(); | ||||||
|  |   } else if (isOutOfBufor.value) { | ||||||
|  |     fetchOrdersOutOfBuffer(); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
| </script> | </script> | ||||||
|  |  | ||||||
| <template> | <template> | ||||||
| @@ -71,7 +84,7 @@ function viewOrder(event: Event | undefined) { | |||||||
|             </label> |             </label> | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|         <button class="button is-primary is-small is-expanded" @click="createJSON">Pobierz zamówienia</button> |         <button class="button is-primary is-small is-expanded" @click="fetchOrders">Pobierz zamówienia</button> | ||||||
|       </div> |       </div> | ||||||
|     </form> |     </form> | ||||||
|     <div class="box"> |     <div class="box"> | ||||||
|   | |||||||
| @@ -7,6 +7,7 @@ import NavBar from '@/components/NavBar.vue'; | |||||||
| import MainForm from '@/components/MainForm.vue'; | import MainForm from '@/components/MainForm.vue'; | ||||||
| import OrdersSelector from '@/components/OrdersSelector.vue' | import OrdersSelector from '@/components/OrdersSelector.vue' | ||||||
| import ConfirmedForm from '@/components/ConfirmedForm.vue' | import ConfirmedForm from '@/components/ConfirmedForm.vue' | ||||||
|  | import LoadingComponent from '@/components/LoadingComponent.vue' | ||||||
|  |  | ||||||
| const app = createApp(App) | const app = createApp(App) | ||||||
| app.component('VueDatePicker', VueDatePicker); | app.component('VueDatePicker', VueDatePicker); | ||||||
| @@ -14,7 +15,8 @@ app.component('ConfirmationModal', ConfirmationModal); | |||||||
| app.component('NavBar', NavBar); | app.component('NavBar', NavBar); | ||||||
| app.component('MainForm', MainForm); | app.component('MainForm', MainForm); | ||||||
| app.component('OrdersSelector', OrdersSelector); | app.component('OrdersSelector', OrdersSelector); | ||||||
| app.component('ConfirmedForm', ConfirmedForm) | app.component('ConfirmedForm', ConfirmedForm); | ||||||
|  | app.component('LoadingComponent', LoadingComponent); | ||||||
| app.mount('#app'); | app.mount('#app'); | ||||||
|  |  | ||||||
| export interface Category { | export interface Category { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user