diff --git a/src/views/device/Instance/Detail/EdgeMap/index.vue b/src/views/device/Instance/Detail/EdgeMap/index.vue index 5c22dc13..1ab47757 100644 --- a/src/views/device/Instance/Detail/EdgeMap/index.vue +++ b/src/views/device/Instance/Detail/EdgeMap/index.vue @@ -210,6 +210,7 @@ import PatchMapping from './PatchMapping.vue'; import { onlyMessage } from '@/utils/comm'; import { cloneDeep } from 'lodash-es'; import { usePermissionStore } from '@/store/permission'; +import { dataTool } from 'echarts'; const columns = [ { title: '名称', @@ -250,6 +251,7 @@ const columns = [ const permissionStore = usePermissionStore(); +const data:any = ref([]) const isPermission = permissionStore.hasPermission('device/Instance:update'); const current = ref(1); @@ -260,10 +262,11 @@ const metadata = JSON.parse(instanceStore.current?.metadata || '{}'); const loading = ref(false); const channelList = ref([]); -const _properties = computed(() => { - const _cur = current.value >= 1 ? current.value : 1; - return metadata.properties?.slice((_cur - 1) * 10, _cur * 10) || []; -}); +// const _properties = computed(() => { +// const _cur = current.value >= 1 ? current.value : 1; +// const _pageSize = pageSize.value +// return metadata.properties?.slice((_cur - 1) * _pageSize, _cur * _pageSize) || []; +// }); const modelRef = reactive<{ dataSource: any[]; @@ -287,14 +290,21 @@ const getChannel = async () => { } }; -const handleSearch = async (_array: any[]) => { +const handleSearch = async () => { loading.value = true; - const _metadata: any[] = _array.map((item: any) => ({ - metadataId: item.id, - metadataName: `${item.name}(${item.id})`, - metadataType: 'property', - name: item.name, - })); + const _metadataMap = new Map () + const _metadata: any[] = metadata.properties.map((item: any) => { + const value = { + metadataId: item.id, + metadataName: `${item.name}(${item.id})`, + metadataType: 'property', + name: item.name, + } + _metadataMap.set(item.id,value) + return value + }); + + if (_metadata && _metadata.length) { const resp: any = await getEdgeMap( instanceStore.current?.parentId || '', @@ -307,32 +317,25 @@ const handleSearch = async (_array: any[]) => { loading.value = false; }); if (resp.status === 200) { - const array = _metadata.map((item: any) => { - const metadataId = resp.result?.[0].find((x: any) => x.metadataId === item.metadataId); - Object.assign(item, metadataId); - return item - }) - resp.result?.[0].forEach((item:any)=>{ - const differ = array.every((i:any)=>{ - return item.metadataId !== i.metadataId - }) - if(!differ){ - array.push(item) - } - }) - // const array = resp.result?.[0].reduce((x: any, y: any) => { - // const metadataId = _metadata.find( - // (item: any) => item.metadataId === y.metadataId, - // ); - // if (metadataId) { - // Object.assign(metadataId, y); - // } else { - // x.push(y); + // const array = _metadata.map((item: any) => { + // const metadataId = resp.result?.[0].find((x: any) => x.metadataId === item.metadataId); + // Object.assign(item, metadataId); + // return item + // }) + // resp.result?.[0].forEach((item:any)=>{ + // const differ = array.every((i:any)=>{ + // return item.metadataId !== i.metadataId + // }) + // if(differ){ + // array.push(item) // } - // return x; - // }, _metadata); - console.log(array) - modelRef.dataSource = array; + // }) + + resp.result?.[0].forEach((item:any)=>{ + _metadataMap.has(item.metadataId) ? _metadataMap.set(item.metadataId,Object.assign(_metadataMap.get(item.metadataId),item)) : _metadataMap.set(item.metadataId,item) + }) + data.value = [..._metadataMap.values()] + onPageChange() } } loading.value = false; @@ -350,7 +353,7 @@ const unbind = async (id: string) => { ); if (resp.status === 200) { onlyMessage('操作成功!', 'success'); - handleSearch(_properties.value); + handleSearch(); } } }; @@ -371,11 +374,14 @@ const onChannelChange = (_index: number, type: 'collector' | 'channel') => { onMounted(() => { getChannel(); - handleSearch(_properties.value); + handleSearch(); }); const onPageChange = () => { - handleSearch(_properties.value); + const _cur = current.value >= 1 ? current.value : 1; + const _pageSize = pageSize.value + const array = data.value.slice((_cur - 1) * _pageSize, _cur * _pageSize) || []; + modelRef.dataSource = array; }; const onSave = () => { diff --git a/src/views/device/Instance/Detail/Info/components/Config/index.vue b/src/views/device/Instance/Detail/Info/components/Config/index.vue index 141f1087..7fd6e1d2 100644 --- a/src/views/device/Instance/Detail/Info/components/Config/index.vue +++ b/src/views/device/Instance/Detail/Info/components/Config/index.vue @@ -67,9 +67,27 @@ " >****** + + {{ + item.type.elements?.find((i)=> + i.value === instanceStore.current?.configuration?.[ + item.property + ] + )?.text || '' + }} + + {{ - instanceStore.current?.configuration?.[item.property] || + instanceStore.current?.configuration?.[item.property] || '' }} ([]); const dataSource = ref([]); const loading = ref(false); -const handleData = (data: any[], type: string) => { +const handleData = (data: any[], type: string,provider?:string) => { data.forEach((item) => { item.key = item.id; item.title = item.name; item.checkable = type === 'collectors'; + provider ? item.provider = provider : '' if ( item.collectors && Array.isArray(item.collectors) && item.collectors.length ) { - item.children = handleData(item.collectors, 'collectors'); + item.children = handleData(item.collectors, 'collectors',item.provider); } if (item.points && Array.isArray(item.points) && item.points.length) { item.children = handleData(item.points, 'points'); @@ -134,6 +135,7 @@ const _delete = (_key: string) => { }; const handleClick = async () => { + if (!rightList.value.length) { onlyMessage('请选择采集器', 'warning'); } else { @@ -146,10 +148,11 @@ const handleClick = async () => { metadataType: 'property', metadataId: (_props.metaData as any[]).find((i: any) => i.name === element.name) ?.metadataId, - provider: _props.type + provider: item.provider })); params.push(...array); }); + const filterParms = params.filter((item) => !!item.metadataId); if (filterParms && filterParms.length !== 0) { const res = await saveMapping(_props.deviceId, _props.type, filterParms); diff --git a/src/views/device/Product/index.vue b/src/views/device/Product/index.vue index 8fa72707..8e9a644d 100644 --- a/src/views/device/Product/index.vue +++ b/src/views/device/Product/index.vue @@ -399,11 +399,9 @@ const beforeUpload = (file: any) => { onlyMessage('文件内容不能为空','error') return false; } - try { const data = JSON.parse(text); // 设置导入的产品状态为未发布 data.state = 0; - if (Array.isArray(data)) { onlyMessage('请上传正确格式文件', 'error'); return false; @@ -418,10 +416,6 @@ const beforeUpload = (file: any) => { tableRef.value?.reload(); } return true; - } catch(e) { - onlyMessage('请上传正确格式文件', 'error'); - } - return true; }; return false; }; diff --git a/src/views/device/components/Metadata/Base/Base.vue b/src/views/device/components/Metadata/Base/Base.vue index f6d98594..00355f71 100644 --- a/src/views/device/components/Metadata/Base/Base.vue +++ b/src/views/device/components/Metadata/Base/Base.vue @@ -247,6 +247,7 @@ import type { ProductItem, } from '@/views/device/Product/typings'; import type { PropType } from 'vue'; +import { TOKEN_KEY } from '@/utils/variable' import {useRouter, onBeforeRouteUpdate} from 'vue-router' import { useMetadata, useOperateLimits } from './hooks'; import {TypeStringMap, useColumns} from './columns'; @@ -259,7 +260,7 @@ import { useProductStore } from '@/store/product'; import { asyncUpdateMetadata, updateMetadata } from '../metadata'; import { useMetadataStore } from '@/store/metadata'; import { DeviceInstance } from '@/views/device/Instance/typings'; -import { onlyMessage } from '@/utils/comm'; +import { onlyMessage , LocalStore} from '@/utils/comm'; import {omit} from "lodash-es"; import { PropertiesModal, FunctionModal, EventModal, TagsModal } from './DetailModal' import { Modal } from 'jetlinks-ui-components' @@ -510,7 +511,7 @@ const handleSaveClick = async (next?: Function) => { const tabsChange = inject('tabsChange') const parentTabsChange = (next?: Function) => { - if (editStatus.value && permissionStore.hasPermission(`${props.permission}:update`)) { + if (editStatus.value && permissionStore.hasPermission(`${props.permission}:update`) && LocalStore.get(TOKEN_KEY)) { const modal = Modal.confirm({ content: '页面改动数据未保存', okText: '保存', diff --git a/src/views/device/components/Metadata/Base/columns.tsx b/src/views/device/components/Metadata/Base/columns.tsx index 36412237..fd0227f3 100644 --- a/src/views/device/components/Metadata/Base/columns.tsx +++ b/src/views/device/components/Metadata/Base/columns.tsx @@ -85,8 +85,9 @@ export const handleTypeValue = (type:string, value: any = {}) => { obj.format = value break; case 'string': + obj.maxLength = JSON.stringify(value) === '{}' ? undefined : value case 'password': - obj.maxLength = value + obj.maxLength = JSON.stringify(value) === '{}' ? undefined : value break; default: obj = value diff --git a/src/views/device/components/Metadata/Base/components/Source.vue b/src/views/device/components/Metadata/Base/components/Source.vue index fc892971..020907ec 100644 --- a/src/views/device/components/Metadata/Base/components/Source.vue +++ b/src/views/device/components/Metadata/Base/components/Source.vue @@ -236,7 +236,7 @@ const confirm = async () => { // } // } const resetRules = async() =>{ - let res:any = await resetRule(instanceStore.current?.productId,instanceStore.current?.id,props.value?.id) + let res:any = await resetRule(instanceStore.current?.productId,instanceStore.current?.id,[props.value?.id]) if(res.status === 200){ onlyMessage('操作成功!') } diff --git a/src/views/edge/Device/index.vue b/src/views/edge/Device/index.vue index e6abbfaa..0acd4d41 100644 --- a/src/views/edge/Device/index.vue +++ b/src/views/edge/Device/index.vue @@ -101,7 +101,7 @@ :key="i" > - + diff --git a/src/views/iframe/index.vue b/src/views/iframe/index.vue index ecead7ec..5a43002a 100644 --- a/src/views/iframe/index.vue +++ b/src/views/iframe/index.vue @@ -1,19 +1,23 @@ -