From e0810dc1586642adcc20fd7aa13ab9a645254c0b Mon Sep 17 00:00:00 2001 From: xiaohuan <762902674@qq.com> Date: Wed, 15 Nov 2023 17:24:11 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=E4=BA=A7=E5=93=81=E7=89=A9?= =?UTF-8?q?=E6=A8=A1=E5=9E=8B=20=E6=B7=BB=E5=8A=A0/=E7=BC=96=E8=BE=91=20?= =?UTF-8?q?=E5=B1=9E=E6=80=A7=20=E6=A0=B7=E5=BC=8F=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E6=8A=BD=E5=B1=89=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugin/antdv.ts | 2 +- src/api/account/notificationSubscription.ts | 1 - src/api/rule-engine/configuration.ts | 2 +- src/store/alarm.ts | 4 +- src/store/department.ts | 6 +- src/utils/consts.ts | 3 +- .../Firmware/Task/Save/SelectDevices.vue | 1 - .../device/components/Metadata/Base/Base.vue | 79 ++++++++++++++----- .../Metadata/Base/DetailDrawer/JsonView.vue | 38 +++++++++ .../Base/DetailDrawer/PropertiesDrawer.vue | 64 +++++++++++++++ .../Metadata/Base/DetailDrawer/index.ts | 1 + .../components/Metadata/Base/columns.tsx | 2 +- .../Metadata/Base/components/Source.vue | 4 +- .../Metadata/Base/hooks/useOperateLimits.ts | 4 +- .../device/components/Metadata/Base/index.vue | 12 +-- .../device/components/Metadata/Base/utils.ts | 4 +- src/views/init-home/Menu/index.vue | 2 +- src/views/init-home/index.vue | 2 +- .../Alarm/Configuration/Save/Base/index.vue | 4 +- src/views/system/Department/product/index.vue | 1 - vite.config.ts | 12 +-- 21 files changed, 195 insertions(+), 53 deletions(-) create mode 100644 src/views/device/components/Metadata/Base/DetailDrawer/JsonView.vue create mode 100644 src/views/device/components/Metadata/Base/DetailDrawer/PropertiesDrawer.vue create mode 100644 src/views/device/components/Metadata/Base/DetailDrawer/index.ts diff --git a/plugin/antdv.ts b/plugin/antdv.ts index 1d051d09..fb7d12e3 100644 --- a/plugin/antdv.ts +++ b/plugin/antdv.ts @@ -1,6 +1,6 @@ import type { IMatcher } from './jetlinks' - +// kebab-case 要求短语内的各个单词或缩写之间以-(连字符)做间隔 export function kebabCase(key: string) { const result = key.replace(/([A-Z])/g, ' $1').trim() return result.split(' ').join('-').toLowerCase() diff --git a/src/api/account/notificationSubscription.ts b/src/api/account/notificationSubscription.ts index f7dac85c..afc03415 100644 --- a/src/api/account/notificationSubscription.ts +++ b/src/api/account/notificationSubscription.ts @@ -30,7 +30,6 @@ export const getWechatOAuth2 = (configId: string, templateId: string, url: strin export const getDingTalkOAuth2 = (configId: string, url: string) => server.get(`/notifier/dingtalk/corp/${configId}/oauth2/binding-user-url?authCode=${url}`); // 获取oauth2授权的用户绑定码 - export const getUserBind = (type: 'wechat' | 'dingtalk', params: any) => server.get(`/notifier/${type}/corp/oauth2/user-bind-code`, params); // 根据绑定码绑定当前用户 diff --git a/src/api/rule-engine/configuration.ts b/src/api/rule-engine/configuration.ts index 964c26f1..f4f20f2c 100644 --- a/src/api/rule-engine/configuration.ts +++ b/src/api/rule-engine/configuration.ts @@ -34,7 +34,7 @@ export const save = (data:any) =>server.post('/alarm/config',data); /** * 更新基础设置 */ -export const updata = (data:any) => server.patch('/alarm/config',data); +export const update = (data:any) => server.patch('/alarm/config',data); /** * 获取基础设置数据 */ diff --git a/src/store/alarm.ts b/src/store/alarm.ts index b0f998e4..5a6d6756 100644 --- a/src/store/alarm.ts +++ b/src/store/alarm.ts @@ -39,9 +39,7 @@ export const useAlarmStore = defineStore('alarm', () => { export const useAlarmConfigurationStore = defineStore('alarmConfigration', () => { const configurationData = reactive({ - current:{ - - } + current:{} }) return { configurationData } }) \ No newline at end of file diff --git a/src/store/department.ts b/src/store/department.ts index ca278f37..afb92003 100644 --- a/src/store/department.ts +++ b/src/store/department.ts @@ -12,9 +12,9 @@ export const useDepartmentStore = defineStore({ id: 'department', state: (): DepartmentStateType => ({ productId: undefined, - // 设备资产分配弹窗操作类型: - // 1. optType === 'handle': 手动点击资产分配按钮; - // 2. optType === ': 产品资产分配后, 自动弹出设备资产分配 + // 设备资产分配弹窗操作类型: + // 1. optType === 'handle': 手动点击资产分配按钮; + // 2. optType === '': 产品资产分配后, 自动弹出设备资产分配 optType: '', crossPageKeys: [], // 表格跨页多选的keys changedApis: {}, diff --git a/src/utils/consts.ts b/src/utils/consts.ts index c2561832..62c5acb1 100644 --- a/src/utils/consts.ts +++ b/src/utils/consts.ts @@ -29,6 +29,7 @@ export const StatusColorEnum = { 'default': 'default', } +/** 系统设置 */ export const SystemConst = { API_BASE: 'api', SYSTEM_NAME: 'Jetlinks', @@ -52,7 +53,7 @@ export const USER_CENTER_MENU_CODE = 'account-center' export const USER_CENTER_MENU_BUTTON_CODE = 'user-center-passwd-update' export const messageSubscribe = 'message-subscribe' -/**协议列表 */ +/** 协议列表 */ export const protocolList = [ { label: 'OPC_UA', value: 'OPC_UA', alias: 'opc-ua' }, { label: 'MODBUS_TCP', value: 'MODBUS_TCP', alias: 'Modbus/TCP' }, diff --git a/src/views/device/Firmware/Task/Save/SelectDevices.vue b/src/views/device/Firmware/Task/Save/SelectDevices.vue index d080fdc1..c969e687 100644 --- a/src/views/device/Firmware/Task/Save/SelectDevices.vue +++ b/src/views/device/Firmware/Task/Save/SelectDevices.vue @@ -266,7 +266,6 @@ onMounted(() => { if (props.data.id) { checkLable.value = updateSelect(props.data.deviceId); emit('update:modelValue', props.data.deviceId); - console.log(111, checkLable.value, props.data.deviceId); } } }, diff --git a/src/views/device/components/Metadata/Base/Base.vue b/src/views/device/components/Metadata/Base/Base.vue index 09b5e9c2..a0ac3e8a 100644 --- a/src/views/device/components/Metadata/Base/Base.vue +++ b/src/views/device/components/Metadata/Base/Base.vue @@ -12,6 +12,7 @@ @change="(data) => dataSourceCache = data" > + { }) provide('_dataSource', dataSourceCache) + const showDetail = (data: any) => { detailData.data = data + detailData.type = 'view' detailData.visible = true } const cancelDetailModal = () => { detailData.data = {} + detailData.type = 'view' + detailData.visible = false +} + +const showPropertiesDrawer = (data: any, type: string) => { + detailData.data = data + detailData.type = type + detailData.visible = true +} + +const cancelPropertiesDrawer = () => { detailData.visible = false } -const operateLimits = (action: 'add' | 'updata', types: MetadataType) => { +const operateLimits = (action: 'add' | 'update', types: MetadataType) => { return ( _target === 'device' && (instanceStore.detail.features || []).find((item: { id: string; name: string }) => item.id === limitsMap.get(`${types}-${action}`)) @@ -398,7 +437,6 @@ const getDataByType = () => { } const handleAddClick = async (_data?: any, index?: number) => { - const newObject = _data || getDataByType() const _addData = await tableRef.value.addItem(newObject, index) @@ -435,13 +473,16 @@ const editStatusChange = (status: boolean) => { } const handleSaveClick = async (next?: Function) => { - let resp = await tableRef.value.getData().finally(() => { - - }); + let resp = await tableRef.value.getData().finally(() => {}); + if(detailData.type === 'create') { + resp.push(detailData.data); + } if(resp) { - const virtual: any[] = []; const arr = resp.map((item: any) => { + if(detailData.type === 'edit' && item.id === detailData.data.id) { + item = detailData.data; + } if(item.expands?.virtualRule) { const triggerProperties = item.expands.virtualRule.triggerProperties const rule = omit(item.expands.virtualRule, ['triggerProperties']) @@ -488,7 +529,9 @@ const handleSaveClick = async (next?: Function) => { loading.value = false }) if(result.success) { - dataSource.value = resp + dataSource.value = arr + detailData.data = {} + detailData.type = '' tableRef.value.cleanEditStatus() editStatus.value = false onlyMessage('操作成功!') diff --git a/src/views/device/components/Metadata/Base/DetailDrawer/JsonView.vue b/src/views/device/components/Metadata/Base/DetailDrawer/JsonView.vue new file mode 100644 index 00000000..95ad7021 --- /dev/null +++ b/src/views/device/components/Metadata/Base/DetailDrawer/JsonView.vue @@ -0,0 +1,38 @@ + + + + + \ No newline at end of file diff --git a/src/views/device/components/Metadata/Base/DetailDrawer/PropertiesDrawer.vue b/src/views/device/components/Metadata/Base/DetailDrawer/PropertiesDrawer.vue new file mode 100644 index 00000000..5cbc5cc4 --- /dev/null +++ b/src/views/device/components/Metadata/Base/DetailDrawer/PropertiesDrawer.vue @@ -0,0 +1,64 @@ + + + + + \ No newline at end of file diff --git a/src/views/device/components/Metadata/Base/DetailDrawer/index.ts b/src/views/device/components/Metadata/Base/DetailDrawer/index.ts new file mode 100644 index 00000000..56751ef7 --- /dev/null +++ b/src/views/device/components/Metadata/Base/DetailDrawer/index.ts @@ -0,0 +1 @@ +export { default as PropertiesDrawer } from './PropertiesDrawer.vue' \ No newline at end of file diff --git a/src/views/device/components/Metadata/Base/columns.tsx b/src/views/device/components/Metadata/Base/columns.tsx index 5c0ba07b..b413607d 100644 --- a/src/views/device/components/Metadata/Base/columns.tsx +++ b/src/views/device/components/Metadata/Base/columns.tsx @@ -500,7 +500,7 @@ export const useColumns = (type?: MetadataType, target?: 'device' | 'product', n { title: '操作', dataIndex: 'action', - width: 120 + width: 150 } ]); diff --git a/src/views/device/components/Metadata/Base/components/Source.vue b/src/views/device/components/Metadata/Base/components/Source.vue index cec35277..19cecc02 100644 --- a/src/views/device/components/Metadata/Base/components/Source.vue +++ b/src/views/device/components/Metadata/Base/components/Source.vue @@ -97,7 +97,7 @@ import { Form } from 'jetlinks-ui-components'; import { FULL_CODE } from 'jetlinks-ui-components/es/DataTable' import { useInstanceStore } from '@/store/instance'; import { resetRule } from '@/api/device/instance'; -import { updata } from '@/api/rule-engine/configuration'; +import { update } from '@/api/rule-engine/configuration'; import { onlyMessage } from '@/utils/comm'; import { provide } from 'vue'; import { queryDeviceVirtualProperty } from '@/api/device/instance'; @@ -271,7 +271,7 @@ const handleSearch = async () => { virtualRule:{ triggerProperties: _triggerProperties?.length ? _triggerProperties : ['*'], ...resp.result.rule - } + } }); } }; diff --git a/src/views/device/components/Metadata/Base/hooks/useOperateLimits.ts b/src/views/device/components/Metadata/Base/hooks/useOperateLimits.ts index 1257ba70..547f156d 100644 --- a/src/views/device/components/Metadata/Base/hooks/useOperateLimits.ts +++ b/src/views/device/components/Metadata/Base/hooks/useOperateLimits.ts @@ -3,9 +3,9 @@ import type {MetadataType} from "@/views/device/Product/typings"; const limitsMap = new Map(); limitsMap.set('events-add', 'eventNotInsertable'); -limitsMap.set('events-updata', 'eventNotModifiable'); +limitsMap.set('events-update', 'eventNotModifiable'); limitsMap.set('properties-add', 'propertyNotInsertable'); -limitsMap.set('properties-updata', 'propertyNotModifiable'); +limitsMap.set('properties-update', 'propertyNotModifiable'); const useOperateLimits = (target: 'device' | 'product') => { diff --git a/src/views/device/components/Metadata/Base/index.vue b/src/views/device/components/Metadata/Base/index.vue index 48cefb93..9c3a3ead 100644 --- a/src/views/device/components/Metadata/Base/index.vue +++ b/src/views/device/components/Metadata/Base/index.vue @@ -48,8 +48,8 @@ +