Commit 2af4e414 by linjinhong

fix:修改问题

parent f6e45c94
......@@ -31,6 +31,9 @@ export const pathMap = {
//判断 status 操作单状态
scanProduce: {
OP: "factory/podOrderOperation/scan-produce"
},
checkInventory: {
OP: "factory/podOrderOperation/check-inventory"
}
};
......
......@@ -631,5 +631,26 @@ export default {
console.log("scanProduce", error);
res.json({ code: 500, msg: error });
}
},
checkInventory: async (req, res) => {
env = getHostApi().apiApiHost;
const token = req.headers["jwt-token"];
const params = req.body;
let url = "factory/podOrderOperation/check-inventory";
console.log("checkInventory", `${env}/${url}`);
try {
let { data } = await axios.get(`${env}/${url}`, {
headers: { "jwt-token": token },
params: {
id: params.id,
status: params.status
}
});
res.send(data);
} catch (error) {
console.log("checkInventory", error);
res.json({ code: 500, msg: error });
}
}
};
......@@ -65,5 +65,7 @@ autoRegisterRouter(
);
//操作单状态
autoRegisterRouter(router, "scanProduce", fn.scanProduce);
//检查库存
autoRegisterRouter(router, "checkInventory", fn.checkInventory);
export { router as default };
......@@ -66,7 +66,7 @@ function getLatestOrderByPrefixNewId(targetNewId, type) {
matchedKeyWithSuffix.push({
cacheKey: cacheKey,
suffix: suffix,
order: order,
order: order
});
}
});
......@@ -80,14 +80,14 @@ function getLatestOrderByPrefixNewId(targetNewId, type) {
// ===== 核心新增:根据type过滤,只保留满足条件的条目 =====
if (type) {
// 传入type时才执行过滤,提高灵活性
matchedKeyWithSuffix = matchedKeyWithSuffix.filter((item) => {
matchedKeyWithSuffix = matchedKeyWithSuffix.filter(item => {
const { order } = item;
// 1. 容错:判断saveImgList是否存在且为数组,避免报错
if (!order.saveImgList || !Array.isArray(order.saveImgList)) {
return false;
}
// 2. 查找是否存在:title===type 且 power===false
const matchImgItem = order.saveImgList.find((imgItem) => {
const matchImgItem = order.saveImgList.find(imgItem => {
return imgItem.title === type && imgItem.power === false;
});
// 3. 存在则保留该条目,否则过滤掉
......@@ -95,7 +95,7 @@ function getLatestOrderByPrefixNewId(targetNewId, type) {
});
if (matchedKeyWithSuffix.length === 0) {
console.log(
`未找到以${targetNewId}为前缀、且type=${type}(power=false)的订单`,
`未找到以${targetNewId}为前缀、且type=${type}(power=false)的订单`
);
return null; // 直接返回null,终止后续逻辑,避免报错
}
......@@ -111,11 +111,11 @@ function getLatestOrderByPrefixNewId(targetNewId, type) {
}
console.log(
`找到以${targetNewId}为前缀的最新订单,cacheKey:${latestItem.cacheKey},后缀:${latestItem.suffix}`,
`找到以${targetNewId}为前缀的最新订单,cacheKey:${latestItem.cacheKey},后缀:${latestItem.suffix}`
);
return {
cacheKey: latestItem.cacheKey,
order: latestItem.order,
order: latestItem.order
};
}
......@@ -128,12 +128,12 @@ function refreshOrderCache() {
const newCacheMap = new Map();
// 重新构建缓存key:前缀-数字,保持格式一致
currentArray.forEach((item) => {
currentArray.forEach(item => {
if (item && item[DEFAULT_UNIQUE_KEY]) {
const itemPrefix = item[DEFAULT_UNIQUE_KEY];
// 查找该前缀对应的所有订单,生成连续后缀
const samePrefixItems = currentArray.filter(
(i) => i[DEFAULT_UNIQUE_KEY] === itemPrefix,
i => i[DEFAULT_UNIQUE_KEY] === itemPrefix
);
samePrefixItems.forEach((sameItem, index) => {
const cacheKey = `${itemPrefix}-${index + 1}`;
......@@ -162,27 +162,27 @@ refreshOrderCache();
// ===== 7. 公开API(暴露给外部调用,核心逻辑+原有基础配置) =====
module.exports = {
// === 原有基础配置方法(无改动,保留你的初始逻辑) ===
setVersion: (version) => {
setVersion: version => {
store.set("desktoVersion", version);
},
getVersion: () => store.get("desktoVersion") || "print",
setNowDate: (version) => {
setNowDate: version => {
store.set("nowDate", version);
},
getNowDate: () => store.get("nowDate") || "",
setSkip: (value) => {
setSkip: value => {
store.set("skipValue", value);
},
getSkipValue: () => store.get("skipValue") || 2,
setSkipVersion: (value) => {
setSkipVersion: value => {
store.set("skipVersion", value);
},
getSkipVersion: () => store.get("skipVersion") || "1.0",
setApi: (value) => {
setApi: value => {
store.set("hostApi", value);
},
getHostApi: () =>
......@@ -190,14 +190,14 @@ module.exports = {
apiApiHost: "https://factory.jomalls.com/api",
fileApiUrl: "https://factory.jomalls.com/upload/factory",
visionUrl: "https://console.jomalls.com",
configPath: "",
configPath: ""
},
setBoard: (version) => {
setBoard: version => {
store.set("desktoBoard", version);
},
getBoard: () => store.get("desktoBoard") || 3,
setIsOver: (value) => {
setIsOver: value => {
store.set("isOver", value);
},
getIsOver: () => store.get("isOver") || false,
......@@ -206,12 +206,12 @@ module.exports = {
if (!locationKey) return;
store.set(locationKey, version);
},
getLocation: (locationKey) => {
getLocation: locationKey => {
if (!locationKey) return "";
return store.get(locationKey) || "";
},
setDesktopDevice: (version) => {
setDesktopDevice: version => {
store.set("desktopDevice", version);
},
getDesktopDevice: () => store.get("desktopDevice") || 1,
......@@ -233,7 +233,7 @@ module.exports = {
* 批量设置订单(保留永久上限逻辑,不修改订单内部数据)
* @param {Array|Map} newData 待批量添加的订单数据
*/
setOrderInfo: (newData) => {
setOrderInfo: newData => {
let newObjArray = [];
if (newData instanceof Map) {
newObjArray = mapToArray(newData);
......@@ -245,7 +245,7 @@ module.exports = {
}
const handledArray = [];
newObjArray.forEach((item) => {
newObjArray.forEach(item => {
if (
!item ||
!item[DEFAULT_UNIQUE_KEY] ||
......@@ -263,7 +263,7 @@ module.exports = {
// 永久上限校验
if (isOriginalIdPermanentLimit(originalNewId)) {
console.warn(
`批量添加跳过:${originalNewId} 已达到永久上限 ${numLimit},无法再添加`,
`批量添加跳过:${originalNewId} 已达到永久上限 ${numLimit},无法再添加`
);
return;
}
......@@ -280,7 +280,7 @@ module.exports = {
// 上限校验
if (currentCount >= numLimit) {
console.warn(
`批量添加跳过:${originalNewId} 已达到永久上限 ${numLimit}`,
`批量添加跳过:${originalNewId} 已达到永久上限 ${numLimit}`
);
setPermanentMaxLimit(originalNewId);
return;
......@@ -303,7 +303,7 @@ module.exports = {
* 单个添加订单(保留永久上限逻辑,不修改订单内部数据)
* @param {object} newOrderObj 待添加的单个订单
*/
addToOrderInfo: (newOrderObj) => {
addToOrderInfo: newOrderObj => {
if (
typeof newOrderObj !== "object" ||
newOrderObj === null ||
......@@ -313,22 +313,28 @@ module.exports = {
return;
}
const targetQuantity =
newOrderObj.num || newOrderObj.customizedQuantity || 0;
// 统一校验:必须是 正整数
if (
typeof newOrderObj.num !== "number" ||
!Number.isInteger(newOrderObj.num) ||
newOrderObj.num <= 0
typeof targetQuantity !== "number" ||
!Number.isInteger(targetQuantity) ||
targetQuantity <= 0
) {
console.warn("添加失败:订单缺少有效num永久上限(正整数)");
console.warn(
"添加失败:订单缺少有效数量(num 或 customizedQuantity 需为正整数)"
);
return;
}
const originalNewId = newOrderObj[DEFAULT_UNIQUE_KEY];
const numLimit = newOrderObj.num;
const numLimit = targetQuantity;
// 永久上限校验
if (isOriginalIdPermanentLimit(originalNewId)) {
console.warn(
`添加失败:${originalNewId} 已达到永久上限 ${numLimit},无法再添加`,
`添加失败:${originalNewId} 已达到永久上限 ${numLimit},无法再添加`
);
return;
}
......@@ -382,7 +388,7 @@ module.exports = {
* @param {string|number} targetNewId 原始newId前缀
* @param {string} [type] 可选,订单筛选辅助类型(保留兼容)
*/
removeFromOrderInfo: (targetNewId) => {
removeFromOrderInfo: targetNewId => {
if (!targetNewId || orderCacheMap.size === 0) {
console.log(`无有效参数或缓存为空,无法执行删除`);
return;
......@@ -399,7 +405,7 @@ module.exports = {
matchedKeyWithSuffix.push({
cacheKey: cacheKey, // 保留唯一cacheKey
suffix: suffix,
order: order,
order: order
});
}
});
......@@ -411,7 +417,7 @@ module.exports = {
}
// 步骤3:核心筛选:保留「saveImgList中所有power都为true」的订单
const qualifiedOrders = matchedKeyWithSuffix.filter((item) => {
const qualifiedOrders = matchedKeyWithSuffix.filter(item => {
const { order } = item;
// 容错1:saveImgList不存在或非数组,视为不满足条件
......@@ -425,7 +431,7 @@ module.exports = {
}
// 核心判断:every() 验证所有条目都满足 power === true
return order.saveImgList.every((imgItem) => {
return order.saveImgList.every(imgItem => {
return !!imgItem && imgItem.power === true;
});
});
......@@ -433,7 +439,7 @@ module.exports = {
// 步骤4:无满足条件的订单,返回提示
if (qualifiedOrders.length === 0) {
console.log(
`未找到以${targetNewId}为前缀、且saveImgList所有power都为true的订单`,
`未找到以${targetNewId}为前缀、且saveImgList所有power都为true的订单`
);
return;
}
......@@ -447,11 +453,11 @@ module.exports = {
const originalOrderArray = store.get("orderInfo") || [];
// 先构建「本地订单数组」与「cacheKey」的映射关系(因为本地订单没有cacheKey,需要反向匹配)
const orderToCacheKeyMap = new Map();
originalOrderArray.forEach((item) => {
originalOrderArray.forEach(item => {
if (item && item[DEFAULT_UNIQUE_KEY]) {
const itemPrefix = item[DEFAULT_UNIQUE_KEY];
const samePrefixItems = originalOrderArray.filter(
(i) => i[DEFAULT_UNIQUE_KEY] === itemPrefix,
i => i[DEFAULT_UNIQUE_KEY] === itemPrefix
);
samePrefixItems.forEach((sameItem, index) => {
const itemCacheKey = `${itemPrefix}-${index + 1}`;
......@@ -463,7 +469,7 @@ module.exports = {
});
// 精准过滤:只删除「cacheKey等于toDeleteCacheKey」的订单
const newOrderArray = originalOrderArray.filter((item) => {
const newOrderArray = originalOrderArray.filter(item => {
const itemKey = JSON.stringify(item);
const itemCacheKey = orderToCacheKeyMap.get(itemKey) || "";
// 只保留「cacheKey不等于要删除的cacheKey」的订单,精准无误伤
......@@ -488,7 +494,7 @@ module.exports = {
refreshOrderCache();
console.log(
`成功删除${targetNewId}对应的订单(cacheKey:${toDeleteCacheKey},仅删除1条),缓存已更新`,
`成功删除${targetNewId}对应的订单(cacheKey:${toDeleteCacheKey},仅删除1条),缓存已更新`
);
},
......@@ -515,11 +521,11 @@ module.exports = {
const originalOrderArray = store.get("orderInfo") || [];
// 合并更新字段,不修改订单内部核心数据
const newOrderArray = originalOrderArray.map((item) => {
const newOrderArray = originalOrderArray.map(item => {
if (JSON.stringify(item) === JSON.stringify(order)) {
return {
...item,
...newOrderFields,
...newOrderFields
};
}
return item;
......@@ -530,10 +536,10 @@ module.exports = {
refreshOrderCache();
console.log(
`成功更新${targetNewId}对应的最新订单(cacheKey:${cacheKey}),缓存已更新`,
`成功更新${targetNewId}对应的最新订单(cacheKey:${cacheKey}),缓存已更新`
);
},
clearMaxLimitRecord: () => {
return store.set(MAX_LIMIT_RECORD_KEY, {});
},
}
};
......@@ -229,7 +229,7 @@ export default {
break;
}
},
async setData(data) {
async setData(data, type) {
if (!data) return this.$message.warning("请扫描生产单号/操作单号");
let params = {
id: data.id,
......@@ -256,11 +256,47 @@ export default {
}
console.log("本地数据removeFromOrderInfo:", getOrderInfoMap());
//生产完成后在本地删除
await this.$api.post(
pathMap["completeDelivery"][this.orderType],
params
);
if (
this.orderType == "OP" &&
(this.detail.status == "PENDING_PICK" ||
this.detail.status == "PENDING_REPLENISH")
) {
const { code, data } = await this.$api.post(
pathMap["scanProduce"][this.orderType],
params
);
if (code == 301) {
this.$confirm(
`<p>库存不足,无法进入生产!请联系仓库管理人员核对库存。</p>
<p>库存数量:${data.availableInventory || 0},生产中数量:${data.inventory ||
0},可调配库存:${data.inventory || 0}</p>`,
"提示",
{
confirmButtonText: "确定",
type: "error",
dangerouslyUseHTMLString: true,
// 🔥 关键:添加自定义类名
customClass: "custom-inventory-msgbox"
}
);
this.detail = "";
this.productionNo = "";
this.$refs.searchRef?.focus();
return;
}
} else {
await this.$api.post(
pathMap["completeDelivery"][this.orderType],
params
);
}
this.$message.success("操作成功");
} else {
if (type == "btn") {
const item = data.saveImgList?.find(el => !el.power);
this.$message.warning(`该订单${item.title}面未打印,无法生产完成`);
}
}
},
async sureData() {
......@@ -272,7 +308,7 @@ export default {
cancelButtonText: "取消",
type: "warning"
}).then(async () => {
await this.setData(this.detail);
await this.setData(this.detail, "btn");
});
},
clearCache() {
......@@ -562,6 +598,8 @@ export default {
}
//如果该数据的图片第一次出现且素材图大于1张则把该数据储存到本地
if (newImgList.length > 1 && !bool && this.desktopDevice == 3) {
console.log("addToOrderInfo", this.detail);
addToOrderInfo(this.detail);
console.log("本地数据addToOrderInfo", getOrderInfoMap());
}
......@@ -689,31 +727,55 @@ export default {
(this.detail.status == "PENDING_PICK" ||
this.detail.status == "PENDING_REPLENISH")
) {
const { data, code } = await this.$api.post(
pathMap["scanProduce"][this.orderType],
{ id: this.detail.id, status: this.detail.status }
);
console.log("scanProduce---------", data);
if (code == 301) {
this.$confirm(
`<p>库存不足,无法进入生产!请联系仓库管理人员核对库存。</p>
<p>库存数量:${data.availableInventory || 0},生产中数量:${data.inventory ||
0},可调配库存:${data.inventory || 0}</p>`,
"提示",
{
confirmButtonText: "确定",
type: "error",
dangerouslyUseHTMLString: true,
// 🔥 关键:添加自定义类名
customClass: "custom-inventory-msgbox"
}
);
this.detail = "";
this.productionNo = "";
this.$refs.searchRef?.focus();
return;
}
// const {
// data: checkInventoryData,
// code: checkInventoryCode
// } = await this.$api.post(pathMap["checkInventory"][this.orderType], {
// id: this.detail.id,
// status: this.detail.status
// });
// if (checkInventoryCode == 301) {
// this.$confirm(
// `<p>库存不足,无法进入生产!请联系仓库管理人员核对库存。</p>
// <p>库存数量:${checkInventoryData.availableInventory ||
// 0},生产中数量:${checkInventoryData.inventory ||
// 0},可调配库存:${checkInventoryData.inventory || 0}</p>`,
// "提示",
// {
// confirmButtonText: "确定",
// type: "error",
// dangerouslyUseHTMLString: true,
// customClass: "custom-inventory-msgbox"
// }
// );
// this.detail = "";
// this.productionNo = "";
// this.$refs.searchRef?.focus();
// return;
// }
// const { data, code } = await this.$api.post(
// pathMap["scanProduce"][this.orderType],
// { id: this.detail.id, status: this.detail.status }
// );
// if (code == 301) {
// this.$confirm(
// `<p>库存不足,无法进入生产!请联系仓库管理人员核对库存。</p>
// <p>库存数量:${data.availableInventory || 0},生产中数量:${data.inventory ||
// 0},可调配库存:${data.inventory || 0}</p>`,
// "提示",
// {
// confirmButtonText: "确定",
// type: "error",
// dangerouslyUseHTMLString: true,
// // 🔥 关键:添加自定义类名
// customClass: "custom-inventory-msgbox"
// }
// );
// this.detail = "";
// this.productionNo = "";
// this.$refs.searchRef?.focus();
// return;
// }
}
let designImagesCanvasJsonList = this.detail.drParam;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment