|
|
|
@ -1,15 +1,26 @@
@@ -1,15 +1,26 @@
|
|
|
|
|
<template> |
|
|
|
|
<div class="fault-rule-drawer"> |
|
|
|
|
<el-drawer v-model="isShowDrawer" title="任务详情" direction="rtl" size="50%" modal-class="model-dev-opn" |
|
|
|
|
:before-close="handleBeforeClose"> |
|
|
|
|
<el-drawer v-model="isShowDrawer" title="任务详情" direction="rtl" size="50%" |
|
|
|
|
modal-class="model-dev-opn" |
|
|
|
|
:before-close="handleBeforeClose"> |
|
|
|
|
<main class="wh-full" v-loading="loading"> |
|
|
|
|
<template v-for="detail in detailList"> |
|
|
|
|
<el-descriptions border :title="`${detail.sn}任务详情`"> |
|
|
|
|
<el-descriptions-item :label-width="60" label="状态"> <el-tag size="small">{{statusList.find(r => r.value === |
|
|
|
|
detail.status)?.label || '--' |
|
|
|
|
}}</el-tag></el-descriptions-item> |
|
|
|
|
<el-descriptions-item :label-width="100" label="总数数据量">{{ detail.total }}</el-descriptions-item> |
|
|
|
|
<el-descriptions-item :label-width="110" label="已完成数据量">{{ detail.finish }}</el-descriptions-item> |
|
|
|
|
<el-descriptions-item :label-width="60" label="状态"> |
|
|
|
|
<el-tag size="small">{{ |
|
|
|
|
statusList.find(r => r.value === |
|
|
|
|
detail.status)?.label || '--' |
|
|
|
|
}} |
|
|
|
|
</el-tag> |
|
|
|
|
</el-descriptions-item> |
|
|
|
|
<el-descriptions-item :label-width="100" label="总数任务量">{{ |
|
|
|
|
detail.total |
|
|
|
|
}} |
|
|
|
|
</el-descriptions-item> |
|
|
|
|
<el-descriptions-item :label-width="110" label="已完任务量">{{ |
|
|
|
|
detail.finish |
|
|
|
|
}} |
|
|
|
|
</el-descriptions-item> |
|
|
|
|
<el-descriptions-item :label-width="60" label="信息"> |
|
|
|
|
{{ detail?.info ? detail.info : '暂无信息' }} |
|
|
|
|
</el-descriptions-item> |
|
|
|
@ -17,8 +28,9 @@
@@ -17,8 +28,9 @@
|
|
|
|
|
<template v-if="detail.total === 0"> |
|
|
|
|
<span>暂无进度</span> |
|
|
|
|
</template> |
|
|
|
|
<el-progress v-else style="width: 95%;" :percentage="Math.floor((detail.finish / detail.total) * 100)" |
|
|
|
|
:text-inside="true" :stroke-width="20" /> |
|
|
|
|
<el-progress v-else style="width: 95%;" |
|
|
|
|
:percentage="Math.floor((detail.finish / detail.total) * 100)" |
|
|
|
|
:text-inside="true" :stroke-width="20"/> |
|
|
|
|
</el-descriptions-item> |
|
|
|
|
</el-descriptions> |
|
|
|
|
</template> |
|
|
|
@ -28,11 +40,12 @@
@@ -28,11 +40,12 @@
|
|
|
|
|
</template> |
|
|
|
|
|
|
|
|
|
<script setup lang="ts"> |
|
|
|
|
import { getSubTopic, type PubMsgData } from '@/utils/zmq' |
|
|
|
|
import { getSubTopic, type SubMsgData } from '@/utils/zmq' |
|
|
|
|
import ZMQWorker from '@/composables/useZMQJsonWorker' |
|
|
|
|
import { getTaskInfo, type TaskInfo, type TaskList } from '@/api/module/taks' |
|
|
|
|
import { useMessage } from '@/composables/useMessage' |
|
|
|
|
|
|
|
|
|
const emit = defineEmits<{ 'task-finish': [string, -1 | 0 | 1 | 2 | 3] }>() |
|
|
|
|
const message = useMessage() |
|
|
|
|
const worker = ZMQWorker.getInstance() |
|
|
|
|
const isShowDrawer = defineModel<boolean>() |
|
|
|
@ -50,40 +63,57 @@ async function onDetail(row: TaskList) {
@@ -50,40 +63,57 @@ async function onDetail(row: TaskList) {
|
|
|
|
|
} |
|
|
|
|
loading.value = false |
|
|
|
|
} |
|
|
|
|
const curentTaskId = ref('') |
|
|
|
|
|
|
|
|
|
const currentTaskId = ref('') |
|
|
|
|
|
|
|
|
|
async function open(row: TaskList) { |
|
|
|
|
isShowDrawer.value = true |
|
|
|
|
curentTaskId.value = row.id |
|
|
|
|
currentTaskId.value = row.id |
|
|
|
|
await onDetail(row) |
|
|
|
|
worker.subscribe(getSubTopic('server', 'event', 'task'), zmqTaskCb) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const statusList = [ |
|
|
|
|
{ label: '未开始', value: 0 }, |
|
|
|
|
{ label: '进行中', value: 1 }, |
|
|
|
|
{ label: '成功', value: 2 }, |
|
|
|
|
{ label: '失败', value: -1 }, |
|
|
|
|
{ |
|
|
|
|
value: -1, |
|
|
|
|
label: '执行失败' |
|
|
|
|
}, { |
|
|
|
|
label: '等待执行', |
|
|
|
|
value: 0 |
|
|
|
|
}, { |
|
|
|
|
label: '执行中', |
|
|
|
|
value: 1 |
|
|
|
|
}, { |
|
|
|
|
label: '已取消', |
|
|
|
|
value: 2 |
|
|
|
|
}, { |
|
|
|
|
label: '执行成功', |
|
|
|
|
value: 3 |
|
|
|
|
} |
|
|
|
|
] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function zmqTaskCb(msg: PubMsgData) { |
|
|
|
|
const { feedback, result, id } = msg |
|
|
|
|
function zmqTaskCb(msg: SubMsgData) { |
|
|
|
|
const { feedback } = msg |
|
|
|
|
const taskId = feedback[0] |
|
|
|
|
const deviceSN = feedback[1] |
|
|
|
|
const deviceStatus = feedback[2] || '未知状态' |
|
|
|
|
const finish = feedback[3] || 0 |
|
|
|
|
const total = feedback[4] || 0 |
|
|
|
|
if (curentTaskId.value !== taskId) return |
|
|
|
|
if (currentTaskId.value !== taskId) return |
|
|
|
|
const detail = detailList.value.find(item => item.sn === deviceSN) |
|
|
|
|
if (!detail) return |
|
|
|
|
detail.status = deviceStatus |
|
|
|
|
detail.finish = finish |
|
|
|
|
detail.total = total |
|
|
|
|
if (detail.finish === detail.finish) { |
|
|
|
|
emit('task-finish', deviceSN, deviceStatus) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function handleBeforeClose(done: () => void) { |
|
|
|
|
isShowDrawer.value = false |
|
|
|
|
curentTaskId.value = '' |
|
|
|
|
currentTaskId.value = '' |
|
|
|
|
done() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|