diff --git a/src/pages/05_quotation/QuotationForm.vue b/src/pages/05_quotation/QuotationForm.vue index a36d683a..ee43b2cd 100644 --- a/src/pages/05_quotation/QuotationForm.vue +++ b/src/pages/05_quotation/QuotationForm.vue @@ -147,7 +147,7 @@ const refSelectZoneEmployee = ref>(); const mrz = ref>>(); const toggleWorker = ref(true); const tempTableProduct = ref([]); -const tempPaySplitCount = ref(0); +const tempPaySplitCount = ref(1); const tempPaySplit = ref< { no: number; amount: number; name?: string; invoice?: boolean }[] >([]); @@ -455,7 +455,7 @@ async function fetchQuotation() { const id = currentQuotationId.value || quotationFormData.value.id || ''; await quotationForm.assignFormData(id, quotationFormState.value.mode); - tempPaySplitCount.value = quotationFormData.value.paySplitCount || 0; + tempPaySplitCount.value = quotationFormData.value.paySplitCount || 1; tempPaySplit.value = JSON.parse( JSON.stringify(quotationFormData.value.paySplit), ); @@ -843,7 +843,7 @@ function toggleDeleteProduct(index: number) { // find split count tempPaySplitCount.value = Math.max( - ...productServiceList.value.map((v) => v.installmentNo || 0), + ...productServiceList.value.map((v) => v.installmentNo || 1), ); quotationFormData.value.paySplitCount = tempPaySplitCount.value; @@ -859,7 +859,6 @@ async function assignWorkerToSelectedWorker() { } function convertToTable(nodes: Node[]) { - // TODO: const _recursive = (v: Node): Node | Node[] => { if (v.checked && v.children) return v.children.flatMap(_recursive); if (v.checked) return v; @@ -868,7 +867,7 @@ function convertToTable(nodes: Node[]) { const list = nodes.flatMap(_recursive).map((v) => v.value); quotationFormData.value.paySplitCount = Math.max( - ...list.map((v) => v.installmentNo || 0), + ...list.map((v) => v.installmentNo || 1), ); tempPaySplitCount.value = quotationFormData.value.paySplitCount; @@ -887,22 +886,29 @@ function convertToTable(nodes: Node[]) { productServiceList.value = list; tempTableProduct.value = JSON.parse(JSON.stringify(list)); - quotationFormData.value.paySplit = Array.apply( - null, - new Array(quotationFormData.value.paySplitCount), - ).map((_, i) => ({ - no: i + 1, - amount: getPrice(list, (v) => { - return ( - v.installmentNo === i + 1 || - (i + 1 === quotationFormData.value.paySplitCount && !v.installmentNo) - ); - }).finalPrice, - })); + if (nodes.length > 0) { + quotationFormData.value.paySplit = Array.apply( + null, + new Array(quotationFormData.value.paySplitCount), + ).map((_, i) => ({ + no: i + 1, + amount: getPrice(list, (v) => { + return ( + v.installmentNo === i + 1 || + (i + 1 === quotationFormData.value.paySplitCount && !v.installmentNo) + ); + }).finalPrice, + })); + } else { + quotationFormData.value.paySplit = []; + quotationFormData.value.paySplitCount = 1; + quotationFormData.value.payCondition = 'Full'; + } tempPaySplit.value = JSON.parse( JSON.stringify(quotationFormData.value.paySplit), ); + tempPaySplitCount.value = quotationFormData.value.paySplitCount; pageState.productServiceModal = false; } @@ -2109,7 +2115,7 @@ watch( :date="v.date" :pay-type="quotationFormData.payCondition" :index="i" - :pay-split-count="quotationFormData.paySplitCount || 0" + :pay-split-count="quotationFormData.paySplitCount || 1" @view=" () => { selectedInstallmentNo = [v.invoice.installments[0].no];