|
|
|
@ -35,7 +35,12 @@ |
|
|
|
</el-col> |
|
|
|
</el-col> |
|
|
|
<el-col :span="6"> |
|
|
|
<el-col :span="6"> |
|
|
|
<el-form-item label="时间:"> |
|
|
|
<el-form-item label="时间:"> |
|
|
|
<el-date-picker v-model="formLabelAlign.startTime" type="date" placeholder="选择日期"> |
|
|
|
<el-date-picker |
|
|
|
|
|
|
|
v-model="formLabelAlign.startTime" |
|
|
|
|
|
|
|
type="date" |
|
|
|
|
|
|
|
value-format="YYYY-MM-DD" |
|
|
|
|
|
|
|
placeholder="选择日期" |
|
|
|
|
|
|
|
> |
|
|
|
</el-date-picker> |
|
|
|
</el-date-picker> |
|
|
|
</el-form-item> |
|
|
|
</el-form-item> |
|
|
|
</el-col> |
|
|
|
</el-col> |
|
|
|
@ -211,27 +216,27 @@ |
|
|
|
> |
|
|
|
> |
|
|
|
<div class="tooltip-content"> |
|
|
|
<div class="tooltip-content"> |
|
|
|
<!-- 工单标题 --> |
|
|
|
<!-- 工单标题 --> |
|
|
|
<div class="wo-code-title" v-if="searchType=='1'">{{ tooltipData.woCode }}</div> |
|
|
|
<div class="wo-code-title" v-if="searchType == '1'">{{ tooltipData.woCode }}</div> |
|
|
|
<div class="wo-code-title" v-if="searchType=='2'">{{ tooltipData.teamName }}</div> |
|
|
|
<div class="wo-code-title" v-if="searchType == '2'">{{ tooltipData.teamName }}</div> |
|
|
|
<div class="wo-code-title" v-if="searchType=='3'">{{ tooltipData.equipName }}</div> |
|
|
|
<div class="wo-code-title" v-if="searchType == '3'">{{ tooltipData.equipName }}</div> |
|
|
|
|
|
|
|
|
|
|
|
<!-- 详情列表 --> |
|
|
|
<!-- 详情列表 --> |
|
|
|
<ul class="detail-list"> |
|
|
|
<ul class="detail-list"> |
|
|
|
<li class="detail-item" v-if="searchType=='1'"> |
|
|
|
<li class="detail-item" v-if="searchType == '1'"> |
|
|
|
<span class="label">工序:</span> |
|
|
|
<span class="label">工序:</span> |
|
|
|
<span class="value">{{ tooltipData.processName || '-' }}</span> |
|
|
|
<span class="value">{{ tooltipData.processName || '-' }}</span> |
|
|
|
</li> |
|
|
|
</li> |
|
|
|
<li class="detail-item" v-if="searchType=='1'"> |
|
|
|
<li class="detail-item" v-if="searchType == '1'"> |
|
|
|
<span class="label">班组:</span> |
|
|
|
<span class="label">班组:</span> |
|
|
|
<span class="value">{{ tooltipData.teamName || '-' }}</span> |
|
|
|
<span class="value">{{ tooltipData.teamName || '-' }}</span> |
|
|
|
</li> |
|
|
|
</li> |
|
|
|
<li class="detail-item" v-if="searchType=='2'||searchType=='3'"> |
|
|
|
<li class="detail-item" v-if="searchType == '2' || searchType == '3'"> |
|
|
|
<span class="label">车间订单号:</span> |
|
|
|
<span class="label">车间订单号:</span> |
|
|
|
<span class="value">{{ tooltipData.woCode || '-' }}</span> |
|
|
|
<span class="value">{{ tooltipData.woCode || '-' }}</span> |
|
|
|
</li> |
|
|
|
</li> |
|
|
|
<li class="detail-item"> |
|
|
|
<li class="detail-item"> |
|
|
|
<span class="label">计划开始时间:</span> |
|
|
|
<span class="label">计划开始时间:</span> |
|
|
|
<span class="value">{{tooltipData.planStartTime || '-' }}</span> |
|
|
|
<span class="value">{{ tooltipData.planStartTime || '-' }}</span> |
|
|
|
</li> |
|
|
|
</li> |
|
|
|
<li class="detail-item"> |
|
|
|
<li class="detail-item"> |
|
|
|
<span class="label">实际开始时间:</span> |
|
|
|
<span class="label">实际开始时间:</span> |
|
|
|
@ -239,7 +244,7 @@ |
|
|
|
</li> |
|
|
|
</li> |
|
|
|
<li class="detail-item"> |
|
|
|
<li class="detail-item"> |
|
|
|
<span class="label">计划完成时间:</span> |
|
|
|
<span class="label">计划完成时间:</span> |
|
|
|
<span class="value">{{tooltipData.planEndTime || '-' }}</span> |
|
|
|
<span class="value">{{ tooltipData.planEndTime || '-' }}</span> |
|
|
|
</li> |
|
|
|
</li> |
|
|
|
<li class="detail-item"> |
|
|
|
<li class="detail-item"> |
|
|
|
<span class="label">实际完成时间:</span> |
|
|
|
<span class="label">实际完成时间:</span> |
|
|
|
@ -248,9 +253,7 @@ |
|
|
|
<li class="detail-item"> |
|
|
|
<li class="detail-item"> |
|
|
|
<span class="label">状态:</span> |
|
|
|
<span class="label">状态:</span> |
|
|
|
<span class="value"> |
|
|
|
<span class="value"> |
|
|
|
<el-tag :type="tooltipData.status">{{ |
|
|
|
<el-tag :type="tooltipData.status">{{ tooltipData.status || '未知' }}</el-tag> |
|
|
|
tooltipData.status || '未知' |
|
|
|
|
|
|
|
}}</el-tag> |
|
|
|
|
|
|
|
</span> |
|
|
|
</span> |
|
|
|
</li> |
|
|
|
</li> |
|
|
|
</ul> |
|
|
|
</ul> |
|
|
|
@ -270,7 +273,7 @@ export default { |
|
|
|
searchType: '', |
|
|
|
searchType: '', |
|
|
|
formLabelAlign: { |
|
|
|
formLabelAlign: { |
|
|
|
type: '1', //维度类型 |
|
|
|
type: '1', //维度类型 |
|
|
|
startTime: '', //时间 |
|
|
|
startTime: null, //时间 |
|
|
|
teamName: '', //班组 |
|
|
|
teamName: '', //班组 |
|
|
|
equipName: '', //设备 |
|
|
|
equipName: '', //设备 |
|
|
|
woCode: '', //车间订单号 |
|
|
|
woCode: '', //车间订单号 |
|
|
|
@ -313,6 +316,7 @@ export default { |
|
|
|
}, |
|
|
|
}, |
|
|
|
mounted() { |
|
|
|
mounted() { |
|
|
|
this.searchType = this.formLabelAlign.type; |
|
|
|
this.searchType = this.formLabelAlign.type; |
|
|
|
|
|
|
|
this.formLabelAlign.startTime = new Date().toISOString().substr(0, 10); |
|
|
|
this.getData(); |
|
|
|
this.getData(); |
|
|
|
}, |
|
|
|
}, |
|
|
|
methods: { |
|
|
|
methods: { |
|
|
|
@ -474,6 +478,49 @@ export default { |
|
|
|
hideTooltip() { |
|
|
|
hideTooltip() { |
|
|
|
this.tooltipVisible = false; |
|
|
|
this.tooltipVisible = false; |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
// 在methods中添加处理重叠任务的方法 |
|
|
|
|
|
|
|
getLayeredTasks(device) { |
|
|
|
|
|
|
|
const tasks = this.getDeviceTasks(device); |
|
|
|
|
|
|
|
if (!tasks.length) return []; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 按开始时间排序 |
|
|
|
|
|
|
|
const sortedTasks = [...tasks].sort((a, b) => { |
|
|
|
|
|
|
|
return this.timeToMinutes(a.startTime) - this.timeToMinutes(b.startTime); |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const layers = []; |
|
|
|
|
|
|
|
sortedTasks.forEach(task => { |
|
|
|
|
|
|
|
// 尝试找到可以放置当前任务的层级 |
|
|
|
|
|
|
|
let placed = false; |
|
|
|
|
|
|
|
for (let i = 0; i < layers.length; i++) { |
|
|
|
|
|
|
|
const lastTask = layers[i][layers[i].length - 1]; |
|
|
|
|
|
|
|
if (this.timeToMinutes(task.startTime) >= this.timeToMinutes(lastTask.endTime)) { |
|
|
|
|
|
|
|
layers[i].push(task); |
|
|
|
|
|
|
|
placed = true; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (!placed) { |
|
|
|
|
|
|
|
layers.push([task]); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return layers; |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 计算任务所在层级的垂直偏移 |
|
|
|
|
|
|
|
getLayerOffset(layerIndex, totalLayers) { |
|
|
|
|
|
|
|
if (totalLayers <= 1) return 0; |
|
|
|
|
|
|
|
// 每层高度 = 行高 / 总层数 |
|
|
|
|
|
|
|
const layerHeight = this.rowHeight / totalLayers; |
|
|
|
|
|
|
|
return layerIndex * layerHeight + 2; // 加2px间距 |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 计算任务在层级中的高度 |
|
|
|
|
|
|
|
getLayerTaskHeight(totalLayers) { |
|
|
|
|
|
|
|
if (totalLayers <= 1) return this.rowHeight - 4; // 减4px间距 |
|
|
|
|
|
|
|
return this.rowHeight / totalLayers - 4; |
|
|
|
|
|
|
|
}, |
|
|
|
}, |
|
|
|
}, |
|
|
|
}; |
|
|
|
}; |
|
|
|
</script> |
|
|
|
</script> |
|
|
|
@ -779,35 +826,35 @@ export default { |
|
|
|
margin: 3px 0; |
|
|
|
margin: 3px 0; |
|
|
|
} |
|
|
|
} |
|
|
|
.wo-code-title { |
|
|
|
.wo-code-title { |
|
|
|
font-size: 18px; |
|
|
|
font-size: 18px; |
|
|
|
font-weight: bold; |
|
|
|
font-weight: bold; |
|
|
|
color: #1f2d3d; |
|
|
|
color: #1f2d3d; |
|
|
|
margin-bottom: 15px; |
|
|
|
margin-bottom: 15px; |
|
|
|
padding-bottom: 10px; |
|
|
|
padding-bottom: 10px; |
|
|
|
border-bottom: 1px solid #e6e6e6; |
|
|
|
border-bottom: 1px solid #e6e6e6; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
.detail-list { |
|
|
|
.detail-list { |
|
|
|
list-style: none; |
|
|
|
list-style: none; |
|
|
|
padding: 0; |
|
|
|
padding: 0; |
|
|
|
margin: 0; |
|
|
|
margin: 0; |
|
|
|
|
|
|
|
|
|
|
|
.detail-item { |
|
|
|
|
|
|
|
display: flex; |
|
|
|
|
|
|
|
align-items: center; |
|
|
|
|
|
|
|
margin-bottom: 12px; |
|
|
|
|
|
|
|
line-height: 24px; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.label { |
|
|
|
|
|
|
|
width: 100px; |
|
|
|
|
|
|
|
color: #666; |
|
|
|
|
|
|
|
font-weight: 500; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.value { |
|
|
|
.detail-item { |
|
|
|
flex: 1; |
|
|
|
display: flex; |
|
|
|
color: #333; |
|
|
|
align-items: center; |
|
|
|
} |
|
|
|
margin-bottom: 12px; |
|
|
|
|
|
|
|
line-height: 24px; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.label { |
|
|
|
|
|
|
|
width: 100px; |
|
|
|
|
|
|
|
color: #666; |
|
|
|
|
|
|
|
font-weight: 500; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.value { |
|
|
|
|
|
|
|
flex: 1; |
|
|
|
|
|
|
|
color: #333; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
</style> |
|
|
|
</style> |
|
|
|
|