fix: bug#16322
This commit is contained in:
parent
bf5016fca2
commit
c941c8361c
|
@ -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)
|
||||||
})
|
})
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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>()
|
||||||
|
|
Loading…
Reference in New Issue