From 89380e6260a75d1d3b94de687ebcc2f50d50659d Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Tue, 03 Feb 2026 15:44:33 +0800
Subject: [PATCH] feat:环境变量配置调整
---
applications/drone-command/src/views/detectionCountermeasure/taskSchedule/FormDiaLog.vue | 251 ++++++++++++++++++++++----------------------------
1 files changed, 111 insertions(+), 140 deletions(-)
diff --git a/applications/drone-command/src/views/detectionCountermeasure/taskSchedule/FormDiaLog.vue b/applications/drone-command/src/views/detectionCountermeasure/taskSchedule/FormDiaLog.vue
index 5cb95e6..a217adb 100644
--- a/applications/drone-command/src/views/detectionCountermeasure/taskSchedule/FormDiaLog.vue
+++ b/applications/drone-command/src/views/detectionCountermeasure/taskSchedule/FormDiaLog.vue
@@ -1,14 +1,7 @@
<template>
- <el-dialog
- class="command-page-view-dialog"
- v-model="visible"
- :title="titleEnum[dialogMode]"
- destroy-on-close
- :close-on-click-modal="false"
- @closed="handleClosed"
- >
+ <el-dialog class="command-page-view-dialog" v-model="visible" :title="titleEnum[dialogMode]" destroy-on-close
+ :close-on-click-modal="false" @closed="handleClosed">
<div v-if="readonly" class="detail-container">
- <div class="detail-title">调度详情</div>
<el-row>
<el-col :span="12">
<div class="label">设备名称</div>
@@ -19,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>
@@ -52,156 +45,106 @@
</el-col>
</el-row>
</div>
- <el-form
- v-else
- ref="formRef"
- :model="formData"
- :rules="rules"
- :disabled="readonly"
- label-width="100px"
- class="dialog-form"
- >
+ <el-form v-else ref="formRef" :model="formData" :rules="rules" :disabled="readonly" label-width="100px"
+ class="dialog-form">
<el-row>
<el-col :span="12">
<el-form-item label="设备" prop="deviceId">
- <el-select
- class="command-select"
- popper-class="command-select-popper"
- v-model="formData.deviceId"
- placeholder="请选择"
- clearable
- @change="handleDeviceChange"
- >
- <el-option v-for="item in deviceList" :key="item.id" :label="item.deviceName" :value="item.id" />
+ <el-select class="command-select" popper-class="command-select-popper"
+ v-model="formData.deviceId" placeholder="请选择" clearable @change="handleDeviceChange">
+ <el-option v-for="item in deviceList" :key="item.id" :label="item.deviceName"
+ :value="item.id" />
</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"
- disabled
- placeholder="选择设备后自动带出"
- />
+ <el-input class="command-input" v-model="formData.deviceSn" disabled placeholder="选择设备后自动带出" />
</el-form-item>
</el-col>
+ <el-col :span="12">
+ <el-form-item label="设备状态">
+ <el-select class="command-select" popper-class="command-select-popper"
+ v-model="deviceStatus" disabled placeholder="选择设备后自动带出">
+ <el-option v-for="item in dictObj.deviceStatus" :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="defenseSceneId">
- <el-select
- class="command-select"
- popper-class="command-select-popper"
- 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 class="command-select" popper-class="command-select-popper"
+ 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"
- 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 class="command-select" popper-class="command-select-popper"
+ 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>
</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%">
{{
- formData.longitude && formData.latitude ? `${formData.longitude}, ${formData.latitude}` : '选择区域后自动带出'
+ formData.longitude && formData.latitude ? `${formData.longitude}, ${formData.latitude}` :
+ '选择区域后自动带出'
}}
</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"
- maxlength="500"
- placeholder="请输入"
- clearable
- />
+ <el-input class="command-input" v-model="formData.dispatchContent" type="textarea" :rows="3"
+ maxlength="500" placeholder="请输入" clearable />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="调度结果" prop="dispatchResult">
- <el-input
- class="command-input"
- v-model="formData.dispatchResult"
- type="textarea"
- :rows="3"
- maxlength="500"
- placeholder="请输入"
- clearable
- />
+ <el-input class="command-input" v-model="formData.dispatchResult" type="textarea" :rows="3"
+ maxlength="500" placeholder="请输入" clearable />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="处理措施" prop="disposeMeasure">
- <el-input
- class="command-input"
- v-model="formData.disposeMeasure"
- type="textarea"
- :rows="3"
- maxlength="500"
- placeholder="请输入"
- clearable
- />
+ <el-input class="command-input" v-model="formData.disposeMeasure" type="textarea" :rows="3"
+ maxlength="500" placeholder="请输入" clearable />
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
- <el-button color="#2B2B4C" @click="handleCancel">{{ readonly ? '关闭' : '取消' }}</el-button>
- <el-button
- color="#284FE3"
- v-if="!readonly"
- type="primary"
- :loading="submitting"
- :disabled="submitting"
- @click="handleSubmit"
- >
+ <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">
保存
</el-button>
</template>
@@ -221,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 = () => ({
@@ -249,9 +195,10 @@
})
const props = defineProps({
- sceneList: { type: Array, default: () => [] },
deviceList: { type: Array, default: () => [] },
})
+
+const dictObj = inject('dictObj')
const emit = defineEmits(['success'])
const formRef = ref(null) // 表单实例
@@ -264,6 +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),
@@ -274,22 +224,31 @@
}
// 设备选择变化处理
-function handleDeviceChange(deviceId) {
+function handleDeviceChange (deviceId) {
const device = props.deviceList.find(item => item.id === deviceId)
if (device) {
formData.value.deviceName = device.deviceName
formData.value.deviceSn = device.deviceSn
formData.value.deviceStatus = device.deviceStatus
+ deviceStatus.value = String(device.status)
} else {
formData.value.deviceName = ''
formData.value.deviceSn = ''
formData.value.deviceStatus = ''
+ deviceStatus.value = ''
}
}
+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) {
+async function handleSceneChange (sceneId) {
formData.value.areaDivideId = ''
+
if (sceneId) {
await loadAreaList(sceneId)
} else {
@@ -297,29 +256,29 @@
}
}
-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 })
+async function loadAreaList (sceneId) {
+ const res = await fwAreaDivideListApi({sceneId})
areaList.value = res?.data?.data ?? []
}
+// 加载场景列表
+async function loadSceneList() {
+ const res = await fwDefenseSceneListApi()
+ sceneList.value = res?.data?.data ?? []
+}
+
// 关闭弹框
-function handleCancel() {
+function handleCancel () {
visible.value = false
}
-function handleClosed() {
+function handleClosed () {
formData.value = initForm()
}
// 提交新增/编辑
-async function handleSubmit() {
+async function handleSubmit () {
const isValid = await formRef.value?.validate().catch(() => false)
if (!isValid) return
submitting.value = true
@@ -330,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')
@@ -339,7 +306,7 @@
}
// 加载详情
-async function loadDetail() {
+async function loadDetail () {
if (!formData.value.id) return
const res = await fwTaskScheduleDetailApi({ id: formData.value.id })
const data = res?.data?.data ?? {}
@@ -355,7 +322,7 @@
}
// 左键点击事件处理
-function LeftClickEvent(click) {
+function LeftClickEvent (click) {
const pos = click.position
const cartesian3 = viewer.camera.pickEllipsoid(pos, viewer.scene.globe.ellipsoid)
if (!cartesian3) {
@@ -377,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,
@@ -396,7 +363,7 @@
}
// 地图弹框关闭处理
-function positionClosed() {
+function positionClosed () {
redPointEntity = null
}
@@ -404,7 +371,7 @@
let redPointEntity
// 选择位置
-async function selectLocation() {
+async function selectLocation () {
visible1.value = true
await nextTick()
const publicCesiumInstance = new PublicCesium({
@@ -419,13 +386,13 @@
}
// 地图取消
-function handleMapCancel() {
+function handleMapCancel () {
tempLocation.value = { longitude: null, latitude: null }
visible1.value = false
}
// 地图确认
-function handleMapConfirm() {
+function handleMapConfirm () {
if (tempLocation.value.longitude != null && tempLocation.value.latitude != null) {
formData.value.longitude = _.round(tempLocation.value.longitude, 6)
formData.value.latitude = _.round(tempLocation.value.latitude, 6)
@@ -434,7 +401,7 @@
}
// 打开弹框
-async function open({ mode, row } = {}) {
+async function open ({ mode, row } = {}) {
dialogMode.value = mode || 'add'
formData.value = dialogMode.value === 'add' ? initForm() : { ...row }
if (dialogMode.value !== 'add') {
@@ -443,6 +410,10 @@
}
defineExpose({ open })
+
+onMounted(() => {
+ loadSceneList()
+})
</script>
<style scoped lang="scss">
#mapContainer {
--
Gitblit v1.9.3