吉安感知网项目-前端
张含笑
2026-01-27 dd57e0e9a989e7ee8b3e3473a7ee6a1dff06a4ae
applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/FormDiaLog.vue
@@ -5,13 +5,13 @@
      :title="titleEnum[dialogMode]"
      @closed="visible = false"
      destroy-on-close
      width="60%"
      width="75%"
      :close-on-click-modal="false"
   >
      <div class="gd-dialog-form">
         <!-- 关联工单选择 -->
         <div class="work-order-section">
            <div class="detail-title" :style="{marginBottom: 0,marginRight: pxToRem(10)}">选择工单</div>
            <div class="detail-title" :style="{ marginBottom: 0, marginRight: pxToRem(10) }">选择工单</div>
            <el-select
               class="gd-select"
               style="width: 150px"
@@ -29,7 +29,7 @@
         <!-- 工单信息展示 -->
         <div class="work-order-info" v-if="selectedWorkOrder">
            <el-row class="detail-row-view" >
            <el-row class="detail-row-view">
               <el-col :span="12">
                  <div class="info-item">
                     <span class="label">工单类型</span>
@@ -59,7 +59,7 @@
         <!-- 子任务表格表单 -->
         <div class="task-table-section" v-if="selectedWorkOrderId">
            <div class="detail-title" :style="{marginTop: pxToRem(10)}">添加子任务</div>
            <div class="detail-title" :style="{ marginTop: pxToRem(10) }">添加子任务</div>
            <div class="task-table-container">
               <el-table :data="taskList">
                  <el-table-column width="50" label="">
@@ -76,13 +76,14 @@
                     </template>
                  </el-table-column>
                  <el-table-column prop="patrolTaskType" label="巡查任务类型" min-width="140">
                     <template v-slot="{ row }">
                     <template v-slot="{ row, $index }">
                        <el-select
                           class="gd-select"
                           popper-class="gd-select-popper"
                           v-model="row.patrolTaskType"
                           placeholder="请选择"
                           :disabled="dialogReadonly"
                           @change="handlePatrolTaskTypeChange($index, $event)"
                        >
                           <el-option
                              v-for="item in dictObj.patrolTaskType"
@@ -120,16 +121,21 @@
                     </template>
                  </el-table-column>
                  <el-table-column prop="recommendFlyerName" label="推荐飞手" min-width="120">
                     <template v-slot="{ row }">
                     <template v-slot="{ row, $index }">
                        <el-select
                           class="gd-select"
                           popper-class="gd-select-popper"
                           v-model="row.recommendFlyerName"
                           placeholder="请选择"
                           filterable
                           :disabled="dialogReadonly"
                           :disabled="dialogReadonly || !taskList[$index].patrolTaskType"
                        >
                           <el-option v-for="item in flyerList" :key="item.id" :label="item.flyerName" :value="item.flyerName" />
                           <el-option
                              v-for="item in flyerListMap[$index] || []"
                              :key="item.id"
                              :label="item.flyerName"
                              :value="item.flyerName"
                           />
                        </el-select>
                     </template>
                  </el-table-column>
@@ -152,7 +158,7 @@
                        <el-input class="gd-input" v-model="row.taskDesc" placeholder="请输入" :disabled="dialogReadonly" />
                     </template>
                  </el-table-column>
                  <el-table-column label="操作" width="80" fixed="right" v-if="dialogMode === 'add'">
                  <el-table-column label="操作" width="90" fixed="right" v-if="dialogMode === 'add'">
                     <template v-slot="{ $index }">
                        <el-button type="primary" :icon="Plus" circle size="small" @click="addTaskRow" />
                        <el-button
@@ -173,7 +179,7 @@
      <template #footer>
         <el-button color="#F2F3F5" @click="visible = false">{{ dialogReadonly ? '关闭' : '取消' }}</el-button>
         <el-button
            class="save-btn"
            class=""
            color="#4C34FF"
            v-if="!dialogReadonly"
            :loading="submitting"
