吉安感知网项目-前端
shuishen
2026-02-03 89380e6260a75d1d3b94de687ebcc2f50d50659d
applications/drone-command/src/views/detectionCountermeasure/taskSchedule/FormDiaLog.vue
@@ -12,12 +12,12 @@
               <div class="val">{{ formData.deviceSn }}</div>
            </el-col>
            <el-col :span="12">
               <div class="label">场景</div>
               <div class="val">{{ formData.defenseSceneName }}</div>
            </el-col>
            <el-col :span="12">
               <div class="label">区域</div>
               <div class="val">{{ formData.areaDivideName }}</div>
            </el-col>
            <el-col :span="12">
               <div class="label">场景</div>
               <div class="val">{{ formData.defenseSceneName }}</div>
            </el-col>
            <el-col :span="12">
               <div class="label">调度人员</div>
@@ -71,15 +71,18 @@
                  </el-select>
               </el-form-item>
            </el-col>
            <el-col :span="12">
               <el-form-item label="场景" prop="defenseSceneId">
                  <el-select class="command-select" popper-class="command-select-popper"
                     v-model="formData.defenseSceneId" placeholder="请选择" clearable @change="handleSceneChange">
                     v-model="formData.defenseSceneId" placeholder="请选择" clearable
                      @change="handleSceneChange">
                     <el-option v-for="item in sceneList" :key="item.id" :label="item.sceneName"
                        :value="item.id" />
                  </el-select>
               </el-form-item>
            </el-col>
            <el-col :span="12">
               <el-form-item label="区域" prop="areaDivideId">
                  <el-select class="command-select" popper-class="command-select-popper"
@@ -90,20 +93,8 @@
                  </el-select>
               </el-form-item>
            </el-col>
            <el-col :span="12">
               <el-form-item label="调度人员" prop="dispatchUser">
                  <el-input class="command-input" v-model="formData.dispatchUser" maxlength="50" placeholder="请输入"
                     clearable />
               </el-form-item>
            </el-col>
            <el-col :span="12">
               <el-form-item label="调度日期" prop="dispatchDateRange">
                  <el-date-picker class="command-date-picker" popper-class="command-date-picker-popper"
                     v-model="formData.dispatchDateRange" type="datetimerange" range-separator="至"
                     start-placeholder="开始日期" end-placeholder="结束日期" value-format="YYYY-MM-DD HH:mm:ss" />
               </el-form-item>
            </el-col>
            <el-col :span="24">
               <el-form-item label="调度位置" prop="longitude">
                  <!--                  <el-button @click="selectLocation" style="width: 100%">-->
                  <el-button style="width: 100%">
@@ -114,6 +105,21 @@
                  </el-button>
               </el-form-item>
            </el-col>
            <el-col :span="12">
               <el-form-item label="调度人员" prop="dispatchUser">
                  <el-input class="command-input" v-model="formData.dispatchUser" maxlength="50" placeholder="请输入"
                     clearable />
               </el-form-item>
            </el-col>
            <el-col :span="12">
               <el-form-item label="调度日期" prop="dispatchDateRange">
                  <el-date-picker class="command-date-picker" popper-class="command-date-picker-popper"
                     v-model="formData.dispatchDateRange" type="daterange" range-separator="至"
                     start-placeholder="开始日期" end-placeholder="结束日期" value-format="YYYY-MM-DD HH:mm:ss" />
               </el-form-item>
            </el-col>
            <el-col :span="24">
               <el-form-item label="调度内容" prop="dispatchContent">
                  <el-input class="command-input" v-model="formData.dispatchContent" type="textarea" :rows="3"
@@ -136,7 +142,7 @@
      </el-form>
      <template #footer>
         <el-button color="#2B2B4C" @click="handleCancel">{{ readonly ? '关闭' : '取消' }}</el-button>
         <el-button v-if="dialogMode != 'view'" color="#2B2B4C" @click="handleCancel">{{ readonly ? '关闭' : '取消' }}</el-button>
         <el-button color="#284FE3" v-if="!readonly" type="primary" :loading="submitting" :disabled="submitting"
            @click="handleSubmit">
            保存
@@ -158,9 +164,12 @@
import { ElMessage } from 'element-plus'
import { fwTaskScheduleDetailApi, fwTaskScheduleSubmitApi } from './taskScheduleApi'
import { fwAreaDivideListApi } from '@/views/areaManage/partition/partitionApi'
import { fwDefenseSceneListApi } from '@/views/areaManage/sceneConfig/sceneConfigApi'
import { fieldRules } from '@ztzf/utils'
import { PublicCesium } from '@/utils/cesium/publicCesium'
import * as Cesium from 'cesium'
import { saveOperationLog } from '@ztzf/apis'
import { useRoute } from 'vue-router'
// 初始化表单
const initForm = () => ({
@@ -186,7 +195,6 @@
})
const props = defineProps({
   sceneList: { type: Array, default: () => [] },
   deviceList: { type: Array, default: () => [] },
})
@@ -203,7 +211,9 @@
const titleEnum = ref({ edit: '编辑', view: '查看', add: '新增' })
const tempLocation = ref({ longitude: null, latitude: null })
const areaList = ref([]) // 区域列表
const sceneList = ref([]) // 场景列表
const deviceStatus = ref('')
const route = useRoute()
const rules = {
   deviceId: fieldRules(true),
@@ -229,9 +239,16 @@
   }
}
async function handleAreaChange (areaId) {
   const find = areaList.value.find(item => item.id === areaId)
   formData.value.longitude = find?.longitude
   formData.value.latitude = find?.latitude
}
// 场景选择变化处理
async function handleSceneChange (sceneId) {
   formData.value.areaDivideId = ''
   if (sceneId) {
      await loadAreaList(sceneId)
   } else {
@@ -239,16 +256,16 @@
   }
}
function handleAreaChange (areaId) {
   const find = areaList.value.find(item => item.id === areaId)
   formData.value.longitude = find?.longitude
   formData.value.latitude = find?.latitude
}
// 加载区域列表
async function loadAreaList (sceneId) {
   const res = await fwAreaDivideListApi({ sceneId })
   const res = await fwAreaDivideListApi({sceneId})
   areaList.value = res?.data?.data ?? []
}
// 加载场景列表
async function loadSceneList() {
   const res = await fwDefenseSceneListApi()
   sceneList.value = res?.data?.data ?? []
}
// 关闭弹框
@@ -272,6 +289,14 @@
         formData.value.dispatchEndTime = formData.value.dispatchDateRange[1]
      }
      await fwTaskScheduleSubmitApi(formData.value)
      const actionText = dialogMode.value === 'add' ? '新增' : '修改'
      saveOperationLog({
         requestUri: route.path,
         title: `${route.name || '任务调度'}-${actionText}`,
         type: 1
      })
      ElMessage.success(dialogMode.value === 'add' ? '新增成功' : '更新成功')
      visible.value = false
      emit('success')
@@ -319,7 +344,7 @@
            text: `${longitude.toFixed(6)}, ${latitude.toFixed(6)}`,
            font: '14px',
            fillColor: Cesium.Color.WHITE,
            backgroundColor: Cesium.Color.BLACK.withAlpha(0.45),
            backgroundColor: Cesium.Color.BLACK.withAlpha(0.6),
            backgroundPadding: new Cesium.Cartesian2(5, 5),
            pixelOffset: new Cesium.Cartesian2(0, -20),
            showBackground: true,
@@ -385,6 +410,10 @@
}
defineExpose({ open })
onMounted(() => {
   loadSceneList()
})
</script>
<style scoped lang="scss">
#mapContainer {