吉安感知网项目-前端
shuishen
2026-02-03 29e74883cb022d90c40d411838e953b576057ade
feat:场景配置,选择场景后显示设备列表
2 files modified
149 ■■■■ changed files
applications/drone-command/src/views/api.txt 90 ●●●● patch | view | raw | blame | history
applications/drone-command/src/views/areaManage/sceneConfig/FormDiaLog.vue 59 ●●●●● patch | view | raw | blame | history
applications/drone-command/src/views/api.txt
@@ -3,7 +3,7 @@
## 列表
**接口地址**:`/area/fwPoliceStation/list`
**接口地址**:`/device/fwDevice/list`
**请求方式**:`GET`
@@ -15,7 +15,7 @@
**响应数据类型**:`*/*`
**接口描述**:<p>获取全部派出所</p>
**接口描述**:<p>传入isAreaSelect、areaId、areaIds(多个用,隔开获取对应区域绑定设备数据)、status</p>
@@ -25,7 +25,13 @@
**请求参数**:
暂无
| 参数名称 | 参数说明 | 请求类型    | 是否必须 | 数据类型 | schema |
| -------- | -------- | ----- | -------- | -------- | ------ |
|areaId|areaId|query|false|integer(int64)||
|areaIds|areaIds(多个用,隔开)|query|false|string||
|isAreaSelect|isAreaSelect|query|false|integer(int32)||
|isTrack|isTrack|query|false|integer(int32)||
|status|status|query|false|integer(int32)||
**响应状态**:
@@ -33,7 +39,7 @@
| 状态码 | 说明 | schema |
| -------- | -------- | ----- | 
|200|OK|R«List«FwPoliceStationVO»»|
|200|OK|R«List«FwDeviceVO»»|
|401|Unauthorized||
|403|Forbidden||
|404|Not Found||
@@ -45,21 +51,41 @@
| 参数名称 | 参数说明 | 类型 | schema |
| -------- | -------- | ----- |----- | 
|code|状态码|integer(int32)|integer(int32)|
|data|承载数据|array|FwPoliceStationVO|
|&emsp;&emsp;address|派出所地址|string||
|&emsp;&emsp;areaCode|区域编码|string||
|&emsp;&emsp;contactPerson|联系人|string||
|&emsp;&emsp;contactPhone|联系方式|string||
|data|承载数据|array|FwDeviceVO|
|&emsp;&emsp;azimuth|方位角 0-360°|integer(int32)||
|&emsp;&emsp;batteryPct|电量百分比 0-100|integer(int32)||
|&emsp;&emsp;belongDept|所属部门id|integer(int64)||
|&emsp;&emsp;belongDeptName|所属部门名称|string||
|&emsp;&emsp;charger|负责人|string||
|&emsp;&emsp;contactPhone|联系电话|string||
|&emsp;&emsp;createDept|创建部门|integer(int64)||
|&emsp;&emsp;createTime|创建时间|string(date-time)||
|&emsp;&emsp;createUser|创建人|integer(int64)||
|&emsp;&emsp;id|主键id|integer(int64)||
|&emsp;&emsp;latitude|纬度|number(double)||
|&emsp;&emsp;longitude|经度|number(double)||
|&emsp;&emsp;stationName|派出所名称|string||
|&emsp;&emsp;status|状态(0正常 1停用)|integer(int32)||
|&emsp;&emsp;detectTargetCnt|侦测目标数量|integer(int32)||
|&emsp;&emsp;deviceAtt|设备属性(无线电/光电/雷达)|string||
|&emsp;&emsp;deviceModel|型号|string||
|&emsp;&emsp;deviceName|设备名称|string||
|&emsp;&emsp;deviceSn|设备sn|string||
|&emsp;&emsp;deviceSpecification|规格|string||
|&emsp;&emsp;deviceType|设备类型(察打一体/便捷侦测箱/反制枪)|string||
|&emsp;&emsp;effectiveRangeKm|有效范围 km|number||
|&emsp;&emsp;elevation|俯仰角 -90-+90°|integer(int32)||
|&emsp;&emsp;id|主键|integer(int64)||
|&emsp;&emsp;isShared|是否被共享给当前机构|boolean||
|&emsp;&emsp;latitude|纬度|string||
|&emsp;&emsp;longitude|经度|string||
|&emsp;&emsp;manufacturer|生产厂商|string||
|&emsp;&emsp;outTarget|出库去向|string||
|&emsp;&emsp;purpose|用途|string||
|&emsp;&emsp;remark|备注|string||
|&emsp;&emsp;sceneName|场景名称|string||
|&emsp;&emsp;shareId|共享记录ID|integer(int64)||
|&emsp;&emsp;source|来源|string||
|&emsp;&emsp;status|运行状态(0:在线/1:离线/2:故障/3:报废)|integer(int32)||
|&emsp;&emsp;trackStatus|设备出入库状态 0未出库1已出库|integer(int32)||
|&emsp;&emsp;updateTime|更新时间|string(date-time)||
|&emsp;&emsp;updateUser|更新人|integer(int64)||
|&emsp;&emsp;workMode|工作模式:1.侦测中/2.信号干扰中/3.诱导驱离中/4.待机|string||
|msg|返回消息|string||
|success|是否成功|boolean||
@@ -70,23 +96,43 @@
    "code": 0,
    "data": [
        {
            "address": "",
            "areaCode": "",
            "contactPerson": "",
            "azimuth": 0,
            "batteryPct": 0,
            "belongDept": 0,
            "belongDeptName": "",
            "charger": "",
            "contactPhone": "",
            "createDept": 0,
            "createTime": "",
            "createUser": 0,
            "detectTargetCnt": 0,
            "deviceAtt": "",
            "deviceModel": "",
            "deviceName": "",
            "deviceSn": "",
            "deviceSpecification": "",
            "deviceType": "",
            "effectiveRangeKm": 0,
            "elevation": 0,
            "id": 0,
            "latitude": 0,
            "longitude": 0,
            "stationName": "",
            "isShared": true,
            "latitude": "",
            "longitude": "",
            "manufacturer": "",
            "outTarget": "",
            "purpose": "",
            "remark": "",
            "sceneName": "",
            "shareId": 0,
            "source": "",
            "status": 0,
            "trackStatus": 0,
            "updateTime": "",
            "updateUser": 0
            "updateUser": 0,
            "workMode": ""
        }
    ],
    "msg": "",
    "success": true
}
```
```
applications/drone-command/src/views/areaManage/sceneConfig/FormDiaLog.vue
@@ -50,6 +50,22 @@
                            </el-table>
                        </div>
                    </div>
                    <div class="detail-title">设备列表</div>
                    <div class="command-table-container">
                        <div class="command-table-content">
                            <el-table
                                class="command-table"
                                :data="deviceList"
                                :loading="deviceLoading"
                                row-key="id"
                            >
                                <el-table-column prop="deviceName" show-overflow-tooltip label="设备名称" />
                                <el-table-column prop="deviceType" show-overflow-tooltip label="设备类型" />
                                <el-table-column prop="deviceModel" show-overflow-tooltip label="设备型号" />
                                <el-table-column prop="deviceSn" show-overflow-tooltip label="设备SN" />
                            </el-table>
                        </div>
                    </div>
                </div>
                <el-form
