From f3fdaac2b1c093b0bf86accb5cd929ca4031111c Mon Sep 17 00:00:00 2001 From: Methapon Metanipat <162551568+Methapon-Frappet@users.noreply.github.com> Date: Fri, 8 Nov 2024 10:22:50 +0700 Subject: [PATCH] feat: add product document list (#64) * feat: product => document select --- .../04_product-service/FormDocument.vue | 192 ++++++++++++++++++ src/pages/04_product-service/MainPage.vue | 37 +++- src/stores/product-service/types.ts | 2 + 3 files changed, 226 insertions(+), 5 deletions(-) create mode 100644 src/components/04_product-service/FormDocument.vue diff --git a/src/components/04_product-service/FormDocument.vue b/src/components/04_product-service/FormDocument.vue new file mode 100644 index 00000000..bb0c3ee3 --- /dev/null +++ b/src/components/04_product-service/FormDocument.vue @@ -0,0 +1,192 @@ + + + diff --git a/src/pages/04_product-service/MainPage.vue b/src/pages/04_product-service/MainPage.vue index ed1d79d8..67d58189 100644 --- a/src/pages/04_product-service/MainPage.vue +++ b/src/pages/04_product-service/MainPage.vue @@ -27,6 +27,7 @@ import DialogForm from 'components/DialogForm.vue'; import ProfileBanner from 'components/ProfileBanner.vue'; import SideMenu from 'components/SideMenu.vue'; import ImageUploadDialog from 'components/ImageUploadDialog.vue'; +import FormDocument from 'src/components/04_product-service/FormDocument.vue'; import KebabAction from 'src/components/shared/KebabAction.vue'; import { EditButton, @@ -161,6 +162,7 @@ const imageDialog = ref(false); const currentNode = ref(); const expandedTree = ref([]); const editByTree = ref<'group' | 'type' | undefined>(); +const formProductDocument = ref([]); const treeProductTypeAndGroup = computed( () => @@ -1016,7 +1018,10 @@ async function assignFormDataProduct(data: Product) { expenseType: data.expenseType, vatIncluded: data.vatIncluded, selectedImage: data.selectedImage, + document: data.document, }; + if (prevProduct.value.document) + formProductDocument.value = prevProduct.value.document; formDataProduct.value = { ...prevProduct.value }; } @@ -1160,7 +1165,7 @@ async function submitProduct(notClose = false) { return; } const res = await createProduct( - formDataProduct.value, + { ...formDataProduct.value, document: formProductDocument.value }, onCreateImageList.value, ); @@ -1176,6 +1181,7 @@ async function submitProduct(notClose = false) { await editProduct(currentIdProduct.value, { ...formDataProduct.value, status: statusToggle.value ? 'ACTIVE' : 'INACTIVE', + document: formProductDocument.value, }); } totalProduct.value = totalProduct.value + 1; @@ -3493,6 +3499,7 @@ watch( :close=" () => { dialogProduct = false; + formProductDocument = []; onCreateImageList = { selectedImage: '', list: [] }; flowStore.rotate(); } @@ -3559,7 +3566,7 @@ watch( >
@@ -3616,6 +3627,10 @@ watch( v-model:calc-vat="formDataProduct.calcVat" dense /> +
@@ -3631,6 +3646,7 @@ watch( () => { infoProductEdit = false; dialogProductEdit = false; + formProductDocument = []; flowStore.rotate(); } " @@ -3715,6 +3731,8 @@ watch( @click=" () => { formDataProduct = { ...prevProduct }; + if (prevProduct.document) + formProductDocument = prevProduct.document; infoProductEdit = false; } " @@ -3748,7 +3766,7 @@ watch( >
@@ -3801,6 +3823,11 @@ watch( dense :priceDisplay="priceDisplay" /> +
diff --git a/src/stores/product-service/types.ts b/src/stores/product-service/types.ts index 3a03ea34..430ca48b 100644 --- a/src/stores/product-service/types.ts +++ b/src/stores/product-service/types.ts @@ -169,6 +169,7 @@ export interface Product { id: string; imageUrl: string; installmentNo: number; + document?: string[]; } export interface ProductCreate { @@ -186,6 +187,7 @@ export interface ProductCreate { detail: string; name: string; code: string; + document?: string[]; image?: File; status?: Status; }