From 57726db63d3b98ca3918e503fe35271f507df889 Mon Sep 17 00:00:00 2001 From: bb_pan Date: Sat, 23 Aug 2025 16:18:37 +0800 Subject: [PATCH] =?UTF-8?q?=E5=87=BA=E5=BA=93=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/picking/outbound/code-outbound.vue | 130 ++++++++++++------ src/pages/repair/repairManage/num-operate.vue | 4 +- 2 files changed, 87 insertions(+), 47 deletions(-) diff --git a/src/pages/picking/outbound/code-outbound.vue b/src/pages/picking/outbound/code-outbound.vue index 99c537e..a3d439d 100644 --- a/src/pages/picking/outbound/code-outbound.vue +++ b/src/pages/picking/outbound/code-outbound.vue @@ -6,7 +6,12 @@ 任务信息 - +
+ {{ checkedIds.length }} / {{ maxNum }} + +
@@ -31,27 +36,27 @@
- {{ item.maCode }} - + {{ item.maCode }} +
@@ -122,7 +127,9 @@ :checked="item.checked" :disabled=" (maxNum === isSelectNum && !item.checked) || - (isWithinOneMonth(item.nextCheckTime) && item.jiJuType == 2 && item.isCheck == '1') + (isWithinOneMonth(item.nextCheckTime) && + item.jiJuType == 2 && + item.isCheck == '1') " style="transform: scale(0.7)" /> @@ -239,7 +246,7 @@ onShow(() => { uni.$once('paramsReceived', (data) => { console.log('🚀 ~ onShow ~ data:', data) // 如果data.maId 不在 checkedIds 中 就往里面添加 - if (!checkedIds.value.some(item => item.maId === data.maId)) { + if (!checkedIds.value.some((item) => item.maId === data.maId)) { checkedIds.value.push(data) getCodeDeviceListData() } @@ -290,33 +297,63 @@ const getCodeDetailData = async (id, publishTask, typeId) => { // 获取编码列表 const getCodeDeviceListData = async () => { - const ids = checkedIds.value.map((item) => item.maId) + const ids = checkedIds.value.map((i) => i.maId) const checkedIdSet = new Set(ids) + const res = await getCodeDeviceListAPI(queryCodeParams.value) - console.log('🚀 ~ getCodeDeviceListData ~ res:', res) - const newRows = res.rows || [] - const map = new Map() + const newRows = res?.rows ?? [] + const maCode = String(queryCodeParams.value?.maCode ?? '').trim() - // 先放入旧数据(保留滚动加载场景) - codeDeviceList.value.forEach((item) => { - map.set(item.maId, item) - }) - - // 再放入新数据,设置 checked 状态 - newRows.forEach((item) => { - map.set(item.maId, { + // 情况一:有 maCode —— 只展示当前查询结果 + if (maCode) { + codeDeviceList.value = newRows.map((item) => ({ ...item, checked: checkedIdSet.has(item.maId), - }) + })) + total.value = res?.total ?? codeDeviceList.value.length + console.log('✅ 展示当前查询结果(含勾选标记):', codeDeviceList.value) + return + } + + // 情况二:无 maCode —— checkedIds 放最前,后续合并旧 + 新并按 maId 去重 + const oldList = codeDeviceList.value ?? [] + + // 辅助 Map + const newMap = new Map(newRows.map((it) => [it.maId, it])) + const oldMap = new Map(oldList.map((it) => [it.maId, it])) + const checkedIdMap = new Map(checkedIds.value.map((it) => [it.maId, it])) + + // 1) 先构造“前置区”:严格按照 checkedIds 的顺序,强制 checked + const front = [] + ids.forEach((id) => { + const best = + newMap.get(id) ?? // 优先用最新查询的数据 + oldMap.get(id) ?? // 其次用旧列表里的数据 + checkedIdMap.get(id) // 最后兜底用 checkedIds 自身(可能只有 maId) + if (best) { + front.push({ ...best, checked: true }) + } }) - // 更新最终列表:已勾选的排在最前面 - const allItems = Array.from(map.values()) - codeDeviceList.value = [ - ...allItems.filter(item => item.checked), // 勾选的 - ...allItems.filter(item => !item.checked) // 未勾选的 - ] - total.value = res.total || 0 + // 2) 再构造“后置区”:旧列表优先顺序,然后追加本次新结果;遇到重复 maId 则跳过 + const seen = new Set(ids) // 已经放到前置区的 maId + const rest = [] + + const pushIfNew = (item) => { + if (!item) return + const key = item.maId + if (seen.has(key)) return + seen.add(key) + rest.push({ ...item, checked: checkedIdSet.has(key) }) + } + + // 旧列表在前,保持原有显示顺序 + oldList.forEach(pushIfNew) + // 新结果在后,若与前面重复则跳过(保留旧的) + newRows.forEach(pushIfNew) + + codeDeviceList.value = [...front, ...rest] + total.value = res?.total ?? codeDeviceList.value.length } // 编码搜索按钮 @@ -352,7 +389,7 @@ const onChangeChecked = (item) => { // 计算已选择数量 const isSelectNum = computed(() => { - const isSelectList = codeDeviceList.value.filter((e) => e.checked === true) + const isSelectList = checkedIds.value.filter((e) => e.checked === true) if (maxNum.value === isSelectList.length) { uni.showToast({ title: '勾选设备已达到最大待出库数量!', @@ -379,6 +416,13 @@ const onHandleOutbound = async () => { }) return } + if (checkedIds.value.length > maxNum.value) { + uni.showToast({ + title: '勾选设备已超过最大待出库数量!', + icon: 'none', + }) + return + } uni.showLoading() loading.value = true // 解构所需要的数据 @@ -575,9 +619,7 @@ const onCodeIdentify = () => { }) } else { uni.navigateTo({ - url: `/pages/picking/outbound/codeOutScan?params=${JSON.stringify( - queryParams.value, - )}`, + url: `/pages/picking/outbound/codeOutScan?params=${JSON.stringify(queryParams.value)}`, }) } } diff --git a/src/pages/repair/repairManage/num-operate.vue b/src/pages/repair/repairManage/num-operate.vue index 4e82097..b6b9979 100644 --- a/src/pages/repair/repairManage/num-operate.vue +++ b/src/pages/repair/repairManage/num-operate.vue @@ -24,9 +24,7 @@ 待修数量: {{ - queryParams.typeRepairNum - queryParams.typeRepairedNum - queryParams.typeScrapNum - }} + >{{ queryParams.waitRepairNum }}