@@ -137,6 +165,7 @@ export default {
UserCard: () => import('@/resources/components/UserCard/UserCard.vue'),
...ContentItem,
Status: () => import('@/resources/components/Status/CommonStatus.vue'),
+ TsTable: () => import('@/resources/components/TsTable/TsTable.vue'),
ExtrainfoDetail: () => import('./jobDetail/extrainfo-detail.vue'),
JobPhaseFlow: () => import('@/views/pages/autoexec/detail/jobDetail/job-phase-flow.vue'),
ProjectDirectoryDialog: () => import('@/views/pages/deploy/version/project-directory-dialog'), // 工程目录
@@ -164,6 +193,26 @@ export default {
selectStepId: null,
isShowJobParam: false, //显示参数弹框
phaseEndingStatusList: ['completed', 'aborted', 'failed', 'paused'], //终点状态节点列表,非终点状态列表的需要定时刷新。
+ isLoading: false,
+ theadList: [
+ {
+ title: '排队号',
+ key: 'sort'
+ },
+ {
+ title: '执行器',
+ key: 'runner'
+ },
+ {
+ title: '排队时间',
+ key: 'fcd'
+ }
+ ],
+ waitingTableConfig: {
+ tbodyList: [],
+ currentPage: 1,
+ pageSize: 10
+ },
statusActionMapping: {
pending: ['abort'], //未开始:
running: ['pause', 'abort'], //运行中: 暂停 终止
@@ -174,7 +223,8 @@ export default {
completed: ['refire', 'valid'], //已成功:重跑
failed: ['refire'], //已失败:继续
ready: ['execute', 'revoke'], //已就绪 撤销 执行
- waitInput: ['abort']
+ waitInput: ['abort'],
+ waiting: ['abort']
},
actionMap: {
valid: {
@@ -250,6 +300,9 @@ export default {
mutations.setSearchParam({});
},
methods: {
+ handleWaitingData() {
+ this.$set(this.waitingTableConfig, 'tbodyList', this.jobData.waitingDetail);
+ },
toggleSiderHide() {
this.calculateJobNameMaxWidth();
},
@@ -388,6 +441,7 @@ export default {
this.$set(this.jobData, 'phaseList', res.Return['phaseList']);
this.$set(this.jobData, 'status', res.Return['status']);
this.$set(this.jobData, 'statusName', res.Return['statusName']);
+ this.$set(this.jobData, 'waitingDetail', res.Return['waitingDetail']);
if (this.jobData && this.jobData.extraInfo) {
this.$set(this.jobData, 'extraInfo', res.Return['extraInfo']);
}
@@ -430,6 +484,7 @@ export default {
}
this.$set(this.jobData, 'status', res.Return['status']);
this.$set(this.jobData, 'statusName', res.Return['statusName']);
+ this.$set(this.jobData, 'waitingDetail', res.Return['waitingDetail']);
const phaseIdList = [];
this.jobData.phaseList.forEach(phase => {
if (!this.phaseEndingStatusList.includes(phase.status)) {
@@ -540,6 +595,11 @@ export default {
}
}
};
+ },
+ hasWaiting() {
+ return () => {
+ return this.jobData.waitingDetail && this.jobData.waitingDetail.length > 0;
+ };
}
},
watch: {}
diff --git a/src/views/pages/autoexec/detail/jobDetail/job-phase-list.vue b/src/views/pages/autoexec/detail/jobDetail/job-phase-list.vue
index 8e8ff68a429dc2ad5c6379676126a129980b9f14..352817b52f2dba10d4975702865f120e3e64c3c2 100644
--- a/src/views/pages/autoexec/detail/jobDetail/job-phase-list.vue
+++ b/src/views/pages/autoexec/detail/jobDetail/job-phase-list.vue
@@ -15,30 +15,91 @@
style="position: relative"
@click="selectPhase(phase)"
>
-
{{ phase.name || '-' }}
-
+
+ {
+ waitingTableConfig.tbodyList = [];
+ }"
+ >
+
+
+
+
+
+
+ handleWaitingData(group)"
+ >
+
-
-
-
-
+
+
+ {
+ waitingTableConfig.tbodyList = [];
+ }"
+ >
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
import('@/resources/components/SimpleGraph/Liquid.vue'),
- Status: () => import('@/resources/components/Status/CommonStatus.vue')
+ Status: () => import('@/resources/components/Status/CommonStatus.vue'),
+ TsTable: () => import('@/resources/components/TsTable/TsTable.vue'),
+ CircleLoading: () => import('@/resources/components/loading/CircleLoading.vue')
},
filters: {},
model: {
@@ -77,12 +140,30 @@ export default {
event: 'change'
},
props: {
- phaseList: { type: Array }
+ phaseList: { type: Array },
+ waitingDetail: { type: Array }
},
data() {
return {
fixedPhaseId: null,
- activePhaseId: null
+ activePhaseId: null,
+ currentPhaseConfig: null,
+ isLoading: false,
+ theadList: [
+ {
+ title: '排队号',
+ key: 'sort'
+ },
+ {
+ title: '执行器',
+ key: 'runner'
+ }
+ ],
+ waitingTableConfig: {
+ tbodyList: [],
+ currentPage: 1,
+ pageSize: 100
+ }
};
},
beforeCreate() {},
@@ -111,6 +192,9 @@ export default {
this.$el.scrollTop = $select.offsetTop - config.height / 2 + 130;
}
}
+ },
+ handleWaitingData(group) {
+ this.$set(this.waitingTableConfig, 'tbodyList', this.waitingDetail.filter(t => t.groupSortList.includes(group.groupSort)));
}
},
computed: {
@@ -120,7 +204,7 @@ export default {
this.phaseList.forEach(phase => {
let group = groupList.find(d => d.groupId == phase.groupId);
if (!group) {
- group = { groupId: phase.groupId, phaseList: [] };
+ group = { groupId: phase.groupId, phaseList: [], groupSort: phase.jobGroupVo.sort };
groupList.push(group);
}
group['phaseList'].push(phase);
@@ -154,6 +238,11 @@ export default {
}
return null;
};
+ },
+ hasWaiting() {
+ return (group) => {
+ return this.waitingDetail.some(t => t.groupSortList.includes(group.groupSort));
+ };
}
},
watch: {
@@ -305,16 +394,15 @@ export default {
}
}
.stepProcess {
+ display: grid;
+ grid-template-columns: calc(100% - 70px) 70px;
+ justify-content: space-between;
padding-top: 6px;
+ padding-right: 6px;
line-height: @iconWidth;
- position: relative;
- display: block;
- padding-right: 80px;
- ::v-deep .stepStatues {
- padding: 0px 4px;
- position: absolute;
- right: 0px;
- top: 4px;
+ .notice-box {
+ display: flex;
+ justify-content: end;
}
}
}
diff --git a/src/views/pages/autoexec/detail/jobDetail/phase/node-list.vue b/src/views/pages/autoexec/detail/jobDetail/phase/node-list.vue
index e1c8191bffc8e7e2617c6ee5dea8afd571634e5c..d8c4347fb40ba5356f1a9dc86d7c1620b50045db 100644
--- a/src/views/pages/autoexec/detail/jobDetail/phase/node-list.vue
+++ b/src/views/pages/autoexec/detail/jobDetail/phase/node-list.vue
@@ -98,7 +98,7 @@
'text-success': row.status == 'succeed',
'text-error': row.status == 'failed',
'text-grey': row.status == 'pending',
- 'text-warning': row.status == 'ignored' || row.status == 'aborted' || row.status == 'aborting' || row.status == 'waitInput' || row.status == 'paused' || row.status == 'invalid'
+ 'text-warning': row.status == 'waiting' || row.status == 'ignored' || row.status == 'aborted' || row.status == 'aborting' || row.status == 'waitInput' || row.status == 'paused' || row.status == 'invalid'
}"
>