From 37267ae6d42564d27833385ed1b011039ba7505e Mon Sep 17 00:00:00 2001 From: XieYongHong <18010623010@163.com> Date: Thu, 13 Jul 2023 17:04:05 +0800 Subject: [PATCH 1/2] fix: bug#16279 --- .../device/components/Metadata/Base/Base.vue | 2 +- .../components/Metadata/Base/columns.tsx | 11 ++ .../Base/components/Events/ConfigParams.vue | 14 +- .../Alarm/Configuration/HandTrigger/index.vue | 33 +++- .../Configuration/Save/Scene/Save/index.vue | 34 +++- .../rule-engine/Alarm/Configuration/index.vue | 38 +++-- .../Alarm/Log/TabComponent/index.vue | 156 +++++++++++++----- yarn.lock | 4 +- 8 files changed, 231 insertions(+), 61 deletions(-) diff --git a/src/views/device/components/Metadata/Base/Base.vue b/src/views/device/components/Metadata/Base/Base.vue index 0c018ac9..2cbeba62 100644 --- a/src/views/device/components/Metadata/Base/Base.vue +++ b/src/views/device/components/Metadata/Base/Base.vue @@ -42,7 +42,7 @@ : !editStatus ? '暂无改动数据': '保存', placement: hasOperate('add', type) ? 'topRight' : 'top', }" - @click="handleSaveClick" + @click="handleSaveClick()" > 保存 diff --git a/src/views/device/components/Metadata/Base/columns.tsx b/src/views/device/components/Metadata/Base/columns.tsx index 9e4cfd5f..21153344 100644 --- a/src/views/device/components/Metadata/Base/columns.tsx +++ b/src/views/device/components/Metadata/Base/columns.tsx @@ -210,6 +210,17 @@ export const useColumns = (type?: MetadataType, target?: 'device' | 'product', n title: '配置参数', dataIndex: 'properties', width: 100, + form: { + required: true, + rules: [{ + validator(_: any, value: any) { + // if (!value?.type) { + return Promise.reject('请选择数据类型') + // } + // return Promise.resolve() + } + }] + }, control(newValue, oldValue) { if (newValue && !oldValue) { return true diff --git a/src/views/device/components/Metadata/Base/components/Events/ConfigParams.vue b/src/views/device/components/Metadata/Base/components/Events/ConfigParams.vue index 9e42e757..f52742db 100644 --- a/src/views/device/components/Metadata/Base/components/Events/ConfigParams.vue +++ b/src/views/device/components/Metadata/Base/components/Events/ConfigParams.vue @@ -84,12 +84,24 @@ const columns = [ }] }, control(newValue: any, oldValue: any) { - return oldValue.valueType.type !== oldValue?.valueType?.type + return newValue.valueType?.type !== oldValue?.valueType?.type }, }, { title: '其他配置', dataIndex: 'config', + form: { + required: true, + rules: [{ + validator(_: any, value: any) { + console.log(value) + // if (!value?.type) { + return Promise.reject('请选择数据类型') + // } + // return Promise.resolve() + } + }] + }, control(newValue: any, oldValue: any) { if (newValue && !oldValue) { return true diff --git a/src/views/rule-engine/Alarm/Configuration/HandTrigger/index.vue b/src/views/rule-engine/Alarm/Configuration/HandTrigger/index.vue index f60755da..dcecccf4 100644 --- a/src/views/rule-engine/Alarm/Configuration/HandTrigger/index.vue +++ b/src/views/rule-engine/Alarm/Configuration/HandTrigger/index.vue @@ -90,11 +90,38 @@ import { _execute } from '@/api/rule-engine/configuration'; const columns = [ { - title: '名称', + title: '场景名称', dataIndex: 'name', key: 'name', search: { - type: 'string', + type: 'select', + options: async () => { + const res = await query( + { + sorts: [ + { + name: 'createTime', + order: 'desc', + }, + ], + terms: [ + { + column: 'id', + termType: 'alarm-bind-rule$not', + value: props.data?.id, + }, + { column: 'triggerType', termType: 'eq', value: 'manual' } + ] + } + ); + if (res.status === 200) { + return res.result.data.map((item: any) => ({ + label: item.name, + value: item.id, + })); + } + return [] + } }, }, { @@ -133,7 +160,7 @@ const terms = [ terms: [ { column: 'id', - termType: 'alarm-bind-rule', + termType: 'alarm-bind-rule$not', value: props.data?.id, }, { diff --git a/src/views/rule-engine/Alarm/Configuration/Save/Scene/Save/index.vue b/src/views/rule-engine/Alarm/Configuration/Save/Scene/Save/index.vue index f0aacb72..78babe2f 100644 --- a/src/views/rule-engine/Alarm/Configuration/Save/Scene/Save/index.vue +++ b/src/views/rule-engine/Alarm/Configuration/Save/Scene/Save/index.vue @@ -91,7 +91,39 @@ const columns = [ dataIndex: 'name', key: 'name', search: { - type: 'string', + type: 'select', + options: async () => { + const res = await query( + { + sorts: [ + { + name: 'createTime', + order: 'desc', + }, + ], + terms: [ + { + column: 'id', + termType: 'alarm-bind-rule$not', + value: props.id, + type: 'and', + }, + { + column: 'triggerType', + termType: 'eq', + value: props.type === 'other' ? undefined : 'device', + }, + ] + } + ); + if (res.status === 200) { + return res.result.data.map((item: any) => ({ + label: item.name, + value: item.id, + })); + } + return [] + } }, }, { diff --git a/src/views/rule-engine/Alarm/Configuration/index.vue b/src/views/rule-engine/Alarm/Configuration/index.vue index 36fb4edb..25d37db1 100644 --- a/src/views/rule-engine/Alarm/Configuration/index.vue +++ b/src/views/rule-engine/Alarm/Configuration/index.vue @@ -210,7 +210,7 @@ const tableRef = ref>({}); const menuStory = useMenuStore(); const columns = [ { - title: '名称', + title: '配置名称', dataIndex: 'name', key: 'name', search: { @@ -279,17 +279,33 @@ const columns = [ type: 'select', // defaultTermType: 'rule-bind-alarm', options: async () => { - const res = await getScene( - encodeQuery({ - sorts: { createTime: 'desc' }, - }), - ); - if (res.status === 200) { - return res.result.map((item: any) => ({ - label: item.name, - value: item.id, - })); + const allData = await queryList({paging: false, sorts: [{ name: 'createTime', order: 'desc' }]}) + const result = allData.result?.data as any[] + if (allData.success && result && result.length) { + const sceneDataMap = new Map() // 用于去重 + result.forEach(item => { + item.scene.forEach((a: any) => { + sceneDataMap.set(a.id, { + label: a.name, + value: a.id + }) + }) + }) + + return [...sceneDataMap.values()] } + + // const res = await getScene( + // encodeQuery({ + // sorts: { createTime: 'desc' }, + // }), + // ); + // if (res.status === 200) { + // return res.result.map((item: any) => ({ + // label: item.name, + // value: item.id, + // })); + // } return []; }, }, diff --git a/src/views/rule-engine/Alarm/Log/TabComponent/index.vue b/src/views/rule-engine/Alarm/Log/TabComponent/index.vue index b1cb38ef..8b236cbb 100644 --- a/src/views/rule-engine/Alarm/Log/TabComponent/index.vue +++ b/src/views/rule-engine/Alarm/Log/TabComponent/index.vue @@ -7,21 +7,27 @@ @search="search" /> + @@ -194,11 +200,23 @@ titleMap.set('other', '其他'); titleMap.set('org', '组织'); const columns = [ { - title: '名称', - dataIndex: 'alarmName', - key: 'alarmName', + title: '告警级别', + dataIndex: 'level', + key: 'level', search: { - type: 'string', + type: 'select', + options: async () => { + const res = await queryLevel() + if (res.success && res.result?.levels) { + return (res.result.levels as any[]).map((item: any) => { + return { + label: item.title, + value: item.level + } + }) + } + return [] + } }, }, { @@ -228,20 +246,28 @@ const columns = [ }, }, ]; -const produtCol = [ +const productCol = [ ...columns, { title: '产品名称', - dataIndex: 'targetName', - key: 'targetName', + dataIndex: 'sourceId', + key: 'sourceId', search: { type: 'select', options: async () => { - const resq = await getProductList(); - if (resq.status === 200) { - return resq.result.map((item: any) => ({ - label: item.name, - value: item.name, + const resp = await handleSearch({ + sorts: [{ name: 'alarmTime', order: 'desc' }], + terms: [{ + column: "targetType", + termType: "eq", + type: "and", + value: "product", + }] + }); + if (resp.status === 200) { + return resp.result.data.map((item: any) => ({ + label: item.sourceName, + value: item.sourceId, })); } return []; @@ -253,20 +279,28 @@ const deviceCol = [ ...columns, { title: '设备名称', - dataIndex: 'targetName', - key: 'targetName', + dataIndex: 'sourceId', + key: 'sourceId', search: { - type: 'select', - options: async () => { - const res = await getDeviceList(); - if (res.status === 200) { - return res.result.map((item: any) => ({ - label: item.name, - value: item.name, - })); - } - return []; - }, + type: 'select', + options: async () => { + const resp = await handleSearch({ + sorts: [{ name: 'alarmTime', order: 'desc' }], + terms: [{ + column: "targetType", + termType: "eq", + type: "and", + value: "device", + }] + }); + if (resp.status === 200) { + return resp.result.data.map((item: any) => ({ + label: item.sourceName, + value: item.sourceId, + })); + } + return []; + }, }, }, ]; @@ -274,24 +308,62 @@ const orgCol = [ ...columns, { title: '组织名称', - dataIndex: 'targetName', - key: 'targetName', + dataIndex: 'sourceId', + key: 'sourceId', search: { - type: 'select', - options: async () => { - const res = await getOrgList(); - if (res.status === 200) { - return res.result.map((item: any) => ({ - label: item.name, - value: item.name, - })); - } - return []; - }, + type: 'select', + options: async () => { + const resp = await handleSearch({ + sorts: [{ name: 'alarmTime', order: 'desc' }], + terms: [{ + column: "targetType", + termType: "eq", + type: "and", + value: "org", + }] + }); + if (resp.status === 200) { + return resp.result.data.map((item: any) => ({ + label: item.sourceName, + value: item.sourceId, + })); + } + return []; + }, }, }, ]; +const otherCol = [ + ...columns, + { + title: '组织名称', + dataIndex: 'sourceId', + key: 'sourceId', + search: { + type: 'select', + options: async () => { + const resp = await handleSearch({ + sorts: [{ name: 'alarmTime', order: 'desc' }], + terms: [{ + column: "targetType", + termType: "eq", + type: "and", + value: "other", + }] + }); + if (resp.status === 200) { + return resp.result.data.map((item: any) => ({ + label: item.sourceName, + value: item.sourceId, + })); + } + return []; + }, + }, + }, +] + let params: any = ref({ sorts: [{ name: 'alarmTime', order: 'desc' }], terms: [], diff --git a/yarn.lock b/yarn.lock index 3931584a..a4b62a52 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3837,8 +3837,8 @@ jetlinks-ui-components@^1.0.23: jetlinks-ui-components@^1.0.24: version "1.0.24" - resolved "http://registry.jetlinks.cn/jetlinks-ui-components/-/jetlinks-ui-components-1.0.24.tgz#969a901be0214d3e631f02e537c56e0abc2e48ab" - integrity sha512-t0XkbxldcKjXW/xPYYbBU8YEfK+RK01LYqS/n+wfMq3pPRksegBOt7gnsvJD6kgEpSNf/uzlnV9MWFOgQJFphg== + resolved "http://registry.jetlinks.cn/jetlinks-ui-components/-/jetlinks-ui-components-1.0.24.tgz#4163dab623d0b51e9280195f69b3eef8f039a637" + integrity sha512-hecgnwgrtPMwa08kYTQQuFrRajSGi6R0mJiFRpyPY0481C7AllhbHDdLscVSxsS7vuielznelUN6bWsonVuK9w== dependencies: "@vueuse/core" "^9.12.0" "@vueuse/router" "^9.13.0" From ff3a38880a1986102c609cf40100f140601a38bd Mon Sep 17 00:00:00 2001 From: haodd <1903289197@qq.com> Date: Thu, 13 Jul 2023 17:12:05 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20=E5=8D=8F=E8=AE=AE=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E6=8F=90=E5=87=BA=E5=85=AC=E5=85=B1=E5=8F=98=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/consts.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/utils/consts.ts b/src/utils/consts.ts index 419fa06e..0ea4e3de 100644 --- a/src/utils/consts.ts +++ b/src/utils/consts.ts @@ -50,3 +50,9 @@ export const SystemConst = { export const USER_CENTER_MENU_CODE = 'account-center' export const USER_CENTER_MENU_BUTTON_CODE = 'user-center-passwd-update' + +/**协议列表 */ +export const protocolList = [ + { label: 'OPC-UA', value: 'OPC_UA', alias: 'opc-ua' }, + { label: 'Modbus/TCP', value: 'MODBUS_TCP', alias: 'modbus-tcp' }, +]