|
|
@@ -243,7 +243,7 @@
|
|
|
</el-tab-pane>
|
|
|
<el-tab-pane label="机台工艺调整推荐" name="t2">
|
|
|
<el-table :data="order_result_alldata" :style="{'height': result_table_height+'px'}"
|
|
|
- :cell-style="getTable2CellStyle">
|
|
|
+ :cell-style="getTable2CellStyle" :span-method="mergeCells">
|
|
|
<el-table-column label="机台号" align="center" prop="device" fixed="left" width="120px"/>
|
|
|
|
|
|
<el-table-column label="库存(T)" align="center" prop="kcl" fixed="left" width="75px">
|
|
|
@@ -258,13 +258,13 @@
|
|
|
</el-table-column>
|
|
|
<el-table-column label="预测(T)" align="center" prop="ycl" fixed="left" width="75px">
|
|
|
<template #default="scope">
|
|
|
- <span>{{ scope.row.ycl.toFixed(1) }}</span>
|
|
|
+ <span>{{ scope.row.yclSum !== undefined ? scope.row.yclSum.toFixed(1) : scope.row.ycl.toFixed(1) }}</span>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
|
|
|
<el-table-column label="超额(T)" align="center" prop="sy" fixed="left" width="75px">
|
|
|
<template #default="scope">
|
|
|
- <span>{{ scope.row.sy.toFixed(1) }}</span>
|
|
|
+ <span>{{ scope.row.sy !== undefined ? scope.row.sy.toFixed(1) : (scope.row.kcl - scope.row.xql + scope.row.ycl).toFixed(1) }}</span>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
<el-table-column label="纱线规格D" align="center">
|
|
|
@@ -381,6 +381,46 @@ export default {
|
|
|
return {};
|
|
|
}
|
|
|
|
|
|
+ // 合并单元格函数
|
|
|
+ function mergeCells({ row, column, rowIndex, columnIndex }) {
|
|
|
+ // 只对特定列进行合并:库存(kcl)、需求(xql)、预测(ycl)、超额(sy)列
|
|
|
+ // 分别对应列索引:1(库存)、2(需求)、3(预测)、4(超额)
|
|
|
+ if (columnIndex === 1 || columnIndex === 2 || columnIndex === 3 || columnIndex === 4) {
|
|
|
+ // 如果bomCode为空,则不进行合并
|
|
|
+ if (!row.bomCode) {
|
|
|
+ return [1, 1];
|
|
|
+ }
|
|
|
+
|
|
|
+ // 查找具有相同bomCode的第一行
|
|
|
+ let firstRowIndex = -1;
|
|
|
+ for (let i = 0; i <= rowIndex; i++) {
|
|
|
+ if (order_result_alldata.value[i].bomCode === row.bomCode) {
|
|
|
+ firstRowIndex = i;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 如果当前行就是第一行,则计算需要合并的行数
|
|
|
+ if (firstRowIndex === rowIndex) {
|
|
|
+ let rowspan = 1;
|
|
|
+ // 计算需要合并的行数
|
|
|
+ for (let i = rowIndex + 1; i < order_result_alldata.value.length; i++) {
|
|
|
+ if (order_result_alldata.value[i].bomCode === row.bomCode) {
|
|
|
+ rowspan++;
|
|
|
+ } else {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return [rowspan, 1];
|
|
|
+ } else {
|
|
|
+ // 如果当前行不是第一行,则返回[0, 0]表示不显示(已被合并)
|
|
|
+ return [0, 0];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 机台号和其他列不合并
|
|
|
+ return [1, 1];
|
|
|
+ }
|
|
|
+
|
|
|
function getOerderList() {
|
|
|
orderQueryState.value = 1;//开始查询订单
|
|
|
var v = {
|
|
|
@@ -390,7 +430,64 @@ export default {
|
|
|
};
|
|
|
api.GetOrderList(v).then((response) => {
|
|
|
let res = response.data;
|
|
|
- order_result_alldata.value = response.list;
|
|
|
+ // 处理order_result_alldata,合并相同bomCode的数据
|
|
|
+ if (response.list) {
|
|
|
+ // 先按bomCode分组,同时保留所有机台号
|
|
|
+ const processedData = [];
|
|
|
+ const bomCodeMap = new Map();
|
|
|
+
|
|
|
+ // 遍历所有数据
|
|
|
+ response.list.forEach(item => {
|
|
|
+ if (item.bomCode) {
|
|
|
+ if (!bomCodeMap.has(item.bomCode)) {
|
|
|
+ // 第一次出现这个bomCode,创建新的分组
|
|
|
+ const newItem = {
|
|
|
+ ...item,
|
|
|
+ originalYcl: item.ycl, // 保存原始预测值
|
|
|
+ yclSum: item.ycl, // 累加的预测值
|
|
|
+ sy: item.kcl - item.xql + item.ycl // 计算超额值
|
|
|
+ };
|
|
|
+ bomCodeMap.set(item.bomCode, {
|
|
|
+ items: [newItem],
|
|
|
+ yclSum: item.ycl
|
|
|
+ });
|
|
|
+ processedData.push(newItem);
|
|
|
+ } else {
|
|
|
+ // 已经存在这个bomCode,更新累加值
|
|
|
+ const group = bomCodeMap.get(item.bomCode);
|
|
|
+ group.yclSum += item.ycl;
|
|
|
+
|
|
|
+ // 更新所有已存在的同bomCode项的yclSum和sy值
|
|
|
+ group.items.forEach(existingItem => {
|
|
|
+ existingItem.yclSum = group.yclSum;
|
|
|
+ existingItem.sy = existingItem.kcl - existingItem.xql + group.yclSum;
|
|
|
+ });
|
|
|
+
|
|
|
+ // 添加新项
|
|
|
+ const newItem = {
|
|
|
+ ...item,
|
|
|
+ originalYcl: item.ycl,
|
|
|
+ yclSum: group.yclSum,
|
|
|
+ sy: item.kcl - item.xql + group.yclSum
|
|
|
+ };
|
|
|
+ group.items.push(newItem);
|
|
|
+ processedData.push(newItem);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // bomCode为空的项直接添加
|
|
|
+ processedData.push({
|
|
|
+ ...item,
|
|
|
+ yclSum: item.ycl,
|
|
|
+ sy: item.kcl - item.xql + item.ycl
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ order_result_alldata.value = processedData;
|
|
|
+ } else {
|
|
|
+ order_result_alldata.value = [];
|
|
|
+ }
|
|
|
+
|
|
|
if (res == null) {
|
|
|
return;
|
|
|
}
|
|
|
@@ -552,8 +649,15 @@ export default {
|
|
|
for (let index = 0; index < (ele.bomList || ele.bomlist).length; index++) {
|
|
|
const element = (ele.bomList || ele.bomlist)[index];
|
|
|
const xql = element.xql;
|
|
|
- if (boms[element.bomCode] == null) boms[element.bomCode] = {...element};
|
|
|
- else boms[element.bomCode].xql = boms[element.bomCode].xql + xql;
|
|
|
+ if (boms[element.bomCode] == null) {
|
|
|
+ boms[element.bomCode] = {...element};
|
|
|
+ } else {
|
|
|
+ // 合并相同 bomCode 的需求量
|
|
|
+ boms[element.bomCode].xql = boms[element.bomCode].xql + xql;
|
|
|
+ // 库存取第一个值,不进行累加
|
|
|
+ // 预测值(ycl)累加
|
|
|
+ boms[element.bomCode].ycl = (boms[element.bomCode].ycl || 0) + (element.ycl || 0);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
//console.log(boms)
|
|
|
@@ -653,8 +757,9 @@ export default {
|
|
|
}*/
|
|
|
for (let index = 0; index < bpb_mt_item_data.value.length; index++) {
|
|
|
const element = {...bpb_mt_item_data.value[index]};
|
|
|
- var neednum = element.need - element.storage - element.plc * days.value;
|
|
|
- element['isalarm'] = neednum > 0 ? true : false;
|
|
|
+ // 使用合并后的逻辑计算超额:库存 - 需求 + 预测
|
|
|
+ var neednum = element.storage - element.need + (element.plc * days.value);
|
|
|
+ element['isalarm'] = neednum < 0 ? true : false; // 产能不足时为负数
|
|
|
element["neednum"] = Math.abs(neednum);
|
|
|
temp2.push(element);
|
|
|
}
|
|
|
@@ -764,8 +869,15 @@ export default {
|
|
|
for (let index = 0; index < ele.bomList.length; index++) {
|
|
|
const element = ele.bomList[index];
|
|
|
const xql = element.xql;
|
|
|
- if (boms[element.bomCode] == null) boms[element.bomCode] = {...element};
|
|
|
- else boms[element.bomCode].xql = boms[element.bomCode].xql + xql;
|
|
|
+ if (boms[element.bomCode] == null) {
|
|
|
+ boms[element.bomCode] = {...element};
|
|
|
+ } else {
|
|
|
+ // 合并相同 bomCode 的需求量
|
|
|
+ boms[element.bomCode].xql = boms[element.bomCode].xql + xql;
|
|
|
+ // 库存取第一个值,不进行累加
|
|
|
+ // 预测值(ycl)累加
|
|
|
+ boms[element.bomCode].ycl = (boms[element.bomCode].ycl || 0) + (element.ycl || 0);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
//物料清单信息
|
|
|
@@ -877,6 +989,7 @@ export default {
|
|
|
result_tab_index,
|
|
|
order_result_alldata,
|
|
|
getTable2CellStyle,
|
|
|
+ mergeCells, // 添加合并单元格函数到返回对象中
|
|
|
}
|
|
|
}
|
|
|
}
|