feat(入库出库): 优化毛坯扫描逻辑并增加箱数统计功能
- 更新manifest.json版本号至2.7.2 - 新增boxCountTotal计算属性统计总箱数 - 优化扫描逻辑,相同blankNumber的毛坯自动合并并累加数量和箱数 - 改进重复箱校验逻辑,支持originalCodes数组检查 - 移除生产批次显示,优化界面展示
This commit is contained in:
parent
caf17c67c8
commit
8103890993
@ -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" : {
|
||||
|
||||
@ -13,7 +13,7 @@
|
||||
</view> -->
|
||||
<view class="row">
|
||||
<span class="col">已扫货物数:{{ quantityTotal }}</span>
|
||||
<span class="col">已扫箱数:{{ newMaterialList.length }}</span>
|
||||
<span class="col">已扫箱数:{{ boxCountTotal }}</span>
|
||||
</view>
|
||||
<view>
|
||||
<!-- <view v-if="searchType === 1" class="color1 aciton-box">请扫仓库码</view> -->
|
||||
@ -52,8 +52,8 @@
|
||||
<view class="quantity-edit-container">
|
||||
<text class="package-card-quantity-label">数量:{{ item.quantity }}</text>
|
||||
</view>
|
||||
<view class="package-card-patch">生产批次</view>
|
||||
<view class="package-card-patch">{{ item.productionTime }}</view>
|
||||
<!-- <view class="package-card-patch">生产批次</view>
|
||||
<view class="package-card-patch">{{ item.productionTime }}</view> -->
|
||||
</view>
|
||||
|
||||
</view>
|
||||
@ -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
|
||||
);
|
||||
}
|
||||
|
||||
@ -13,7 +13,7 @@
|
||||
</view> -->
|
||||
<view class="row">
|
||||
<span class="col">已扫货物数:{{ quantityTotal }}</span>
|
||||
<span class="col">已扫箱数:{{ newMaterialList.length }}</span>
|
||||
<span class="col">已扫箱数:{{ boxCountTotal }}</span>
|
||||
</view>
|
||||
<view>
|
||||
<!-- <view v-if="searchType === 1" class="color1 aciton-box">请扫仓库码</view> -->
|
||||
@ -52,8 +52,8 @@
|
||||
<view class="quantity-edit-container">
|
||||
<text class="package-card-quantity-label">数量:{{ item.quantity }}</text>
|
||||
</view>
|
||||
<view class="package-card-patch">生产批次</view>
|
||||
<view class="package-card-patch">{{ item.productionTime }}</view>
|
||||
<!-- <view class="package-card-patch">日期</view>
|
||||
<view class="package-card-patch">{{ item.productionTime }}</view> -->
|
||||
</view>
|
||||
|
||||
</view>
|
||||
@ -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
|
||||
);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user