排产看板页面调整

dev-scheduling
zhangdi 3 months ago
parent b11ae269f1
commit 385eabf178
  1. 189
      src/views/productionSchedulingPlan/schedulingDashboard/container.vue

@ -174,14 +174,17 @@
<el-col :span="24">
<div class="info-item-txt info-item-info">
<span class="order-code" style="font-weight: 600">{{ order.woCode }}</span>
<span class="part-code">{{ order.partCode }}</span>
<span class="make-qty">{{ order.makeQty }}</span>
</div>
</el-col>
<el-col :span="24">
<div class="info-item-txt info-item-orderInfo">
<div class="info-item-content">
<span class="batch-data">{{ order.releaseDate }}</span>
<span class="batch-no">{{ order.batchNo }}</span>
<span class="make-qty">{{ order.makeQty }}</span>
<span class="product-ident">{{ order.productIdent }}</span>
<span v-if="order.priorityAps != ''" class="priority-aps">{{
order.priorityAps
@ -303,7 +306,6 @@
v-for="(task, taskIndex) in layer"
:key="taskIndex"
class="task-bar"
:class="{
'task-bar-narrow':
getWidthPercent(task.planStartTime, task.planEndTime) < 2.1,
@ -408,7 +410,7 @@
<span class="label">数量</span>
<span class="value">{{ tooltipData.makeQty || '-' }}</span>
</li>
<li class="detail-item">
<li class="detail-item">
<span class="label">计划人员</span>
<span class="value">{{ tooltipData.teamMembers || '-' }}</span>
</li>
@ -788,7 +790,7 @@ export default {
batchNo: task.batchNo,
woCode: task.woCode,
partCode: task.partCode,
cardNo: task.cardNo
cardNo: task.cardNo,
},
'*' // 生产环境建议指定父页面域名(如 "https://parent-domain.com"避免安全风险
);
@ -1075,85 +1077,101 @@ export default {
//
processData(rawData) {
const tasks = [];
const orders = [];
//
rawData.forEach(item => {
const woCode = item.woCode; //
const woTasks = item.workOrderList || []; //
//
if (woTasks.length > 0) {
const firstTask = woTasks[0];
orders.push({
woCode,
partCode: firstTask.partCode,
batchNo: firstTask.batchNo,
makeQty: firstTask.makeQty,
productIdent: firstTask.productIdent,
priorityAps: firstTask.priorityAps,
teamMembers:firstTask.teamMembers,
});
}
const orders = [];
rawData.forEach(item => {
const woCode = item.woCode;
const woTasks = item.workOrderList || [];
if (woTasks.length > 0) {
const firstTask = woTasks[0];
orders.push({
woCode,
partCode: firstTask.partCode,
batchNo: firstTask.batchNo,
makeQty: firstTask.makeQty,
productIdent: firstTask.productIdent,
priorityAps: firstTask.priorityAps,
teamMembers: firstTask.teamMembers,
releaseDate: firstTask.releaseDate, //
});
}
//
const groupedTasks = {};
woTasks.forEach(task => {
if (!groupedTasks[task.processName]) {
groupedTasks[task.processName] = [];
}
groupedTasks[task.processName].push(task);
});
// ... ...
const groupedTasks = {};
woTasks.forEach(task => {
if (!groupedTasks[task.processName]) {
groupedTasks[task.processName] = [];
}
groupedTasks[task.processName].push(task);
});
console.log(89898989, groupedTasks);
//
Object.values(groupedTasks).forEach(group => {
//
const sortedTasks = [...group].sort((a, b) => {
const aStart = this.parseTimeToHours(a.planStartTime);
const bStart = this.parseTimeToHours(b.planStartTime);
return aStart - bStart;
});
Object.values(groupedTasks).forEach(group => {
//
const sortedTasks = [...group].sort((a, b) => {
return new Date(a.planStartTime) - new Date(b.planStartTime);
});
//
const mergedTasks = [];
let currentMergedTask = null;
const mergedTasks = [];
let currentMergedTask = null;
sortedTasks.forEach(task => {
if (!currentMergedTask) {
currentMergedTask = { ...task };
} else {
const prevEndTime = new Date(currentMergedTask.planEndTime);
const currStartTime = new Date(task.planStartTime);
const currEndTime = new Date(task.planEndTime);
// <=
if (currStartTime.getTime() <= prevEndTime.getTime()) {
//
if (currEndTime.getTime() > prevEndTime.getTime()) {
currentMergedTask.planEndTime = task.planEndTime;
}
//
// currentMergedTask.makeQty += task.makeQty;
} else {
//
mergedTasks.push(currentMergedTask);
currentMergedTask = { ...task };
}
}
});
sortedTasks.forEach(task => {
if (!currentMergedTask) {
//
currentMergedTask = { ...task };
} else {
//
const prevEnd = this.parseTimeToHours(currentMergedTask.planEndTime);
const currStart = this.parseTimeToHours(task.planStartTime);
if (prevEnd === currStart) {
//
currentMergedTask.planEndTime = task.planEndTime;
} else {
//
if (currentMergedTask) {
mergedTasks.push(currentMergedTask);
currentMergedTask = { ...task };
}
}
});
//
if (currentMergedTask) {
mergedTasks.push(currentMergedTask);
}
tasks.push(...mergedTasks);
});
});
console.log(909090, tasks);
// >>>>>>>>>> <<<<<<<<<<
// 1. orders releaseDate
orders.sort((a, b) => new Date(a.releaseDate) - new Date(b.releaseDate));
// 2. woCode releaseDate
const woReleaseMap = {};
orders.forEach(order => {
woReleaseMap[order.woCode] = order.releaseDate;
});
//
tasks.push(...mergedTasks);
});
});
// 3. tasks releaseDate
tasks.sort((a, b) => {
const dateA = new Date(woReleaseMap[a.woCode] || '1970-01-01');
const dateB = new Date(woReleaseMap[b.woCode] || '1970-01-01');
return dateA - dateB;
});
// >>>>>>>>>> <<<<<<<<<<
this.allOrders = orders;
this.totalOrders = orders.length;
this.taskData = tasks;
this.allOrders = orders;
this.totalOrders = orders.length;
this.taskData = tasks;
this.updateCurrentPageOrders();
this.loading = false;
this.updateCurrentPageOrders();
this.loading = false;
},
formatHoursToTime(hours) {
const baseDate = new Date(this.baseDate);
@ -1594,7 +1612,8 @@ export default {
white-space: nowrap;
font-size: 12px;
text-align: left;
padding-left: 15px;
// padding-left: 15px;
// padding:0 10px;
}
.info-item-txt i {
font-style: normal;
@ -1602,8 +1621,8 @@ export default {
.info-item-info {
display: flex;
justify-content: space-between;
align-items: center;
padding-right: 15px;
// align-items: center;
// padding-right: 15px;
}
.info-title-cell {
@ -2031,19 +2050,26 @@ export default {
}
.info-item-content {
display: flex;
width: 100%;
// width: caclc(100% - 20px);
}
/* 左侧信息颜色区分 */
.order-code {
color: #1a73e8; /* 谷歌蓝 - 专业稳重 */
font-weight: bold;
padding-right: 15px;
padding-left: 10px;
}
.part-code {
color: #34a853; /* 谷歌绿 - 清新自然 */
font-weight: bold;
}
.batch-data {
color: #b73779; /* 谷歌黄 - 温暖明亮 */
font-weight: bold;
flex: 0 0 100px; /* 固定宽度80px,不伸缩 */
padding-left: 10px;
}
.batch-no {
color: #fbbc05; /* 谷歌黄 - 温暖明亮 */
font-weight: bold;
@ -2054,6 +2080,9 @@ export default {
color: #ea4335; /* 谷歌红 - 醒目突出 */
font-weight: bold;
flex: 1; /* 均匀分配剩余空间 */
text-align: right;
padding-right: 10px;
}
.product-ident {
@ -2065,8 +2094,8 @@ export default {
.priority-aps {
color: #ff6d01; /* 橙色 - 温暖活力 */
font-weight: bold;
flex: 0 0 90px; /* 固定宽度80px,不伸缩 */
flex: 1; /* 固定宽度80px,不伸缩 */
text-align: right;
padding-right: 15px;
padding-right: 10px;
}
</style>

Loading…
Cancel
Save