吉安感知网项目-前端
罗广辉
2026-01-31 c8a416829d700542718fe5f1e5fa3c4036205828
Merge remote-tracking branch 'origin/master'
11 files modified
139 ■■■■ changed files
applications/drone-command/src/page/index/top/index.vue 4 ●●●● patch | view | raw | blame | history
applications/drone-command/src/views/areaManage/areaStatistics/index.vue 10 ●●●● patch | view | raw | blame | history
applications/drone-command/src/views/areaManage/precinctInfo/FormDiaLog.vue 43 ●●●●● patch | view | raw | blame | history
applications/drone-command/src/views/areaManage/sceneManage/FormDiaLog.vue 40 ●●●●● patch | view | raw | blame | history
applications/drone-command/src/views/basicManage/deviceStock/index.vue 6 ●●●● patch | view | raw | blame | history
applications/drone-command/src/views/detectionCountermeasure/countermeasureEvaluation/index.vue 8 ●●●● patch | view | raw | blame | history
applications/drone-command/src/views/detectionCountermeasure/deviceAppConfig/index.vue 4 ●●●● patch | view | raw | blame | history
applications/task-work-order/src/views/orderView/flyingHand/FlyingHandDialog.vue 16 ●●●● patch | view | raw | blame | history
applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/ApplyViewDialog.vue 1 ●●●● patch | view | raw | blame | history
applications/task-work-order/src/views/orderView/orderManage/clueEvents/ViewDiaLog.vue 4 ●●●● patch | view | raw | blame | history
applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/FormDiaLog.vue 3 ●●●● patch | view | raw | blame | history
applications/drone-command/src/page/index/top/index.vue
@@ -101,8 +101,8 @@
      })
    },
    jumpMH () {
      const adminUrl = import.meta.env.VITE_APP_DASHBOARD_URL
      window.location.href = `${adminUrl}#/gatewayPage`
      // const adminUrl = import.meta.env.VITE_APP_DASHBOARD_URL
      // window.location.href = `${adminUrl}#/gatewayPage`
    },
  },
}
applications/drone-command/src/views/areaManage/areaStatistics/index.vue
@@ -6,9 +6,9 @@
                    clearable @clear="handleSearch" />
            </el-form-item>
            <el-form-item label="区域类型" prop="areaType">
            <el-form-item label="区域类型" prop="areaTypeKeys">
                <el-select class="command-select" popper-class="command-select-popper"
                    v-model="searchParams.areaType" placeholder="请选择" clearable @change="handleSearch">
                    v-model="searchParams.areaTypeKeys" placeholder="请选择" clearable @change="handleSearch">
                    <el-option v-for="item in dictObj.areaType" :key="item.dictKey" :label="item.dictValue"
                        :value="item.dictKey" />
                </el-select>
@@ -33,9 +33,9 @@
                <el-table class="command-table" :data="list">
                    <el-table-column type="index" show-overflow-tooltip width="64" label="序号" />
                    <el-table-column prop="areaName" show-overflow-tooltip label="区域名称" />
                    <el-table-column prop="areaType" show-overflow-tooltip label="区域类型">
                    <el-table-column prop="areaTypeKeys" show-overflow-tooltip label="区域类型">
                        <template v-slot="{ row }">
                            {{ getDictLabel(row.areaType, dictObj.areaType) }}
                            {{ getDictLabel(row.areaTypeKeys, dictObj.areaType) }}
                        </template>
                    </el-table-column>
                    <el-table-column prop="sceneName" show-overflow-tooltip label="关联场景" />
