diff --git a/apps/web-antd/src/views/wms/order/receipt/data.ts b/apps/web-antd/src/views/wms/order/receipt/data.ts index 84854af93..ad6cc502f 100644 --- a/apps/web-antd/src/views/wms/order/receipt/data.ts +++ b/apps/web-antd/src/views/wms/order/receipt/data.ts @@ -397,13 +397,17 @@ interface ReceiptOrderDetailFooterRow { quantity?: number; totalPrice?: number; } +type ReceiptOrderDetailFooterColumn = Pick< + NonNullable[number]>, + 'field' +>; /** 明细表格的合计行 */ export function getDetailFooter({ columns, data, }: { - columns: Array<{ field?: string }>; + columns: ReceiptOrderDetailFooterColumn[]; data: ReceiptOrderDetailFooterRow[]; }) { return [ diff --git a/apps/web-antd/src/views/wms/order/receipt/index.vue b/apps/web-antd/src/views/wms/order/receipt/index.vue index 10ec0ef9d..ea12bf79b 100644 --- a/apps/web-antd/src/views/wms/order/receipt/index.vue +++ b/apps/web-antd/src/views/wms/order/receipt/index.vue @@ -53,8 +53,16 @@ const [DetailModal, detailModalApi] = useVbenModal({ destroyOnClose: true, }); +/** 清空展开明细缓存 */ +function clearDetailMap() { + for (const id of Object.keys(detailMap)) { + delete detailMap[Number(id)]; + } +} + /** 刷新表格 */ function handleRefresh() { + clearDetailMap(); gridApi.query(); } @@ -162,7 +170,6 @@ const [Grid, gridApi] = useVbenVxeGrid({ columns: useGridColumns(), expandConfig: { padding: true, - trigger: 'default', }, height: 'auto', keepSource: true, diff --git a/apps/web-antd/src/views/wms/order/receipt/modules/detail.vue b/apps/web-antd/src/views/wms/order/receipt/modules/detail.vue index a9ea3dda1..5fbe78a1a 100644 --- a/apps/web-antd/src/views/wms/order/receipt/modules/detail.vue +++ b/apps/web-antd/src/views/wms/order/receipt/modules/detail.vue @@ -15,12 +15,10 @@ import { useDescription } from '#/components/description'; import { formatPrice, formatQuantity, - formatSumPrice, - formatSumQuantity, multiplyPrice, } from '#/views/wms/utils/format'; -import { useDetailSchema } from '../data'; +import { getDetailFooter, useDetailSchema } from '../data'; interface DetailRow extends WmsReceiptOrderDetailApi.ReceiptOrderDetail { totalPrice?: number; @@ -80,7 +78,9 @@ const [Modal, modalApi] = useVbenModal({ :data="detailRows" border empty-text="暂无商品明细" + :footer-method="getDetailFooter" :show-overflow="true" + show-footer size="small" > @@ -99,7 +99,7 @@ const [Modal, modalApi] = useVbenModal({ - + @@ -110,16 +110,12 @@ const [Modal, modalApi] = useVbenModal({ {{ formatPrice(row.price) || '-' }} - + -
- 合计数量:{{ formatSumQuantity(detailRows, (detail) => detail.quantity) }} - 合计金额:{{ formatSumPrice(detailRows, (detail) => detail.totalPrice) }} -
diff --git a/apps/web-antd/src/views/wms/order/receipt/modules/form.vue b/apps/web-antd/src/views/wms/order/receipt/modules/form.vue index e7980994c..23f07f4b6 100644 --- a/apps/web-antd/src/views/wms/order/receipt/modules/form.vue +++ b/apps/web-antd/src/views/wms/order/receipt/modules/form.vue @@ -7,6 +7,7 @@ import type { WmsReceiptOrderDetailApi } from '#/api/wms/order/receipt/detail'; import { computed, nextTick, ref } from 'vue'; import { confirm, useVbenModal } from '@vben/common-ui'; +import { isEqual } from '@vben/utils'; import { InputNumber, message } from 'ant-design-vue'; @@ -46,9 +47,9 @@ defineOptions({ name: 'WmsReceiptOrderForm' }); const emit = defineEmits(['success']); -const formData = ref(); +const formData = ref({}); const formMode = ref('create'); -const originalSubmitData = ref(''); +const originalSubmitData = ref(); const details = ref([]); const detailTableRef = ref(); const skuSelectRef = ref>(); @@ -237,7 +238,7 @@ async function buildSubmitData(): Promise { totalPrice: _totalPrice, totalQuantity: _totalQuantity, ...order - } = formData.value || {}; + } = formData.value; return { ...order, ...values, @@ -255,7 +256,7 @@ async function handleFormComplete() { modalApi.lock(); try { const data = await buildSubmitData(); - if (JSON.stringify(data) !== originalSubmitData.value) { + if (!isEqual(data, originalSubmitData.value)) { await updateReceiptOrder(data); } await completeReceiptOrder(formData.value.id); @@ -307,8 +308,8 @@ const [Modal, modalApi] = useVbenModal({ }, async onOpenChange(isOpen: boolean) { if (!isOpen) { - formData.value = undefined; - originalSubmitData.value = ''; + formData.value = {}; + originalSubmitData.value = undefined; setDetails([]); return; } @@ -329,7 +330,7 @@ const [Modal, modalApi] = useVbenModal({ setDetails(orderDetails); // 设置到 values await formApi.setValues(formData.value); - originalSubmitData.value = JSON.stringify(await buildSubmitData()); + originalSubmitData.value = await buildSubmitData(); } finally { modalApi.unlock(); } @@ -343,14 +344,18 @@ const [Modal, modalApi] = useVbenModal({ }; setDetails([]); await formApi.setValues(formData.value); - originalSubmitData.value = JSON.stringify(await buildSubmitData()); + originalSubmitData.value = await buildSubmitData(); await nextTick(); }, });