From 98845e72e36792927df4902b5e3bef3daeb7bcd7 Mon Sep 17 00:00:00 2001 From: haohao <1036606149@qq.com> Date: Sun, 14 Jun 2026 16:21:02 +0800 Subject: [PATCH] =?UTF-8?q?feat(iot):=20=E8=AE=BE=E5=A4=87=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E9=A1=B5=E6=96=B0=E5=A2=9E=E8=AE=BE=E5=A4=87=E5=BD=B1?= =?UTF-8?q?=E5=AD=90=20Tab?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 支持期望/上报属性对比、期望状态下发、影子开关与重置,并展示原始影子 JSON。 --- src/api/iot/device/shadow/index.ts | 51 ++++ .../device/detail/DeviceDetailsShadow.vue | 232 ++++++++++++++++++ src/views/iot/device/device/detail/index.vue | 8 + 3 files changed, 291 insertions(+) create mode 100644 src/api/iot/device/shadow/index.ts create mode 100644 src/views/iot/device/device/detail/DeviceDetailsShadow.vue diff --git a/src/api/iot/device/shadow/index.ts b/src/api/iot/device/shadow/index.ts new file mode 100644 index 000000000..3ac9124b8 --- /dev/null +++ b/src/api/iot/device/shadow/index.ts @@ -0,0 +1,51 @@ +import request from '@/config/axios' + +/** 设备影子属性对比 VO */ +export interface DeviceShadowPropertyVO { + identifier: string + name: string + dataType: string + dataSpecs?: any + dataSpecsList?: any[] + desiredValue?: any + reportedValue?: any + desiredTime?: number + reportedTime?: number +} + +/** 设备影子 VO */ +export interface DeviceShadowVO { + version: number + shadowTime: number + status: number + properties: DeviceShadowPropertyVO[] + desired: Record + reported: Record + metadata: Record +} + +/** 设备影子 API */ +export const DeviceShadowApi = { + /** 获取设备影子 */ + getDeviceShadow: async (deviceId: number) => { + return await request.get({ + url: `/iot/device/shadow/get`, + params: { deviceId } + }) + }, + + /** 更新期望状态 */ + updateDesiredState: async (data: { deviceId: number; desired: Record }) => { + return await request.put({ url: `/iot/device/shadow/update-desired`, data }) + }, + + /** 更新影子开关状态 */ + updateShadowStatus: async (data: { deviceId: number; status: number }) => { + return await request.put({ url: `/iot/device/shadow/update-status`, data }) + }, + + /** 重置影子 */ + resetShadow: async (deviceId: number) => { + return await request.delete({ url: `/iot/device/shadow/reset`, params: { deviceId } }) + } +} diff --git a/src/views/iot/device/device/detail/DeviceDetailsShadow.vue b/src/views/iot/device/device/detail/DeviceDetailsShadow.vue new file mode 100644 index 000000000..078ed5aef --- /dev/null +++ b/src/views/iot/device/device/detail/DeviceDetailsShadow.vue @@ -0,0 +1,232 @@ + + + + + + diff --git a/src/views/iot/device/device/detail/index.vue b/src/views/iot/device/device/detail/index.vue index 8682b5aa8..1e9590e09 100644 --- a/src/views/iot/device/device/detail/index.vue +++ b/src/views/iot/device/device/detail/index.vue @@ -27,6 +27,13 @@ + + +