+ {{ order.releaseDate }}
{{ order.batchNo }}
- {{ order.makeQty }}
+
{{ order.productIdent }}
{{
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 @@
数量:
{{ tooltipData.makeQty || '-' }}
-
+
计划人员:
{{ tooltipData.teamMembers || '-' }}
@@ -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;
}