From 37868fd90812fc4b3f277c6651c5220dcb2f759b Mon Sep 17 00:00:00 2001 From: XieYongHong <18010623010@163.com> Date: Sat, 15 Jul 2023 14:37:54 +0800 Subject: [PATCH 1/4] fix: bug#16326 --- src/views/edge/Resource/index.vue | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/views/edge/Resource/index.vue b/src/views/edge/Resource/index.vue index 1f28a0c5..7857b61e 100644 --- a/src/views/edge/Resource/index.vue +++ b/src/views/edge/Resource/index.vue @@ -235,7 +235,7 @@ const columns = [ type: 'select', options: () => new Promise((resolve) => { - queryNoPagingPost({ + query({ paging: false, sorts: [ { @@ -246,8 +246,8 @@ const columns = [ }).then((resp: any) => { resolve( resp.result.map((item: any) => ({ - label: item.name, - value: item.id, + label: item.sourceName, + value: item.sourceId, })), ); }); From 291b65ba19783994721c9d15a9586e53213beca2 Mon Sep 17 00:00:00 2001 From: XieYongHong <18010623010@163.com> Date: Sat, 15 Jul 2023 16:09:30 +0800 Subject: [PATCH 2/4] =?UTF-8?q?fix:=20bug#16382=E3=80=8116381=E3=80=811638?= =?UTF-8?q?4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../device/components/Metadata/Base/Base.vue | 3 +- .../AccessConfig/components/Media/GB28181.vue | 76 +++++++++++++------ yarn.lock | 4 +- 3 files changed, 57 insertions(+), 26 deletions(-) diff --git a/src/views/device/components/Metadata/Base/Base.vue b/src/views/device/components/Metadata/Base/Base.vue index 6cbaa9cc..761f9aab 100644 --- a/src/views/device/components/Metadata/Base/Base.vue +++ b/src/views/device/components/Metadata/Base/Base.vue @@ -210,6 +210,7 @@ import { PropertiesModal, FunctionModal, EventModal, TagsModal } from './DetailM import { Modal } from 'jetlinks-ui-components' import {EventEmitter} from "@/utils/utils"; import {watch} from "vue"; +import {cloneDeep} from "lodash"; const props = defineProps({ target: { @@ -361,7 +362,7 @@ const handleAddClick = async (_data?: any, index?: number) => { }; const copyItem = (record: any, index: number) => { - const copyData = omit(record, ['_uuid', '_sortIndex']) + const copyData = cloneDeep(omit(record, ['_uuid', '_sortIndex'])) copyData.id = `copy_${copyData.id}`.slice(0,64) handleAddClick(copyData, index) } diff --git a/src/views/link/AccessConfig/components/Media/GB28181.vue b/src/views/link/AccessConfig/components/Media/GB28181.vue index 5d09c24a..bbf277c2 100644 --- a/src/views/link/AccessConfig/components/Media/GB28181.vue +++ b/src/views/link/AccessConfig/components/Media/GB28181.vue @@ -151,6 +151,14 @@ /^([0-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.([0-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.([0-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.([0-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$/, message: '请输入正确的IP地址', }, + { + max: 65535, + message: '请输入1~65535之间的正整数' + }, + { + min: 1, + message: '请输入1~65535之间的正整数' + }, ]" > @@ -238,7 +247,6 @@ v-model:value=" cluster.clusterNodeId " - :options="clustersList" placeholder="请选择节点名称" allowClear show-search @@ -246,6 +254,9 @@ filterOption " > + + {{ i.label}} + @@ -309,16 +320,20 @@
+ > + + {{ i.label }} + + @@ -389,6 +404,7 @@ " :min="1" :max="65535" + :precision="0" /> @@ -450,23 +466,26 @@ -
-

接入方式

-

- {{ provider.name }} -

-

- {{ provider.description }} -

-

消息协议

-

- {{ - provider?.id === 'fixed-media' - ? 'URL' - : 'SIP' - }} -

