forked from drone/command-center-dashboard

罗广辉
2025-04-07 dd1af3b519ef3ea616c0424a331927fc21e9587e
feat: 历史任务详情40%
5 files modified
151 ■■■■ changed files
src/api/home/machineNest.js 12 ●●●● patch | view | raw | blame | history
src/api/home/task.js 27 ●●●●● patch | view | raw | blame | history
src/views/SignMachineNest/MachineRight/MachineTableDetails/DeviceJob/DeviceJob.vue 2 ●●● patch | view | raw | blame | history
src/views/SignMachineNest/MachineRight/MachineTableDetails/DeviceJob/DeviceJobDetails/DeviceJobDetails.vue 85 ●●●● patch | view | raw | blame | history
src/views/SignMachineNest/MachineRight/MachineTableDetails/DeviceJob/DeviceJobDetails/JobRelatedEvents.vue 25 ●●●● patch | view | raw | blame | history
src/api/home/machineNest.js
@@ -47,15 +47,7 @@
    })
}
// 设备-任务列表
export const getDeviceJobList = (data,params) => {
    return request({
        url: `/drone-device-core/wayline/waylineJobInfo/jobList`,
        method: 'post',
        data,
        params
    })
}
// 设备-事件列表
export const getDeviceEventList = (data,params) => {
@@ -66,3 +58,5 @@
        params
    })
}
src/api/home/task.js
@@ -48,5 +48,32 @@
        data: data.searchParams,
    })
}
// 任务详情
export const getJobDetails = params => {
    return request({
        url: '/drone-device-core/wayline/waylineJobInfo/jobDetails',
        method: 'get',
        params
    })
}
// 设备-任务列表
export const getDeviceJobList = (data,params) => {
    return request({
        url: `/drone-device-core/wayline/waylineJobInfo/jobList`,
        method: 'post',
        data,
        params
    })
}
// 根据任务id查成果
export const getJobInfoFiles = (params) => {
    return request({
        url: `/blade-resource/media/api/v1/workspaces/files/getJobInfoFiles`,
        method: 'get',
        params
    })
}
src/views/SignMachineNest/MachineRight/MachineTableDetails/DeviceJob/DeviceJob.vue
@@ -32,8 +32,8 @@
</template>
<script setup>
import { useStore } from 'vuex'
import { getDeviceJobList } from '@/api/home/machineNest'
import DeviceJobDetails from './DeviceJobDetails/DeviceJobDetails.vue';
import { getDeviceJobList } from '@/api/home/task'
const list = ref([])
const params = ref({
src/views/SignMachineNest/MachineRight/MachineTableDetails/DeviceJob/DeviceJobDetails/DeviceJobDetails.vue
@@ -1,7 +1,7 @@
<!-- 任务详情 -->
<template>
    <el-dialog
    append-to-body
        append-to-body
        modal-class="detailsOfHistoricalTasks"
        v-model="isShow"
        title="历史任务详情"
@@ -21,7 +21,16 @@
                <JobRelatedEvents v-if="isShow" />
                <el-divider content-position="left">任务成果 xxx个</el-divider>
                <div class="imgListBox">
                    <div v-for="item in imgList" class="imgItem">xxx图片</div>
                    <el-image
                        class="imgItem"
                        v-for="(item, index) in achievementList"
                        :src="item.url"
                        :preview-src-list="achievementList.map(i => i.url)"
                        show-progress
                        preview-teleported
                        :initial-index="index"
                        fit="cover"
                    />
                </div>
            </div>
            <div class="contentRight">map</div>
@@ -32,30 +41,64 @@
<script setup>
import { pxToRem } from '@/utils/rem'
import JobRelatedEvents from './JobRelatedEvents.vue'
import { getJobDetails, getJobInfoFiles } from '@/api/home/task'
const isShow = defineModel('show')
const imgList = ref([
    { name: '图片1', url: 'xxx' },
    { name: '图片1', url: 'xxx' },
    { name: '图片1', url: 'xxx' },
    { name: '图片1', url: 'xxx' },
])
const infoList = ref([
    { name: '任务编号', value: 'xxx' },
    { name: '任务所属机巢', value: 'xxx' },
    { name: '关联算法', value: 'xxx' },
    { name: '任务名称', value: 'xxx' },
    { name: '所属单位', value: 'xxx' },
    { name: '任务类型', value: 'xxx' },
    { name: '任务周期', value: 'xxx' },
    { name: '飞行事件', value: 'xxx' },
    { name: '任务频次', value: 'xxx' },
    { name: '任务描述', value: 'xxx' },
    { name: '任务编号', value: '', field: 'id' },
    { name: '任务所属机巢', value: '', field: 'device_names' },
    { name: '关联算法', value: '', field: 'ai_type_str' },
    { name: '任务名称', value: '', field: 'name' },
    { name: '所属单位', value: '', field: 'dept_name' },
    { name: '任务类型', value: '', field: 'industry_type_str' },
    { name: '飞行事件', value: '', field: 'event_number' },
    { name: '任务周期', value: '', field: 'rep_rule_val' },
    { name: '任务频次', value: '', field: 'rep_fre_val' },
    { name: '任务描述', value: '', field: 'remark' },
])
const detailsData = ref({
    id: 19,
    remark: '测试测试',
    is_monitoring: 0,
    industry_type_str: '综合类、公安类',
    area_code: '360103',
    ai_type_str: '识别火情、车牌识别',
    begin_time: '2025/04/02 16:00',
    end_time: '2025/04/01 15:59',
    device_names: '赣县-夏潭机场',
    create_time: '2025-04-01T07:35:19.000+00:00',
    name: '夏弹机场测试',
    event_number: 2,
    creator_name: '管理员',
    way_lines: [],
})
const achievementList = ref([])
const wayLineJodInfoId = inject('wayLineJodInfoId')
const getAchievement = () => {
    getJobInfoFiles({ jobInfoId: wayLineJodInfoId.value }).then(res => {
        achievementList.value = res.data.data
    })
}
const getDetails = () => {
    getJobDetails({ wayLineJobInfoId: wayLineJodInfoId.value }).then(res => {
        console.log(res.data.data, 666)
        detailsData.value = res.data.data
        infoList.value.forEach(item => {
            item.value = detailsData.value?.[item.field] || ''
        })
    })
}
watch(isShow, (newValue, oldValue) => {
    if (newValue) {
        getAchievement()
        getDetails()
    }
})
</script>
<style lang="scss">
@@ -112,6 +155,8 @@
        .imgListBox {
            display: flex;
            flex-wrap: wrap;
            gap: 0 10px;
            .imgItem {
                width: 200px;
src/views/SignMachineNest/MachineRight/MachineTableDetails/DeviceJob/DeviceJobDetails/JobRelatedEvents.vue
@@ -1,11 +1,23 @@
<template>
    <el-divider content-position="left">关联事件 {{total}}个</el-divider>
    <el-table :data="list" style="width: 100%" >
        <el-table-column prop="event_num" label="编号" />
        <el-table-column prop="id" label="ID" />
        <el-table-column prop="event_name" label="名称" />
        <el-table-column prop="media_type" label="类型" />
        <el-table-column prop="photo_url" label="图片url" />
        <el-table-column prop="video_url" label="视频url" />
        <el-table-column prop="photo_url" label="图片">
      <template #default="scope">
        <el-image
          :style="{width: pxToRem(50), height:  pxToRem(50)}"
          :src="scope.row.photo_url"
          :preview-src-list="[scope.row.photo_url]"
          show-progress
                    preview-teleported
          :initial-index="4"
          fit="cover"
        />
      </template>
    </el-table-column>
        <el-table-column prop="video_url" label="视频" />
        <el-table-column prop="remark" label="备注" />
        <el-table-column prop="status" label="状态">
            <template #default="scope">
@@ -17,7 +29,6 @@
                <el-tag v-if="scope.row.status === 5" type="success">已完结</el-tag>
            </template>
        </el-table-column>
        <el-table-column prop="wayline_job_id" label="    任务id" />
    <el-table-column label="操作" >
      <template #default="scope">
        <el-button type="primary" link @click="examine(scope.row)">审核</el-button>
@@ -39,6 +50,7 @@
import { useStore } from 'vuex'
import { getDeviceEventList } from '@/api/home/machineNest'
import { ElMessage } from 'element-plus';
import { pxToRem } from '@/utils/rem'
const list = ref()
@@ -47,7 +59,7 @@
})
const sizeParams = ref({
    current: 1,
    size: 1,
    size: 10,
})
const store = useStore()
const child_sn = computed(() => store.state.home.singleUavHome.child_sn)
@@ -69,13 +81,14 @@
        total.value = resData.total
    })
}
const pageChange = val => {
    sizeParams.value.current = val
    getList()
}
onMounted(() => {
  console.log(66);
    getList()
})
</script>