From 170510169d8a1c69576e10ebb78689963fd1da81 Mon Sep 17 00:00:00 2001 From: aqordeon Date: Wed, 19 Feb 2025 10:34:08 +0800 Subject: [PATCH 1/9] perf: PR Stored Item: change quantity to axios --- .../Elements/Buttons/ButtonWithLink.vue | 2 +- .../js/Components/NumberWithButtonSave.vue | 49 ++++++++++++++----- .../TableStoredItemReturnStoredItems.vue | 25 ++++++++-- 3 files changed, 60 insertions(+), 16 deletions(-) diff --git a/resources/js/Components/Elements/Buttons/ButtonWithLink.vue b/resources/js/Components/Elements/Buttons/ButtonWithLink.vue index 291e7b678a..49653cbff0 100644 --- a/resources/js/Components/Elements/Buttons/ButtonWithLink.vue +++ b/resources/js/Components/Elements/Buttons/ButtonWithLink.vue @@ -25,7 +25,7 @@ const props = defineProps<{ disabled?: boolean noHover?: boolean routeTarget?: routeType - bindToLink: { + bindToLink?: { preserveScroll?: boolean preserveState?: boolean } diff --git a/resources/js/Components/NumberWithButtonSave.vue b/resources/js/Components/NumberWithButtonSave.vue index c4b40c04f2..5616764e17 100644 --- a/resources/js/Components/NumberWithButtonSave.vue +++ b/resources/js/Components/NumberWithButtonSave.vue @@ -18,6 +18,7 @@ import { useForm } from "@inertiajs/vue3" import LoadingIcon from "./Utils/LoadingIcon.vue" import { routeType } from "@/types/route" import { trans } from "laravel-vue-i18n" +import axios from "axios" library.add( faRobot, faPlus, faMinus, faUndoAlt, faAsterisk, faQuestion, falSave, faInfoCircle, fadSave, faSpinner, fasMinus, fasPlus ) @@ -37,11 +38,14 @@ const props = defineProps<{ step?: number } colorTheme?: string // '#374151' + isUseAxios?: boolean }>() const emits = defineEmits<{ (e: 'onSave', value: string | number): void (e: 'update:modelValue', value: number): void + (e: 'onSuccess', newValue: number, oldValue: number): void + (e: 'onError', value: {}): void }>() const model = defineModel() @@ -49,21 +53,42 @@ const model = defineModel() const form = useForm({ quantity: props.modelValue, }) +const formDefaultValue = ref({ + quantity: props.modelValue, +}) -const onSaveViaForm = () => { +const onSaveViaForm = async () => { if(!props.routeSubmit?.name) return - - form - .transform((data) => ({ - [props.keySubmit || 'quantity']: data.quantity - })) - .submit( - props.routeSubmit?.method || 'post', - route(props.routeSubmit?.name, props.routeSubmit?.parameters), - { - preserveScroll: true, + + if (props.isUseAxios) { + try { + form.processing = true + await axios[props.routeSubmit?.method || 'post'](route(props.routeSubmit?.name, props.routeSubmit?.parameters), { + [props.keySubmit || 'quantity']: form.quantity + }) + + form.defaults('quantity', form.quantity) + emits('onSuccess', form.quantity, formDefaultValue.value.quantity) + formDefaultValue.value.quantity = form.quantity + // console.log('ee', form.processing) + } catch (error) { + emits('onError', error) + } finally { + form.processing = false } - ) + } else { + form + .transform((data) => ({ + [props.keySubmit || 'quantity']: data.quantity + })) + .submit( + props.routeSubmit?.method || 'post', + route(props.routeSubmit?.name, props.routeSubmit?.parameters), + { + preserveScroll: true, + } + ) + } } const keyIconUndo = ref(0) diff --git a/resources/js/Components/Tables/Grp/Org/Fulfilment/TableStoredItemReturnStoredItems.vue b/resources/js/Components/Tables/Grp/Org/Fulfilment/TableStoredItemReturnStoredItems.vue index 7c5faad627..097e367382 100644 --- a/resources/js/Components/Tables/Grp/Org/Fulfilment/TableStoredItemReturnStoredItems.vue +++ b/resources/js/Components/Tables/Grp/Org/Fulfilment/TableStoredItemReturnStoredItems.vue @@ -210,7 +210,7 @@ const generateLinkPalletLocation = (pallet: any) => { - +