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