Commit 61063624 by qinjianhui

Merge branch 'dev_Dataflow' into 'master'

Dev dataflow

See merge request !1
parents 8163590c d3669ed5
......@@ -2,7 +2,7 @@
"name": "JomallProductionAssistant",
"productName": "JomallProductionAssistant",
"description": "",
"version": "1.0.32",
"version": "1.0.33",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
......
......@@ -11,7 +11,7 @@ function startLoading() {
lock: true,
text: "拼命加载中...",
spinner: "el-icon-loading",
background: "rgba(0,0,0,.7)",
background: "rgba(0,0,0,.7)"
});
}
......@@ -25,16 +25,16 @@ axios.defaults.timeout = 12600000;
const QUERY_ORDER_API_MAP = {
CN: {
path: "factory/podJomallOrderProductCn/getProductCnByFactorySubOrderNumber",
paramKey: "factorySubOrderNumber", // 参数名:工厂子订单号
paramKey: "factorySubOrderNumber" // 参数名:工厂子订单号
},
US: {
path: "factory/podJomallOrderProductUs/getProductUsByFactorySubOrderNumber",
paramKey: "factorySubOrderNumber", // 参数名:工厂子订单号
paramKey: "factorySubOrderNumber" // 参数名:工厂子订单号
},
GC: {
path: "factory/podJomallOrderProduct/getSubOrderByThirdSubOrderNumber",
paramKey: "thirdSubOrderNumber", // 参数名:第三方子订单号(老pod)
},
paramKey: "thirdSubOrderNumber" // 参数名:第三方子订单号(老pod)
}
};
/**
* 通用查询订单接口
......@@ -53,21 +53,21 @@ export function findByPodProductionNoApi(orderNumber) {
const apiConfig = QUERY_ORDER_API_MAP[orderNumber.orderType];
if (!apiConfig) {
throw new Error(
`查询订单失败:不支持的订单类型${orderNumber.orderType},仅支持CN/US/GC`,
`查询订单失败:不支持的订单类型${orderNumber.orderType},仅支持CN/US/GC`
);
}
// 3. 构造请求参数(根据类型自动匹配参数名)
const requestParams = {
[apiConfig.paramKey]: orderNumber.thirdSubOrderNumber,
resizable: orderNumber.resizable,
resizable: orderNumber.resizable
};
// 4. 获取基地址并发送GET请求
const env = getHostApi().apiApiHost;
return axios.get(apiConfig.path, {
baseURL: env,
params: requestParams,
params: requestParams
});
}
// ===================== 素材下载相关 =====================
......@@ -97,7 +97,7 @@ export async function downloadBySubOrderNumberApi(params) {
// 4. 发送请求获取下载链接
const { data, message } = await downloadDesignImagesBaseApi(
pathMap["downloadBySubOrderNumber"][targetType],
params,
params
);
// 建议明确获取响应data(根据实际axios响应结构调整)
......@@ -113,7 +113,7 @@ export async function downloadBySubOrderNumberApi(params) {
// 6. 构建下载文件列表
const fileEnv = getHostApi().fileApiUrl;
files = files.map((el) => ({ url: `${fileEnv}${el}` }));
files = files.map(el => ({ url: `${fileEnv}${el}` }));
console.log(106, files);
const downloadFunc =
params.device === 2 ? downloadOtherImage : downloadImage;
......@@ -122,7 +122,7 @@ export async function downloadBySubOrderNumberApi(params) {
return {
code: 200,
message: "下载成功",
data: downloadResult,
data: downloadResult
};
} catch (error) {
// 统一错误处理:便于调试和用户提示
......@@ -147,21 +147,21 @@ export function completeDeliveryApi(params) {
CN: {
data: {
id: params.id,
podJomallOrderCnId: params.podJomallOrderCnId || "",
podJomallOrderCnId: params.podJomallOrderCnId || ""
},
url: "factory/podJomallOrderProductCn/completeDelivery",
url: "factory/podJomallOrderProductCn/completeDelivery"
},
US: {
data: {
id: params.id,
podJomallOrderUsId: params.podJomallOrderUsId || "",
podJomallOrderUsId: params.podJomallOrderUsId || ""
},
url: "factory/podJomallOrderProductUs/completeDelivery",
url: "factory/podJomallOrderProductUs/completeDelivery"
},
GC: {
data: { id: params.id },
url: "factory/podJomallOrderProduct/completeDelivery",
},
url: "factory/podJomallOrderProduct/completeDelivery"
}
};
// 2. 校验订单类型是否支持
......@@ -178,16 +178,16 @@ export function checkUpdate(version) {
{
params: {
businessType: "production_assistant",
version,
},
},
version
}
}
);
}
export function getAllCountryApi(thirdSubOrderNumber) {
return axios.get(`logisticsAddress/getAllCountry`, {
params: {
thirdSubOrderNumber,
},
thirdSubOrderNumber
}
});
}
......@@ -4,7 +4,7 @@ export const pathMap = {
CN: "factory/podJomallOrderProductCn/getProductCnByFactorySubOrderNumber",
US: "factory/podJomallOrderProductUs/getProductUsByFactorySubOrderNumber",
GC: "factory/podJomallOrderProduct/getSubOrderByThirdSubOrderNumber",
OP: "factory/podOrderOperation/getByOperationNo",
OP: "factory/podOrderOperation/getByOperationNo"
},
//下载素材接口
downloadBySubOrderNumber: {
......@@ -14,26 +14,33 @@ export const pathMap = {
OP: "factory/podOrderOperation/downloadDesignImages",
USHLC: "factory/podJomallOrderProductUs/downloadCompatibleDesignImages",
CNHLC: "factory/podJomallOrderProductCn/downloadCompatibleDesignImages",
OPHLC: "factory/podOrderOperation/downloadCompatibleDesignImages",
OPHLC: "factory/podOrderOperation/downloadCompatibleDesignImages"
},
//生产完成接口
completeDelivery: {
CN: "factory/podJomallOrderProductCn/completeDelivery",
US: "factory/podJomallOrderProductUs/completeDelivery",
GC: "factory/podJomallOrderProduct/completeDelivery",
OP: "factory/podOrderOperation/printerCompleteDelivery",
OP: "factory/podOrderOperation/printerCompleteDelivery"
},
//惠立彩素材下载接口
processTransparentBackground: {
CN: "factory/podJomallOrderProductCn/processTransparentBackground",
US: "factory/podJomallOrderProductUs/processTransparentBackground",
US: "factory/podJomallOrderProductUs/processTransparentBackground"
},
//判断 status 操作单状态
scanProduce: {
OP: "factory/podOrderOperation/scan-produce"
},
checkInventory: {
OP: "factory/podOrderOperation/check-inventory"
}
};
export function autoRegisterRouter(router, funcKey, handler) {
const configGroup = pathMap[funcKey];
// 遍历配置自动注册路由
Object.values(configGroup).forEach((el) => {
Object.values(configGroup).forEach(el => {
router.post(`/${el}`, (req, res) => {
handler(req, res);
});
......
......@@ -3,12 +3,12 @@ import {
downloadOtherImage,
toSend,
writeProfileXml,
copySingleImage,
copySingleImage
} from "@/server/utils";
const {
cropImageTransparentEdges,
cropTransparentEdges,
processImages,
processImages
} = require("../utils/setImage");
import axios from "axios";
import { returnLogFilePath } from "../utils/log";
......@@ -26,7 +26,7 @@ const {
getVersion,
setApi,
getHostApi,
getDesktopDevice,
getDesktopDevice
} = require("@/server/utils/store");
const { pathMap } = require("@/config/index.js");
......@@ -95,12 +95,12 @@ export default {
const response = await axios({
url: req.body.url,
method: "GET",
responseType: "stream",
responseType: "stream"
});
let fileName = uuid.v4() + ".png";
const filePath = path.join(
process.cwd(),
`./${version}/Input/` + fileName,
`./${version}/Input/` + fileName
);
const writer = fs.createWriteStream(filePath);
......@@ -109,21 +109,21 @@ export default {
writer.on("finish", () => {
res.json({
code: 200,
data: filePath,
data: filePath
});
});
writer.on("error", (err) => {
writer.on("error", err => {
res.json({
code: 500,
data: err.message,
data: err.message
});
});
} catch (error) {
console.error("Error downloading image:", error);
res.json({
code: 500,
data: error.message,
data: error.message
});
}
},
......@@ -170,7 +170,7 @@ export default {
}
const { data } = await axios.post(postUrl, [...params.ids], {
headers: { "jwt-token": token },
headers: { "jwt-token": token }
});
if (data.code !== 200) {
......@@ -193,13 +193,13 @@ export default {
let files = [path];
files = files.map((el) => ({ url: `${fileEnv}${el}` }));
files = files.map(el => ({ url: `${fileEnv}${el}` }));
const downloadFunc =
params.device === 2 ? downloadOtherImage : downloadImage;
const result = await downloadFunc(files, {
processDesignA,
processDesignB,
processDesignB
});
console.log("result200", result);
......@@ -220,7 +220,7 @@ export default {
CN: "factorySubOrderNumber",
US: "factorySubOrderNumber",
GC: "thirdSubOrderNumber",
OP: "operationNo",
OP: "operationNo"
};
let url = pathMap["findByPodProductionNo"][params.orderType];
let paramsField = fieldMap[params.orderType];
......@@ -228,9 +228,9 @@ export default {
let { data } = await axios.get(`${env}/${url}`, {
params: {
[paramsField]: params.thirdSubOrderNumber,
resizable: params.resizable,
resizable: params.resizable
},
headers: { "jwt-token": token },
headers: { "jwt-token": token }
});
res.setHeader("Act-Request-URL", `${env}/${url}`);
res.json(data);
......@@ -241,7 +241,7 @@ export default {
getCompanyList: async (req, res) => {
try {
let { data } = await axios.get(
"https://platform.jomalls.com/api/tools/getCompanyList",
"https://platform.jomalls.com/api/tools/getCompanyList"
);
res.setHeader("X-Backend-Request-URL", "api/tools/getCompanyList");
res.send(data);
......@@ -258,21 +258,21 @@ export default {
const fieldMap = {
CN: {
id: params.id,
podJomallOrderCnId: params.podJomallOrderCnId || "",
podJomallOrderCnId: params.podJomallOrderCnId || ""
},
US: {
id: params.id,
podJomallOrderUsId: params.podJomallOrderUsId || "",
podJomallOrderUsId: params.podJomallOrderUsId || ""
},
GC: { id: params.id },
OP: { ...params.data },
OP: { ...params.data }
};
let url = pathMap["completeDelivery"][params.orderType];
let postData = fieldMap[params.orderType];
try {
let { data } = await axios.post(`${env}/${url}`, postData, {
headers: { "jwt-token": token },
headers: { "jwt-token": token }
});
res.setHeader("X-Backend-Request-URL", url);
......@@ -295,7 +295,7 @@ export default {
for (let k in q.imgList) {
const p = path.join(
process.cwd(),
`./${version}/Input/` + q.imgList[k].fileName,
`./${version}/Input/` + q.imgList[k].fileName
);
zipStream.addEntry(p);
}
......@@ -307,7 +307,7 @@ export default {
// console.log("success");
res.json({
code: 200,
msg: q.productionNo + ".zip" + "已下载到桌面",
msg: q.productionNo + ".zip" + "已下载到桌面"
});
})
.on("error", () => {
......@@ -339,8 +339,8 @@ export default {
code: 200,
data: {
fileName,
url: path.join(process.cwd(), `./${version}/Input/` + fileName),
},
url: path.join(process.cwd(), `./${version}/Input/` + fileName)
}
});
}
});
......@@ -357,7 +357,7 @@ export default {
const filePath = path.join(
process.cwd(),
`./${version}/Input/${req.body.fileName}`,
`./${version}/Input/${req.body.fileName}`
);
console.log(filePath);
// 给客户端返回一个文件流 type类型
......@@ -401,7 +401,7 @@ export default {
.then(() => {
res.send({ code: 200, msg: "操作成功" });
})
.catch((err) => {
.catch(err => {
res.send({ code: 500, msg: err });
});
},
......@@ -443,7 +443,7 @@ export default {
fs.unlinkSync(from);
res.json({ code: 200, msg: "更新成功" });
})
.catch((err) => {
.catch(err => {
res.json({ code: 500, msg: err.message });
});
});
......@@ -535,17 +535,17 @@ export default {
res.send({ code: 500, err });
} else {
let list = [];
files.files.forEach((file) => {
files.files.forEach(file => {
let fileName = uuid.v4() + ".png";
fs.renameSync(file.path, path.join(p, fileName));
list.push({
fileName,
url: path.join(process.cwd(), `./${version}/Input/` + fileName),
url: path.join(process.cwd(), `./${version}/Input/` + fileName)
});
});
res.json({
code: 200,
data: list,
data: list
});
}
});
......@@ -591,7 +591,7 @@ export default {
try {
let { data } = await axios.get(`${env}/${url}`, {
params: postData,
headers: { "jwt-token": token },
headers: { "jwt-token": token }
});
console.log("processTransparentBackground", data);
if (data.message) {
......@@ -600,7 +600,7 @@ export default {
let files = data.data || [data.message];
files = files.map((el) => ({ url: `${fileEnv}${el}` }));
files = files.map(el => ({ url: `${fileEnv}${el}` }));
console.log("processTransparentBackground,files", files);
const result = await downloadImage(files);
......@@ -611,4 +611,46 @@ export default {
res.json({ code: 500, msg: err });
}
},
scanProduce: async (req, res) => {
env = getHostApi().apiApiHost;
const token = req.headers["jwt-token"];
const params = req.body;
let url = "factory/podOrderOperation/scan-produce";
console.log("scanProduce", `${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("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 });
}
}
};
......@@ -25,7 +25,7 @@ router.post("/downloadByDesignId", fn.downloadByDesignId);
autoRegisterRouter(
router,
"downloadBySubOrderNumber",
fn.downloadBySubOrderNumber,
fn.downloadBySubOrderNumber
);
// 提交生产完成
autoRegisterRouter(router, "completeDelivery", fn.completeDelivery);
......@@ -61,6 +61,11 @@ autoRegisterRouter(router, "findByPodProductionNo", fn.findByPodProductionNo);
autoRegisterRouter(
router,
"processTransparentBackground",
fn.processTransparentBackground,
fn.processTransparentBackground
);
//操作单状态
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, {});
},
}
};
......@@ -5,7 +5,7 @@ import { Loading } from "element-ui";
// create an axios instance
const service = axios.create({
baseURL: "http://localhost:3000", // url = base url + request url
timeout: 12600000, // request timeout
timeout: 12600000 // request timeout
});
let loading;
......@@ -14,7 +14,7 @@ function startLoading() {
lock: true,
text: "拼命加载中...",
spinner: "el-icon-loading",
background: "rgba(0,0,0,.7)",
background: "rgba(0,0,0,.7)"
});
}
......@@ -24,7 +24,7 @@ function endLoading() {
// Add a request interceptor
service.interceptors.request.use(
(config) => {
config => {
const user = Vue.prototype.$dataStore.get("user");
if (user) {
config.headers["jwt-token"] = user.token;
......@@ -32,32 +32,30 @@ service.interceptors.request.use(
startLoading();
return config;
},
(error) => {
error => {
endLoading();
// do something with request error
return Promise.reject(error);
},
}
);
// Add a response interceptor
service.interceptors.response.use(
async (response) => {
async response => {
// do something with response data
const res = response.data;
endLoading();
if (res.code) {
if (res.code !== 200) {
if (res.code === 411) {
return Promise.resolve(res);
}
if (res.code === 205) {
if (res.code === 411 || res.code === 205 || res.code === 301) {
return Promise.resolve(res);
}
if (res.code === 403) {
Vue.prototype.$dataStore.delete("user");
Vue.prototype.$message.error({
showClose: true,
message: res.msg || res.message || "Error",
message: res.msg || res.message || "Error"
});
setTimeout(() => {
location.reload();
......@@ -72,7 +70,7 @@ service.interceptors.response.use(
}
Vue.prototype.$message.error({
showClose: true,
message: res.msg || res.message || "Error",
message: res.msg || res.message || "Error"
});
// reject
return Promise.reject(new Error(res.msg || res.message || "Error"));
......@@ -82,11 +80,11 @@ service.interceptors.response.use(
}
return Promise.resolve(res);
},
(error) => {
error => {
endLoading();
// do something with response error
return Promise.reject(error);
},
}
);
export default service;
......
......@@ -26,7 +26,7 @@ const {
setOrderInfo,
getLocation,
setNowDate,
getNowDate,
getNowDate
} = require("@/server/utils/store");
export default {
......@@ -35,11 +35,11 @@ export default {
user: {
default: () => ({
avatar: "",
factory: {},
factory: {}
}),
type: Object,
type: Object
},
factoryType: { type: String, default: "CN" },
factoryType: { type: String, default: "CN" }
},
data() {
return {
......@@ -51,25 +51,25 @@ export default {
cacheList: [
{
label: "清除当前登录信息",
value: "token",
value: "token"
},
{
label: "登录记录",
value: "userList",
value: "userList"
},
{
label: "打印预设",
value: "print-setting",
value: "print-setting"
},
{
label: "系统设置",
value: "setting",
},
value: "setting"
}
],
selectGridIndex: 0,
pkg,
actionIndex: -1,
isAutoFinish: true,
// isAutoFinish: true,
isForcedProduction: false,
cacheVisible: false,
showPrintDialog: false,
......@@ -81,7 +81,7 @@ export default {
unit: "inch",
language: "cn",
autoPrint: false,
gridSpacing: 1,
gridSpacing: 1
},
detail: null,
config: getHostApi(),
......@@ -102,11 +102,12 @@ export default {
"hsva(120, 40, 94, 0.5)",
"hsl(181, 100%, 37%)",
"hsla(209, 100%, 56%, 0.73)",
"#c7158577",
"#c7158577"
],
faceType: "A",
dialogVisible: false,
showforcedProduc: false,
completingOrderId: null
};
},
computed: {
......@@ -119,8 +120,8 @@ export default {
"countryList",
"orderType",
"grid",
"imgList",
]),
"imgList"
])
},
mounted() {
// console.log(pkg, "pkg");
......@@ -151,14 +152,14 @@ export default {
bus.$emit("busEmit", { type: "updateSystemSetting" });
},
deep: true,
deep: true
},
config: {
handler(val) {
this.newApiApiHost = this.getDomainFromUrl(val.apiApiHost);
},
immediate: true,
deep: true,
deep: true
},
desktopDevice() {
this.checked = false;
......@@ -168,19 +169,19 @@ export default {
handler(value) {
if (this.detail && value?.length && this.desktopDevice === 3) {
const item = this.detail?.saveImgList?.find(
(el) => el.fileName == value[0].fileName,
el => el.fileName == value[0].fileName
);
if (item) {
if (item && !item.power) {
item.power = true;
try {
//复制图片到当前文件夹下
copySingleImage(
item.productionFile,
getLocation("downloadLocation1"),
getLocation("downloadLocation1")
);
copySingleImage(
item.productionFile,
getLocation("downloadLocation2"),
getLocation("downloadLocation2")
);
} catch (error) {
this.$message.error("发送失败");
......@@ -189,17 +190,25 @@ export default {
}
//更新数据到本地数据
updateOrderInfoItem(this.detail.newId, this.detail, this.faceType);
this.checkAndCompleteProduction(this.detail);
}
console.log("updateOrderInfoItemitem", item);
console.log("本地数据updateOrderInfoItem:", getOrderInfoMap());
}
},
}
// deep: true,
},
"detail.saveImgList": {
handler(list) {
if (this.desktopDevice !== 3 || !this.detail || !list?.length) return;
this.checkAndCompleteProduction(this.detail);
},
deep: true
}
},
methods: {
checkUpdate() {
this.$refs.updateDialog.checkUpdate().then((data) => {
this.$refs.updateDialog.checkUpdate().then(data => {
if (data) {
// 有新版本更新
this.$refs.updateDialog.open(data, 2);
......@@ -214,7 +223,7 @@ export default {
this.$confirm("是否退出登录?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
type: "warning"
})
.then(() => {
this.$dataStore.delete("user");
......@@ -229,11 +238,38 @@ export default {
break;
}
},
async setData(data) {
canCompleteProduction(data) {
if (!data) return false;
if (this.desktopDevice !== 3) return true;
const list = data?.saveImgList;
if (!list?.length) return false;
return list.every(el => el.power);
},
checkAndCompleteProduction(data) {
if (this.desktopDevice !== 3 || !this.canCompleteProduction(data)) return;
this.setData(data);
},
// 扫码后直接调用scanProduce转至生产中(惠立彩需确保所有面下载完成)
// 点击生产完成按钮,调用completeDelivery转至待配货
async setData(data, type) {
if (!data) return this.$message.warning("请扫描生产单号/操作单号");
if (!this.canCompleteProduction(data)) {
if (type == "btn") {
const item = data.saveImgList?.find(el => !el.power);
this.$message.warning(
`该订单${item?.title || ""}面未打印,无法生产完成`
);
}
return;
}
if (this.completingOrderId === data.id) return;
this.completingOrderId = data.id;
let params = {
id: data.id,
orderType: this.orderType,
orderType: this.orderType
};
if (this.orderType === "CN") {
params.podJomallOrderCnId = data.podJomallOrderCnId;
......@@ -242,25 +278,70 @@ export default {
} else if (this.orderType === "OP") {
params.data = { ...data };
}
//如果为惠立彩则判断当前saveImgList字段中的power是否全是true 是则生产完成
const canCallApi =
this.desktopDevice != 3 ||
(data.saveImgList?.every((el) => el.power) ?? false);
if (canCallApi) {
try {
console.log("生产完成");
if (this.desktopDevice == 3) {
console.log("本地数据removeFromOrderInfo:", getOrderInfoMap());
if (type == "btn") {
await this.$api.post(
pathMap["completeDelivery"][this.orderType],
params
);
await removeFromOrderInfo(data.newId);
bus.$emit("busEmit", { value: data.newId, type: "completeMessage" });
bus.$emit("busEmit", {
value: data.newId,
type: "completeMessage"
});
} else if (this.orderType == "OP") {
bus.$emit("busEmit", {
value: data.newId,
type: "productingMessage"
});
const { code, data: resData } = await this.$api.post(
pathMap["scanProduce"][this.orderType],
{ id: params.id, status: params.data.status }
);
if (code == 301) {
this.$confirm(
`${
resData.thirdSkuCode
}库存不足,无法进入生产!请联系仓库管理人员核对库存。</br>
库存数量:${resData.availableInventory || 0}
生产中数量:${resData.inventory || 0}
<span style="color: red;">可调配库存:
${resData.inventory || 0}</span>`,
"提示",
{
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
);
if (this.desktopDevice == 3) {
await removeFromOrderInfo(data.newId);
bus.$emit("busEmit", {
value: data.newId,
type: "completeMessage"
});
}
}
console.log("本地数据removeFromOrderInfo:", getOrderInfoMap());
//生产完成后在本地删除
await this.$api.post(
pathMap["completeDelivery"][this.orderType],
params,
);
this.$message.success("操作成功");
} finally {
this.completingOrderId = null;
}
},
async sureData() {
......@@ -270,9 +351,9 @@ export default {
this.$confirm(`确定生产完成?`, "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
type: "warning"
}).then(async () => {
await this.setData(this.detail);
await this.setData(this.detail, "btn");
});
},
clearCache() {
......@@ -282,15 +363,15 @@ export default {
this.$confirm("是否确定清除?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
type: "warning"
})
.then(() => {
for (let k of this.checkList) {
if (k === "print-setting" || k === "deviceId") {
let list = Object.keys(this.$dataStore.store).filter((el) =>
el.includes(k),
let list = Object.keys(this.$dataStore.store).filter(el =>
el.includes(k)
);
list.forEach((el) => {
list.forEach(el => {
this.$dataStore.delete(el);
});
} else if (k === "token") {
......@@ -311,9 +392,9 @@ export default {
try {
axios
.get(item?.src, {
responseType: "blob",
responseType: "blob"
})
.then((res) => {
.then(res => {
var url = URL.createObjectURL(res.data);
let img = new Image();
img.crossorigin = "";
......@@ -334,7 +415,7 @@ export default {
resolve();
};
})
.catch((e) => {
.catch(e => {
console.log(e);
reject(e);
});
......@@ -362,7 +443,7 @@ export default {
const { canvasWidth, canvasHeight, list: drawItems } = canvasConfig;
if (!canvasWidth || !canvasHeight || !Array.isArray(drawItems)) {
throw new Error(
"canvas配置项必须包含canvasWidth/canvasHeight/list(数组)属性",
"canvas配置项必须包含canvasWidth/canvasHeight/list(数组)属性"
);
}
......@@ -373,8 +454,8 @@ export default {
canvas.height = canvasHeight;
// 批量执行绘制方法,收集异步绘制Promise(语义化变量名,替代原模糊的list)
const drawPromises = drawItems.map((drawItem) =>
this.drawImage(canvas, drawItem),
const drawPromises = drawItems.map(drawItem =>
this.drawImage(canvas, drawItem)
);
// 等待当前canvas的所有绘制操作完成
await Promise.all(drawPromises);
......@@ -415,7 +496,7 @@ export default {
async hasDesignImagesCanvasJsonList(
designImagesCanvasJsonList,
bool,
isForcedProduction,
isForcedProduction
) {
let imageResList = [];
......@@ -498,13 +579,13 @@ export default {
device: this.desktopDevice,
orderType: this.orderType,
forceProduction:
this.isForcedProduction || isForcedProduction || false,
},
this.isForcedProduction || isForcedProduction || false
}
);
console.log("downloadBySubOrderNumber", res);
if (!res.data.length) return this.$message.warning("未找到素材图!");
res.data.forEach((el) => {
res.data.forEach(el => {
imageResList = imageResList.concat(el.list || []);
});
} catch (error) {
......@@ -517,7 +598,7 @@ export default {
if (this.checked) {
imageResList = await this.cutImgFn(imageResList);
imageResList.forEach((el) => {
imageResList.forEach(el => {
el.isCut = true;
});
}
......@@ -540,7 +621,7 @@ export default {
let obj = {
type: "sendFile",
value: [...newImgList],
productMark: this.detail.productMark,
productMark: this.detail.productMark
};
if (
......@@ -550,18 +631,20 @@ export default {
) {
obj.size = {
width: this.detail.mssWidth,
height: this.detail.mssHeight,
height: this.detail.mssHeight
};
}
//设置储存图片的字段,并添加power标识
if (!this.detail["saveImgList"]?.length) {
this.detail["saveImgList"] = [...newImgList].map((el) => {
this.detail["saveImgList"] = [...newImgList].map(el => {
el.power = false;
return { ...el };
});
}
//如果该数据的图片第一次出现且素材图大于1张则把该数据储存到本地
if (newImgList.length > 1 && !bool && this.desktopDevice == 3) {
console.log("addToOrderInfo", this.detail);
addToOrderInfo(this.detail);
console.log("本地数据addToOrderInfo", getOrderInfoMap());
}
......@@ -575,54 +658,29 @@ export default {
},
async getDataInfo(e, isForcedProduction) {
//查询后先检查当前是否有数据,有则先走生产完成
if (
this.detail &&
Object.keys(this.detail).length > 0 &&
this.isAutoFinish
) {
try {
await this.setData(this.detail);
} catch (err) {
console.error("setData 执行失败", err);
}
}
if (this.detail && !this.isAutoFinish && this.desktopDevice == 3) {
//惠立彩判断是否全部图片都已经打印完成
const canCallApi =
this.detail.saveImgList?.every((el) => el.power) ?? false;
if (canCallApi) {
bus.$emit("busEmit", {
value: this.detail.newId,
type: "completeFail",
});
}
}
//判断生产单号是否为空
if (this.productionNo === "")
return this.$message.warning("请录入生产单号/操作单号");
const today = moment(new Date()).format("YYYY-MM-DD");
// const today = moment(new Date()).format("YYYY-MM-DD");
//判断上一单未勾选添加当天日期是否跳过
if (!this.isAutoFinish && today != getNowDate()) {
this.$confirm("请注意自动完成上一单未勾选", "提示", {
confirmButtonText: "跳过提示",
type: "warning",
}).then((res) => {
if (res == "confirm") {
setNowDate(today);
}
});
}
// if (!this.isAutoFinish && today != getNowDate()) {
// this.$confirm("请注意自动完成上一单未勾选", "提示", {
// confirmButtonText: "跳过提示",
// type: "warning"
// }).then(res => {
// if (res == "confirm") {
// setNowDate(today);
// }
// });
// }
//判断生产单号是US CN GC(老pod),并设置 setOrderType
if (this.productionNo.includes("_")) {
this.$store.commit(
"setOrderType",
this.classifyField(this.productionNo),
this.classifyField(this.productionNo)
);
} else {
let str;
......@@ -645,7 +703,7 @@ export default {
const apiRequestParams = {
thirdSubOrderNumber: this.productionNo,
orderType: this.orderType,
resizable: this.desktopDevice == 3 ? true : false,
resizable: this.desktopDevice == 3 ? true : false
};
//判断是否为惠立彩
......@@ -658,12 +716,12 @@ export default {
localItem ||
(await this.$api.post(
pathMap["findByPodProductionNo"][this.orderType],
apiRequestParams,
apiRequestParams
));
} else {
findByPodProductionNo = await this.$api.post(
pathMap["findByPodProductionNo"][this.orderType],
apiRequestParams,
apiRequestParams
);
}
......@@ -673,24 +731,79 @@ export default {
this.detail["newId"] = this.productionNo;
}
if (
this.orderType == "OP" &&
(this.detail.productMark == "custom_normal" ||
this.detail.productMark == "normal")
) {
this.detail = "";
const err = new Error();
err.data = "GCB类的操作单无效操作!!!";
throw err;
}
if (
this.orderType == "OP" &&
(this.detail.status == "PENDING_PICK" ||
this.detail.status == "PENDING_REPLENISH")
) {
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(
`${
checkInventoryData?.thirdSkuCode
}库存不足,无法进入生产!请联系仓库管理人员核对库存。</br>
库存数量:${checkInventoryData.availableInventory || 0},
生产中数量:${checkInventoryData.inventory || 0},
<span style="color: red;">可调配库存:
${checkInventoryData.inventory || 0}</span>`,
"提示",
{
confirmButtonText: "确定",
type: "error",
dangerouslyUseHTMLString: true,
// 🔥 关键:添加自定义类名
customClass: "custom-inventory-msgbox"
}
);
this.detail = "";
this.productionNo = "";
this.$refs.searchRef?.focus();
return;
}
}
let designImagesCanvasJsonList = this.detail.drParam;
//获取下载素材
await this.hasDesignImagesCanvasJsonList(
designImagesCanvasJsonList,
this.desktopDevice === 3 ? (localItem ? true : false) : false,
isForcedProduction,
isForcedProduction
);
this.$store.commit("setProductDetail", this.detail);
if (this.desktopDevice !== 3) {
await this.setData(this.detail);
} else {
this.checkAndCompleteProduction(this.detail);
}
ipcRenderer.send("win-subScreen", findByPodProductionNo.data);
this.$dataStore.set("production_no", this.productionNo);
this.productionNo = "";
this.$refs.searchRef?.focus();
} catch (err) {
console.log(err);
console.log(723, err);
if (!err.data) {
this.$message.error(
"未使用英文输入法输入/扫码,或该生产单号未拣胚或已完成",
"未使用英文输入法输入/扫码,或该生产单号未拣胚或已完成"
);
} else {
this.$message.error(err.data);
}
this.productionNo = "";
this.$refs.searchRef?.focus();
......@@ -726,7 +839,7 @@ export default {
unit: "mm",
language: "cn",
autoPrint: false,
gridSpacing: 10,
gridSpacing: 10
};
this.$message.success("重置应用程序设置成功");
},
......@@ -747,8 +860,8 @@ export default {
formData.append("file", f);
let { data } = await this.$api.post("/uploadImage", formData, {
headers: {
"Content-Type": "application/x-www-form-urlencoded",
},
"Content-Type": "application/x-www-form-urlencoded"
}
});
bus.$emit("busEmit", { type: "uploadImage", value: data });
return false;
......@@ -768,7 +881,7 @@ export default {
this.$store.commit("updateSystemSetting", {
field: "gridValue",
value: this.grid[i],
value: this.grid[i]
});
bus.$emit("busEmit", { type: "grid", value: this.grid[i] });
},
......@@ -810,7 +923,7 @@ export default {
const outputPath = path.join(outputDir, outputFileName);
const params = {
inputPath: el.productionFile,
outputPath: outputPath,
outputPath: outputPath
};
let res;
res = await this.$api.post("/processImage", params);
......@@ -818,18 +931,18 @@ export default {
return {
fileName: outputFileName,
productionFile: res.msg[0]?.outputPath,
designId: el.designId || index,
designId: el.designId || index
};
} catch (error) {
console.error(`处理失败: ${el.productionFile}`, error);
}
}),
})
);
// 等待所有异步操作完成
await new Promise((resolve) => setTimeout(resolve, 100));
const newMap = new Map(processQueue.map((el) => [el.designId, el]));
processQueue.forEach((el) => {
await new Promise(resolve => setTimeout(resolve, 100));
const newMap = new Map(processQueue.map(el => [el.designId, el]));
processQueue.forEach(el => {
if (newMap.has(el.designId)) {
el.fileName = newMap.get(el.designId).fileName;
el.productionFile = newMap.get(el.designId).productionFile;
......@@ -844,7 +957,7 @@ export default {
},
getCountryName(code) {
if (code) {
const item = this.countryList?.find((el) => el.countryCode == code);
const item = this.countryList?.find(el => el.countryCode == code);
if (item) {
return `(${item.nameCn})`;
}
......@@ -877,8 +990,8 @@ export default {
this.detail = null;
this.$store.commit("setProductDetail", {});
this.dialogVisible = false;
},
},
}
}
};
</script>
<style scoped>
......@@ -990,7 +1103,7 @@ export default {
<el-form-item prop="setting" label="网格显示">
<el-select
style="width:100%"
@change="(e) => settingChange('gridShow', e)"
@change="e => settingChange('gridShow', e)"
clearable
v-model="setting.gridShow"
>
......@@ -1001,7 +1114,7 @@ export default {
<el-form-item prop="gridSpacing" label="单位">
<el-select
style="width:100%"
@change="(e) => settingChange('unit', e)"
@change="e => settingChange('unit', e)"
clearable
v-model="setting.unit"
>
......@@ -1012,7 +1125,7 @@ export default {
<el-form-item prop="gridSpacing" label="网格间隔">
<el-select
style="width:100%"
@change="(e) => settingChange('gridSpacing', e)"
@change="e => settingChange('gridSpacing', e)"
clearable
v-model="setting.gridSpacing"
>
......@@ -1041,7 +1154,7 @@ export default {
<el-form-item prop="language" label="语言设置">
<el-select
style="width:100%"
@change="(e) => settingChange('language', e)"
@change="e => settingChange('language', e)"
clearable
v-model="setting.language"
>
......@@ -1107,7 +1220,7 @@ export default {
</el-button>
</div>
<div style="margin-left: 10px;">
<el-checkbox v-model="isAutoFinish">自动完成上一单</el-checkbox>
<!-- <el-checkbox v-model="isAutoFinish">自动完成上一单</el-checkbox> -->
</div>
<div style="margin-left: 10px;" v-if="desktopDevice == 3">
<el-checkbox v-model="isForcedProduction" style="color: red;"
......@@ -1133,7 +1246,7 @@ export default {
{{
user.factory.countryCode
? `${user.factory.countryCode}${getCountryName(
user.factory.countryCode,
user.factory.countryCode
)}`
: "CN(中国)"
}}
......@@ -1211,7 +1324,7 @@ export default {
>
<el-button
v-if="!showforcedProduc"
@click="(e) => forcedProductionFN(e, true)"
@click="e => forcedProductionFN(e, true)"
style="color: red;"
>自动强制生产</el-button
>
......@@ -1348,3 +1461,10 @@ export default {
}
}
</style>
<style>
.custom-inventory-msgbox {
width: 500px !important; /* 必须加 !important 覆盖默认样式 */
min-width: 500px !important; /* 防止被最小宽度限制 */
}
</style>
......@@ -1228,7 +1228,7 @@ export default {
`订单:${this.detail.newId}`,
`<strong>订单:${this.detail.newId}</strong>`
)
.replace(/生产中/, '<span style="color:#E6A23C">生产中</span>')
.replace(/生产完成/, '<span style="color:#85ce61">生产完成</span>')
.replace(/未生产完成/, '<span style="color:#f56c79">未生产完成</span>');
},
......@@ -1268,6 +1268,10 @@ export default {
let { type, value, size, productMark } = v;
switch (type) {
case "productingMessage":
this.logList.unshift(`订单:${value}生产中`);
this.localeData = getOrderInfoMap();
break;
case "completeMessage":
this.logList.unshift(`订单:${value}生产完成`);
this.localeData = getOrderInfoMap();
......
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