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"
>
+
新增
@@ -136,19 +137,20 @@
+
-
+
+
+
+
+ detailData.data = data"
+ @save="handleSaveClick"
+ @cancel="cancelPropertiesDrawer"
+ />
{
})
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 @@
@@ -171,10 +171,10 @@ const handleAddClick = () => {
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');
-const operateLimits = (action: 'add' | 'updata', types: MetadataType) => {
+limitsMap.set('properties-update', 'propertyNotModifiable');
+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}`))
@@ -204,7 +204,7 @@ const resetMetadata = async () => {
await productStore.getDetail(id as string)
}
metadataStore.set('importMetadata', true)
-
+
};
const removeItem = async (record: MetadataItem) => {
diff --git a/src/views/device/components/Metadata/Base/utils.ts b/src/views/device/components/Metadata/Base/utils.ts
index bd9700b4..d337a079 100644
--- a/src/views/device/components/Metadata/Base/utils.ts
+++ b/src/views/device/components/Metadata/Base/utils.ts
@@ -16,6 +16,6 @@ export const expandsType = ref({
export 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');
\ No newline at end of file
+limitsMap.set('properties-update', 'propertyNotModifiable');
\ No newline at end of file
diff --git a/src/views/init-home/Menu/index.vue b/src/views/init-home/Menu/index.vue
index d4270dde..d826cf50 100644
--- a/src/views/init-home/Menu/index.vue
+++ b/src/views/init-home/Menu/index.vue
@@ -114,7 +114,7 @@ const initMenu = async () => {
const { count } = toRefs(menuDatas);
getSystemPermissionData();
defineExpose({
- updataMenu: initMenu,
+ updateMenu: initMenu,
});
\ No newline at end of file
diff --git a/src/views/device/components/Metadata/Base/DetailDrawer/FunctionDrawer.vue b/src/views/device/components/Metadata/Base/DetailDrawer/FunctionDrawer.vue
new file mode 100644
index 00000000..1540c6dc
--- /dev/null
+++ b/src/views/device/components/Metadata/Base/DetailDrawer/FunctionDrawer.vue
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+ 取消
+ 确认
+
+
+
+
+
+
+
\ 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
index 5cbc5cc4..f00aab57 100644
--- a/src/views/device/components/Metadata/Base/DetailDrawer/PropertiesDrawer.vue
+++ b/src/views/device/components/Metadata/Base/DetailDrawer/PropertiesDrawer.vue
@@ -31,7 +31,7 @@ const props = defineProps({
}
})
-const emit = defineEmits(['change', 'cancel'])
+const emit = defineEmits(['change', 'save', 'cancel'])
const formRef = ref(null)
@@ -42,7 +42,7 @@ const cancel = () => {
}
const ok = () => {
- formRef.value?.validateFields().then(async (formValue) => {
+ formRef.value?.validateFields().then(async (formValue: any) => {
emit('change', formValue);
emit('save');
cancel();
diff --git a/src/views/device/components/Metadata/Base/DetailDrawer/TagsDrawer.vue b/src/views/device/components/Metadata/Base/DetailDrawer/TagsDrawer.vue
new file mode 100644
index 00000000..2fd964bb
--- /dev/null
+++ b/src/views/device/components/Metadata/Base/DetailDrawer/TagsDrawer.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
index 56751ef7..6e1a6530 100644
--- a/src/views/device/components/Metadata/Base/DetailDrawer/index.ts
+++ b/src/views/device/components/Metadata/Base/DetailDrawer/index.ts
@@ -1 +1,4 @@
-export { default as PropertiesDrawer } from './PropertiesDrawer.vue'
\ No newline at end of file
+export { default as PropertiesDrawer } from './PropertiesDrawer.vue'
+export { default as FunctionDrawer } from './FunctionDrawer.vue'
+export { default as EventDrawer } from './EventDrawer.vue'
+export { default as TagsDrawer } from './TagsDrawer.vue'
\ No newline at end of file
diff --git a/src/views/device/components/Metadata/Base/Edit/BaseForm.vue b/src/views/device/components/Metadata/Base/Edit/BaseForm.vue
index c1776126..303fa93b 100644
--- a/src/views/device/components/Metadata/Base/Edit/BaseForm.vue
+++ b/src/views/device/components/Metadata/Base/Edit/BaseForm.vue
@@ -59,6 +59,7 @@
+