From 6eeed061717b6b1c08fbc8ede7ee0a0050460fc0 Mon Sep 17 00:00:00 2001 From: qiaochuLei <124648559+qiaochuLei@users.noreply.github.com> Date: Tue, 15 Aug 2023 14:17:08 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20bug#17421=EF=BC=8C17418=EF=BC=8C17417?= =?UTF-8?q?=EF=BC=8C17416=EF=BC=8C17392?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: 登录加密 * fix: 登录加密功能 * fix: 树样式错乱bug修改 * fix: bug#17059 * fix: bug#17128 * fix: 17131 * fix: bug#17122 * fix: bug#17156 * fix: 修改bug * fix: bug#17056 * fix: bug#17005 * fix: 修改bug * fix: bug#17296 * fix: bug应用管理/集成菜单 * fix: bug#17299 * fix: bug#17148 * fix: bug#17392 * fix: bug#17416 * fix: bug#17417 * fix: bug#17418 * fix: bug#17421 --- .../Metadata/Base/components/Source.vue | 75 ++++++++++++++++- .../components/Metadata/Import/index.vue | 15 ++-- .../device/components/Metadata/index.vue | 1 - .../rule-engine/Alarm/Log/Detail/info.vue | 2 +- .../Alarm/Log/TabComponent/index.vue | 67 +++++++++++++++- .../DashBoard/components/TimeSelect.vue | 1 + src/views/rule-engine/DashBoard/index.vue | 7 +- .../rule-engine/Scene/Save/Device/Product.vue | 2 +- .../system/Apply/componenets/MenuDialog.vue | 80 +++++++++---------- .../system/Department/components/LeftTree.vue | 2 + 10 files changed, 193 insertions(+), 59 deletions(-) diff --git a/src/views/device/components/Metadata/Base/components/Source.vue b/src/views/device/components/Metadata/Base/components/Source.vue index 3649aa09..1ebfd788 100644 --- a/src/views/device/components/Metadata/Base/components/Source.vue +++ b/src/views/device/components/Metadata/Base/components/Source.vue @@ -10,7 +10,7 @@ > + + + + + + + + + + + + + + + + + 编辑 + + + + + + + + 重置 + + + 重置为产品属性规则 + + + + + + + @@ -45,7 +95,12 @@ import { isNoCommunity } from '@/utils/utils'; import VirtualRule from './VirtualRule/index.vue'; import { Form } from 'jetlinks-ui-components'; import { FULL_CODE } from 'jetlinks-ui-components/es/DataTable' - +import { useInstanceStore } from '@/store/instance'; +import { + queryProductVirtualProperty +} from '@/api/device/product'; +import { updata } from '@/api/rule-engine/configuration'; +const instanceStore = useInstanceStore(); const PropertySource: { label: string; value: string }[] = isNoCommunity ? [ { @@ -115,7 +170,6 @@ const disabled = computed(() => { // if (props.target === 'device') { // return true; // } - return props.noEdit?.length ? props.noEdit.includes(props.value.id) && props?.target === 'device' : false; @@ -156,7 +210,20 @@ const confirm = async () => { } }); }; - +//重置规则 +const resetRules = async() =>{ + let res:any = await queryProductVirtualProperty(instanceStore.current?.productId,props.value.id) + if(res && res.status === 200 && res.result.rule){ + const data:any = {} + data.virtualRule = res.result.rule + data.virtualRule.triggerProperties = res.result.triggerProperties + data.type = type.value + updateValue({ + source:myValue.value, + ...data + }) + } +} const cancel = () => { if (props.value.id && !props.value?.expands?.source) { myValue.value = 'device'; diff --git a/src/views/device/components/Metadata/Import/index.vue b/src/views/device/components/Metadata/Import/index.vue index 1d68d336..2ad7fdd4 100644 --- a/src/views/device/components/Metadata/Import/index.vue +++ b/src/views/device/components/Metadata/Import/index.vue @@ -581,6 +581,7 @@ const handleImport = async () => { if (data.metadata === 'alink') { try { const _import = JSON.parse(data.import); + loading.value = true; const res = await convertMetadata( 'from', @@ -588,7 +589,8 @@ const handleImport = async () => { _import, ).catch((err) => err); if (res.status === 200) { - const metadata = operateLimits(res.result); + // const metadata = operateLimits(res.result); // 导入取并集逻辑 + const metadata = res.result let result; if (props?.type === 'device') { result = await saveMetadata( @@ -644,14 +646,15 @@ const handleImport = async () => { return; } const { id } = route.params || {}; - const copyOperateLimits = operateLimits( - _object as DeviceMetadata, - ); + // const copyOperateLimits = operateLimits( + // _object as DeviceMetadata, + // ); + // console.log(copyOperateLimits,_object); // 导入取并集逻辑 const params = { id, - metadata: JSON.stringify(copyOperateLimits), + metadata: JSON.stringify(_object), }; - const paramsDevice = copyOperateLimits; + const paramsDevice = _object; let resp = undefined; loading.value = true; if (props?.type === 'device') { diff --git a/src/views/device/components/Metadata/index.vue b/src/views/device/components/Metadata/index.vue index f814fc5e..58c9046a 100644 --- a/src/views/device/components/Metadata/index.vue +++ b/src/views/device/components/Metadata/index.vue @@ -81,7 +81,6 @@ provide('_metadataType', props.type) const showReset = computed(() => { if (props.type === 'device' && instanceStore.current.productMetadata) { - console.log(instanceStore.current,123) const proMetadata = JSON.parse(instanceStore.current.productMetadata || '{}') const _metadata = JSON.parse(instanceStore.current.metadata || '{}') return !isEqual(_metadata, proMetadata) diff --git a/src/views/rule-engine/Alarm/Log/Detail/info.vue b/src/views/rule-engine/Alarm/Log/Detail/info.vue index a84e40f0..eef73256 100644 --- a/src/views/rule-engine/Alarm/Log/Detail/info.vue +++ b/src/views/rule-engine/Alarm/Log/Detail/info.vue @@ -25,7 +25,7 @@ props.data?.alarmConfigName }} {{ - dayjs(data?.alarmTime).format('YYYY-MM-DD HH:mm:ss') + dayjs(props.data?.alarmTime).format('YYYY-MM-DD HH:mm:ss') }} { otherColumns.title = '场景名称' break; } + if(props.type === 'device'){ + const productColumns = { + title: '产品名称', + dataIndex: 'product_id', + key: 'product_id', + search: { + type: 'select', + options: async () => { + const termType = [ + { + column: "targetType", + termType: "eq", + type: "and", + value: "product", + } + ] + if (props.id) { + termType.push({ + termType: 'eq', + column: 'alarmConfigId', + value: props.id, + type: 'and', + },) + } + + const resp: any = await handleSearch({ + sorts: [{ name: 'alarmTime', order: 'desc' }], + terms: termType + }); + const listMap: Map = new Map() + + if (resp.status === 200) { + resp.result.data.forEach(item => { + if (item.targetId) { + listMap.set(item.targetId, { + label: item.targetName, + value: item.targetId, + }) + } + + }) + + return [...listMap.values()] + + } + return []; + }, + }, + } + return [otherColumns,productColumns,...columns] + } return ['all', 'detail'].includes(props.type) ? columns : [ otherColumns, ...columns, @@ -297,9 +348,9 @@ let params: any = ref({ terms: [], }); const handleSearch = async (params: any) => { - const resp = await query(params); + const resp:any = await query(params); if (resp.status === 200) { - const res = await getOrgList(); + const res:any = await getOrgList(); if (res.status === 200) { resp.result.data.map((item: any) => { if (item.targetType === 'org') { @@ -318,7 +369,7 @@ const handleSearch = async (params: any) => { } } }; -watchEffect(() => { +onMounted(() => { if (props.type !== 'all' && !props.id) { params.value.terms = [ { @@ -354,6 +405,16 @@ const search = (data: any) => { type: 'and', }); } + if(props.type === 'device' && data?.terms[0]?.terms[0]?.column === 'product_id'){ + params.value.terms = [{ + column:"targetId$dev-instance", + value:[ + data?.terms[0]?.terms[0] + ] + }] + // delete params.value.terms + console.log(params.value) + } if (props.id) { params.value.terms.push({ termType: 'eq', diff --git a/src/views/rule-engine/DashBoard/components/TimeSelect.vue b/src/views/rule-engine/DashBoard/components/TimeSelect.vue index c0ca0a49..e2554c16 100644 --- a/src/views/rule-engine/DashBoard/components/TimeSelect.vue +++ b/src/views/rule-engine/DashBoard/components/TimeSelect.vue @@ -16,6 +16,7 @@ { queryCodition.startTime = data.start; queryCodition.endTime = data.end; - console.log(queryCodition); selectChange(); }; const selectChange = () => { @@ -439,10 +438,14 @@ const selectChange = () => { res.result .filter((item: any) => item.group === 'alarmTrend') .forEach((item: any) => { + if(time === '1d'){ + item.data.timeString = item.data.timeString.split(' ')[0] + } xData.push(item.data.timeString); sData.push(item.data.value); }); - const maxY = sData.sort((a,b)=>{ + const data:any = JSON.parse(JSON.stringify(sData)) + const maxY = data.sort((a,b)=>{ return b-a })[0] alarmStatisticsOption.value = { diff --git a/src/views/rule-engine/Scene/Save/Device/Product.vue b/src/views/rule-engine/Scene/Save/Device/Product.vue index 613cbe67..3212da11 100644 --- a/src/views/rule-engine/Scene/Save/Device/Product.vue +++ b/src/views/rule-engine/Scene/Save/Device/Product.vue @@ -47,7 +47,7 @@ 设备类型 - 直连设备 + {{ slotProps.deviceType.text}} diff --git a/src/views/system/Apply/componenets/MenuDialog.vue b/src/views/system/Apply/componenets/MenuDialog.vue index f0db61db..c5f13f13 100644 --- a/src/views/system/Apply/componenets/MenuDialog.vue +++ b/src/views/system/Apply/componenets/MenuDialog.vue @@ -1,39 +1,17 @@ - - value && getTree(value)" - style="width: 200px" - placeholder="请选择集成系统" - > - {{ item.label }} + + value && getTree(value) " style="width: 200px" + placeholder="请选择集成系统"> + {{ item.label + }} 当前集成菜单 - + {{ name }} @@ -66,10 +44,12 @@ const props = defineProps<{ // 弹窗相关 const loading = ref(false); const handleOk = async () => { - const items = filterTree(form.menuTree, [ + const menuTree = JSON.parse(JSON.stringify(form.menuTree)); + const items = filterTree(menuTree, [ ...form.checkedMenu, - ...form.half, + // ...form.half, ]); + console.log(items); if (form.checkedSystem) { if (items && items.length !== 0) { loading.value = true; @@ -128,6 +108,16 @@ function getTree(params: string) { form.expandedKeys = resp.result.map((item: any) => item?.code); }); } + +const getCheckMenu = (data: any, keys: any) => { + data.forEach((item: any) => { + if (item.children) { + getCheckMenu(item.children, keys) + } else { + keys.push(item.code) + } + }) +} /** * 获取当前用户可访问菜单 */ @@ -143,7 +133,9 @@ function getMenus(id: string) { getMenuTree_api(params).then((resp: any) => { if (resp.status === 200) { // form.menuTree = resp.result; - const keys = resp.result.map((item: any) => item?.code) as string[]; + // const keys = resp.result.map((item: any) => item?.code) as string[]; + let keys: any = []; + getCheckMenu(resp.result, keys) // form.expandedKeys = keys; form.checkedMenu = keys; } @@ -170,10 +162,10 @@ function getSystemList(id: string) { watch(() => props.data, (newVal: any) => { form.checkedSystem = newVal?.page.configuration?.checkedSystem - if(form.checkedSystem){ + if (form.checkedSystem) { getTree(form.checkedSystem) } - if(newVal?.id) { + if (newVal?.id) { getSystemList(newVal?.id); getMenus(newVal?.id); } @@ -188,17 +180,23 @@ function treeCheck(checkedKeys: any, e: CheckInfo) { } //过滤节点-默认带上父节点 function filterTree(nodes: any[], list: any[]) { - if (!nodes?.length) { - return nodes; + if (!nodes) { + return []; } return nodes.filter((it) => { // 不符合条件的直接砍掉 - if (list.indexOf(it.code) <= -1) { - return false; + if (list.includes(it.code)) { + return true + } else if (it.children) { + it.children = filterTree(it.children, list); + return it.children.length } + // if (list.indexOf(it.code) <= -1) { + // return false; + // } // 符合条件的保留,并且需要递归处理其子节点 - it.children = filterTree(it.children, list); - return true; + // it.children = filterTree(it.children, list); + // return true; }); } diff --git a/src/views/system/Department/components/LeftTree.vue b/src/views/system/Department/components/LeftTree.vue index feeed202..1b882239 100644 --- a/src/views/system/Department/components/LeftTree.vue +++ b/src/views/system/Department/components/LeftTree.vue @@ -164,12 +164,14 @@ const search = debounce(() => { function dig(_data: any[]): any { const pIds: string[] = []; + expandedKeys.value = [] if (!_data.length) return; _data.forEach((item) => { if (treeMap.has(item)) { const _item = treeMap.get(item); pIds.push(_item.parentId); treeArray.set(item, _item); + expandedKeys.value.push(_item.id) } }); }
当前集成菜单