| | |
| | | <!-- 任务详情 --> |
| | | <template> |
| | | <el-dialog |
| | | class="ztzf-dialog" |
| | | append-to-body |
| | | modal-class="detailsOfHistoricalTasks" |
| | | v-model="isShow" |
| | |
| | | > |
| | | <div class="content"> |
| | | <div class="contentLeft"> |
| | | <el-divider content-position="left">详情</el-divider> |
| | | <div class="machineTableDetailsTitle"><span>详情</span></div> |
| | | <div class="infoBox"> |
| | | <div class="itemBox" v-for="item in infoList"> |
| | | <div class="itemTitle">{{ item.name }}:</div> |
| | | <div class="itemValue">{{ item.value }}</div> |
| | | <div class="itemBoxLeft"> |
| | | <div v-for="(item, index) in infoList" :key="index"> |
| | | <div class="itemBox"> |
| | | <div class="itemTitle">{{ item.name }}:</div> |
| | | <div class="itemValue">{{ item.value ? item.value :''}}</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="itemBoxRight"> |
| | | <div class="itemTitle">关联算法:</div> |
| | | <div class="itemValue">{{ flystatus }}</div> |
| | | </div> |
| | | </div> |
| | | <JobRelatedEvents v-if="isShow" /> |
| | | <el-divider content-position="left">任务成果 xxx个</el-divider> |
| | | <div class="devicetitle" v-if="isShow"> |
| | | <p> |
| | | 任务成果 |
| | | <span>{{ total }}</span> |
| | | 个 |
| | | </p> |
| | | <p class="more">更多</p> |
| | | </div> |
| | | <div class="imgListBox"> |
| | | <el-image |
| | | class="imgItem" |
| | | v-for="(item, index) in achievementList" |
| | | :key="index" |
| | | :src="item.url" |
| | | :preview-src-list="achievementList.map(i => i.url)" |
| | | show-progress |
| | |
| | | /> |
| | | </div> |
| | | </div> |
| | | <DeviceJobDetailsMap v-if="isShow" class="contentRight" :detailsData="detailsData"/> |
| | | <DeviceJobDetailsMap v-if="isShow" class="contentRight" :detailsData="detailsData" /> |
| | | </div> |
| | | </el-dialog> |
| | | </template> |
| | |
| | | import JobRelatedEvents from './JobRelatedEvents.vue' |
| | | import { getJobDetails, getJobInfoFiles } from '@/api/home/task' |
| | | import DeviceJobDetailsMap from './DeviceJobDetailsMap.vue' |
| | | |
| | | const isShow = defineModel('show') |
| | | |
| | | const infoList = ref([ |
| | | { name: '任务编号', value: '', field: 'id' }, |
| | | { name: '任务编号', value: '', field: 'job info num' }, |
| | | { 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: 'begin_time' + ' - ' + 'end_time' }, |
| | | { name: '飞行事件', value: '', field: 'event_number' }, |
| | | { name: '任务周期', value: '', field: 'rep_rule_val' }, |
| | | { name: '任务频次', value: '', field: 'rep_fre_val' }, |
| | | { name: '任务频次', value: '', field: 'rep_rule_type' + ' - ' + 'rep_rule_val' }, |
| | | { name: '任务描述', value: '', field: 'remark' }, |
| | | ]) |
| | | |
| | | // 机巢状态 |
| | | const flystatus = ref('') |
| | | const detailsData = ref({ |
| | | id: null, |
| | | remark: null, |
| | |
| | | creator_name: null, |
| | | way_lines: [], |
| | | }) |
| | | |
| | | const total = ref(0) |
| | | const achievementList = ref([]) |
| | | |
| | | const wayLineJodInfoId = inject('wayLineJodInfoId') |
| | | const getAchievement = () => { |
| | | getJobInfoFiles({ jobInfoId: wayLineJodInfoId.value }).then(res => { |
| | | achievementList.value = res.data.data |
| | | total.value = res.data.data.length |
| | | }) |
| | | } |
| | | const getDetails = () => { |
| | | getJobDetails({ wayLineJobInfoId: wayLineJodInfoId.value }).then(res => { |
| | | console.log('res',res); |
| | | |
| | | detailsData.value = res.data.data |
| | | infoList.value.forEach(item => { |
| | | item.value = detailsData.value?.[item.field] || '' |
| | | if (item.name === '任务时间') { |
| | | item.value = detailsData.value.begin_time.slice(0,10) + '-' + detailsData.value.end_time.slice(0,10) |
| | | |
| | | } |
| | | else if (item.name === '任务频次') { |
| | | item.value === undefined ?'': detailsData.value.rep_rule_type + '-' + detailsData.value.rep_rule_val |
| | | } |
| | | else { |
| | | item.value = detailsData.value?.[item.field] || '' |
| | | } |
| | | }) |
| | | flystatus.value = res.data.data.ai_type_str |
| | | // console.log('历史任务详情', res.data.data) |
| | | }) |
| | | } |
| | | |
| | |
| | | height: 100%; |
| | | |
| | | .contentLeft { |
| | | margin-left: 35px; |
| | | margin-right: 24px; |
| | | width: 900px; |
| | | overflow: auto; |
| | | |
| | | .infoBox { |
| | | display: grid; |
| | | grid-template-columns: repeat(3, 1fr); |
| | | gap: 10px; // 列之间的间距 |
| | | padding: 10px; |
| | | |
| | | .itemBox { |
| | | background-color: #fff; |
| | | border: 1px solid #ddd; |
| | | border-radius: 4px; |
| | | padding: 15px; |
| | | box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); |
| | | display: flex; |
| | | align-items: center; |
| | | .machineTableDetailsTitle { |
| | | margin-bottom: 16px; |
| | | background: url('/src/assets/images/signMachineNest/machineRight/detailtitle.png') no-repeat center; |
| | | background-size: 100% 100%; |
| | | span { |
| | | display: inline-block; |
| | | margin-left: 30px; |
| | | font-size: 16px; |
| | | color: #ddf0ff; |
| | | line-height: 20px; |
| | | text-align: left; |
| | | margin-bottom: 8px; |
| | | } |
| | | |
| | | } |
| | | .devicetitle { |
| | | margin-bottom: 16px; |
| | | background: url('/src/assets/images/signMachineNest/machineRight/detailtitle.png') no-repeat center; |
| | | background-size: 100% 100%; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-content: center; |
| | | p { |
| | | display: inline-block; |
| | | margin-left: 30px; |
| | | font-size: 16px; |
| | | color: #ddf0ff; |
| | | line-height: 20px; |
| | | text-align: left; |
| | | margin-bottom: 8px; |
| | | span { |
| | | font-size: 26px; |
| | | color: #0282ff; |
| | | font-weight: bold; |
| | | } |
| | | } |
| | | .more { |
| | | color: #2f9dff; |
| | | font-size: 14px; |
| | | padding-top: 5px; |
| | | cursor: pointer; |
| | | } |
| | | } |
| | | .infoBox { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | .itemBoxLeft { |
| | | flex: 1; |
| | | display: grid; |
| | | grid-template-columns: repeat(2, 1fr); |
| | | gap: 10px; // 列之间的间距 |
| | | padding: 10px; |
| | | font-size: 14px; |
| | | .itemBox { |
| | | display: flex; |
| | | align-items: center; |
| | | margin-bottom: 24px; |
| | | } |
| | | } |
| | | .itemTitle { |
| | | font-weight: bold; |
| | | color: #333; |
| | | color: #fff; |
| | | } |
| | | |
| | | .itemValue { |
| | | color: #666; |
| | | font-weight: bold; |
| | | color: #fff; |
| | | } |
| | | .itemBoxRight { |
| | | width: 262px; |
| | | display: flex; |
| | | } |
| | | } |
| | | |
| | |
| | | width: 0; |
| | | flex-grow: 1; |
| | | background: #19ad8d; |
| | | margin-right: 17px; |
| | | } |
| | | } |
| | | </style> |