@@ -195,6 +201,7 @@
import { gdWorkOrderPageApi } from '../orderManage/orderManageApi'
import { gdManageDeviceListApi } from '../orderManage/gdManageDeviceApi'
import { pxToRem } from '@/utils/rem'
import { airlineListApi } from '@/api/zkxt'
// 初始化任务行
const initTaskRow = () => ({
@@ -206,7 +213,7 @@
   deviceId: null,
   taskDesc: '',
})
// todo 时间线
const dictObj = inject('dictObj')
const emit = defineEmits(['success'])
@@ -214,7 +221,7 @@
const dialogMode = ref('add') // 弹框模式
const submitting = ref(false) // 提交中
const dialogReadonly = computed(() => dialogMode.value === 'view')
const titleEnum = ref({ edit: '编辑', view: '查看', add: '新增' })
const titleEnum = ref({ edit: '新增', view: '查看', add: '新增' })
// 工单相关
const workOrderList = ref([]) // 工单列表
@@ -222,13 +229,9 @@
const selectedWorkOrder = ref(null) // 选中的工单信息
// 下拉选项
const flyerList = ref([]) // 飞手列表
const flyerListMap = ref({}) // 飞手列表,按行索引存储
const deviceList = ref([]) // 设备列表
const routeOptions = ref([
   { name: '航线1', id: '1' },
   { name: '航线2', id: '2' },
   { name: '航线3', id: '3' },
]) // 航线假数据
const routeOptions = inject('routeOptions')
// 子任务列表
const taskList = ref([initTaskRow()])
@@ -251,36 +254,58 @@
function removeTaskRow(index) {
   if (taskList.value.length > 1) {
      taskList.value.splice(index, 1)
      // 重新整理 flyerListMap 的索引
      const newFlyerListMap = {}
      Object.keys(flyerListMap.value).forEach(key => {
         const keyIndex = parseInt(key)
         if (keyIndex < index) {
            newFlyerListMap[keyIndex] = flyerListMap.value[keyIndex]
         } else if (keyIndex > index) {
            newFlyerListMap[keyIndex - 1] = flyerListMap.value[keyIndex]
         }
      })
      flyerListMap.value = newFlyerListMap
   }
}
// 获取工单列表
async function getWorkOrderList() {
   const res = await gdWorkOrderPageApi({ size: 999,workOrderStatus: '20' })
   const res = await gdWorkOrderPageApi({ size: 999, workOrderStatus: dialogMode.value ==='add' ?  '20' : '' })
   workOrderList.value = res?.data?.data?.records ?? []
}
// 处理巡查任务类型变化
async function handlePatrolTaskTypeChange(index, skilledTaskType) {
   // 清空该行已选择的飞手
   taskList.value[index].recommendFlyerName = ''
   // 获取对应的飞手列表
   await getFlyerList(index, skilledTaskType)
}
// 获取飞手列表
async function getFlyerList() {
async function getFlyerList(index, skilledTaskType) {
   const res = await gdFlyerPageApi({
      size: 999,
      // todo 需要传入前面的巡查类型
      // patrolTaskType:  '1',
      skilledTaskType,
   })
   flyerList.value = res?.data?.data?.records ?? []
   flyerListMap.value[index] = res?.data?.data?.records ?? []
}
// 获取设备列表
async function getDeviceList() {
   const res = await gdManageDeviceListApi({
      deviceIds: selectedWorkOrder.value.recommendDeviceIds
      deviceIds: selectedWorkOrder.value?.recommendDeviceIds,
   })
   deviceList.value = res?.data?.data ?? []
}
watch(()=>selectedWorkOrderId.value,()=>{
   getDeviceList()
})
watch(
   () => selectedWorkOrderId.value,
   () => {
      handleWorkOrderChange(selectedWorkOrderId.value)
      getDeviceList()
   }
)
// 提交新增
async function handleSubmit() {
@@ -330,7 +355,7 @@
      }))
      await gdPatrolTaskSaveApi(dataList)
      dialogMode.value === 'add' ? ElMessage.success('新增成功') : ElMessage.success('修改成功')
      dialogMode.value === 'edit' && await gdPatrolTaskAuditApi({ auditStatus: 7, id: preID })
      dialogMode.value === 'edit' && (await gdPatrolTaskAuditApi({ auditStatus: 7, id: preID }))
      visible.value = false
      emit('success')
   } finally {
@@ -340,33 +365,38 @@
// 打开弹框
async function open({ mode = 'add', row } = {}) {
   console.log(row,'rowrow')
   dialogMode.value = mode
   if (mode === 'add') {
   await getWorkOrderList()
   if (dialogMode.value === 'add') {
      selectedWorkOrderId.value = null
      selectedWorkOrder.value = null
      taskList.value = [initTaskRow()]
      flyerListMap.value = {}
   } else {
      // 编辑/查看模式 - 加载已有数据
      selectedWorkOrderId.value = row?.workOrderId
      handleWorkOrderChange(row?.workOrderId)
      taskList.value = [{ ...row }]
      flyerListMap.value = {}
      // 如果有巡查类型,加载对应的飞手列表
      if (row?.patrolTaskType) {
         getFlyerList(0, row.patrolTaskType)
      }
   }
}
onMounted(() => {
   getWorkOrderList()
   getFlyerList()
})
defineExpose({ open })
</script>
<style scoped lang="scss">
.detail-row-view{
.detail-row-view {
   margin-top: 10px;
}
.work-order-section{
.work-order-section {
   display: flex;
   align-items: center;
}