From af736485e4a29133e51ebdf496f516443988670c Mon Sep 17 00:00:00 2001 From: fengerli <528575642@qq.com> Date: Tue, 26 Aug 2025 16:20:35 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E6=8E=A7=E5=88=B6=E6=8F=90?= =?UTF-8?q?=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/controlCenter/controlPanel/index.ts | 69 +++- src/api/controlCenter/controlPanel/types.ts | 54 ++- src/assets/images/close.png | Bin 0 -> 261 bytes src/assets/images/close_HL.png | Bin 0 -> 261 bytes src/utils/function.ts | 111 ++++++ src/utils/request.ts | 6 +- src/views/controlCenter/6170/index.vue | 374 ++++++++++++++---- .../controlPanel/components/map.vue | 110 ++++-- .../controlCenter/controlPanel/index.vue | 87 ++-- .../equipmentManagement/deviceType/index.vue | 13 +- src/views/register.vue | 4 - 11 files changed, 660 insertions(+), 168 deletions(-) create mode 100644 src/assets/images/close.png create mode 100644 src/assets/images/close_HL.png create mode 100644 src/utils/function.ts diff --git a/src/api/controlCenter/controlPanel/index.ts b/src/api/controlCenter/controlPanel/index.ts index 5ffda76..aaadb77 100644 --- a/src/api/controlCenter/controlPanel/index.ts +++ b/src/api/controlCenter/controlPanel/index.ts @@ -12,13 +12,76 @@ export const devicegroupList = (params) => { // 设备列表 export const deviceControlCenterList = (params) => { return request({ - url: '/api/device/controlCenter/list', + url: '/api/device/list', method: 'get', params: params }); }; +// 设备详情 +export const deviceDeatil = (id) => { + return request({ + url: `/api/bjq/device/${id}`, + method: 'get', + }); +}; +// 人员信息发送 +export const registerPersonInfo = (data: any) => { + return request({ + url: `/api/bjq/device/registerPersonInfo`, + method: 'post', + data: data + }); +}; +// 灯光亮度 +export const lightBrightnessSettings = (data: any) => { + return request({ + url: `/api/bjq/device/lightBrightnessSettings`, + method: 'post', + data: data + }); +}; +// 灯光模式 +export const lightModeSettings = (data: any) => { + return request({ + url: `/api/bjq/device/lightModeSettings`, + method: 'post', + data: data + }); +}; +// 激光模式 +export const laserModeSettings = (data: any) => { + return request({ + url: `/api/bjq/device/laserModeSettings`, + method: 'post', + data: data + }); +}; +// 强制报警 +export const sendAlarmMessage = (data: any) => { + return request({ + url: `/api/bjq/device/sendAlarmMessage`, + method: 'post', + data: data + }); +}; +// 获取设备实时状态 +export const deviceRealTimeStatus = (data: any) => { + return request({ + url: `/api/device/realTimeStatus`, + method: 'post', + data: data + }); +}; + export default { -devicegroupList, -deviceControlCenterList + devicegroupList, + deviceControlCenterList, + deviceDeatil, + registerPersonInfo, + lightBrightnessSettings, + lightModeSettings, + laserModeSettings, + sendAlarmMessage, + deviceRealTimeStatus }; \ No newline at end of file diff --git a/src/api/controlCenter/controlPanel/types.ts b/src/api/controlCenter/controlPanel/types.ts index 6754f7d..4c2c090 100644 --- a/src/api/controlCenter/controlPanel/types.ts +++ b/src/api/controlCenter/controlPanel/types.ts @@ -4,16 +4,52 @@ export interface deviceQuery { deviceId: string; deviceName: string; deviceStatus: string; - deviceMac:string; - deviceImei:string; - currentOwnerId:string; - communicationMode:string; - queryParams:string; - pageSize:Number; + deviceMac: string; + deviceImei: string; + currentOwnerId: string; + communicationMode: string; + queryParams: string; + pageSize: Number; + deviceType: string } export interface deviceVO { - user: UserVO; - roles: string[]; - permissions: string[]; + id: number; // 设备ID + deviceName: string; // 设备名称(对应子组件的device.name) + typeName: string; // 设备类型/型号(对应子组件的device.model) + onlineStatus: 0 | 1; // 设备状态(0=失效/离线,1=正常/在线,对应子组件的device.status) + lng?: number; // 经度(地图打点用) + lat?: number; // 纬度(地图打点用) + // 其他字段... } +// 1. 定义设备详情的类型(根据接口返回字段调整!关键:和后端返回的字段名一致) +export interface DeviceDetail { + deviceName: string; // 设备名称 + deviceImei: string; // 设备型号 + onlineStatus: 0 | 1; // 设备状态(0=离线,1=在线) + batteryPercentage: number; // 电量(如80,对应80%) + batteryRemainingTime: string; // 续航(如"115"表示115分钟,或直接返回"1小时55分钟") + longitude: string; // 经度 + latitude: string; // 纬度 + address: string; // 地址 + currentLightMode?: string;// 当前选中的灯光模式(如"strong",对应强光) + sendMsg: string; + lightBrightness: string; + personnelInfo: { // 人员信息(嵌套对象,根据接口调整) + unitName: string; // 单位 + position: string; // 职位 + name: string; // 姓名 + code: string; // ID(身份证/工号) + }; + +} +// 定义灯光模式的类型接口 +export interface LightMode { + id: string; + name: string; + icon: string; + activeIcon: string; + active: boolean; + switchStatus: boolean; + instructValue: string +} \ No newline at end of file diff --git a/src/assets/images/close.png b/src/assets/images/close.png new file mode 100644 index 0000000000000000000000000000000000000000..2e969aaa6374f2f72747108c72bbd04262dd6ef9 GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^N+8V03?vykXEp*!#^NA%C&rs6b?Si}&H|6fVg?3o zVGw3ym^DWND99Gz6XFV_&p-a#dD_he$YLr9@(X78A3afNE0EXa>EaktF(>uRM&3gX zBFq8S;x8}7nsH2KSbTtEipNBbB!;jARxd6UBhHg-3%QkcKHj}(LFKJYcx+1KGE4L1DW%Hl zGyZs(ul%~0r+JOl&YaZRNsFf+u8eP({e0^Y@jqv*7SF#|{S@db22WQ%mvv4FO#rE{ BUOxZ; literal 0 HcmV?d00001 diff --git a/src/assets/images/close_HL.png b/src/assets/images/close_HL.png new file mode 100644 index 0000000000000000000000000000000000000000..a444b33cc72f0596d896655d569c714e30d53b36 GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^N+8V03?vykXEp*!#^NA%C&rs6b?Si}&H|6fVg?3o zVGw3ym^DWND99Gz6XFV_8ESte&0AUqWH6Nk`2{olkDjQs70B!Iba4!+n3H;DBkv&x z5#|7E@t2ok%{V4AEIz<7#bY8z5<^%5s~4Aw5$8#^h1^OzAMakYpz`0Or~V8!7fQ-s z<{Q0{V2jzd#%f8=YW8O_`?!BmdKI;Vst0QyN? AOaK4? literal 0 HcmV?d00001 diff --git a/src/utils/function.ts b/src/utils/function.ts new file mode 100644 index 0000000..ae7acff --- /dev/null +++ b/src/utils/function.ts @@ -0,0 +1,111 @@ +/** + * 生成短ID (16位字符) 类似随机数 + */ +export const generateShortId = (): string => { + const crypto = window.crypto || (window as any).msCrypto; + if (crypto?.getRandomValues) { + return Array.from(crypto.getRandomValues(new Uint32Array(3))) + .map(n => n.toString(36)) + .join('') + .slice(0, 16); + } + return Date.now().toString(36) + Math.random().toString(36).substr(2, 8); +}; + +export default generateShortId; + +// 类型定义 +export interface DeviceStatusOptions { + functionMode: number; + batchId: string; + typeName: string; + deviceImei: string; + interval?: number; +} +export interface ApiResponse { + code: number; + msg: string; + data: T; +} +export interface DeviceStatusData { + functionAccess: 'OK' | 'ACTIVE' | 'FAILED' | 'TIMEOUT' | string; + [key: string]: any; +} +export type ApiClientFunction = (params: any) => Promise; +/** + * 获取设备状态(带自动轮询) + * @param options - 配置对象 + * @param options.functionMode - 功能模式 + * @param options.batchId - 批次ID + * @param options.typeName - 类型名称 + * @param options.deviceImei - 设备IMEI + * @param options.interval - 轮询间隔(毫秒),默认500 + * @param apiClient - 接口调用函数 + * @returns 设备状态响应 + */ +export async function getDeviceStatus( + options: DeviceStatusOptions, + apiClient: ApiClientFunction +): Promise> { + const { + functionMode, + batchId, + typeName, + deviceImei, + interval = 500 + } = options; + // 添加最大重试次数防止无限循环 + const checkStatus = async (): Promise> => { + try { + const res = await apiClient({ + functionMode, + batchId, + typeName, + deviceImei + }); + if (res.code !== 200) { + throw new Error(res.msg || '请求失败'); + } + switch (res.data.functionAccess) { + case 'OK': + return res; + case 'ACTIVE': + await new Promise(resolve => setTimeout(resolve, interval)); + return checkStatus(); + case 'FAILED': + throw new Error('设备操作失败'); + case 'TIMEOUT': + throw new Error('设备响应超时'); + default: + throw new Error(`未知状态: ${res.data.functionAccess}`); + } + } catch (error) { + console.error('设备状态轮询错误:', error); + throw error; + } + }; + + return checkStatus(); +} + +// 使用示例 +/* +import { getDeviceStatus } from '@/utils/deviceUtils'; +import { apiGetDeviceStatus } from '@/api/device'; + +try { + const result = await getDeviceStatus( + { + functionMode: 1, + batchId: '12345', + typeName: 'sensor', + deviceImei: '1234567890', + interval: 1000 + }, + apiGetDeviceStatus + ); + console.log('设备状态:', result.data); +} catch (error) { + console.error('获取设备状态失败:', error); +} +*/ \ No newline at end of file diff --git a/src/utils/request.ts b/src/utils/request.ts index 1f6ff93..e7b87c3 100644 --- a/src/utils/request.ts +++ b/src/utils/request.ts @@ -69,9 +69,9 @@ service.interceptors.request.use( const s_time = sessionObj.time; // 请求时间 const interval = 500; // 间隔时间(ms),小于此时间视为重复提交 if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) { - const message = '数据正在处理,请勿重复提交'; - console.warn(`[${s_url}]: ` + message); - return Promise.reject(new Error(message)); + const message = ''; + // console.warn(`[${s_url}]: ` + message); + // return Promise.reject(new Error(message)); } else { cache.session.setJSON('sessionObj', requestObj); } diff --git a/src/views/controlCenter/6170/index.vue b/src/views/controlCenter/6170/index.vue index b41866c..16eb7df 100644 --- a/src/views/controlCenter/6170/index.vue +++ b/src/views/controlCenter/6170/index.vue @@ -2,11 +2,15 @@
-
设备名称:6170零零一
-
设备型号:BJQ6170
-
设备状态:在线
-
电量:80%
-
续航:1小时55分钟
+
设备名称:{{ deviceDetail.deviceName }}
+
设备型号:{{ deviceDetail.deviceImei }}
+
设备状态: + + {{ deviceDetail.onlineStatus === 1 ? "在线" : "离线" }} + +
+
电量:{{ deviceDetail.batteryPercentage || 0 }}%
+
续航:{{ deviceDetail.batteryRemainingTime || "0" }} 分钟
@@ -18,13 +22,20 @@

灯光模式

-
+
{{ mode.name }}
+ +
+ +
{{ laserMode.name }}
+ +
@@ -32,23 +43,26 @@
灯光亮度 - + % - 保存 + 保存
- 强制报警 + 强制报警

位置信息

- 经纬度 114°7'E 30°28'N + 经纬度 {{ deviceDetail && deviceDetail.longitude ? + Number(deviceDetail.longitude).toFixed(4) : '无' }} + {{ deviceDetail && deviceDetail.latitude ? Number(deviceDetail.latitude).toFixed(4) + : '无' }}
- -
地址 ksjkjwekrnjewrnjewrnjwerjweb
+ +
地址 {{ deviceDetail.address || "未获取到地址" }}
查看
@@ -64,21 +78,25 @@
单位: - +
职位: - +
姓名 - +
ID: - +
- 登记 + 登记
@@ -86,9 +104,9 @@

发送信息

- - 发送 + + 发送
@@ -97,18 +115,11 @@
diff --git a/src/views/controlCenter/controlPanel/index.vue b/src/views/controlCenter/controlPanel/index.vue index 89bb868..4341d81 100644 --- a/src/views/controlCenter/controlPanel/index.vue +++ b/src/views/controlCenter/controlPanel/index.vue @@ -24,15 +24,20 @@ 发送消息 电子围栏 强制报警 - 高级筛选 +
+ + 高级筛选 +
+ - - + + - - - + + + @@ -75,8 +80,8 @@
- - + +