-
+
+ + + {{ provider.name }} + + {{ provider.description }} + + {{ formState.domain }} + {{ formState.sipId }} + + + + + + +
@@ -667,8 +686,9 @@ const saveData = () => { }; const next = async () => { + let data1: any = await formRef1.value?.validate(); - if (!isNumber(data1.hostPort.port)) { + if (data1.hostPort?.port && !isNumber(data1.hostPort.port) && data1.shareCluster) { data1.hostPort.port = JSON.parse(data1.hostPort.port).port; } if (!data1?.shareCluster) { @@ -721,6 +741,16 @@ const develop = () => { } }; +const getClusterNodeIds = (id?: string) => { + const keys = dynamicValidateForm?.cluster?.map?.(item => item.clusterNodeId) || [] + return clustersList.value.filter(item => item.value === id || !keys.includes(item.value) ) +} + +const getSipListOption = (list: any[], id: string) => { + const keys = dynamicValidateForm?.cluster?.map?.(item => item.port) || [] + return (list || []).filter(item => item.value === id || !keys.includes(item.value) ) +} + onMounted(() => { getResourcesCurrent().then((resp) => { if (resp.status === 200) { diff --git a/yarn.lock b/yarn.lock index c653147c..4ef587f9 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#0bd3caf482367d46974244558519dfa7919baf1f" - integrity sha512-bXJZUWU27kDpnvhR+zKtUZQjrq+S130abBD2D37PnbHeUtT8g/i1CRV8Qnp1SMzk7aRDH9glVSjbzIQxem3YMQ== + resolved "http://registry.jetlinks.cn/jetlinks-ui-components/-/jetlinks-ui-components-1.0.24.tgz#a1262b3a735a01cd1fd9801406d16291b5070367" + integrity sha512-P4aolPQb1/wq4edN0AZ6WSavVAvQ+KEOEFzAarL/0dy6Oz3tTVemZmtgu20TsGbrNnEe/LheMu0QpvmkOq+3dg== dependencies: "@vueuse/core" "^9.12.0" "@vueuse/router" "^9.13.0" From 0e83e706fa2841a9d3e7f93dea65dab9d627a437 Mon Sep 17 00:00:00 2001 From: XieYongHong <18010623010@163.com> Date: Sat, 15 Jul 2023 16:21:29 +0800 Subject: [PATCH 3/4] fix: bug#16351 --- src/views/link/Type/Detail/index.vue | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/views/link/Type/Detail/index.vue b/src/views/link/Type/Detail/index.vue index 8a84aa8b..8ca766bc 100644 --- a/src/views/link/Type/Detail/index.vue +++ b/src/views/link/Type/Detail/index.vue @@ -284,18 +284,24 @@ .configuration .port " - :options=" - portOptionsIndex[ - index - ] - " placeholder="请选择本地端口" allowClear show-search :filter-option=" filterPortOption " - /> + > + + {{ i.label }} + + { return JSON.stringify(option.label).indexOf(input) >= 0; }; +const getPortList = (list: any[], id: string) => { + const keys = dynamicValidateForm?.cluster?.map?.(item => item.configuration?.port) || [] + console.log(dynamicValidateForm?.cluster, id, keys) + return (list || []).filter(item => item.value === id || !keys.includes(item.value) ) +} + const filterConfigByType = (data: any[], type: string) => { let _temp = type; if (TCPList.includes(type)) { From 439ac44e7e485eb099941ee0e5b72223f82ac288 Mon Sep 17 00:00:00 2001 From: 100011797 <2642441182@qq.com> Date: Sat, 15 Jul 2023 16:22:51 +0800 Subject: [PATCH 4/4] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B9bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/FRuleEditor/Debug/index.vue | 2 + .../Northbound/AliCloud/Detail/index.vue | 3 +- .../Northbound/components/MSelect/index.vue | 60 +++++++++------- .../Save/action/Notify/NotifyTemplate.vue | 72 +++++++++++++++++-- .../Scene/Save/action/Notify/index.vue | 1 + .../system/User/components/EditUserDialog.vue | 22 +++++- 6 files changed, 122 insertions(+), 38 deletions(-) diff --git a/src/components/FRuleEditor/Debug/index.vue b/src/components/FRuleEditor/Debug/index.vue index ff39ce68..fd62edaf 100644 --- a/src/components/FRuleEditor/Debug/index.vue +++ b/src/components/FRuleEditor/Debug/index.vue @@ -74,6 +74,7 @@
运行结果
+
正在运行......
@@ -127,6 +128,7 @@ type propertyType = { last?: string; }; const property = ref([]); +// virtualRule?.rule?.windowType === 'undefined' ? moment(item.time).format('HH:mm:ss') const columns = [ { diff --git a/src/views/Northbound/AliCloud/Detail/index.vue b/src/views/Northbound/AliCloud/Detail/index.vue index 01ea1b4c..4f2bddc0 100644 --- a/src/views/Northbound/AliCloud/Detail/index.vue +++ b/src/views/Northbound/AliCloud/Detail/index.vue @@ -613,6 +613,7 @@ const onPlatError = (val: any) => { _errorSet.value.add(val) } }; + const _validator = (_rule: any, value: string): Promise => new Promise((resolve, reject) => { const _item = productList.value.find((item) => item.id === value); @@ -657,7 +658,7 @@ watch( async (newId) => { if (newId) { queryRegionsList(); - getProduct(); + await getProduct(); if (newId === ':id' || !newId) return; const resp = await detail(newId as string); const _data: any = resp.result; diff --git a/src/views/Northbound/components/MSelect/index.vue b/src/views/Northbound/components/MSelect/index.vue index 8155a30d..ed0d37fc 100644 --- a/src/views/Northbound/components/MSelect/index.vue +++ b/src/views/Northbound/components/MSelect/index.vue @@ -17,60 +17,66 @@ \ No newline at end of file diff --git a/src/views/rule-engine/Scene/Save/action/Notify/NotifyTemplate.vue b/src/views/rule-engine/Scene/Save/action/Notify/NotifyTemplate.vue index 16c4ac1d..69b0162f 100644 --- a/src/views/rule-engine/Scene/Save/action/Notify/NotifyTemplate.vue +++ b/src/views/rule-engine/Scene/Save/action/Notify/NotifyTemplate.vue @@ -12,8 +12,9 @@ :request="(e) => handleData(e)" model="CARD" :bodyStyle="{ - padding: 0 + padding: 0, }" + ref="tableRef" :params="params" :gridColumn="2" :noPagination="true" @@ -83,6 +84,10 @@ const props = defineProps({ type: String, default: '', }, + notifyType: { + type: String, + default: '', + }, }); const emit = defineEmits(['update:value', 'change', 'update:detail']); @@ -97,6 +102,7 @@ const getMethodTxt = (type: string) => { const params = ref>({}); const _selectedRowKeys = ref([]); +const tableRef = ref(); const columns = [ { @@ -129,19 +135,70 @@ const handleSearch = (_params: any) => { params.value = _params; }; -const handleClick = (dt: any) => { +const typeObj = { + weixin: 'wechat', + dingTalk: 'dingtalk', +}; + +const queryUserList = async (id: string) => { + if (!(props.notifyType && props.notifierId)) return ''; + const resp = await TemplateApi.getUser( + typeObj[props.notifyType], + props.notifierId, + ); + if (resp.status === 200) { + return resp.result?.find((item: any) => item.id === id)?.name; + } else { + return ''; + } +}; + +const queryOrgList = async (id: string) => { + if (!(props.notifyType && props.notifierId)) return ''; + const resp = await TemplateApi.getDept( + typeObj[props.notifyType], + props.notifierId, + ); + if (resp.status === 200) { + return resp.result?.find((item: any) => item.id === id)?.name; + } else { + return ''; + } +}; + +const getOptions = async (dt: any) => { + const obj = {}; + // 钉钉,微信 + if (props.notifyType === 'weixin') { + if (dt?.template?.toParty) { + obj['orgName'] = await queryOrgList(dt?.template?.toParty); + } + if (dt?.template?.toUser) { + obj['sendTo'] = await queryUserList(dt?.template?.toUser); + } + } + if (props.notifyType === 'dingTalk') { + if (dt?.template?.departmentIdList) { + obj['orgName'] = await queryOrgList(dt?.template?.departmentIdList); + } + if (dt?.template?.userIdList) { + obj['sendTo'] = await queryUserList(dt?.template?.userIdList); + } + } + return obj; +}; + +const handleClick = async (dt: any) => { if (_selectedRowKeys.value.includes(dt.id)) { _selectedRowKeys.value = []; emit('update:value', undefined); - // emit('change', { templateName: undefined, orgName: undefined, sendTo: undefined }); - emit('change', { templateName: undefined }); + emit('change', { templateName: undefined, orgName: undefined, sendTo: undefined }); emit('update:detail', undefined); } else { - // console.log(dt) + const obj = await getOptions(dt) _selectedRowKeys.value = [dt.id]; + emit('change', { templateName: dt?.name, ...obj }); emit('update:value', dt.id); - // emit('change', { templateName: dt?.name, orgName: dt.template?.departmentIdList, sendTo: dt.template?.userIdList }); - emit('change', { templateName: dt?.name }); emit('update:detail', dt); } }; @@ -176,6 +233,7 @@ watch( (newValue) => { if (newValue) { _selectedRowKeys.value = [newValue]; + // (tableRef.value?._dataSource || []).find() } else { _selectedRowKeys.value = []; } diff --git a/src/views/rule-engine/Scene/Save/action/Notify/index.vue b/src/views/rule-engine/Scene/Save/action/Notify/index.vue index c6a09f3d..3b6259d8 100644 --- a/src/views/rule-engine/Scene/Save/action/Notify/index.vue +++ b/src/views/rule-engine/Scene/Save/action/Notify/index.vue @@ -48,6 +48,7 @@ diff --git a/src/views/system/User/components/EditUserDialog.vue b/src/views/system/User/components/EditUserDialog.vue index 6ae6eff5..bad17f77 100644 --- a/src/views/system/User/components/EditUserDialog.vue +++ b/src/views/system/User/components/EditUserDialog.vue @@ -104,7 +104,7 @@ mode="multiple" style="width: calc(100% - 40px)" placeholder="请选择角色" - :options="form.roleOptions" + :options="_roleOptions" :disabled="form.data.username === 'admin'" > @@ -123,7 +123,7 @@ show-search style="width: calc(100% - 40px)" placeholder="请选择组织" - :tree-data="form.departmentOptions" + :tree-data="_departmentOptions" :fieldNames="{ label: 'name', value: 'id' }" multiple :filterTreeNode=" @@ -205,6 +205,7 @@ import { DefaultOptionType } from 'ant-design-vue/es/vc-tree-select/TreeSelect'; import { AxiosResponse } from 'axios'; import { passwordRegEx } from '@/utils/validate'; import { filterSelectNode, onlyMessage } from '@/utils/comm'; +import { uniqBy } from 'lodash-es'; const deptPermission = 'system/Department'; const rolePermission = 'system/Role'; @@ -279,6 +280,9 @@ const form = reactive({ roleOptions: [] as optionType[], departmentOptions: [] as DefaultOptionType[], + _roleOptions: [] as optionType[], + _departmentOptions: [] as DefaultOptionType[], + init: () => { form.getDepartmentList(); form.getRoleList(); @@ -286,7 +290,6 @@ const form = reactive({ }, getUserInfo: () => { const id = props.data.id || ''; - console.log(111); if (props.type === 'add') form.data = {} as formType; else if (props.type === 'reset') form.data = { id } as formType; @@ -301,6 +304,10 @@ const form = reactive({ (item: dictType) => item.id, ), }; + form._roleOptions = resp.result?.roleList?.map((i: any) => { + return {label: i.name, value: i.id} + }); + form._departmentOptions = resp.result?.orgList nextTick(() => { formRef.value?.clearValidate(); }); @@ -358,6 +365,15 @@ const form = reactive({ }; }, }); + +const _roleOptions = computed(() => { + return uniqBy([...form.roleOptions, ...form._roleOptions], 'value') +}) + +const _departmentOptions = computed(() => { + return uniqBy([...form.departmentOptions, ...form._departmentOptions], 'id') +}) + form.init(); interface AxiosResponseRewrite extends AxiosResponse {