@@ -904,59 +904,74 @@ function addData() {
return ;
}
let data = outTempData . value . concat ( checkPlanList . value ) ;
let arr = [ ] ; // 去重后的最终数组
let duplicateSapNos = '' ; // 存储重复数据的sapNo
let invalidQtySapNos = '' ; // 存储入库数量有误的sapNo
const uniqueKeys = new Set ( ) ; // 用于存储唯一的组合键 (id+pcode+realQty)
// let arr = []; // 去重后的最终数组
// let duplicateSapNos = ''; // 存储重复数据的sapNo
// let invalidQtySapNos = ''; // 存储入库数量有误的sapNo
// const uniqueKeys = new Set(); // 用于存储唯一的组合键 (id+pcode+realQty)
// 遍历数组,先校验数量合法性,再判断唯一性
data . forEach ( item => {
// 1. 校验realQty是否大于0( 处理空值/非数字情况)
const realQty = Number ( item . realQty ) ;
if ( isNaN ( realQty ) || realQty <= 0 ) {
// 避免同一个sapNo重复添加到提示中
if ( ! invalidQtySapNos. includes( item . sapNo ) ) {
invalidQtySapNos += item . sapNo + ',' ;
}
return; // 数量不合法,直接跳过后续唯一性判断
// // 遍历数组,先校验数量合法性,再判断唯一性
// data.forEach(item => {
// // 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);
// uniqueKeys.add(uniqueKey);
// }
// console.log(uniqueKeys)
// });
// // 处理入库数量有误的提示
// 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 = data
}
const generateSimpleUniqueStr = ( ) => {
if ( typeof crypto !== 'undefined' && crypto . randomUUID ) {
return crypto . randomUUID ( ) ;
}
// 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 ) ;
uniqueKeys . add ( uniqueKey ) ;
}
console . log ( uniqueKeys )
} ) ;
// 处理入库数量有误的提示
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
// 兼容旧版浏览器/Node.js( crypto API 降级)
return ( [ 1 e7 ] + - 1 e3 + - 4 e3 + - 8 e3 + - 1 e11 ) . replace ( /[018]/g , c =>
( c ^ ( crypto . getRandomValues ( new Uint8Array ( 1 ) ) [ 0 ] & ( 15 >> ( c / 4 ) ) ) ) . toString ( 16 )
) ;
}
// 查看所有的出库数据
const viewData = ( ) => {
planList . value = JSON . parse ( JSON . stringify ( outTempData . value ) ) ;
let arr = JSON . parse ( JSON . stringify ( outTempData . value ) ) ;
planList . value = arr . map ( item => ( {
... item ,
uniqueId : generateSimpleUniqueStr ( ) // 新增随机唯一值
} ) ) ;
}
// 删除选中的出库数据
@@ -966,11 +981,11 @@ const deleteData = () => {
return ;
}
proxy . $modal . confirm ( "确认删除选中的出库数据吗?" ) . then ( ( ) => {
const i ds = checkPlanList . value . map ( item => item . i d) ;
console . log ( i ds)
const uniqueI ds = checkPlanList . value . map ( item => item . uniqueI d) ;
console . log ( uniqueI ds)
planList . value = planList . value . filter ( item => {
// 无id的元素默认保留( 如果想删除无id的, 可改为 item?.id && !arr2Ids.has(item.id))
return ! i ds. includes ( item ? . i d) ;
return ! uniqueI ds. includes ( item ? . uniqueI d) ;
} ) ;
outTempData . value = planList . value
} ) ;
@@ -978,7 +993,7 @@ const deleteData = () => {
//新增入库 多选框选中数据
function handleSelectionChange ( selection ) {
function handleSelectionChange ( selection , $event ) {
checkPlanList . value = selection ;
}
@@ -1008,7 +1023,7 @@ function searchPlan() {
proxy . $modal . msgWarning ( "暂无数据" ) ;
return ;
}
planList . value = planData ;
planList . value = planList . value . concat ( planData) ;
} ) ;
}
@@ -1416,6 +1431,7 @@ function handleUpdate(row) {
] ;
pcodeList ( storeData . value . warehouseCode ) ;
open . value = true ;
outTempData . value = [ ]
title . value = "修改库存单据" ;
}
// 取消按钮
@@ -1563,6 +1579,11 @@ function handleDispatch() {
proxy . $modal . msgError ( "请勾选数据" ) ;
return ;
}
let isDiaodu = checkStockList . value . some ( ( item ) => item . execStatus == 0 ) ;
if ( isDiaodu ) {
proxy . $modal . msgWarning ( "预入库数据不能生成调度任务" ) ;
return ;
}
dispatchOpen . value = true ;
}
// 提交调度任务
@@ -1573,7 +1594,7 @@ function submitDispatch() {
return ;
}
let data ;
if ( billStatus . value == "rk" ) {
data = checkStockList . value . map ( ( item ) => ( {
sourceName : "V01-010101" ,
targetName : item . pcode ,
@@ -1583,17 +1604,28 @@ function submitDispatch() {
num : 1 ,
dispatchMode : resource . value ,
} ) ) ;
} else if ( billStatus . value == "ck" ) {
data = checkStockList . value . map ( ( item ) => ( {
sourceName : item . pcode ,
targetName : "V01-010101",
taskTypeName : "下架" ,
taskType: 1 ,
mid : item . wlNo ,
num : 1 ,
dispatchMode : resource . value ,
} ) ) ;
}
// if (billStatus.value == "rk") {
// data = checkStockList.value.map((item) => ({
// sourceName: "V01-010101",
// targetName: item.pcode,
// taskTypeName: "上架",
// taskType: 0,
// mid: item.wlNo,
// num: 1,
// dispatchMode: resource.value,
// }));
// } else if (billStatus.value == "ck") {
// data = checkStockList.value.map((item) => ({
// sourceName: item.pcode,
// targetName: "V01-010101",
// taskTypeName: "下架",
// taskType: 1,
// mid: item.wlNo,
// num: 1,
// dispatchMode: resource.value,
// }));
// }
//调用生成调度任务接口
generateDispatch ( data ) . then ( ( response ) => {
// console.log(11111)