From bdd99287cfd5252bea4647ea04762e2fcba8e7eb Mon Sep 17 00:00:00 2001 From: Kven <2955163637@qq.com> Date: Wed, 19 Mar 2025 17:53:25 +0800 Subject: [PATCH] =?UTF-8?q?feat(iot):=20=E4=BC=98=E5=8C=96=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E5=92=8C=E4=BA=A7=E5=93=81=E7=9B=B8=E5=85=B3=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加设备名称模糊查询功能 - 更新设备详情和列表展示样式 - 修改产品编辑界面,移除不必要的上传功能 - 优化产品 TSL界面,增加事件状态切换功能 - 重构部分 API 接口命名 --- src/api/device.ts | 11 +- src/api/product.ts | 17 ++- src/api/tsl.ts | 5 + .../iot/device/components/device-detail.vue | 10 +- .../iot/device/components/device-edit.vue | 6 +- src/views/iot/device/index.vue | 4 +- src/views/iot/deviceMap/index.vue | 101 ++++++++++++++++-- .../iot/product/components/product-edit.vue | 90 ++++++++-------- .../iot/product/components/product-tsl.vue | 53 +++++++-- 9 files changed, 219 insertions(+), 78 deletions(-) diff --git a/src/api/device.ts b/src/api/device.ts index a1a2209..18a4ae5 100644 --- a/src/api/device.ts +++ b/src/api/device.ts @@ -50,12 +50,21 @@ export function queryDeviceList(data: DeviceRecord) { }); } +// 名称模糊查询 +export function queryDeviceByNameList(data: any) { + return axios({ + url: `/api/rest/device/list`, + method: 'get', + params: data, + }); +} + // 查看详情 export function queryDeviceDetail(id: number) { return axios.get(`/api/rest/device/${id}`); } // 名称模糊查询 -export function queryDeviceByName(data: any) { +export function queryProductByName(data: any) { return axios({ url: `/api/rest/product/fuzzy`, method: 'get', diff --git a/src/api/product.ts b/src/api/product.ts index ad14eff..365daff 100644 --- a/src/api/product.ts +++ b/src/api/product.ts @@ -67,12 +67,19 @@ export function deleteProduct(id: number) { return axios.delete(`/api/rest/product/${id}`); } -// 文件上传 +// 添加附件 export function addAttachments(data: any) { - return axios.post(`/api/rest/product/upload`, data); + return axios({ + method: 'post', + url: '/api/rest/attachment', + headers: { + 'Content-Type': 'multipart/form-data', + }, + data, + }); } -// 文件删除 -export function deleteAttachment(id: number) { - return axios.delete(`/api/rest/product/attachments/${id}`); +// 删除附件 +export function deleteAttachment(id: string) { + return axios.delete(`/api/rest/attachment/delete/${id}`); } diff --git a/src/api/tsl.ts b/src/api/tsl.ts index 01f25e0..c655bf7 100644 --- a/src/api/tsl.ts +++ b/src/api/tsl.ts @@ -88,3 +88,8 @@ export function deleteEvent(data: any) { export function queryServeDetail(id: number) { return axios.get(`/api/rest/tsl/serve/${id}`); } + +// 事件启用 +export function enableEvent(id: number) { + return axios.patch(`/api/rest/tsl/event/toggle/${id}`); +} diff --git a/src/views/iot/device/components/device-detail.vue b/src/views/iot/device/components/device-detail.vue index bb10245..56d02e5 100644 --- a/src/views/iot/device/components/device-detail.vue +++ b/src/views/iot/device/components/device-detail.vue @@ -271,8 +271,12 @@ const fields = ref([]); const fetchData = async (Id: number) => { try { - const [detailRes, recordRes, serveRes, eventRes] = await Promise.all([ - queryDeviceDetail(Id), + // 1. 先获取设备详情 + const detailRes = await queryDeviceDetail(Id); + renderData.value = detailRes.data; + + // 2. 根据设备详情中的 clientId 和 productId 调用其他接口 + const [recordRes, serveRes, eventRes] = await Promise.all([ queryDeviceRecord({ clientId: renderData.value.clientId, size: 10, @@ -290,7 +294,7 @@ }), ]); - renderData.value = detailRes.data; + // 3. 更新其他数据 deviceReportData.value = recordRes.data.records; deviceServerData.value = serveRes.data.records; deviceEventData.value = eventRes.data.records; diff --git a/src/views/iot/device/components/device-edit.vue b/src/views/iot/device/components/device-edit.vue index 0524729..17a5284 100644 --- a/src/views/iot/device/components/device-edit.vue +++ b/src/views/iot/device/components/device-edit.vue @@ -158,8 +158,8 @@ import { createDevice, queryDeviceByName, - queryDeviceDetail, - updateDevice, + queryDeviceDetail, queryProductByName, + updateDevice } from '@/api/device'; import type { SelectOptionData } from '@arco-design/web-vue/es/select/interface'; import { queryProductDetail } from '@/api/product'; @@ -243,7 +243,7 @@ loading.value = true; options.value = []; window.setTimeout(async () => { - const res = await queryDeviceByName({ + const res = await queryProductByName({ name: value, }); options.value = res.data.map((item: any) => { diff --git a/src/views/iot/device/index.vue b/src/views/iot/device/index.vue index 27cda9d..ce3d5ec 100644 --- a/src/views/iot/device/index.vue +++ b/src/views/iot/device/index.vue @@ -235,7 +235,7 @@ import useTableOption from '@/hooks/table-option'; import { Message } from '@arco-design/web-vue'; import { useRouter } from 'vue-router'; - import { deleteDevice, DeviceRecord, queryDeviceByName, queryDeviceList } from '@/api/device'; + import { deleteDevice, DeviceRecord, queryDeviceList, queryProductByName } from '@/api/device'; import DeviceEdit from '@/views/iot/device/components/device-edit.vue'; const generateFormModel = () => { @@ -342,7 +342,7 @@ loading.value = true; options.value = []; window.setTimeout(async () => { - const res = await queryDeviceByName({ + const res = await queryProductByName({ name: value, }); options.value = res.data.map((item: any) => { diff --git a/src/views/iot/deviceMap/index.vue b/src/views/iot/deviceMap/index.vue index 97a7f0d..c5008ef 100644 --- a/src/views/iot/deviceMap/index.vue +++ b/src/views/iot/deviceMap/index.vue @@ -1,6 +1,17 @@