@@ -128,6 +144,23 @@
                            </el-table>
                        </el-form-item>
                    </div>
                    <div class="detail-title">设备列表</div>
                    <div class="command-table-container">
                        <div class="command-table-content">
                            <el-table
                                class="command-table"
                                :data="deviceList"
                                :loading="deviceLoading"
                                row-key="id"
                            >
                                <el-table-column prop="deviceName" show-overflow-tooltip label="设备名称" />
                                <el-table-column prop="deviceType" show-overflow-tooltip label="设备类型" />
                                <el-table-column prop="deviceModel" show-overflow-tooltip label="设备型号" />
                                <el-table-column prop="deviceSn" show-overflow-tooltip label="设备SN" />
                            </el-table>
                        </div>
                    </div>
                </el-form>
                <div class="footer">
@@ -160,6 +193,7 @@
import CommonCesiumMap from '@/components/map-container/common-cesium-map.vue'
import * as Cesium from 'cesium'
import { fwAreaDivideDetailApi, fwAreaDivideListApi } from '../partition/partitionApi'
import { fwDeviceListApi } from '@/views/basicManage/deviceStock/fwDevice'
import {
    addBufferRadiusLabelEntity,
    buildEllipsePositions,
@@ -189,6 +223,8 @@
const searchName = ref('')
const areaList = ref([]) // 关联区域列表
const selectedAreaRows = ref([]) //选中列表
const deviceList = ref([]) // 设备列表
const deviceLoading = ref(false)
const dictObj = inject('dictObj')
const mapRef = ref(null)
const route = useRoute()
@@ -242,6 +278,20 @@
    if (areaList.value.length) return
    const res = await fwAreaDivideListApi({ filterSelected: 1, sceneId: formData.value.id })
    areaList.value = res?.data?.data ?? []
}
async function loadDeviceListByAreaIds(areaIdsKey) {
    if (!areaIdsKey) {
        deviceList.value = []
        return
    }
    deviceLoading.value = true
    try {
        const res = await fwDeviceListApi({ areaIds: areaIdsKey })
        deviceList.value = res?.data?.data ?? []
    } finally {
        deviceLoading.value = false
    }
}
// 关联区域变更
@@ -514,6 +564,15 @@
}
watch(() => selectedAreaRows.value, renderSelectedAreas)
const deviceAreaIdsKey = computed(() =>
    selectedAreaRows.value.map(item => item?.id).filter(Boolean).join(',')
)
watch(
    () => deviceAreaIdsKey.value,
    val => {
        loadDeviceListByAreaIds(val)
    }
)
watch(
    () => visible.value,
    val => {