@@ -79,7 +79,7 @@
// 初始化查询参数
const initSearchParams = () => ({
    areaName: '', // 区域名称
    areaType: '', // 区域类型
    areaTypeKeys: '', // 区域类型
    sceneType: '', // 场景类型
    current: 1, // 当前页
    size: 10, // 每页大小
applications/drone-command/src/views/areaManage/precinctInfo/FormDiaLog.vue
@@ -111,7 +111,7 @@
</template>
<script setup>
import { computed, nextTick, ref } from 'vue'
import { computed, nextTick, ref, watch } from 'vue'
import { ElMessage } from 'element-plus'
import { fwPoliceStationDetailApi, fwPoliceStationSubmitApi } from './precinctInfoApi'
import { fieldRules } from '@ztzf/utils'
@@ -121,6 +121,7 @@
import { saveOperationLog } from '@ztzf/apis'
import { useRoute } from 'vue-router'
import positionIcon from '@/assets/images/areaManage/positionIcon.png'
import { MapTooltip } from '@/utils/cesium/shapeTools/Tooltip'
const initForm = () => ({
    address: '', // 位置
@@ -185,6 +186,10 @@
let viewer
let redPointEntity
let leftClickBound = false
let mouseMoveBound = false
let mapTooltip
let publicCesium
const tooltipEventKey = 'precinct-info-point-tip'
const labelParams = {
    font: '18px',
    fillColor: Cesium.Color.WHITE, // 文字颜色:白色
@@ -271,12 +276,38 @@
    await nextTick()
    const map = inlineMapRef.value?.getMap()
    viewer = map?.viewer || null
    publicCesium = map?.publicCesium || null
    if (viewer && !leftClickBound) {
        map.publicCesium?.addLeftClickEvent?.(null, LeftClickEvent)
        leftClickBound = true
    }
    if (viewer && !readonly.value) {
        ensurePointTooltip()
    }
    if (formData.value.longitude != null && formData.value.latitude != null) {
        setMapPoint(formData.value.longitude, formData.value.latitude)
    }
}
function ensurePointTooltip() {
    if (!viewer || !publicCesium || mouseMoveBound) return
    mapTooltip ||= new MapTooltip(viewer, { offset: { x: 16, y: 24 } })
    publicCesium.addMouseHandler?.(
        null,
        movement => {
            if (!visible.value || readonly.value) return
            mapTooltip?.show('点击地图选择派出所位置', movement.endPosition)
        },
        tooltipEventKey
    )
    mouseMoveBound = true
}
function clearPointTooltip() {
    mapTooltip?.hide()
    if (publicCesium && mouseMoveBound) {
        publicCesium.removeMouseHandler?.(tooltipEventKey)
        mouseMoveBound = false
    }
}
@@ -296,6 +327,7 @@
    formData.value = dialogMode.value === 'add' ? initForm() : row
    redPointEntity = null
    leftClickBound = false
    clearPointTooltip()
    if (dialogMode.value !== 'add') {
        await loadDetail()
    }
@@ -305,6 +337,15 @@
    }, 500)
}
watch(
    () => visible.value,
    val => {
        if (!val) {
            clearPointTooltip()
        }
    }
)
defineExpose({ open })
</script>
<style scoped lang="scss">
applications/drone-command/src/views/areaManage/sceneManage/FormDiaLog.vue
@@ -160,6 +160,7 @@
import { buildEllipsePositions } from '@/utils/cesium/shapeTools'
import { cartesian3Convert } from '@/utils/cesium/mapUtil'
import { AREA_TYPE_STYLE_MAP, BUFFER_LEVEL_STYLES, DEFAULT_AREA_STYLE } from '@ztzf/constants'
import { MapTooltip } from '@/utils/cesium/shapeTools/Tooltip'
// 初始化表单数据
const initForm = () => ({
@@ -198,6 +199,10 @@
let redPointEntity
let areaDisplaySource
let leftClickBound = false
let mouseMoveBound = false
let mapTooltip
let publicCesium
const tooltipEventKey = 'scene-manage-point-tip'
// 表单验证规则
const rules = {
@@ -555,13 +560,36 @@
// 初始化地图实例
function initMap() {
    if (viewer) return
    const map = mapRef.value?.getMap()
    if (!map?.viewer) return
    viewer = map.viewer
    viewer ||= map.viewer
    publicCesium ||= map.publicCesium
    if (!readonly.value && !leftClickBound) {
        map.publicCesium?.addLeftClickEvent?.(null, LeftClickEvent)
        leftClickBound = true
    }
    if (!readonly.value) ensurePointTooltip()
}
function ensurePointTooltip() {
    if (!viewer || !publicCesium || mouseMoveBound) return
    mapTooltip ||= new MapTooltip(viewer, { offset: { x: 28, y: 24 } })
    publicCesium.addMouseHandler?.(
        null,
        movement => {
            if (!visible.value || readonly.value) return
            mapTooltip?.show('点击地图选择指挥点位置', movement.endPosition)
        },
        tooltipEventKey
    )
    mouseMoveBound = true
}
function clearPointTooltip() {
    mapTooltip?.hide()
    if (publicCesium && mouseMoveBound) {
        publicCesium.removeMouseHandler?.(tooltipEventKey)
        mouseMoveBound = false
    }
}
@@ -626,6 +654,9 @@
    redPointEntity = null
    await nextTick()
    initMap()
    if (dialogMode.value === 'view') {
        clearPointTooltip()
    }
    await getSceneConfigList()
    if (dialogMode.value === 'add') {
        mapRef.value?.zoomToAdminBoundary?.()
@@ -652,7 +683,10 @@
watch(
    () => visible.value,
    val => {
        if (!val) clearAreaDisplay()
        if (!val) {
            clearAreaDisplay()
            clearPointTooltip()
        }
    }
)
applications/drone-command/src/views/basicManage/deviceStock/index.vue
@@ -81,17 +81,17 @@
                    <el-table-column prop="purpose" show-overflow-tooltip width="130" label="用途" />
                    <el-table-column prop="belongDeptName" show-overflow-tooltip width="160" label="所属部门" />
                    <el-table-column prop="charger" show-overflow-tooltip width="100" label="负责人" />
                    <el-table-column prop="yxzt" show-overflow-tooltip width="116" label="运行状态">
                    <el-table-column prop="yxzt" show-overflow-tooltip width="96" label="运行状态">
                        <template v-slot="{ row }">
                            {{ getDictLabel(row.status, dictObj.deviceStatus) }}
                        </template>
                    </el-table-column>
                    <el-table-column prop="yxzt" show-overflow-tooltip width="116" label="出库状态">
                    <el-table-column prop="yxzt" show-overflow-tooltip width="96" label="出库状态">
                        <template v-slot="{ row }">
                            {{ getDictLabel(row.trackStatus, trackStatusOptions) }}
                        </template>
                    </el-table-column>
                    <el-table-column label="操作" class-name="operation-btns" width="140">
                    <el-table-column label="操作" class-name="operation-btns">
                        <template v-slot="{ row }">
                            <el-link @click="handleView(row)">查看</el-link>
                            <el-link @click="handleEdit(row)">编辑</el-link>
applications/drone-command/src/views/detectionCountermeasure/countermeasureEvaluation/index.vue
@@ -60,7 +60,7 @@
                    <el-table-column prop="droneName" show-overflow-tooltip width="130" label="无人机名称" />
                    <el-table-column prop="droneType" show-overflow-tooltip width="130" label="无人机类型" />
                    <el-table-column prop="droneDeviceCode" show-overflow-tooltip width="140" label="设备编码" />
                    <el-table-column prop="findTime" show-overflow-tooltip width="140" label="发现时间" />
                    <el-table-column prop="findTime" show-overflow-tooltip width="156" label="发现时间" />
                    <el-table-column prop="counterEffect" show-overflow-tooltip width="120" label="反制效果">
                        <template v-slot="{ row }">
                            {{ getDictLabel(row.counterEffect, dictObj.counterEffect) }}
@@ -76,14 +76,14 @@
                    <el-table-column prop="deviceSn" show-overflow-tooltip width="140" label="反制设备编码" />
                    <el-table-column prop="areaCode" show-overflow-tooltip width="120" label="场景" />
                    <el-table-column prop="areaCode" show-overflow-tooltip width="120" label="区域" />
                    <el-table-column show-overflow-tooltip width="160" label="部署位置">
                    <el-table-column show-overflow-tooltip width="172" label="部署位置">
                        <template v-slot="{ row }">
                            {{ row.deployLongitude && row.deployLatitude ? `${row.deployLongitude}, ${row.deployLatitude}` : '' }}
                        </template>
                    </el-table-column>
                    <el-table-column prop="coverRadiusM" show-overflow-tooltip width="120" label="覆盖范围">
                    <el-table-column prop="coverRadiusM" show-overflow-tooltip width="120" label="覆盖范围(m)">
                        <template v-slot="{ row }">
                            {{ row.coverRadiusM ? `${row.coverRadiusM}米` : '' }}
                            {{ row.coverRadiusM ? `${row.coverRadiusM}` : '' }}
                        </template>
                    </el-table-column>
                    <el-table-column prop="workMode" show-overflow-tooltip width="120" label="工作模式">
applications/drone-command/src/views/detectionCountermeasure/deviceAppConfig/index.vue
@@ -65,7 +65,7 @@
                    <el-table-column prop="deviceModel" show-overflow-tooltip label="设备型号" />
                    <el-table-column prop="deviceName" show-overflow-tooltip label="设备名称" />
                    <el-table-column prop="deviceSn" show-overflow-tooltip label="设备编码" />
                    <el-table-column prop="deviceStatus" show-overflow-tooltip label="设备状态">
                    <el-table-column prop="deviceStatus" show-overflow-tooltip width="96" label="设备状态">
                        <template v-slot="{ row }">
                            {{ getDictLabel(row.status, dictObj.deviceStatus) }}
                        </template>
@@ -76,7 +76,7 @@
                        </template>
                    </el-table-column>
                    <el-table-column prop="manufacturer" show-overflow-tooltip label="厂商" />
                    <el-table-column prop="contactPhone" show-overflow-tooltip label="联系方式" />
                    <el-table-column prop="contactPhone" show-overflow-tooltip width="112" label="联系方式" />
                    <el-table-column prop="sceneName" show-overflow-tooltip label="所属场景" />
                    <el-table-column label="操作" class-name="operation-btns">
                        <template v-slot="{ row }">
applications/task-work-order/src/views/orderView/flyingHand/FlyingHandDialog.vue
@@ -37,6 +37,10 @@
        <div class="val">{{ formData.projectExperience }}</div>
      </el-col>
      <el-col :span="12">
        <div class="label">飞手地址</div>
        <div class="val">{{ formData.flyerAddress }}</div>
      </el-col>
      <el-col :span="24">
        <div class="label">飞手证书</div>
        <div class="val">
            <el-image
@@ -169,18 +173,6 @@
                        />
                    </el-form-item>
                </el-col>
                <!-- <el-col :span="24" v-if="dialogType === 'view'">
                    <el-form-item label="飞手证书" prop="certification">
                        <el-image
                            v-for="(item, index) in formData.certification"
                            :key="index"
                            :src="item"
                            :preview-src-list="formData.certification"
                            class="gd-image"
                            style="width: 100px; height: 100px; margin-right: 10px;"
                        />
                    </el-form-item>
                </el-col> -->
            </el-row>
        </el-form>
        <template #footer>
applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/ApplyViewDialog.vue
@@ -73,7 +73,6 @@
                    <div class="upload-container">
                        <el-upload
                        :http-request="handleHttpRequest"
                        :limit="3"
                        :on-success="handleUploadSuccess"
                        :on-error="handleUploadError"
                        :on-remove="handleFileRemove"
applications/task-work-order/src/views/orderView/orderManage/clueEvents/ViewDiaLog.vue
@@ -32,7 +32,7 @@
                <el-table-column label="操作" class-name="operation-btns" width="140">
                    <template v-slot="{ row }">
                        <el-link type="primary" @click="openDistributeDialog(row)" v-if="permission.clueEvents_distribute && (row.distributeStatus === 0 || row.distributeStatus === 2)">
                            转为事件并分发
                            {{ row.distributeStatus === 2 ? '再次分发':'转为事件并分发' }}
                        </el-link>
                        <el-button disabled type="text" v-else>转为事件并分发</el-button>
                    </template>
@@ -76,7 +76,7 @@
const distributeStatusOptions = [
    { label: '未分发', value: 0 },
    { label: '已分发', value: 1 },
    { label: '已退回', value: 2 },
    { label: '被退回', value: 2 },
    { label: '已确认', value: 3 },
]
applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/FormDiaLog.vue
@@ -117,9 +117,10 @@
                                任务执行时间
                            </template>
                            <template v-slot="{ row }">
<!--                                gd-date-picker-popper-->
                                <el-date-picker
                                    class="gd-date-picker"
                                    popper-class="gd-date-picker-popper"
                                    popper-class=""
                                    v-model="row.executeTime"
                                    type="datetime"
                                    placeholder="请选择"