优化添加至入库的逻辑

This commit is contained in:
2026-03-03 15:19:02 +08:00
parent 079818aa0f
commit 7b77ab0996

View File

@@ -321,10 +321,10 @@
<span>删除</span>
</div>
</div>
<el-table :data="planList" height="400" style="width: 100%" show-overflow-tooltip
<el-table :data="planList" height="400" style="width: 100%" show-overflow-tooltip border
:row-class-name="tableRowClassName" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="30" align="center" />
<el-table-column label="序号" align="center" type="index" width="50" />
<el-table-column label="序号" align="center" type="index" width="70" />
<el-table-column label="状态" align="center" prop="status" width="100" v-if="idEdit == 0">
<template #default="scoped">
<el-tag :type="scoped.row.status == 1
@@ -896,7 +896,7 @@ const statusList = ref([
]);
const checkPlanList = ref([]); //已选中的要入库的数据
// 点击添加至
// 点击添加至
const outTempData = ref([]);
function addData() {
if (checkPlanList.value.length == 0) {
@@ -904,21 +904,53 @@ function addData() {
return;
}
let data = outTempData.value.concat(checkPlanList.value);
let arr = []
let spaNoTotal = ''
const idList = []; // 用于统计每个id出现的次数
// 第一步遍历数组统计id出现次数
let arr = []; // 去重后的最终数组
let duplicateSapNos = ''; // 存储重复数据的sapNo
let invalidQtySapNos = ''; // 存储入库数量有误的sapNo
const uniqueKeys = new Set(); // 用于存储唯一的组合键 (id+pcode+realQty)
// 遍历数组,先校验数量合法性,再判断唯一性
data.forEach(item => {
if (idList.includes(item.id)) {
spaNoTotal += item.sapNo + ','
// 1. 校验realQty是否大于0处理空值/非数字情况)
const realQty = Number(item.realQty);
if (isNaN(realQty) || realQty <= 0) {
// 避免同一个sapNo重复添加到提示中
if (!invalidQtySapNos.includes(item.sapNo)) {
invalidQtySapNos += item.sapNo + ',';
}
return; // 数量不合法,直接跳过后续唯一性判断
}
// 2. 生成唯一标识组合键
const uniqueKey = `${item.id}_${item.pcode}_${realQty}`;
// 3. 检查组合键是否已存在
if (uniqueKeys.has(uniqueKey)) {
// 存在重复拼接sapNo去重避免重复拼接
if (!duplicateSapNos.includes(item.sapNo)) {
duplicateSapNos += item.sapNo + ',';
}
} else {
arr.push(item)
idList.push(item.id);
// 不存在重复,加入结果数组并记录组合键
arr.push(item);
uniqueKeys.add(uniqueKey);
}
console.log(uniqueKeys)
});
if (spaNoTotal) {
proxy.$modal.msgError("存在重复数据:" + spaNoTotal);
// 处理入库数量有误的提示
if (invalidQtySapNos) {
invalidQtySapNos = invalidQtySapNos.slice(0, -1); // 去掉最后一个逗号
proxy.$modal.msgError(`入库数量有误:${invalidQtySapNos}入库数量需大于0`);
return
}
// 处理重复数据的提示
if (duplicateSapNos) {
duplicateSapNos = duplicateSapNos.slice(0, -1); // 去掉最后一个逗号
proxy.$modal.msgError(`存在重复数据:${duplicateSapNos}`);
}
outTempData.value = arr
}
@@ -963,6 +995,7 @@ function searchPlan() {
for (let i = 0; i < planData.length; i++) {
planData[i].realQty = planData[i].waitQty;
planData[i].gysJhId = planData[i].id;
planData[i].pcode = "";
if (autoFill.value && kzms.value != "") {
planData[i].remark = kzms.value;
}