fix: bug#16322

This commit is contained in:
XieYongHong 2023-07-14 18:16:39 +08:00
parent bf5016fca2
commit c941c8361c
3 changed files with 26 additions and 8 deletions

View File

@ -209,6 +209,7 @@ import {omit} from "lodash-es";
import { PropertiesModal, FunctionModal, EventModal, TagsModal } from './DetailModal' import { PropertiesModal, FunctionModal, EventModal, TagsModal } from './DetailModal'
import { Modal } from 'jetlinks-ui-components' import { Modal } from 'jetlinks-ui-components'
import {EventEmitter} from "@/utils/utils"; import {EventEmitter} from "@/utils/utils";
import {watch} from "vue";
const props = defineProps({ const props = defineProps({
target: { target: {
@ -469,6 +470,10 @@ onUnmounted(() => {
EventEmitter.unSubscribe(['MetadataTabs'], parentTabsChange) EventEmitter.unSubscribe(['MetadataTabs'], parentTabsChange)
}) })
watch(() => metadata.value, () => {
dataSource.value = metadata.value
}, { immediate: true })
onBeforeRouteLeave((to, from, next) => { onBeforeRouteLeave((to, from, next) => {
parentTabsChange(next as Function) parentTabsChange(next as Function)
}) })

View File

@ -2,9 +2,10 @@ import {DeviceMetadata, MetadataItem, MetadataType} from "@/views/device/Product
import {useInstanceStore} from "store/instance"; import {useInstanceStore} from "store/instance";
import {useProductStore} from "store/product"; import {useProductStore} from "store/product";
import type { Ref, ComputedRef } from "vue"; import type { Ref, ComputedRef } from "vue";
import { storeToRefs } from 'pinia'
const useMetadata = (type: 'device' | 'product', key?: MetadataType, ): { const useMetadata = (type: 'device' | 'product', key?: MetadataType, ): {
data: ComputedRef<MetadataItem[]>, data: Ref<MetadataItem[]>,
metadata: Ref<Partial<DeviceMetadata>>, metadata: Ref<Partial<DeviceMetadata>>,
noEdit: Ref<any> noEdit: Ref<any>
productNoEdit: Ref<any> productNoEdit: Ref<any>
@ -14,12 +15,15 @@ const useMetadata = (type: 'device' | 'product', key?: MetadataType, ): {
const metadata = ref<Partial<DeviceMetadata>>({}) const metadata = ref<Partial<DeviceMetadata>>({})
const noEdit = ref<any>({}) const noEdit = ref<any>({})
const productNoEdit = ref<any>({}) const productNoEdit = ref<any>({})
const data = ref<MetadataItem[]>([])
const { current: instanceCurrent } = storeToRefs(instanceStore)
const { current: productCurrent } = storeToRefs(productStore)
const data = computed(() => { const handleMetadata = (_metadataStr: string) => {
const _metadataStr = type === 'product' ? productStore.current?.metadata : instanceStore.current.metadata
const _metadata = JSON.parse(_metadataStr || '{}') const _metadata = JSON.parse(_metadataStr || '{}')
const newMetadata = (key ? _metadata?.[key] || [] : []) as DeviceMetadata[] const newMetadata = (key ? _metadata?.[key] || [] : []) as DeviceMetadata[]
metadata.value = newMetadata as any metadata.value = newMetadata as any
const indexKeys = newMetadata.map((item, index) => index) const indexKeys = newMetadata.map((item, index) => index)
@ -31,8 +35,8 @@ const useMetadata = (type: 'device' | 'product', key?: MetadataType, ): {
noEdit.value.source = indexKeys noEdit.value.source = indexKeys
} }
if (type === 'device' && instanceStore.current.productMetadata) { if (type === 'device' && instanceCurrent.value.productMetadata) {
const productMetadata: any = JSON.parse(instanceStore.current.productMetadata) const productMetadata: any = JSON.parse(instanceCurrent.value.productMetadata)
const metaArray = key ? productMetadata[key] : [] const metaArray = key ? productMetadata[key] : []
const productIndexKeys = metaArray?.map((item:any, index: number) => index) || [] const productIndexKeys = metaArray?.map((item:any, index: number) => index) || []
productNoEdit.value.ids = metaArray?.map((item: any) => item.id) || [] 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 { return {
data, data,
metadata, metadata,

View File

@ -77,6 +77,7 @@ interface Props {
} }
interface Emits { interface Emits {
(e: 'update:visible', data: boolean): void; (e: 'update:visible', data: boolean): void;
(e: 'submit', data: any): void;
} }
const props = defineProps<Props>() const props = defineProps<Props>()
const emits = defineEmits<Emits>() const emits = defineEmits<Emits>()