applications/drone-command/src/views/areaManage/sceneConfig/FormDiaLog.vue
@@ -116,7 +116,7 @@ <el-table class="command-table" ref="areaTableRef" :data="areaList.filter(item => item.areaName.includes(searchName))" row-key="id" @selection-change="handleAreaSelectionChange"> <el-table-column type="selection" width="55" /> <el-table-column type="selection" width="55" :reserve-selection="true" /> <el-table-column prop="areaName" show-overflow-tooltip label="区域名称" /> <el-table-column prop="areaType" show-overflow-tooltip label="区域类型"> <template v-slot="{ row }"> @@ -149,7 +149,7 @@ import { fieldRules, geomAnalysis, getDictLabel } from '@ztzf/utils' import CommonCesiumMap from '@/components/map-container/common-cesium-map.vue' import * as Cesium from 'cesium' import { fwAreaDivideListApi } from '../partition/partitionApi' import { fwAreaDivideDetailApi, fwAreaDivideListApi } from '../partition/partitionApi' import { DrawPolygon } from '@/utils/cesium/DrawPolygon' const initForm = () => ({ @@ -232,15 +232,23 @@ } // 关联区域变更 function handleAreaSelectionChange (rows) { selectedAreaRows.value = rows formData.value.areaDivideIds = rows.map(item => item.id) formData.value.areaCount = rows.length formData.value.defenseArea = calcDefenseArea(rows) async function handleAreaSelectionChange (rows) { const selectedRows = await ensureAreaGeom(rows) selectedAreaRows.value = selectedRows const ids = selectedRows.map(item => item.id) formData.value.areaDivideIds = ids.join(',') formData.value.areaCount = ids.length formData.value.defenseArea = calcDefenseArea(selectedRows) } // 渲染面 function renderingSurface () { console.log(geometricSource, 11111111) if (!geometricSource) { initMap() } if (!geometricSource) return geometricSource && geometricSource.entities.removeAll() selectedAreaRows.value.forEach(item => { if (item.geom) { @@ -267,14 +275,43 @@ return _.round(total, 2) } async function ensureAreaGeom (rows) { const missingRows = rows.filter(row => row?.id && !row.geom) if (!missingRows.length) return rows const detailList = await Promise.all( missingRows.map(row => fwAreaDivideDetailApi({ id: row.id }) .then(res => res?.data?.data) .catch(() => null) ) ) const detailMap = new Map( detailList.filter(Boolean).map(item => [String(item.id), item]) ) if (!detailMap.size) return rows areaList.value = areaList.value.map(item => { const detail = detailMap.get(String(item.id)) return detail ? { ...item, ...detail } : item }) return rows.map(item => { const detail = detailMap.get(String(item.id)) return detail ? { ...item, ...detail } : item }) } // 同步关联区域 function syncAreaSelection () { if (!areaTableRef.value) return areaTableRef.value.clearSelection() const rows = [] const arr = formData.value.areaDivideIds.split(',') const areaDivideIds = formData.value.areaDivideIds const arr = Array.isArray(areaDivideIds) ? areaDivideIds.map(item => String(item)) : String(areaDivideIds || '') .split(',') .filter(Boolean) areaList.value.forEach(row => { if (arr.includes(row.id)) { if (arr.includes(String(row.id))) { areaTableRef.value.toggleRowSelection(row, true) rows.push(row) } applications/drone-command/src/views/basicManage/deviceStock/FormDiaLog.vue
@@ -13,6 +13,10 @@ <div class="val">{{ formData.deviceType }}</div> </el-col> <el-col :span="12"> <div class="label">设备编码</div> <div class="val">{{ formData.deviceSn }}</div> </el-col> <el-col :span="12"> <div class="label">设备属性</div> <div class="val">{{ formData.deviceAtt }}</div> </el-col> @@ -86,6 +90,12 @@ <el-option v-for="item in dictObj.deviceType" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey" /> </el-select> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="设备编码" prop="deviceSn"> <el-input class="command-input" v-model="formData.deviceSn" maxlength="50" placeholder="请输入" clearable /> </el-form-item> </el-col> <el-col :span="12"> @@ -175,6 +185,7 @@ contactPhone: '', // 联系电话 deviceAtt: '', // 设备属性 deviceType: '', // 设备类型 deviceSn: '', // 设备编码 deviceModel: '', // 型号 deviceSpecification: '', // 规格 deviceName: '', // 设备名称 @@ -215,6 +226,7 @@ const rules = { deviceName: fieldRules(true, 50), deviceType: fieldRules(true), deviceSn: fieldRules(true, 50), deviceAtt: fieldRules(true), deviceModel: fieldRules(true, 50), deviceSpecification: fieldRules(true, 50), applications/drone-command/src/views/detectionCountermeasure/taskSchedule/FormDiaLog.vue
@@ -73,22 +73,22 @@ </el-col> <el-col :span="12"> <el-form-item label="区域" prop="areaDivideId"> <el-form-item label="场景" prop="defenseSceneId"> <el-select class="command-select" popper-class="command-select-popper" v-model="formData.areaDivideId" placeholder="请选择" clearable @change="handleAreaChange"> <el-option v-for="item in areaList" :key="item.id" :label="item.areaName" 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="defenseSceneId"> <el-form-item label="区域" prop="areaDivideId"> <el-select class="command-select" popper-class="command-select-popper" v-model="formData.defenseSceneId" placeholder="请先选择区域" clearable :disabled="!formData.areaDivideId" @change="handleSceneChange"> <el-option v-for="item in sceneList" :key="item.id" :label="item.sceneName" v-model="formData.areaDivideId" placeholder="请先选择场景" clearable :disabled="!formData.defenseSceneId" @change="handleAreaChange"> <el-option v-for="item in areaList" :key="item.id" :label="item.areaName" :value="item.id" /> </el-select> </el-form-item> @@ -237,30 +237,31 @@ } async function handleAreaChange (areaId) { formData.value.defenseSceneId = '' if (areaId) { await loadSceneList(areaId) } else { sceneList.value = [] } } // 场景选择变化处理 async function handleSceneChange (sceneId) { const find = sceneList.value.find(item => item.id === sceneId) 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 { areaList.value = [] } } // 加载区域列表 async function loadAreaList () { const res = await fwAreaDivideListApi() async function loadAreaList (sceneId) { const res = await fwAreaDivideListApi({sceneId}) areaList.value = res?.data?.data ?? [] } // 加载场景列表 async function loadSceneList(areaId) { const res = await fwDefenseSceneListApi({areaId}) async function loadSceneList() { const res = await fwDefenseSceneListApi() sceneList.value = res?.data?.data ?? [] } @@ -400,7 +401,7 @@ defineExpose({ open }) onMounted(() => { loadAreaList() loadSceneList() }) </script> <style scoped lang="scss">