You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

119 lines
3.7 KiB

<template>
<div class="fault-rule-drawer">
3 months ago
<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}任务详情`" style="margin-top: 20px">
3 months ago
<el-descriptions-item :label-width="60" label="状态">
<el-tag size="small" :type="statusTypeMap[detail.status]">{{
3 months ago
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>
<el-descriptions-item label="当前进度" style="width: 400px">
<template v-if="detail.total === 0 || detail.status === -1 || detail.status === 2 ">
<span>暂无进度</span>
</template>
<el-progress v-else
3 months ago
:percentage="Math.floor((detail.finish / detail.total) * 100)"
:text-inside="true" :stroke-width="20"/>
</el-descriptions-item>
</el-descriptions>
</template>
</main>
</el-drawer>
</div>
</template>
<script setup lang="ts">
3 months ago
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'
import { statusList, statusTypeMap } from "./utils";
const message = useMessage()
const worker = ZMQWorker.getInstance()
const isShowDrawer = defineModel<boolean>()
const detailList = ref<TaskInfo[]>([])
const loading = ref(false)
async function onDetail(row: TaskList) {
loading.value = true
const res = await getTaskInfo(row.id);
if (res.code === 0) {
detailList.value = res?.data?.details ?? []
} else {
message.error('获取任务详情失败')
}
loading.value = false
}
3 months ago
const currentTaskId = ref('')
async function open(row: TaskList) {
isShowDrawer.value = true
3 months ago
currentTaskId.value = row.id
await onDetail(row)
worker.subscribe(getSubTopic('server', 'event', 'task'), zmqTaskCb)
}
3 months ago
function zmqTaskCb(msg: SubMsgData) {
console.log('info', msg)
3 months ago
const { feedback } = msg
const taskId = feedback[0]
const id = feedback[1]
const deviceStatus = feedback[2] || '未知状态'
const finish = feedback[3] || 0
const total = feedback[4] || 0
3 months ago
if (currentTaskId.value !== taskId) return
const detail = detailList.value.find(item => item.id === id)
if (!detail) return
detail.status = deviceStatus
detail.finish = finish
detail.total = total
detail.info = `子任务${statusList.find(r => r.value ===
detail.status)?.label || '--'}`
}
function handleBeforeClose(done: () => void) {
isShowDrawer.value = false
3 months ago
currentTaskId.value = ''
worker.unsubscribe(getSubTopic('server', 'event', 'task'))
done()
}
defineExpose({
open,
})
</script>
<style scoped lang="scss">
.fault-rule-drawer {
font-size: 16px;
:deep(.edfs-wrap) {
width: auto;
}
:deep(.el-drawer__header) {
color: var(--text-color);
}
}
</style>