From 3d3bdea35bda32ae6904e5e00fcdd77cb4a3ca95 Mon Sep 17 00:00:00 2001 From: tianyongbao Date: Wed, 1 Jul 2026 11:20:31 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=A4=AA=E9=98=B3=E8=83=BD=E7=BD=91?= =?UTF-8?q?=E6=8E=A7=E8=AE=BE=E7=BD=AE=EF=BC=8C=E6=96=B0=E5=A2=9E=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/fishery/device/index.ts | 13 + src/api/fishery/device/types.ts | 5 + src/api/iot/index.ts | 38 ++ src/types/components.d.ts | 2 + src/views/fishery/solarControl/index.vue | 612 +++++++++++++++++++++++ 5 files changed, 670 insertions(+) create mode 100644 src/api/iot/index.ts create mode 100644 src/views/fishery/solarControl/index.vue diff --git a/src/api/fishery/device/index.ts b/src/api/fishery/device/index.ts index 5790e11..aba5e82 100644 --- a/src/api/fishery/device/index.ts +++ b/src/api/fishery/device/index.ts @@ -16,6 +16,19 @@ export const listDevice = (query?: DeviceQuery): AxiosPromise => { }); }; +/** + * 查询太阳能网控设备列表 + * @param query + * @returns {*} + */ +export const listSolarDevice = (query?: DeviceQuery): AxiosPromise => { + return request({ + url: '/fishery/device/solar/list', + method: 'get', + params: query + }); +}; + /** * 查询设备管理详细 * @param id diff --git a/src/api/fishery/device/types.ts b/src/api/fishery/device/types.ts index c38ce67..838d2e2 100644 --- a/src/api/fishery/device/types.ts +++ b/src/api/fishery/device/types.ts @@ -234,6 +234,11 @@ export interface DeviceVO { */ pondName?: string; + /** + * 在线状态(online/offline) + */ + onlineStatus?: string; + /** * 创建时间(激活时间) */ diff --git a/src/api/iot/index.ts b/src/api/iot/index.ts new file mode 100644 index 0000000..41e423c --- /dev/null +++ b/src/api/iot/index.ts @@ -0,0 +1,38 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; + +export interface SolarPropertyCommand { + id: string | number; + properties: Record; + cache?: boolean; +} + +export interface SolarPropertyCommandResult { + deviceId: string | number; + serialNum: string; + online: boolean; + statusCode?: number; + properties: Record; + mode: 'direct' | 'cached'; + cached: boolean; + sent: boolean; +} + +export const getDeviceStatus = (devicetype: number, serialnum: string): AxiosPromise => { + return request({ + url: '/iot/device/status', + method: 'get', + params: { + devicetype, + serialnum + } + }); +}; + +export const sendSolarPropertyCommand = (data: SolarPropertyCommand): AxiosPromise => { + return request({ + url: '/iot/device/solar/property-command', + method: 'post', + data + }); +}; diff --git a/src/types/components.d.ts b/src/types/components.d.ts index ac54d2b..e4501a4 100644 --- a/src/types/components.d.ts +++ b/src/types/components.d.ts @@ -13,6 +13,7 @@ declare module 'vue' { Breadcrumb: typeof import('./../components/Breadcrumb/index.vue')['default'] DictTag: typeof import('./../components/DictTag/index.vue')['default'] Editor: typeof import('./../components/Editor/index.vue')['default'] + ElAlert: typeof import('element-plus/es')['ElAlert'] ElBadge: typeof import('element-plus/es')['ElBadge'] ElBreadcrumb: typeof import('element-plus/es')['ElBreadcrumb'] ElBreadcrumbItem: typeof import('element-plus/es')['ElBreadcrumbItem'] @@ -42,6 +43,7 @@ declare module 'vue' { ElMenu: typeof import('element-plus/es')['ElMenu'] ElMenuItem: typeof import('element-plus/es')['ElMenuItem'] ElOption: typeof import('element-plus/es')['ElOption'] + ElOptionGroup: typeof import('element-plus/es')['ElOptionGroup'] ElPagination: typeof import('element-plus/es')['ElPagination'] ElPopover: typeof import('element-plus/es')['ElPopover'] ElRadio: typeof import('element-plus/es')['ElRadio'] diff --git a/src/views/fishery/solarControl/index.vue b/src/views/fishery/solarControl/index.vue new file mode 100644 index 0000000..fc15c06 --- /dev/null +++ b/src/views/fishery/solarControl/index.vue @@ -0,0 +1,612 @@ + + + + +