| | |
| | | <el-col :span="24"> |
| | | <el-form-item label="巡查任务描述" prop="taskDesc"> |
| | | <el-input |
| | | class="gd-input" |
| | | class="gd-input-text" |
| | | type="textarea" |
| | | :rows="4" |
| | | v-model="formData.taskDesc" |
| | |
| | | <script setup> |
| | | import { computed, ref, onMounted } from 'vue' |
| | | import { ElMessage } from 'element-plus' |
| | | import { fieldRules, flyVisual, getDictLabel } from '@ztzf/utils' |
| | | import { fieldRules, flyVisual, getDictLabel, geomAnalysis } from '@ztzf/utils' |
| | | import { |
| | | gdPatrolTaskRepublish, |
| | | gdFlyerPageApi, |
| | | gdPatrolTaskAuditApi, |
| | | gdPatrolTaskDetailApi, |
| | | } from './inspectionRequestApi' |
| | | import { gdWorkOrderFlowListApi, gdWorkOrderFlowPatrolListApi, gdWorkOrderPageApi } from '../orderManage/orderManageApi' |
| | | import { gdWorkOrderFlowListApi, gdWorkOrderFlowPatrolListApi, gdWorkOrderDetailApi } from '../orderManage/orderManageApi' |
| | | import { gdManageDeviceListApi } from '../orderManage/gdManageDeviceApi' |
| | | import { pxToRem } from '@/utils/rem' |
| | | import CommonCesiumMap from '@/components/map-container/common-cesium-map.vue' |
| | | import { gdTaskResultListApi } from '@/views/orderView/orderManage/clueEvents/achievementApi' |
| | | import RefuseOrderDialog1 from '@/views/orderView/orderManage/inspectionRequest/RefuseOrderDialog1.vue' |
| | | import { Check } from '@element-plus/icons-vue' |
| | | import { queryAirById } from '@/api/zkxt' |
| | | import { queryAirById, airlineListApi } from '@/api/zkxt' |
| | | import * as Cesium from 'cesium' |
| | | import { useStore } from 'vuex' |
| | | |
| | |
| | | const taskStatus = computed(() => formData.value.taskStatus) |
| | | const refuseOrderDialogRef = ref(null) |
| | | |
| | | // 下拉选项 |
| | | const flyerList = ref([]) |
| | | const deviceList = ref([]) |
| | | const workOrderList = ref([]) |
| | | const routeOptions = inject('routeOptions') |
| | | const getAirName = inject('getAirName') |
| | | const workOrderDetail = ref(null) // 工单详情 |
| | | const routeOptions = ref([]) // 航线选项(根据工单范围获取) |
| | | const getAirName = id => { |
| | | const item = routeOptions.value.find(item => item.id === id) |
| | | return item ? item.name : id |
| | | } |
| | | |
| | | const gdStatusObj = { |
| | | '0': { reason: '拒绝原因', operationType: '2', title: '拒绝签收' }, |
| | |
| | | |
| | | // 获取工单名称 |
| | | function getWorkOrderName(id) { |
| | | const item = workOrderList.value.find(item => item.id === id) |
| | | return item ? item.workOrderName : id |
| | | } |
| | | |
| | | // 获取工单列表 |
| | | async function getWorkOrderList() { |
| | | const res = await gdWorkOrderPageApi({ size: 999 }) |
| | | workOrderList.value = res?.data?.data?.records ?? [] |
| | | if (workOrderDetail.value?.id === id) return workOrderDetail.value.workOrderName |
| | | return id |
| | | } |
| | | |
| | | // 获取飞手列表 |
| | |
| | | }) |
| | | // 获取航线详情 |
| | | function getAirDetails() { |
| | | console.log(formData.value) |
| | | const dockHeight = formData.value.height |
| | | queryAirById(formData.value.patrolRouteUrl).then(res => { |
| | | const list = res.data.data.airlineWaypoints |
| | | const { airlineWaypoints, airlineSetting } = res.data.data; |
| | | // 使用空值合并运算符 ?? 或 逻辑或 || 兜底 |
| | | const { globalAirlineHeight = 0, airlineHeightMode } = airlineSetting || {}; |
| | | const relative = airlineHeightMode === 'relativeToStartPoint' |
| | | const list = airlineWaypoints |
| | | if (!list.length) return mapRef.value?.flyBoundary() |
| | | const result = list.map(item => [Number(item.longitude), Number(item.latitude)]).flat() |
| | | const result = list.map(item => { |
| | | let height = item?.globalHeight || globalAirlineHeight |
| | | if (relative){ |
| | | height = height + Number(dockHeight) |
| | | } |
| | | return [Number(item.longitude), Number(item.latitude),height || 0] |
| | | }) |
| | | viewer.entities.add({ |
| | | polyline: { |
| | | positions: Cesium.Cartesian3.fromDegreesArray(result), |
| | | clampToGround: true, |
| | | positions: Cesium.Cartesian3.fromDegreesArrayHeights(result.flat()), |
| | | width: 4, |
| | | material: arrowLineMaterialProperty, |
| | | }, |
| | | }) |
| | | // 渲染起点(蓝色) |
| | | const startPoint = list[0] |
| | | const startPoint = result[0] |
| | | viewer.entities.add({ |
| | | position: Cesium.Cartesian3.fromDegrees( |
| | | Number(startPoint.longitude), |
| | | Number(startPoint.latitude), |
| | | startPoint.height || 0 |
| | | ), |
| | | position: Cesium.Cartesian3.fromDegrees(Number(startPoint[0]), Number(startPoint[1]), startPoint[2]), |
| | | point: { |
| | | pixelSize: 12, |
| | | color: Cesium.Color.BLUE, |
| | | outlineColor: Cesium.Color.WHITE, |
| | | outlineWidth: 2, |
| | | heightReference: Cesium.HeightReference.CLAMP_TO_GROUND, |
| | | }, |
| | | }) |
| | | // 渲染终点(红色) |
| | | const endPoint = list[list.length - 1] |
| | | const endPoint = result[result.length - 1] |
| | | viewer.entities.add({ |
| | | position: Cesium.Cartesian3.fromDegrees( |
| | | Number(endPoint.longitude), |
| | | Number(endPoint.latitude), |
| | | endPoint.height || 0 |
| | | ), |
| | | position: Cesium.Cartesian3.fromDegrees(Number(endPoint[0]), Number(endPoint[1]), endPoint[2]), |
| | | point: { |
| | | pixelSize: 12, |
| | | color: Cesium.Color.RED, |
| | | outlineColor: Cesium.Color.WHITE, |
| | | outlineWidth: 2, |
| | | heightReference: Cesium.HeightReference.CLAMP_TO_GROUND, |
| | | }, |
| | | }) |
| | | flyVisual({ |
| | | positionsData: list.map(i => [Number(i.longitude), Number(i.latitude), i.height || 0]), |
| | | viewer, |
| | | multiple: 6, |
| | | }) |
| | | }) |
| | | } |
| | |
| | | dialogMode.value = mode |
| | | const res = await gdPatrolTaskDetailApi({ id: row.id }) |
| | | formData.value = { ...initForm(), ...res.data.data } |
| | | // 获取工单详情并根据geom范围获取航线列表 |
| | | await getWorkOrderDetail(formData.value.workOrderId) |
| | | ;['6', '7', '8'].includes(row.taskStatus) && await getTaskResultList() |
| | | loadList() |
| | | initMap() |
| | | getAirDetails() |
| | | } |
| | | |
| | | // 获取工单详情 |
| | | async function getWorkOrderDetail(workOrderId) { |
| | | if (!workOrderId) return |
| | | try { |
| | | const res = await gdWorkOrderDetailApi({ id: workOrderId }) |
| | | workOrderDetail.value = res?.data?.data ?? null |
| | | // 根据工单geom范围获取航线列表 |
| | | const geom = workOrderDetail.value?.geom |
| | | if (!geom) return |
| | | const coordinates = geomAnalysis(geom) |
| | | if (!coordinates || !coordinates.length) return |
| | | const airRes = await airlineListApi(coordinates) |
| | | routeOptions.value = airRes.data.data || [] |
| | | } catch (e) { |
| | | console.error('获取工单详情或航线列表失败', e) |
| | | } |
| | | } |
| | | |
| | | // 初始化地图实例 |
| | |
| | | } |
| | | |
| | | onMounted(() => { |
| | | getWorkOrderList() |
| | | getFlyerList() |
| | | getDeviceList() |
| | | }) |