diff --git a/src/views/device/components/Metadata/Base/Base.vue b/src/views/device/components/Metadata/Base/Base.vue index 463b10e1..2bec728e 100644 --- a/src/views/device/components/Metadata/Base/Base.vue +++ b/src/views/device/components/Metadata/Base/Base.vue @@ -209,6 +209,7 @@ import {omit} from "lodash-es"; import { PropertiesModal, FunctionModal, EventModal, TagsModal } from './DetailModal' import { Modal } from 'jetlinks-ui-components' import {EventEmitter} from "@/utils/utils"; +import {watch} from "vue"; const props = defineProps({ target: { @@ -469,6 +470,10 @@ onUnmounted(() => { EventEmitter.unSubscribe(['MetadataTabs'], parentTabsChange) }) +watch(() => metadata.value, () => { + dataSource.value = metadata.value +}, { immediate: true }) + onBeforeRouteLeave((to, from, next) => { parentTabsChange(next as Function) }) diff --git a/src/views/device/components/Metadata/Base/hooks/useMatadata.ts b/src/views/device/components/Metadata/Base/hooks/useMatadata.ts index 00863694..b1b8152e 100644 --- a/src/views/device/components/Metadata/Base/hooks/useMatadata.ts +++ b/src/views/device/components/Metadata/Base/hooks/useMatadata.ts @@ -2,9 +2,10 @@ import {DeviceMetadata, MetadataItem, MetadataType} from "@/views/device/Product import {useInstanceStore} from "store/instance"; import {useProductStore} from "store/product"; import type { Ref, ComputedRef } from "vue"; +import { storeToRefs } from 'pinia' const useMetadata = (type: 'device' | 'product', key?: MetadataType, ): { - data: ComputedRef, + data: Ref, metadata: Ref>, noEdit: Ref productNoEdit: Ref @@ -14,12 +15,15 @@ const useMetadata = (type: 'device' | 'product', key?: MetadataType, ): { const metadata = ref>({}) const noEdit = ref({}) const productNoEdit = ref({}) + const data = ref([]) + const { current: instanceCurrent } = storeToRefs(instanceStore) + const { current: productCurrent } = storeToRefs(productStore) - const data = computed(() => { - const _metadataStr = type === 'product' ? productStore.current?.metadata : instanceStore.current.metadata + const handleMetadata = (_metadataStr: string) => { const _metadata = JSON.parse(_metadataStr || '{}') const newMetadata = (key ? _metadata?.[key] || [] : []) as DeviceMetadata[] + metadata.value = newMetadata as any const indexKeys = newMetadata.map((item, index) => index) @@ -31,8 +35,8 @@ const useMetadata = (type: 'device' | 'product', key?: MetadataType, ): { noEdit.value.source = indexKeys } - if (type === 'device' && instanceStore.current.productMetadata) { - const productMetadata: any = JSON.parse(instanceStore.current.productMetadata) + if (type === 'device' && instanceCurrent.value.productMetadata) { + const productMetadata: any = JSON.parse(instanceCurrent.value.productMetadata) const metaArray = key ? productMetadata[key] : [] const productIndexKeys = metaArray?.map((item:any, index: number) => index) || [] productNoEdit.value.ids = metaArray?.map((item: any) => item.id) || [] @@ -64,9 +68,17 @@ const useMetadata = (type: 'device' | 'product', key?: MetadataType, ): { } } - return newMetadata - }) - + data.value = newMetadata + } + + watch(() => [instanceCurrent.value.metadata, productCurrent.value.metadata], () => { + if (type === 'device') { + handleMetadata(instanceCurrent.value.metadata) + } else { + handleMetadata(productCurrent.value.metadata) + } + }, { immediate: true}) + return { data, metadata, diff --git a/src/views/device/components/Metadata/Import/index.vue b/src/views/device/components/Metadata/Import/index.vue index 1996f438..05eb5b63 100644 --- a/src/views/device/components/Metadata/Import/index.vue +++ b/src/views/device/components/Metadata/Import/index.vue @@ -77,6 +77,7 @@ interface Props { } interface Emits { (e: 'update:visible', data: boolean): void; + (e: 'submit', data: any): void; } const props = defineProps() const emits = defineEmits()