diff --git a/src/views/device/Instance/Detail/ChildDevice/BindChildDevice/index.vue b/src/views/device/Instance/Detail/ChildDevice/BindChildDevice/index.vue index 8a3ee670..c4d22930 100644 --- a/src/views/device/Instance/Detail/ChildDevice/BindChildDevice/index.vue +++ b/src/views/device/Instance/Detail/ChildDevice/BindChildDevice/index.vue @@ -109,6 +109,7 @@ const emit = defineEmits(['change']); const bindDeviceRef = ref>({}); const params = ref>({}); const _selectedRowKeys = ref([]); +const _selectedRowMap = ref([]); const btnLoading = ref(false); const statusMap = new Map(); @@ -175,10 +176,13 @@ const handleSearch = (e: any) => { const onSelectChange = (keys: string[], rows: string[]) => { _selectedRowKeys.value = [...keys]; + console.log(rows) + _selectedRowMap.value = rows.map(item => ({ deviceId: item.id, deviceName: item.name})) }; const cancelSelect = () => { _selectedRowKeys.value = []; + _selectedRowMap.value = [] }; const handleOk = () => { @@ -187,28 +191,36 @@ const handleOk = () => { return; } btnLoading.value = true; - queryDeviceMapping(instanceStore.current.id, ) - .then(res => { - const arr = bindDeviceRef.value?._dataSource.filter(item => { - return !res.result?.[0]?.find(val => val.deviceId === item.id) && _selectedRowKeys.value.includes(item.id); - }).map(item => { - return { - deviceId: item.id, - deviceName: item.name - } - }) - return saveDeviceMapping(instanceStore.current.id, {info: arr}) - }) - .then(res => { - return bindDevice(detail.value.id, _selectedRowKeys.value) - }).then(res => { - emit('change', true); - cancelSelect(); - onlyMessage('操作成功'); - }) - .finally(() => { + if (instanceStore.current.accessProvider === 'official-edge-gateway') { // 网关设备 + queryDeviceMapping(instanceStore.current.id) + .then(res => { + const arr = bindDeviceRef.value?._dataSource.filter(item => { + return !res.result?.[0]?.find(val => val.deviceId === item.id) && _selectedRowKeys.value.includes(item.id); + }).map(item => { + return { + deviceId: item.id, + deviceName: item.name + } + }) + return saveDeviceMapping(instanceStore.current.id, {info: arr}) + }).then(res => { + emit('change', true); + cancelSelect(); + onlyMessage('操作成功'); + }) + .finally(() => { + btnLoading.value = false; + }); + } else { + bindDevice(detail.value.id, _selectedRowKeys.value).then(res => { + emit('change', true); + cancelSelect(); + onlyMessage('操作成功'); + }).finally(() => { btnLoading.value = false; - }); + }); + } + }; const handleCancel = () => { diff --git a/src/views/device/components/Metadata/Import/index.vue b/src/views/device/components/Metadata/Import/index.vue index c313df55..8da96f23 100644 --- a/src/views/device/components/Metadata/Import/index.vue +++ b/src/views/device/components/Metadata/Import/index.vue @@ -4,7 +4,12 @@

- 导入的物模型会覆盖原来的属性、功能、事件、标签,请谨慎操作。 + +

@@ -66,6 +71,8 @@ import { useProductStore } from '@/store/product'; import { FILE_UPLOAD } from '@/api/comm'; import { getToken, onlyMessage } from '@/utils/comm'; import { useMetadataStore } from '@/store/metadata'; +import {omit} from "lodash-es"; +import { Modal } from 'jetlinks-ui-components' const route = useRoute() const instanceStore = useInstanceStore() @@ -142,6 +149,7 @@ const rules = reactive({ }) const { validate, validateInfos } = useForm(formModel, rules); const fileList = ref([]) +const hasVirtualRule = ref(false) const productList = ref([]) @@ -177,6 +185,7 @@ const fileChange = (info: UploadChangeParam) => { } const operateLimits = (mdata: DeviceMetadata) => { + hasVirtualRule.value = false const obj: DeviceMetadata = { ...mdata }; const old = JSON.parse(instanceStore.detail?.metadata || '{}'); const fid = instanceStore.detail?.features?.map(item => item.id); @@ -190,6 +199,10 @@ const operateLimits = (mdata: DeviceMetadata) => { return { ...item, sortsIndex: index }; }); (obj?.properties || []).map((item, index) => { + if (item.expands?.virtualRule) { + hasVirtualRule.value = true + item.expands = omit(item.expands, ['virtualRule']) + } return { ...item, sortsIndex: index }; }); (obj?.functions || []).map((item, index) => { @@ -244,11 +257,14 @@ const handleImport = async () => { return; } const { id } = route.params || {} + const copyOperateLimits = operateLimits(_object as DeviceMetadata) + const params = { id, - metadata: JSON.stringify(operateLimits(_object as DeviceMetadata)), + metadata: JSON.stringify(copyOperateLimits), }; - const paramsDevice = operateLimits(_object as DeviceMetadata) + const paramsDevice = copyOperateLimits + let resp = undefined if (props?.type === 'device') { resp = await saveMetadata(id as string, paramsDevice) @@ -258,6 +274,12 @@ const handleImport = async () => { loading.value = false if (resp.success) { onlyMessage('导入成功') + if (hasVirtualRule.value) { + Modal.info({ + title: '导入数据存在虚拟属性,请及时添加虚拟属性计算规则。', + okText: '确认' + }) + } } if (props?.type === 'device') { await instanceStore.refresh(id as string) @@ -265,8 +287,6 @@ const handleImport = async () => { await productStore.getDetail(id as string) } metadataStore.set('importMetadata', true) - // Store.set(SystemConst.GET_METADATA, true) - // Store.set(SystemConst.REFRESH_METADATA_TABLE, true) close(); } catch (e) { loading.value = false