s# 无人装备前端集成说明 ## 概述 本文档说明如何在前端界面中集成无人装备的添加功能,实现装备数据的永久化存储。 ## 后端API接口 ### 1. 添加无人装备 **接口地址:** `POST /manage/api/v1/devices/{workspace_id}/ue-device/create` **请求参数:** ```json { "deviceCode": "DEV001", "deviceName": "Mavic 3E", "deviceType": 0, "serialNumber": "1581F5FHC248A00DXGLU", "parentCode": "", "domain": 0, "height": 100.0, "payloadType": "标准载荷", "flightSpeed": 65.0, "longitude": 116.397128, "latitude": 39.916527, "batteryLevel": 85, "strikeRange": 5.0, "enduranceTime": 45, "deviceStatus": 0, "description": "高性能无人机", "tenantId": 1 } ``` **参数说明:** - `deviceCode`: 设备编号(必填,唯一) - `deviceName`: 设备名称(必填) - `deviceType`: 设备类型(必填,0: 无人机 1: 无人车 2: 巡飞弹) - `serialNumber`: 设备序列号(必填) - `parentCode`: 父设备编号(可选) - `domain`: 设备域(可选,0: 设备本身 1: 遥控类 2: 架内设备 3: 架外设备) - `height`: 高度(米,可选) - `payloadType`: 载荷类型(可选) - `flightSpeed`: 飞行速度(km/h,可选) - `longitude`: 经度(可选) - `latitude`: 纬度(可选) - `batteryLevel`: 电量百分比(可选) - `strikeRange`: 侦察范围(km,可选) - `enduranceTime`: 续航时间(分钟,可选) - `deviceStatus`: 设备状态(可选,0: 离线 1: 在线 2: 故障 3: 维护中) - `description`: 设备描述(可选) - `tenantId`: 租户ID(必填) **响应示例:** ```json { "code": 0, "message": "success", "data": { "id": 1, "deviceCode": "DEV001", "deviceName": "Mavic 3E", "deviceType": 0, "deviceTypeName": "无人机", "serialNumber": "1581F5FHC248A00DXGLU", "parentCode": "", "onlineStatus": 0, "domain": 0, "height": 100.0, "payloadType": "标准载荷", "flightSpeed": 65.0, "longitude": 116.397128, "latitude": 39.916527, "batteryLevel": 85, "strikeRange": 5.0, "enduranceTime": 45, "deviceStatus": 0, "deviceStatusName": "离线", "lastOnlineTime": null, "lastLocationTime": null, "description": "高性能无人机", "tenantId": 1, "createTime": "2025-01-20T10:30:00", "updateTime": "2025-01-20T10:30:00" } } ``` ### 2. 获取无人装备列表 **接口地址:** `GET /manage/api/v1/devices/{workspace_id}/ue-devices` **请求参数:** - `domain`: 设备域(可选,0: 无人机 1: 无人车 2: 巡飞弹) - `page`: 页码(可选,默认1) - `pageSize`: 页大小(可选,默认1000) **响应示例:** ```json { "code": 0, "message": "success", "data": [ { "id": 1, "deviceCode": "DEV001", "deviceName": "Mavic 3E", "deviceType": 0, "deviceTypeName": "无人机", "serialNumber": "1581F5FHC248A00DXGLU", "parentCode": "", "onlineStatus": 0, "domain": 0, "height": 100.0, "payloadType": "标准载荷", "flightSpeed": 65.0, "longitude": 116.397128, "latitude": 39.916527, "batteryLevel": 85, "strikeRange": 5.0, "enduranceTime": 45, "deviceStatus": 0, "deviceStatusName": "离线", "lastOnlineTime": null, "lastLocationTime": null, "description": "高性能无人机", "tenantId": 1, "createTime": "2025-01-20T10:30:00", "updateTime": "2025-01-20T10:30:00" } ] } ``` ## 前端集成示例 ### 1. 修改现有的getDeviceList函数 在您的前端代码中,修改 `getDeviceList` 函数以支持无人装备: ```typescript // 获取无人机列表 export const getDeviceList = async (domain) => { let res = await req.get(`/manage/api/v1/devices/${workspace_id}/devices/bound`, { params: { page: 1, page_size: 1000, domain } }); return res.data; }; // 新增:获取无人装备列表(MySQL存储) export const getUeDeviceList = async (domain) => { let res = await req.get(`/manage/api/v1/devices/${workspace_id}/ue-devices`, { params: { domain, page: 1, page_size: 1000 } }); return res.data; }; ``` ### 2. 添加装备创建函数 ```typescript // 创建无人装备 export const createUeDevice = async (deviceData) => { let res = await req.post(`/manage/api/v1/devices/${workspace_id}/ue-device/create`, deviceData); return res.data; }; ``` ### 3. 修改前端界面逻辑 在您的前端界面中,修改装备添加逻辑: ```typescript // 无人机数据初始化(修改版) const flyDeviceInit = async () => { try { // 获取原有设备列表 let resFly = await getDeviceList(0); // 获取无人机列表 let resRc = await getDeviceList(2); // 获取遥控器列表 // 获取MySQL存储的无人装备列表 let resUeDevices = await getUeDeviceList(0); // 获取无人机装备 // 合并数据 let allDevices = [...resFly.data, ...resUeDevices]; // 处理数据... console.log('设备列表:', allDevices); } catch (error) { console.error('设备初始化失败:', error); } }; // 添加新装备 const addNewDevice = async (deviceInfo) => { try { const deviceData = { deviceCode: deviceInfo.deviceCode, deviceName: deviceInfo.deviceName, deviceType: 0, // 0: 无人机 serialNumber: deviceInfo.serialNumber, payloadType: deviceInfo.payloadType || "标准载荷", strikeRange: deviceInfo.strikeRange || 5.0, enduranceTime: deviceInfo.enduranceTime || 45, deviceStatus: 0, // 默认离线 description: deviceInfo.description || "", tenantId: 1 // 根据实际情况设置 }; const result = await createUeDevice(deviceData); if (result.code === 0) { // 添加成功,刷新列表 await flyDeviceInit(); console.log('装备添加成功:', result.data); } else { console.error('装备添加失败:', result.message); } } catch (error) { console.error('添加装备时发生错误:', error); } }; ``` ### 4. 界面操作说明 #### 添加装备的步骤: 1. **点击"+"按钮**:在无人装备界面点击右上角的"+"按钮 2. **填写装备信息**: - 设备编号:输入唯一的设备编号(如:DEV001) - 设备名称:输入设备名称(如:Mavic 3E) - 设备序列号:输入设备SN(如:1581F5FHC248A00DXGLU) - 载荷类型:选择或输入载荷类型(如:标准载荷) - 侦察范围:输入侦察范围(如:5km) - 续航时间:输入续航时间(如:45分钟) - 设备描述:输入设备描述(可选) 3. **提交保存**:点击保存按钮,系统会调用后端API将数据保存到MySQL数据库 4. **查看结果**:添加成功后,新装备会出现在设备列表中,并且数据会永久保存在MySQL数据库中 #### 数据同步: - **实时数据**:设备的位置、电量、高度等实时数据仍然通过WebSocket获取 - **基础信息**:设备的基础信息(名称、编号、类型等)存储在MySQL中 - **状态更新**:设备状态变更时会同时更新MySQL数据库 ## 注意事项 1. **设备编号唯一性**:每个设备的编号必须唯一,系统会检查重复 2. **租户隔离**:不同租户的设备数据是隔离的 3. **数据一致性**:确保MongoDB和MySQL数据的一致性 4. **错误处理**:前端需要处理API调用失败的情况 5. **权限控制**:确保只有有权限的用户才能添加设备 ## 测试建议 1. **功能测试**:测试添加、查询、更新、删除功能 2. **数据验证**:验证必填字段的校验 3. **并发测试**:测试同时添加多个设备的情况 4. **异常测试**:测试网络异常、服务器异常等情况 ## 联系支持 如有问题或需要技术支持,请联系开发团队。