From 8775059d5d84990cd601a18af7574c7de22496ac Mon Sep 17 00:00:00 2001 From: zjf <1799650030@qq.com> Date: Thu, 14 Aug 2025 12:05:10 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E9=A4=90=E6=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/canteen/timeSlotConfig.ts | 41 +++ src/views/canteen/boxesAvailability/form.vue | 155 ++++++++-- src/views/canteen/boxesBooking/form.vue | 308 ++++++++++++++----- src/views/canteen/boxesBooking/index.vue | 90 ++++-- src/views/canteen/boxesInfo/form.vue | 103 +++++-- src/views/canteen/boxesInfo/index.vue | 31 +- src/views/canteen/canteenOnlineSpu/index.vue | 6 + src/views/canteen/timeSlotConfig/form.vue | 213 +++++++++++++ src/views/canteen/timeSlotConfig/index.vue | 121 ++++++++ 9 files changed, 910 insertions(+), 158 deletions(-) create mode 100644 src/api/canteen/timeSlotConfig.ts create mode 100644 src/views/canteen/timeSlotConfig/form.vue create mode 100644 src/views/canteen/timeSlotConfig/index.vue diff --git a/src/api/canteen/timeSlotConfig.ts b/src/api/canteen/timeSlotConfig.ts new file mode 100644 index 0000000..3a74199 --- /dev/null +++ b/src/api/canteen/timeSlotConfig.ts @@ -0,0 +1,41 @@ +import request from "/@/utils/request" + +export function fetchList(query?: Object) { + return request({ + url: '/canteen/timeSlotConfig/page', + method: 'get', + params: query + }) +} + +export function addObj(obj?: Object) { + return request({ + url: '/canteen/timeSlotConfig', + method: 'post', + data: obj + }) +} + +export function getObj(id?: string) { + return request({ + url: '/canteen/timeSlotConfig/' + id, + method: 'get' + }) +} + +export function delObjs(ids?: Object) { + return request({ + url: '/canteen/timeSlotConfig', + method: 'delete', + data: ids + }) +} + +export function putObj(obj?: Object) { + return request({ + url: '/canteen/timeSlotConfig', + method: 'put', + data: obj + }) +} + diff --git a/src/views/canteen/boxesAvailability/form.vue b/src/views/canteen/boxesAvailability/form.vue index b24fe4a..9eb6b78 100644 --- a/src/views/canteen/boxesAvailability/form.vue +++ b/src/views/canteen/boxesAvailability/form.vue @@ -1,46 +1,80 @@ - - + + - - + + - - - + + + + - - - + + + + + + - - - + + - - - + + - - - + + - - - + + + 空闲 + 已使用 + + + + + + @@ -58,6 +92,7 @@ import { useDict } from '/@/hooks/dict'; import { useMessage } from '/@/hooks/message'; import { getObj, addObj, putObj } from '/@/api/canteen/boxesAvailability'; +import { fetchList as fetchTableList } from '/@/api/canteen/boxesInfo'; import { rule } from '/@/utils/validate'; const emit = defineEmits(['refresh']); @@ -65,35 +100,88 @@ const emit = defineEmits(['refresh']); const dataFormRef = ref(); const visible = ref(false); const loading = ref(false); -// 定义字典 -const { booking_status } = useDict('booking_status'); +const tableList = ref([]); // 提交表单数据 const form = reactive({ id: '', + merchantId: '', boxesId: '', - bookingId: '', - status: '', - userId: '', + mealType: '', bxDate: '', - hour: '', - hourIndex: '', + startTime: '', + endTime: '', + status: 0, + remark: '', }); // 定义校验规则 -const dataRules = ref({}); +const dataRules = ref({ + merchantId: [{ required: true, message: '商户不能为空', trigger: 'change' }], + boxesId: [{ required: true, message: '餐桌不能为空', trigger: 'change' }], + mealType: [{ required: true, message: '餐次类型不能为空', trigger: 'change' }], + bxDate: [{ required: true, message: '日期不能为空', trigger: 'change' }], + startTime: [{ required: true, message: '开始时间不能为空', trigger: 'change' }], + endTime: [{ required: true, message: '结束时间不能为空', trigger: 'change' }], + status: [{ required: true, message: '状态不能为空', trigger: 'change' }], +}); + +// 禁用过去的日期 +const disabledDate = (time: Date) => { + return time.getTime() < Date.now() - 8.64e7; +}; + +// 获取可选时间范围 +const getSelectableTimeRange = () => { + switch (form.mealType) { + case '1': return '07:00:00,09:00:00'; // 早餐 + case '2': return '11:30:00,13:30:00'; // 中餐 + case '3': return '17:30:00,19:30:00'; // 晚餐 + default: return '00:00:00,23:59:59'; + } +}; + +// 商户变化时加载餐桌列表 +const onMerchantChange = async (merchantId: string) => { + if (merchantId) { + try { + const res = await fetchTableList({ merchantId, status: '0' }); + tableList.value = res.data?.records || []; + } catch (error) { + console.error('加载餐桌列表失败:', error); + } + } else { + tableList.value = []; + } + form.boxesId = ''; +}; + +// 餐次类型变化时重置时间 +const onMealTypeChange = () => { + form.startTime = ''; + form.endTime = ''; +}; // 打开弹窗 const openDialog = (id: string) => { visible.value = true; form.id = ''; + form.merchantId = ''; + form.boxesId = ''; + form.mealType = ''; + form.bxDate = ''; + form.startTime = ''; + form.endTime = ''; + form.status = 0; + form.remark = ''; + tableList.value = []; // 重置表单数据 nextTick(() => { dataFormRef.value?.resetFields(); }); - // 获取boxesAvailability信息 + // 获取可用时间段信息 if (id) { form.id = id; getboxesAvailabilityData(id); @@ -120,11 +208,14 @@ const onSubmit = async () => { // 初始化表单数据 const getboxesAvailabilityData = (id: string) => { - // 获取数据 loading.value = true; getObj(id) .then((res: any) => { Object.assign(form, res.data); + // 加载餐桌列表 + if (form.merchantId) { + onMerchantChange(form.merchantId); + } }) .finally(() => { loading.value = false; diff --git a/src/views/canteen/boxesBooking/form.vue b/src/views/canteen/boxesBooking/form.vue index e86d2c3..a60ffaf 100644 --- a/src/views/canteen/boxesBooking/form.vue +++ b/src/views/canteen/boxesBooking/form.vue @@ -1,84 +1,101 @@ - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - + + + - - - + + + + + + - - - - - - - - - - - - - - + - - - + + - - - - - - + + - - - + + + + + + + + + + + 可用时间段 + + + + {{ slot.startTime }} - {{ slot.endTime }} + 已预约 + + + + @@ -93,6 +110,7 @@ import { useDict } from '/@/hooks/dict'; import { useMessage } from '/@/hooks/message'; import { getObj, addObj, putObj } from '/@/api/canteen/boxesBooking'; +import { fetchList as fetchTableList } from '/@/api/canteen/boxesInfo'; import { rule } from '/@/utils/validate'; const emit = defineEmits(['refresh']); @@ -100,40 +118,170 @@ const emit = defineEmits(['refresh']); const dataFormRef = ref(); const visible = ref(false); const loading = ref(false); -// 定义字典 -const { check_status } = useDict('check_status'); +const tableList = ref([]); +const availableTimeSlots = ref([]); +const selectedTimeSlots = ref([]); // 提交表单数据 const form = reactive({ id: '', + merchantId: '', boxesId: '', + mealType: '', + bookingDate: '', startTime: '', endTime: '', - checkUserId: '', - checkStatus: '', - creator: '', - updater: '', - deleted: '', - bookingDate: '', - userId: '', - status: '', - totalPrice: '', + bookingPeople: 1, + remark: '', + status: '0', }); // 定义校验规则 -const dataRules = ref({}); +const dataRules = ref({ + merchantId: [{ required: true, message: '商户不能为空', trigger: 'change' }], + boxesId: [{ required: true, message: '餐桌不能为空', trigger: 'change' }], + mealType: [{ required: true, message: '餐次类型不能为空', trigger: 'change' }], + bookingDate: [{ required: true, message: '预约日期不能为空', trigger: 'change' }], + startTime: [{ required: true, message: '开始时间不能为空', trigger: 'change' }], + endTime: [{ required: true, message: '结束时间不能为空', trigger: 'change' }], + bookingPeople: [{ required: true, message: '预约人数不能为空', trigger: 'blur' }], +}); + +// 禁用过去的日期 +const disabledDate = (time: Date) => { + return time.getTime() < Date.now() - 8.64e7; +}; + +// 获取可选时间范围 +const getSelectableTimeRange = () => { + switch (form.mealType) { + case '1': return '07:00:00,09:00:00'; // 早餐 + case '2': return '11:30:00,13:30:00'; // 中餐 + case '3': return '17:30:00,19:30:00'; // 晚餐 + default: return '00:00:00,23:59:59'; + } +}; + +// 商户变化时加载餐桌列表 +const onMerchantChange = async (merchantId: string) => { + if (merchantId) { + try { + const res = await fetchTableList({ merchantId, status: '0' }); + tableList.value = res.data?.records || []; + } catch (error) { + console.error('加载餐桌列表失败:', error); + } + } else { + tableList.value = []; + } + form.boxesId = ''; +}; + +// 餐次类型变化时重置时间 +const onMealTypeChange = () => { + form.startTime = ''; + form.endTime = ''; + selectedTimeSlots.value = []; +}; + +// 检查时间段是否被选中 +const isTimeSlotSelected = (slot: any) => { + return selectedTimeSlots.value.some(selected => + selected.startTime === slot.startTime && selected.endTime === slot.endTime + ); +}; + +// 切换时间段选择 +const toggleTimeSlot = (slot: any) => { + if (slot.status === 'booked') return; + + const isSelected = isTimeSlotSelected(slot); + if (isSelected) { + selectedTimeSlots.value = selectedTimeSlots.value.filter(selected => + !(selected.startTime === slot.startTime && selected.endTime === slot.endTime) + ); + } else { + selectedTimeSlots.value.push(slot); + } + + // 自动填充开始和结束时间 + if (selectedTimeSlots.value.length > 0) { + const sortedSlots = selectedTimeSlots.value.sort((a, b) => a.startTime.localeCompare(b.startTime)); + form.startTime = sortedSlots[0].startTime; + form.endTime = sortedSlots[sortedSlots.value.length - 1].endTime; + } else { + form.startTime = ''; + form.endTime = ''; + } +}; + +// 生成可用时间段 +const generateTimeSlots = () => { + const slots = []; + let startHour, endHour; + + switch (form.mealType) { + case '1': // 早餐 + startHour = 7; + endHour = 9; + break; + case '2': // 中餐 + startHour = 11.5; + endHour = 13.5; + break; + case '3': // 晚餐 + startHour = 17.5; + endHour = 19.5; + break; + default: + return []; + } + + for (let hour = startHour; hour < endHour; hour += 0.5) { + const startTime = `${Math.floor(hour).toString().padStart(2, '0')}:${(hour % 1 === 0.5 ? '30' : '00')}`; + const endTime = `${Math.floor(hour + 0.5).toString().padStart(2, '0')}:${((hour + 0.5) % 1 === 0.5 ? '30' : '00')}`; + + slots.push({ + startTime, + endTime, + status: 'available' + }); + } + + availableTimeSlots.value = slots; +}; + +// 监听表单变化 +watch([() => form.boxesId, () => form.mealType, () => form.bookingDate], () => { + if (form.boxesId && form.mealType && form.bookingDate) { + generateTimeSlots(); + // 这里可以调用API获取实际的时间段状态 + // fetchTimeSlotStatus(); + } +}); // 打开弹窗 const openDialog = (id: string) => { visible.value = true; form.id = ''; + form.merchantId = ''; + form.boxesId = ''; + form.mealType = ''; + form.bookingDate = ''; + form.startTime = ''; + form.endTime = ''; + form.bookingPeople = 1; + form.remark = ''; + selectedTimeSlots.value = []; + availableTimeSlots.value = []; + tableList.value = []; // 重置表单数据 nextTick(() => { dataFormRef.value?.resetFields(); }); - // 获取boxesBooking信息 + // 获取预约信息 if (id) { form.id = id; getboxesBookingData(id); @@ -160,11 +308,14 @@ const onSubmit = async () => { // 初始化表单数据 const getboxesBookingData = (id: string) => { - // 获取数据 loading.value = true; getObj(id) .then((res: any) => { Object.assign(form, res.data); + // 加载餐桌列表 + if (form.merchantId) { + onMerchantChange(form.merchantId); + } }) .finally(() => { loading.value = false; @@ -176,3 +327,22 @@ defineExpose({ openDialog, }); + + diff --git a/src/views/canteen/boxesBooking/index.vue b/src/views/canteen/boxesBooking/index.vue index 94bda80..cf7d06d 100644 --- a/src/views/canteen/boxesBooking/index.vue +++ b/src/views/canteen/boxesBooking/index.vue @@ -3,11 +3,31 @@ - - + + - - + + + + + + + + + + + + + + + + 查询 @@ -52,32 +72,48 @@ - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - 编辑 - - 删除 + 预约成功 + 预约失败 + 取消预约 + - + + + + + + + + + + + + + + + + diff --git a/src/views/canteen/boxesInfo/form.vue b/src/views/canteen/boxesInfo/form.vue index 6a76685..9436af4 100644 --- a/src/views/canteen/boxesInfo/form.vue +++ b/src/views/canteen/boxesInfo/form.vue @@ -1,45 +1,59 @@ - + - + - - - + + + + + + + + + + + + + + + + + + - + - + - - + {{ item.label }} - - - - - - - + + + + + + + @@ -52,6 +66,7 @@ diff --git a/src/views/canteen/canteenOnlineSpu/index.vue b/src/views/canteen/canteenOnlineSpu/index.vue index c6e673b..a9c9aab 100644 --- a/src/views/canteen/canteenOnlineSpu/index.vue +++ b/src/views/canteen/canteenOnlineSpu/index.vue @@ -83,6 +83,12 @@ + + + {{ scope.row.dishTypeName}} + {{ scope.row.dishTypeName}} + + {{ displayPrice(scope.row.price) }} diff --git a/src/views/canteen/timeSlotConfig/form.vue b/src/views/canteen/timeSlotConfig/form.vue new file mode 100644 index 0000000..5ac9bac --- /dev/null +++ b/src/views/canteen/timeSlotConfig/form.vue @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 启用 + 禁用 + + + + + + + + + + + + + + + + + + + + + 取消 + 确认 + + + + + + diff --git a/src/views/canteen/timeSlotConfig/index.vue b/src/views/canteen/timeSlotConfig/index.vue new file mode 100644 index 0000000..7b139a7 --- /dev/null +++ b/src/views/canteen/timeSlotConfig/index.vue @@ -0,0 +1,121 @@ + + + + + + + 新 增 + + + 删除 + + + + + + + + + + + + + + + + + + + 编辑 + 删除 + + + + + + + + + + + + + From 52aa57bf6fd1fc71aee4119a355630412ad34123 Mon Sep 17 00:00:00 2001 From: weiwei Date: Thu, 14 Aug 2025 17:26:22 +0800 Subject: [PATCH 2/4] =?UTF-8?q?fix:=E5=85=A5=E5=BA=93=E5=87=BA=E5=BA=93?= =?UTF-8?q?=E8=A1=A8=E5=B0=BE=E5=90=88=E8=AE=A1=EF=BC=9B=E5=AF=BC=E5=85=A5?= =?UTF-8?q?=E6=AF=8F=E6=97=A5=E8=8F=9C=E5=93=81=E6=88=90=E5=8A=9F=E5=88=B7?= =?UTF-8?q?=E6=96=B0=E5=88=86=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/canteen/canteenDailyMenu/form.vue | 1 + src/views/canteen/canteenOnlineSpu/form.vue | 11 ++++---- src/views/canteen/canteenOnlineSpu/index.vue | 16 +++++++++--- .../purchaseManagement/smErpCgBack/form.vue | 26 ++++++++++++++----- .../smErpCgInventory/form.vue | 26 ++++++++++++++----- 5 files changed, 60 insertions(+), 20 deletions(-) diff --git a/src/views/canteen/canteenDailyMenu/form.vue b/src/views/canteen/canteenDailyMenu/form.vue index 84084d1..5320845 100644 --- a/src/views/canteen/canteenDailyMenu/form.vue +++ b/src/views/canteen/canteenDailyMenu/form.vue @@ -62,6 +62,7 @@ 查询 重置 + 取消所有勾选 diff --git a/src/views/canteen/canteenOnlineSpu/form.vue b/src/views/canteen/canteenOnlineSpu/form.vue index 3ac6bb8..e99e72b 100644 --- a/src/views/canteen/canteenOnlineSpu/form.vue +++ b/src/views/canteen/canteenOnlineSpu/form.vue @@ -22,11 +22,11 @@ - - - - - + + + + + @@ -164,6 +164,7 @@ const getcanteenOnlineSpuData = (id: string) => { price: Number(displayPrice(res.data.price, "")), marketPrice: Number(displayPrice(res.data.marketPrice, "")), status: "" + res.data.status, + description: res.data.description ?? "", }) }) .finally(() => { diff --git a/src/views/canteen/canteenOnlineSpu/index.vue b/src/views/canteen/canteenOnlineSpu/index.vue index c6e673b..90884d1 100644 --- a/src/views/canteen/canteenOnlineSpu/index.vue +++ b/src/views/canteen/canteenOnlineSpu/index.vue @@ -118,8 +118,8 @@ - - + + @@ -151,13 +151,17 @@ const state: BasicTableProps = reactive({ }) onMounted(async () => { + await getCanteenOnlineCategoryAll() +}) + +const getCanteenOnlineCategoryAll = async () => { try { const res = await getCanteenOnlineCategory() categoryOptions.value = res.data.records } catch (error) { categoryOptions.value = [] } -}) +} const { getDataList, currentChangeHandle, sizeChangeHandle, sortChangeHandle, downBlobFile, tableStyle } = useTable(state) @@ -197,4 +201,10 @@ const handleDelete = async (ids: string[]) => { useMessage().error(err.msg) } } + +// 导入每日菜品成功刷新 +const exportRefresh = () => { + getDataList(false) + getCanteenOnlineCategoryAll() +} diff --git a/src/views/supermarketerp/purchaseManagement/smErpCgBack/form.vue b/src/views/supermarketerp/purchaseManagement/smErpCgBack/form.vue index fc543eb..8c13c3f 100644 --- a/src/views/supermarketerp/purchaseManagement/smErpCgBack/form.vue +++ b/src/views/supermarketerp/purchaseManagement/smErpCgBack/form.vue @@ -69,8 +69,16 @@ :data="vxeTableData" :edit-rules="validRules" show-footer - :footer-data="[{ seq: '合计', totalAmount }]" - :merge-footer-items="[{ row: 0, col: 2, rowspan: 1, colspan: 7 }]" + :footer-data="[ + { + seq: '合计', + quantity: total.quantity, + purchasePrice: total.purchasePrice, + realPrice: `${total.realPrice}元`, + totalAmount: total.totalAmount, + }, + ]" + :merge-footer-items="[{ row: 0, col: 2, rowspan: 1, colspan: 4 }]" @checkbox-all="" @checkbox-change="" size="mini" @@ -148,7 +156,7 @@ - {{ totalAmount }} 元 + {{ total.totalAmount }}元 @@ -235,9 +243,15 @@ const validRules = ref>({ }) // 合计总金额 -const totalAmount = computed(() => - vxeTableData.value.reduce((sum: any, row: any) => sum + Number(row.selectedUnitObj?.totalAmount || 0), 0).toFixed(2), -) +const total = computed(() => { + const quantity = vxeTableData.value.reduce((sum: any, row: any) => sum + Number(row.quantity || 0), 0).toFixed(2) + const purchasePrice = displayPrice( + vxeTableData.value.reduce((sum: any, row: any) => sum + Number(row.selectedUnitObj?.purchasePrice || 0), 0), + ) + const realPrice = vxeTableData.value.reduce((sum: any, row: any) => sum + Number(row.selectedUnitObj?.realPrice || 0), 0) + const totalAmount = vxeTableData.value.reduce((sum: any, row: any) => sum + Number(row.selectedUnitObj?.totalAmount || 0), 0).toFixed(2) + return { quantity, purchasePrice, realPrice, totalAmount } +}) onMounted(async () => { await getInitData() diff --git a/src/views/supermarketerp/purchaseManagement/smErpCgInventory/form.vue b/src/views/supermarketerp/purchaseManagement/smErpCgInventory/form.vue index 513c756..ff1aba3 100644 --- a/src/views/supermarketerp/purchaseManagement/smErpCgInventory/form.vue +++ b/src/views/supermarketerp/purchaseManagement/smErpCgInventory/form.vue @@ -97,8 +97,16 @@ :data="vxeTableData" :edit-rules="validRules" show-footer - :footer-data="[{ seq: '合计', totalAmount }]" - :merge-footer-items="[{ row: 0, col: 2, rowspan: 1, colspan: 7 }]" + :footer-data="[ + { + seq: '合计', + quantity: total.quantity, + purchasePrice: total.purchasePrice, + realPrice: `${total.realPrice}元`, + totalAmount: total.totalAmount, + }, + ]" + :merge-footer-items="[{ row: 0, col: 2, rowspan: 1, colspan: 4 }]" @checkbox-all="" @checkbox-change="" size="mini" @@ -176,7 +184,7 @@ - {{ totalAmount }} 元 + {{ total.totalAmount }}元 @@ -263,9 +271,15 @@ const validRules = ref>({ }) // 合计总金额 -const totalAmount = computed(() => - vxeTableData.value.reduce((sum: any, row: any) => sum + Number(row.selectedUnitObj?.totalAmount || 0), 0).toFixed(2), -) +const total = computed(() => { + const quantity = vxeTableData.value.reduce((sum: any, row: any) => sum + Number(row.quantity || 0), 0).toFixed(2) + const purchasePrice = displayPrice( + vxeTableData.value.reduce((sum: any, row: any) => sum + Number(row.selectedUnitObj?.purchasePrice || 0), 0), + ) + const realPrice = vxeTableData.value.reduce((sum: any, row: any) => sum + Number(row.selectedUnitObj?.realPrice || 0), 0) + const totalAmount = vxeTableData.value.reduce((sum: any, row: any) => sum + Number(row.selectedUnitObj?.totalAmount || 0), 0).toFixed(2) + return { quantity, purchasePrice, realPrice, totalAmount } +}) onMounted(async () => { await getInitData() From 0e66d461a73f66d5b82111577d8604535e21394f Mon Sep 17 00:00:00 2001 From: weiwei Date: Fri, 15 Aug 2025 11:17:06 +0800 Subject: [PATCH 3/4] =?UTF-8?q?fix:=E5=85=A5=E5=BA=93=E7=9A=84=E5=AE=9E?= =?UTF-8?q?=E9=99=85=E8=BF=9B=E4=BB=B7=E6=A0=B9=E6=8D=AE=E6=95=B0=E9=87=8F?= =?UTF-8?q?=E5=92=8C=E6=80=BB=E9=87=91=E9=A2=9D=E5=8F=98=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../smErpCgInventory/form.vue | 32 +++++++++++++------ .../supermarketerp/stockTaking/index.vue | 6 +--- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/src/views/supermarketerp/purchaseManagement/smErpCgInventory/form.vue b/src/views/supermarketerp/purchaseManagement/smErpCgInventory/form.vue index ff1aba3..2d5357d 100644 --- a/src/views/supermarketerp/purchaseManagement/smErpCgInventory/form.vue +++ b/src/views/supermarketerp/purchaseManagement/smErpCgInventory/form.vue @@ -152,9 +152,9 @@ v-model="row.quantity" :min="0" :precision="0" - @change="onRowValueChange(row, $rowIndex)" + @change="onQuantityChange(row, $rowIndex)" /> - + @@ -162,11 +162,11 @@ {{ displayPrice(row.selectedUnitObj?.purchasePrice || 0) }} - + {{ row?.selectedUnitObj?.realPrice || 0 }} - + {{ row?.selectedUnitObj?.totalAmount }} - + {{ total.totalAmount }}元 @@ -276,7 +282,7 @@ const total = computed(() => { const purchasePrice = displayPrice( vxeTableData.value.reduce((sum: any, row: any) => sum + Number(row.selectedUnitObj?.purchasePrice || 0), 0), ) - const realPrice = vxeTableData.value.reduce((sum: any, row: any) => sum + Number(row.selectedUnitObj?.realPrice || 0), 0) + const realPrice = vxeTableData.value.reduce((sum: any, row: any) => sum + Number(row.selectedUnitObj?.realPrice || 0), 0).toFixed(2) const totalAmount = vxeTableData.value.reduce((sum: any, row: any) => sum + Number(row.selectedUnitObj?.totalAmount || 0), 0).toFixed(2) return { quantity, purchasePrice, realPrice, totalAmount } }) @@ -378,9 +384,15 @@ const onUnitChange = (row: any) => { row.selectedUnitObj.totalAmount = Number((row.quantity * Number(row.selectedUnitObj.realPrice || 0)).toFixed(2)) } -// 数量、进价变动联动 -const onRowValueChange = (row: any, $rowIndex: number) => { - row.selectedUnitObj.totalAmount = Number((row.quantity * Number(row.selectedUnitObj.realPrice || 0)).toFixed(2)) +// 数量变动 +const onQuantityChange = (row: any, $rowIndex: number) => { + row.selectedUnitObj.totalAmount = Number(displayPrice(row.quantity * Number(row.selectedUnitObj.purchasePrice || 0), "")) + row.selectedUnitObj.realPrice = row.selectedUnitObj.totalAmount / row.quantity +} + +// 累计总金额变动 +const onTotalAmountChange = (row: any, $rowIndex: number) => { + row.selectedUnitObj.realPrice = (row.selectedUnitObj.totalAmount / row.quantity).toFixed(2) } // 整理table数据 diff --git a/src/views/supermarketerp/stockTaking/index.vue b/src/views/supermarketerp/stockTaking/index.vue index f66a503..dda9afd 100644 --- a/src/views/supermarketerp/stockTaking/index.vue +++ b/src/views/supermarketerp/stockTaking/index.vue @@ -15,9 +15,6 @@ value-format="YYYY-MM-DD" /> - 查询 重置 @@ -51,8 +48,7 @@ - - + From 766bdea32a81741a3e2c0fd38c6a6dd637b7b271 Mon Sep 17 00:00:00 2001 From: weiwei Date: Fri, 15 Aug 2025 15:55:02 +0800 Subject: [PATCH 4/4] =?UTF-8?q?fix:=E7=9B=B8=E5=85=B3=E6=BC=8F=E6=B4=9E?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Wechat/wx-msg/index.vue | 118 +++++++++-------- src/components/Wechat/wx-reply/index.vue | 160 +++++++++++------------ src/layout/navBars/breadcrumb/search.vue | 79 +++++------ src/layout/routerView/link.vue | 29 ++-- src/utils/other.ts | 118 +++++++++++++---- src/views/biz/mp/wx-material/index.vue | 160 +++++++++++------------ 6 files changed, 370 insertions(+), 294 deletions(-) diff --git a/src/components/Wechat/wx-msg/index.vue b/src/components/Wechat/wx-msg/index.vue index 61be10b..05e66ff 100644 --- a/src/components/Wechat/wx-msg/index.vue +++ b/src/components/Wechat/wx-msg/index.vue @@ -3,7 +3,9 @@ - 点击加载更多 + + 点击加载更多 + 没有更多了 @@ -109,125 +111,125 @@