diff --git a/manifest.json b/manifest.json index 5fabae2..90181ed 100644 --- a/manifest.json +++ b/manifest.json @@ -2,8 +2,8 @@ "name" : "上海干巷涂装PDA", "appid" : "__UNI__A67E78B", "description" : "", - "versionName" : "2.7.0", - "versionCode" : 270, + "versionName" : "2.7.2", + "versionCode" : 272, "transformPx" : false, "sassImplementationName" : "node-sass", "app-plus" : { diff --git a/pages/blank/blankOutbound/blankOutbound.vue b/pages/blank/blankOutbound/blankOutbound.vue index 16e844c..ddf764f 100644 --- a/pages/blank/blankOutbound/blankOutbound.vue +++ b/pages/blank/blankOutbound/blankOutbound.vue @@ -13,7 +13,7 @@ --> 已扫货物数:{{ quantityTotal }} - 已扫箱数:{{ newMaterialList.length }} + 已扫箱数:{{ boxCountTotal }} @@ -52,8 +52,8 @@ 数量:{{ item.quantity }} - 生产批次 - {{ item.productionTime }} + @@ -164,6 +164,14 @@ export default { num += this.newMaterialList[index].quantity * 1; } return num; + }, + // 计算总箱数 + boxCountTotal() { + let count = 0; + for (let index = 0; index < this.newMaterialList.length; index++) { + count += (this.newMaterialList[index].boxCount || 0); + } + return count; } }, methods: { @@ -205,7 +213,47 @@ export default { return; } this.loading = true; - this.newMaterialList.push(data); + // 检查是否存在相同blankNumber的毛坯 + const existingIndex = this.newMaterialList.findIndex(item => item.blankNumber === data.blankNumber); + + if (existingIndex !== -1) { + // 找到相同blankNumber的毛坯,累加数量和箱数 + const existingItem = this.newMaterialList[existingIndex]; + // 确保originalCodes数组存在 + if (!existingItem.originalCodes || !Array.isArray(existingItem.originalCodes)) { + existingItem.originalCodes = []; + // 如果有originalCode,添加到数组中 + if (existingItem.originalCode) { + existingItem.originalCodes.push(existingItem.originalCode); + } + } + + // 添加新扫描项的originalCode到数组中(如果不存在) + if (data.originalCode && !existingItem.originalCodes.includes(data.originalCode)) { + existingItem.originalCodes.push(data.originalCode); + } + + // 累加数量和箱数 + existingItem.quantity += data.quantity || 1; + existingItem.boxCount = (existingItem.boxCount || 0) + 1; + + // 显示累加提示 + // uni.showToast({ + // icon: 'none', + // title: `毛坯号${data.blankNumber}数量已累加至${existingItem.quantity},箱数累计:${existingItem.boxCount}`, + // duration: 1500 + // }); + } else { + // 不存在相同blankNumber的毛坯,添加新项 + const newItem = { ...data }; + // 初始化originalCodes数组和boxCount字段 + newItem.originalCodes = []; + if (newItem.originalCode) { + newItem.originalCodes.push(newItem.originalCode); + } + newItem.boxCount = 1; // 新项默认箱数为1 + this.newMaterialList.push(newItem); + } this.loading = false; } }, @@ -259,14 +307,14 @@ export default { return; } // 箱重复提醒 this.isPackageRepeat() - if (this.isPackageRepeat()) { - showOperationConfirm('重复箱校验', '检测到存在重复箱,是否自动清除?', true).then((res) => { - if (res.confirm) { - this.clearRepeatPackage(); - } - }); - return; - } + // if (this.isPackageRepeat()) { + // showOperationConfirm('重复箱校验', '检测到存在重复箱,是否自动清除?', true).then((res) => { + // if (res.confirm) { + // this.clearRepeatPackage(); + // } + // }); + // return; + // } showOperationConfirm('出库操作', '是否确认出库?', true).then((res) => { if (res.confirm) { @@ -326,15 +374,29 @@ export default { }); }, // 出库箱去重校验,数据是否有重复 - // 统一重复检查逻辑,使用Map提高查找效率 + // 统一重复检查逻辑,使用Set提高查找效率 isPackageRepeat() { let oldList = this.newMaterialList; - let seen = new Map(); + let seenOriginalCodes = new Set(); + for (let item of oldList) { - if (seen.has(item.originalCode)) { - return true; + // 检查单个originalCode + if (item.originalCode) { + if (seenOriginalCodes.has(item.originalCode)) { + return true; + } + seenOriginalCodes.add(item.originalCode); + } + + // 检查originalCodes数组中的所有code + if (item.originalCodes && Array.isArray(item.originalCodes)) { + for (let code of item.originalCodes) { + if (seenOriginalCodes.has(code)) { + return true; + } + seenOriginalCodes.add(code); + } } - seen.set(item.originalCode, true); } return false; }, @@ -342,22 +404,103 @@ export default { clearRepeatPackage() { let oldArray = this.newMaterialList; let newArray = []; - let seen = new Map(); + let seenOriginalCodes = new Set(); // 存储所有已处理的originalCode let repeatPackage = []; - oldArray.forEach((item) => { - // 统一重复检查逻辑,使用originalCode作为唯一标识 - if (!seen.has(item.originalCode)) { - seen.set(item.originalCode, true); + + // 按blankNumber分组处理 + const blankGroups = {}; + oldArray.forEach(item => { + const blankNumber = item.blankNumber || ''; + if (!blankGroups[blankNumber]) { + blankGroups[blankNumber] = []; + } + blankGroups[blankNumber].push(item); + }); + + // 处理每个blankNumber组 + Object.values(blankGroups).forEach(group => { + if (group.length === 1) { + // 单个毛坯项,直接添加并记录其originalCode + const item = group[0]; newArray.push(item); + if (item.originalCode) { + seenOriginalCodes.add(item.originalCode); + } + // 同时记录originalCodes数组中的所有code + if (item.originalCodes && Array.isArray(item.originalCodes)) { + item.originalCodes.forEach(code => { + seenOriginalCodes.add(code); + }); + } + // 确保单个项也有boxCount字段 + if (!item.boxCount) { + item.boxCount = 1; + } } else { - repeatPackage.push(item.patchCode); + // 多个相同blankNumber的项,合并处理 + let mergedItem = { ...group[0] }; + let totalQuantity = mergedItem.quantity || 0; + let totalBoxCount = mergedItem.boxCount || 0; + let allOriginalCodes = new Set(); + + // 添加第一个项的originalCode + if (mergedItem.originalCode) { + allOriginalCodes.add(mergedItem.originalCode); + seenOriginalCodes.add(mergedItem.originalCode); + } + + // 添加第一个项的originalCodes数组 + if (mergedItem.originalCodes && Array.isArray(mergedItem.originalCodes)) { + mergedItem.originalCodes.forEach(code => { + allOriginalCodes.add(code); + seenOriginalCodes.add(code); + }); + } + + // 处理后续项 + for (let i = 1; i < group.length; i++) { + const item = group[i]; + // 累加数量和箱数 + totalQuantity += item.quantity || 1; + totalBoxCount += item.boxCount || 0; + + // 检查并处理originalCode + if (item.originalCode) { + if (allOriginalCodes.has(item.originalCode)) { + repeatPackage.push(item.patchCode || item.originalCode); + } else { + allOriginalCodes.add(item.originalCode); + seenOriginalCodes.add(item.originalCode); + } + } + + // 检查并处理originalCodes数组 + if (item.originalCodes && Array.isArray(item.originalCodes)) { + item.originalCodes.forEach(code => { + if (allOriginalCodes.has(code)) { + repeatPackage.push(item.patchCode || code); + } else { + allOriginalCodes.add(code); + seenOriginalCodes.add(code); + } + }); + } + } + + // 更新合并后的项 + mergedItem.quantity = totalQuantity; + mergedItem.boxCount = totalBoxCount; + mergedItem.originalCodes = Array.from(allOriginalCodes); + newArray.push(mergedItem); } }); + this.newMaterialList = newArray; + // 增强用户交互提示信息 showOperationConfirm( - '重复箱清除', - `检测到${repeatPackage.length}个重复箱,已自动清除。原箱数:${oldArray.length} 现箱数:${newArray.length} 重复箱:${repeatPackage.join(', ')}`, + '重复箱处理', + `已处理${oldArray.length}个毛坯项,相同blankNumber已合并。现箱数:${newArray.length} 重复标签:${repeatPackage.length > 0 ? repeatPackage.join(', ') : '无'}`, false ); } diff --git a/pages/blank/blankWarehousing/blankWarehousing.vue b/pages/blank/blankWarehousing/blankWarehousing.vue index d2a1902..7d6b57a 100644 --- a/pages/blank/blankWarehousing/blankWarehousing.vue +++ b/pages/blank/blankWarehousing/blankWarehousing.vue @@ -13,7 +13,7 @@ --> 已扫货物数:{{ quantityTotal }} - 已扫箱数:{{ newMaterialList.length }} + 已扫箱数:{{ boxCountTotal }} @@ -52,8 +52,8 @@ 数量:{{ item.quantity }} - 生产批次 - {{ item.productionTime }} + @@ -164,6 +164,14 @@ export default { num += this.newMaterialList[index].quantity * 1; } return num; + }, + // 计算总箱数 + boxCountTotal() { + let count = 0; + for (let index = 0; index < this.newMaterialList.length; index++) { + count += (this.newMaterialList[index].boxCount || 0); + } + return count; } }, methods: { @@ -205,7 +213,43 @@ export default { return; } this.loading = true; - this.newMaterialList.push(data); + + // 检查是否已存在相同blankNumber的毛坯 + const existingIndex = this.newMaterialList.findIndex(item => + item.blankNumber === data.blankNumber + ); + + if (existingIndex >= 0) { + // 已存在相同blankNumber的毛坯,累加数量和箱数 + const existingItem = this.newMaterialList[existingIndex]; + // 确保originalCodes数组存在 + if (!existingItem.originalCodes) { + existingItem.originalCodes = [existingItem.originalCode]; + } + // 添加新的originalCode到数组中 + if (!existingItem.originalCodes.includes(data.originalCode)) { + existingItem.originalCodes.push(data.originalCode); + } + // 累加数量和箱数 + const newQuantity = (existingItem.quantity || 0) + (data.quantity || 1); + const newBoxCount = (existingItem.boxCount || 0) + 1; // 每次扫描一个箱码,箱数+1 + this.$set(this.newMaterialList, existingIndex, { + ...existingItem, + quantity: newQuantity, + boxCount: newBoxCount + }); + // showOperationConfirm('提示', `数量已累加:${existingItem.blankNumber} 当前数量:${newQuantity},累计箱数:${newBoxCount}`, false); + } else { + // 不存在相同blankNumber的毛坯,正常添加 + // 为新项添加originalCodes数组和boxCount字段 + const newItem = { + ...data, + originalCodes: [data.originalCode], + boxCount: 1 // 新项默认箱数为1 + }; + this.newMaterialList.push(newItem); + } + this.loading = false; } }, @@ -259,14 +303,14 @@ export default { return; } // 箱重复提醒 this.isPackageRepeat() - if (this.isPackageRepeat()) { - showOperationConfirm('重复箱校验', '检测到存在重复箱,是否自动清除?', true).then((res) => { - if (res.confirm) { - this.clearRepeatPackage(); - } - }); - return; - } + // if (this.isPackageRepeat()) { + // showOperationConfirm('重复箱校验', '检测到存在重复箱,是否自动清除?', true).then((res) => { + // if (res.confirm) { + // this.clearRepeatPackage(); + // } + // }); + // return; + // } showOperationConfirm('入库操作', '是否确认入库?', true).then((res) => { if (res.confirm) { @@ -326,15 +370,29 @@ export default { }); }, // 入库箱去重校验,数据是否有重复 - // 统一重复检查逻辑,使用Map提高查找效率 + // 统一重复检查逻辑,使用Set提高查找效率 isPackageRepeat() { let oldList = this.newMaterialList; - let seen = new Map(); + let seenOriginalCodes = new Set(); + for (let item of oldList) { - if (seen.has(item.originalCode)) { - return true; + // 检查单个originalCode + if (item.originalCode) { + if (seenOriginalCodes.has(item.originalCode)) { + return true; + } + seenOriginalCodes.add(item.originalCode); + } + + // 检查originalCodes数组中的所有code + if (item.originalCodes && Array.isArray(item.originalCodes)) { + for (let code of item.originalCodes) { + if (seenOriginalCodes.has(code)) { + return true; + } + seenOriginalCodes.add(code); + } } - seen.set(item.originalCode, true); } return false; }, @@ -342,22 +400,103 @@ export default { clearRepeatPackage() { let oldArray = this.newMaterialList; let newArray = []; - let seen = new Map(); + let seenOriginalCodes = new Set(); // 存储所有已处理的originalCode let repeatPackage = []; - oldArray.forEach((item) => { - // 统一重复检查逻辑,使用originalCode作为唯一标识 - if (!seen.has(item.originalCode)) { - seen.set(item.originalCode, true); + + // 按blankNumber分组处理 + const blankGroups = {}; + oldArray.forEach(item => { + const blankNumber = item.blankNumber || ''; + if (!blankGroups[blankNumber]) { + blankGroups[blankNumber] = []; + } + blankGroups[blankNumber].push(item); + }); + + // 处理每个blankNumber组 + Object.values(blankGroups).forEach(group => { + if (group.length === 1) { + // 单个毛坯项,直接添加并记录其originalCode + const item = group[0]; newArray.push(item); + if (item.originalCode) { + seenOriginalCodes.add(item.originalCode); + } + // 同时记录originalCodes数组中的所有code + if (item.originalCodes && Array.isArray(item.originalCodes)) { + item.originalCodes.forEach(code => { + seenOriginalCodes.add(code); + }); + } + // 确保单个项也有boxCount字段 + if (!item.boxCount) { + item.boxCount = 1; + } } else { - repeatPackage.push(item.patchCode); + // 多个相同blankNumber的项,合并处理 + let mergedItem = { ...group[0] }; + let totalQuantity = mergedItem.quantity || 0; + let totalBoxCount = mergedItem.boxCount || 0; + let allOriginalCodes = new Set(); + + // 添加第一个项的originalCode + if (mergedItem.originalCode) { + allOriginalCodes.add(mergedItem.originalCode); + seenOriginalCodes.add(mergedItem.originalCode); + } + + // 添加第一个项的originalCodes数组 + if (mergedItem.originalCodes && Array.isArray(mergedItem.originalCodes)) { + mergedItem.originalCodes.forEach(code => { + allOriginalCodes.add(code); + seenOriginalCodes.add(code); + }); + } + + // 处理后续项 + for (let i = 1; i < group.length; i++) { + const item = group[i]; + // 累加数量和箱数 + totalQuantity += item.quantity || 1; + totalBoxCount += item.boxCount || 0; + + // 检查并处理originalCode + if (item.originalCode) { + if (allOriginalCodes.has(item.originalCode)) { + repeatPackage.push(item.patchCode || item.originalCode); + } else { + allOriginalCodes.add(item.originalCode); + seenOriginalCodes.add(item.originalCode); + } + } + + // 检查并处理originalCodes数组 + if (item.originalCodes && Array.isArray(item.originalCodes)) { + item.originalCodes.forEach(code => { + if (allOriginalCodes.has(code)) { + repeatPackage.push(item.patchCode || code); + } else { + allOriginalCodes.add(code); + seenOriginalCodes.add(code); + } + }); + } + } + + // 更新合并后的项 + mergedItem.quantity = totalQuantity; + mergedItem.boxCount = totalBoxCount; + mergedItem.originalCodes = Array.from(allOriginalCodes); + newArray.push(mergedItem); } }); + this.newMaterialList = newArray; + // 增强用户交互提示信息 showOperationConfirm( - '重复箱清除', - `检测到${repeatPackage.length}个重复箱,已自动清除。原箱数:${oldArray.length} 现箱数:${newArray.length} 重复箱:${repeatPackage.join(', ')}`, + '重复箱处理', + `已处理${oldArray.length}个毛坯项,相同blankNumber已合并。现箱数:${newArray.length} 重复标签:${repeatPackage.length > 0 ? repeatPackage.join(', ') : '无'}`, false ); }