From 9dbd9daa2fa8e457444f392d51b257b834bd22a2 Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Sat, 24 May 2025 10:48:05 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/test' into test
---
src/views/job/components/TaskIntermediateContent/TaskIntermediateContent.vue | 295 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 295 insertions(+), 0 deletions(-)
diff --git a/src/views/job/components/TaskIntermediateContent/TaskIntermediateContent.vue b/src/views/job/components/TaskIntermediateContent/TaskIntermediateContent.vue
new file mode 100644
index 0000000..7dcf2d7
--- /dev/null
+++ b/src/views/job/components/TaskIntermediateContent/TaskIntermediateContent.vue
@@ -0,0 +1,295 @@
+<!-- 任务统计表格 -->
+<template>
+ <div class="task-intermediate-content">
+ <SearchBox @search="searchClick" @addTask="handleAddTask"></SearchBox>
+ <div class="task-table">
+ <el-table
+ stripe
+ :data="jobListData"
+ :row-class-name="tableRowClassName"
+ :row-style="{ height: '54px', fontSize: '14px', 'text-align': 'center' }"
+ :header-cell-style="{ 'text-align': 'center', height: '36px', fontSize: '14px' }"
+ >
+ <el-table-column label="序号" type="index" width="60">
+ <template #default="{ $index }">
+ {{ ($index + 1 + (jobListParams.current - 1) * jobListParams.size).toString().padStart(2, '0') }}
+ </template>
+ </el-table-column>
+ <el-table-column prop="job_info_num" label="任务编号" show-overflow-tooltip align="center" />
+ <el-table-column prop="name" label="任务名称" show-overflow-tooltip align="center" />
+ <el-table-column prop="dept_name" label="所属部门" width="200" align="center" />
+ <el-table-column prop="device_names" label="所属机巢" />
+ <el-table-column prop="ai_type_str" label="关联算法" show-overflow-tooltip align="center" />
+ <el-table-column label="任务状态" align="center">
+ <template #default="scope">
+ <span
+ :style="{
+ color:
+ scope.row.status === 1
+ ? '#ffe17e'
+ : scope.row.status === 2
+ ? '#ffa768'
+ : scope.row.status === 3
+ ? '#8effac'
+ : scope.row.status === 5
+ ? '#FF4848'
+ : scope.row.status === 7
+ ? '#A6A6A6'
+ : '',
+ }"
+ >
+ {{ scope.row.status ? getStatusText(scope.row.status) : '' }}
+ </span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="is_circle_job" label="任务类型" align="center">
+ <template #default="scope">
+ <span>{{ scope.row.rep_rule_type ? '周期任务' : '临时任务' }}</span>
+ </template>
+ </el-table-column>
+ <!-- <el-table-column prop="job_num" label="执行次数" /> -->
+ <el-table-column prop="event_number" label="关联事件" align="center">
+ <template #default="scope">
+ <span>{{ scope.row.event_number ? scope.row.event_number : '/' }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="cycle_time_value" label="任务时间" />
+ <el-table-column prop="creator_name" label="创建人" align="center" />
+ <el-table-column label="操作" width="200" align="center">
+ <template #default="scope">
+ <div
+ v-if="scope.row.status === 2"
+ class="btnItem turnBack"
+ link
+ type="primary"
+ @click="turnBack(scope.row)"
+ >
+ 返航
+ </div>
+ <div
+ v-if="scope.row.status === 1"
+ class="btnItem cancelTask"
+ link
+ type="primary"
+ @click="cancelTask(scope.row)"
+ >
+ 取消任务
+ </div>
+ <div class="btnItem" link type="primary" @click="handleDetail(scope.row)">查看</div>
+ </template>
+ </el-table-column>
+ </el-table>
+ </div>
+ <div class="pagination">
+ <el-pagination
+ class="ztzf-pagination"
+ popper-class="custom-pagination-dropdown"
+ v-model:current-page="jobListParams.current"
+ v-model:page-size="jobListParams.size"
+ :page-sizes="[10, 20, 30, 40]"
+ layout="prev, pager, next, sizes, jumper"
+ :total="total"
+ @size-change="handleSizeChange"
+ @current-change="handleCurrentChange"
+ />
+ </div>
+ </div>
+ <!-- 添加任务 -->
+ <AddTask v-model:show="isShowAddTask" @refresh="refreshGetJobList" />
+ <!-- 当前任务详情 -->
+ <!-- <CurrentTaskDetails
+ v-if="isShowCurrentTaskDetails"
+ v-model:show="isShowCurrentTaskDetails"
+ :wayLineJodInfoId="rowData.id"
+ /> -->
+ <!-- 历史任务详情 -->
+ <DeviceJobDetails
+ v-if="isShowDeviceJobDetails"
+ v-model:show="isShowDeviceJobDetails"
+ :wayLineJodInfoId="rowData.id"
+ :batchNo="rowData.batch_no"
+ />
+ <CancelTaskDialog
+ ref="cancelTaskDialogRef"
+ v-model:isShowCancelTask="isShowCancelTask"
+ :row-data="rowData"
+ @refresh="getJobList"
+ />
+</template>
+
+<script setup>
+import SearchBox from '../SearchBox.vue'
+import AddTask from './AddTask.vue'
+// import CurrentTaskDetails from '@/components/CurrentTaskDetails/CurrentTaskDetails.vue'
+import { jobList, cancelJobs, taskReturnLines } from '@/api/job/task'
+import { ElMessage } from 'element-plus'
+import DeviceJobDetails from '../DeviceJobDetails.vue'
+import CancelTaskDialog from '../CancelTaskDialog.vue'
+import { useStore } from 'vuex'
+const store = useStore()
+const singleUavHome = computed(() => store.state.home.singleUavHome)
+const jobListParams = reactive({
+ current: 1,
+ size: 10,
+ searchParams: {},
+})
+const jobListData = ref([])
+const total = ref(0)
+let isShowDeviceJobDetails = ref(false)
+let isShowCurrentTaskDetails = ref(false)
+let isShowCancelTask = ref(false)
+const cancelTaskDialogRef = ref(null)
+
+// 获取任务列表
+const getJobList = () => {
+ jobList(jobListParams).then(res => {
+ if (res.data.code !== 0) return
+ jobListData.value = res.data.data.records
+ total.value = res.data.data.total
+ })
+}
+// 状态文字
+const getStatusText = status => {
+ const statusMap = {
+ 1: '待执行',
+ 2: '执行中',
+ 3: '已执行',
+ 4: '已取消',
+ 5: '执行失败',
+ 7: '取消执行',
+ }
+ return statusMap[status] || '-'
+}
+
+// 查看当前任务详情 如果是一台机则显示详情 如果是多台机则进入集群调度(暂未开发)
+let rowData = ref({})
+const handleDetail = row => {
+ if (!row.device_sns.length) return ElMessage.warning('没有device_sns')
+ if (row.device_sns.length !== 1) return ElMessage.success('即将跳转到集群调度')
+ rowData.value = row ? row : {}
+ if (row.status === 2 || row.status === 1) {
+ // isShowCurrentTaskDetails.value = true
+ // 跳转大屏当前任务详情
+ const adminUrl = `${import.meta.env.VITE_APP_AREA_NAME}/command-center-dashboard/#/taskManage`
+ const targetPath = `id=${encodeURIComponent(rowData.value.id)}&batchNo=${encodeURIComponent(rowData.value.batch_no)}`
+ window.open(`${adminUrl}?${targetPath}`, '_blank')
+ } else {
+ isShowDeviceJobDetails.value = true
+ }
+}
+
+// 分页大小改变
+const handleSizeChange = val => {
+ jobListParams.size = val
+ getJobList()
+}
+
+// 页码改变
+const handleCurrentChange = val => {
+ jobListParams.current = val
+ getJobList()
+}
+
+// 传参查询条件
+const searchClick = params => {
+ jobListParams.current = 1
+ jobListParams.size = 10
+ jobListParams.searchParams = params
+ getJobList()
+}
+
+const refreshGetJobList = () => {
+ jobListParams.current = 1
+ jobListParams.size = 10
+ getJobList()
+}
+
+// 新建任务
+const isShowAddTask = ref(false)
+const handleAddTask = () => {
+ isShowAddTask.value = true
+}
+
+const tableRowClassName = ({ row, rowIndex }) => {
+ if (rowIndex % 2 === 1) {
+ return 'warning-row'
+ } else {
+ return 'success-row'
+ }
+}
+// 取消任务 0 取消全部 1取消单条
+const cancelTask = row => {
+ if (row.execute_time_arr?.length && row.execute_time_arr?.length > 0) {
+ rowData.value = row
+ isShowCancelTask.value = true
+ } else {
+ cancelTaskDialogRef.value.submitCancelTask(row, 1)
+ }
+}
+// 返航
+const turnBack = row => {
+ taskReturnLines(row.device_sns).then(res => {
+ if (res.data.code !== 0) return
+ ElMessage.success('返航操作成功')
+ getJobList()
+ })
+}
+
+onMounted(() => {
+ // getJobList()
+})
+</script>
+
+<style lang="scss" scoped>
+.task-intermediate-content {
+ margin: 0 30px 16px 40px;
+ background-color: #ffffff;
+ padding: 14px 18px;
+ // 表格
+ .task-table {
+ height: 520px;
+ margin-top: 18px;
+ overflow: auto;
+ }
+ .btnItem {
+ height: 27px;
+ line-height: 27px;
+ border-radius: 0px 0px 0px 0px;
+ border: 1px solid #51a8ff;
+ font-family: Segoe UI, Segoe UI;
+ font-weight: 400;
+ font-size: 14px;
+ color: #1C5CFF;
+ padding: 0 10px;
+ display: inline-block;
+ margin-right: 10px;
+ cursor: pointer;
+
+ &.turnBack {
+ border: 1px solid #ffa500;
+ color: #ffa500;
+ }
+ &.cancelTask {
+ border: 1px solid #3efe96;
+ color: #3efe96;
+ }
+ }
+ :deep(.el-table) {
+ --el-table-tr-bg-color: #ffffff;
+ --el-table-striped-bg-color: #EFEFEF;
+
+ .el-table__body tr.el-table__row--striped td {
+ background-color: var(--el-table-striped-bg-color);
+ }
+ }
+ // 分页
+ :deep(.el-pagination) {
+ display: flex;
+ justify-content: center;
+ }
+ :deep(.el-pagination button) {
+ background: center center no-repeat none !important;
+ color: #8eb8ea !important;
+ }
+}
+</style>
--
Gitblit v1.9.3