From 22888abd5f6c866e8f28b9bd668745fa538a97c2 Mon Sep 17 00:00:00 2001 From: XieYongHong <18010623010@163.com> Date: Wed, 12 Jul 2023 15:45:29 +0800 Subject: [PATCH] fix: bug#16210 --- src/store/metadata.ts | 3 +- src/utils/utils.ts | 40 +++++++++++++- src/views/device/Instance/Detail/index.vue | 9 ++- src/views/device/Product/Detail/index.vue | 7 +++ .../device/components/Metadata/Base/Base.vue | 55 ++++++++++++++++--- .../device/components/Metadata/index.vue | 10 +++- .../device/components/Metadata/metadata.ts | 14 ++--- yarn.lock | 4 +- 8 files changed, 120 insertions(+), 22 deletions(-) diff --git a/src/store/metadata.ts b/src/store/metadata.ts index d8a494de..1d87b50b 100644 --- a/src/store/metadata.ts +++ b/src/store/metadata.ts @@ -21,7 +21,8 @@ export const useMetadataStore = defineStore({ action: 'add', import: false, importMetadata: false, - } as MetadataModelType + } as MetadataModelType, + tabActiveKey: 'properties', }), actions: { set(key: string, value: any) { diff --git a/src/utils/utils.ts b/src/utils/utils.ts index f3c56f61..c151afec 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -144,4 +144,42 @@ export const ArrayToTree = (list: any[]): any[] => { }); // 返回出去 return treeList; -}; \ No newline at end of file +}; + +export const EventEmitter = { + list: {}, + subscribe: function(events: string[], fn: Function) { + const list = this.list + events.forEach(event => { + (list[event] || (list[event] = [])).push(fn) + }) + return this + }, + emit: function(events:string, data?: any) { + const list = this.list + const fns: Function[] = list[events] ? [...list[events]] : [] + + if (!fns.length) return false; + + fns.forEach(fn => { + fn(data) + }) + + return this + }, + unSubscribe: function(events:string[], fn: Function) { + const list = this.list + events.forEach(key => { + if (key in list) { + const fns = list[key] + for (let i = 0; i < fns.length; i++) { + if (fns[i] === fn) { + fns.splice(i, 1) + break; + } + } + } + }) + return this + } +} \ No newline at end of file diff --git a/src/views/device/Instance/Detail/index.vue b/src/views/device/Instance/Detail/index.vue index 06ec5c43..99352445 100644 --- a/src/views/device/Instance/Detail/index.vue +++ b/src/views/device/Instance/Detail/index.vue @@ -128,6 +128,7 @@ import { getImage, onlyMessage } from '@/utils/comm'; import { getWebSocket } from '@/utils/websocket'; import { useMenuStore } from '@/store/menu'; import { useRouterParams } from '@/utils/hooks/useParams'; +import { EventEmitter } from '@/utils/utils' const menuStory = useMenuStore(); @@ -297,7 +298,13 @@ onMounted(() => { }); const onTabChange = (e: string) => { - instanceStore.tabActiveKey = e; + if (instanceStore.tabActiveKey === 'Metadata') { + EventEmitter.emit('MetadataTabs', () => { + instanceStore.tabActiveKey = e; + }) + } else { + instanceStore.tabActiveKey = e; + } }; const handleAction = async () => { diff --git a/src/views/device/Product/Detail/index.vue b/src/views/device/Product/Detail/index.vue index 84d50714..ecb52622 100644 --- a/src/views/device/Product/Detail/index.vue +++ b/src/views/device/Product/Detail/index.vue @@ -123,6 +123,7 @@ import { import { getImage, handleParamsToString, onlyMessage } from '@/utils/comm'; import { useMenuStore } from '@/store/menu'; import { useRouterParams } from '@/utils/hooks/useParams'; +import {EventEmitter} from "@/utils/utils"; const menuStory = useMenuStore(); const route = useRoute(); @@ -187,7 +188,13 @@ const onBack = () => { }; const onTabChange = (e: string) => { + if (productStore.tabActiveKey === 'Metadata') { + EventEmitter.emit('MetadataTabs', () => { + productStore.tabActiveKey = e; + }) + } else { productStore.tabActiveKey = e; + } }; /** diff --git a/src/views/device/components/Metadata/Base/Base.vue b/src/views/device/components/Metadata/Base/Base.vue index ee1d4ed8..f1ca11bc 100644 --- a/src/views/device/components/Metadata/Base/Base.vue +++ b/src/views/device/components/Metadata/Base/Base.vue @@ -8,6 +8,7 @@ placeholder: '请输入搜索名称' }" serial + @editStatus="editStatusChange" >