fix: bug#15992、15977
This commit is contained in:
parent
b03dd8846e
commit
b6f89216b4
|
@ -88,7 +88,13 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts" name="BindChildDevice">
|
<script setup lang="ts" name="BindChildDevice">
|
||||||
import { query, queryByParent, bindDevice, queryDeviceMapping, saveDeviceMapping } from '@/api/device/instance';
|
import {
|
||||||
|
query,
|
||||||
|
queryByParent,
|
||||||
|
bindDevice,
|
||||||
|
queryDeviceMapping,
|
||||||
|
saveDeviceMapping,
|
||||||
|
} from '@/api/device/instance';
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
import { useInstanceStore } from '@/store/instance';
|
import { useInstanceStore } from '@/store/instance';
|
||||||
import { storeToRefs } from 'pinia';
|
import { storeToRefs } from 'pinia';
|
||||||
|
@ -97,9 +103,9 @@ import { onlyMessage } from '@/utils/comm';
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
parentIds: {
|
parentIds: {
|
||||||
type: Array,
|
type: Array,
|
||||||
default: () => []
|
default: () => [],
|
||||||
}
|
},
|
||||||
})
|
});
|
||||||
|
|
||||||
const instanceStore = useInstanceStore();
|
const instanceStore = useInstanceStore();
|
||||||
const { detail } = storeToRefs(instanceStore);
|
const { detail } = storeToRefs(instanceStore);
|
||||||
|
@ -176,13 +182,16 @@ const handleSearch = (e: any) => {
|
||||||
|
|
||||||
const onSelectChange = (keys: string[], rows: string[]) => {
|
const onSelectChange = (keys: string[], rows: string[]) => {
|
||||||
_selectedRowKeys.value = [...keys];
|
_selectedRowKeys.value = [...keys];
|
||||||
console.log(rows)
|
console.log(rows);
|
||||||
_selectedRowMap.value = rows.map(item => ({ deviceId: item.id, deviceName: item.name}))
|
_selectedRowMap.value = rows.map((item) => ({
|
||||||
|
deviceId: item.id,
|
||||||
|
deviceName: item.name,
|
||||||
|
}));
|
||||||
};
|
};
|
||||||
|
|
||||||
const cancelSelect = () => {
|
const cancelSelect = () => {
|
||||||
_selectedRowKeys.value = [];
|
_selectedRowKeys.value = [];
|
||||||
_selectedRowMap.value = []
|
_selectedRowMap.value = [];
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleOk = () => {
|
const handleOk = () => {
|
||||||
|
@ -191,28 +200,34 @@ const handleOk = () => {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
btnLoading.value = true;
|
btnLoading.value = true;
|
||||||
if (instanceStore.current.accessProvider === 'official-edge-gateway') { // 网关设备
|
if (instanceStore.current.accessProvider === 'official-edge-gateway') {
|
||||||
|
// 网关设备
|
||||||
queryDeviceMapping(instanceStore.current.id)
|
queryDeviceMapping(instanceStore.current.id)
|
||||||
.then(res => {
|
.then((res) => {
|
||||||
const arr = bindDeviceRef.value?._dataSource.filter((item: any) => {
|
const arr = bindDeviceRef.value?._dataSource
|
||||||
return _selectedRowKeys.value.includes(item.id);
|
.filter((item) => {
|
||||||
}).map((item: any) => {
|
return (
|
||||||
const _item = res.result?.[0]?.find((val: any) => val.deviceId === item.id)
|
!res.result?.[0]?.find(
|
||||||
if(_item){
|
(val) => val.deviceId === item.id,
|
||||||
return {
|
) && _selectedRowKeys.value.includes(item.id)
|
||||||
id: _item.id,
|
);
|
||||||
deviceId: _item.deviceId,
|
})
|
||||||
deviceName: _item.deviceName
|
.map((item) => {
|
||||||
}
|
|
||||||
}else {
|
|
||||||
return {
|
return {
|
||||||
deviceId: item.id,
|
deviceId: item.id,
|
||||||
deviceName: item.name
|
deviceName: item.name,
|
||||||
}
|
};
|
||||||
|
});
|
||||||
|
if(arr.length){
|
||||||
|
return saveDeviceMapping(instanceStore.current.id, {
|
||||||
|
info: arr,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
return saveDeviceMapping(instanceStore.current.id, {info: arr})
|
.then((res) => {
|
||||||
}).then(res => {
|
return bindDevice(detail.value.id, _selectedRowKeys.value);
|
||||||
|
})
|
||||||
|
.then((res) => {
|
||||||
emit('change', true);
|
emit('change', true);
|
||||||
cancelSelect();
|
cancelSelect();
|
||||||
onlyMessage('操作成功');
|
onlyMessage('操作成功');
|
||||||
|
@ -221,21 +236,21 @@ const handleOk = () => {
|
||||||
btnLoading.value = false;
|
btnLoading.value = false;
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
bindDevice(detail.value.id, _selectedRowKeys.value).then(res => {
|
bindDevice(detail.value.id, _selectedRowKeys.value)
|
||||||
|
.then((res) => {
|
||||||
emit('change', true);
|
emit('change', true);
|
||||||
cancelSelect();
|
cancelSelect();
|
||||||
onlyMessage('操作成功');
|
onlyMessage('操作成功');
|
||||||
}).finally(() => {
|
})
|
||||||
|
.finally(() => {
|
||||||
btnLoading.value = false;
|
btnLoading.value = false;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleCancel = () => {
|
const handleCancel = () => {
|
||||||
emit('change', false);
|
emit('change', false);
|
||||||
};
|
};
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="less"></style>
|
<style scoped lang="less"></style>
|
||||||
|
|
|
@ -16,9 +16,11 @@
|
||||||
<j-tree
|
<j-tree
|
||||||
checkable
|
checkable
|
||||||
:height="300"
|
:height="300"
|
||||||
:tree-data="dataSource"
|
:tree-data="treeList"
|
||||||
:checkedKeys="checkedKeys"
|
:checkedKeys="checkedKeys"
|
||||||
|
:load-data="onLoadData"
|
||||||
@check="onCheck"
|
@check="onCheck"
|
||||||
|
v-model:expandedKeys="expandedKeys"
|
||||||
/>
|
/>
|
||||||
</j-card>
|
</j-card>
|
||||||
<div style="width: 100px">
|
<div style="width: 100px">
|
||||||
|
@ -56,8 +58,17 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { treeEdgeMap, saveEdgeMap, addDevice } from '@/api/device/instance';
|
import {
|
||||||
|
treeEdgeMap,
|
||||||
|
saveEdgeMap,
|
||||||
|
addDevice,
|
||||||
|
edgeChannel,
|
||||||
|
edgeCollector,
|
||||||
|
edgePoint,
|
||||||
|
saveDeviceMapping,
|
||||||
|
} from '@/api/device/instance';
|
||||||
import { onlyMessage } from '@/utils/comm';
|
import { onlyMessage } from '@/utils/comm';
|
||||||
|
import type { TreeProps } from 'ant-design-vue';
|
||||||
const _props = defineProps({
|
const _props = defineProps({
|
||||||
metaData: {
|
metaData: {
|
||||||
type: Array,
|
type: Array,
|
||||||
|
@ -74,6 +85,9 @@ const _props = defineProps({
|
||||||
deviceData: {
|
deviceData: {
|
||||||
type: Object,
|
type: Object,
|
||||||
},
|
},
|
||||||
|
text: {
|
||||||
|
type: String,
|
||||||
|
}
|
||||||
});
|
});
|
||||||
const _emits = defineEmits(['close', 'save']);
|
const _emits = defineEmits(['close', 'save']);
|
||||||
|
|
||||||
|
@ -113,8 +127,10 @@ const handleSearch = async () => {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const expandedKeys = ref<string[]>([]);
|
||||||
const onCheck = (keys: string[], e: any) => {
|
const onCheck = (keys: string[], e: any) => {
|
||||||
checkedKeys.value = [...keys];
|
checkedKeys.value = [...keys];
|
||||||
|
expandedKeys.value.push(e.node.id);
|
||||||
leftList.value = e?.checkedNodes || [];
|
leftList.value = e?.checkedNodes || [];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -123,6 +139,71 @@ const onRight = () => {
|
||||||
rightList.value = leftList.value;
|
rightList.value = leftList.value;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const treeList = ref<any[]>([]);
|
||||||
|
const getChannel = async () => {
|
||||||
|
if (_props.edgeId) {
|
||||||
|
loading.value = true;
|
||||||
|
const resp: any = await edgeChannel(_props.edgeId);
|
||||||
|
loading.value = false;
|
||||||
|
if (resp.status === 200) {
|
||||||
|
treeList.value = resp.result?.[0]?.map((item: any) => ({
|
||||||
|
...item,
|
||||||
|
title: item.name,
|
||||||
|
key: item.id,
|
||||||
|
checkable: false,
|
||||||
|
type: 'channel',
|
||||||
|
parentId: '',
|
||||||
|
provider: item.provider,
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const onLoadData: TreeProps['loadData'] = (treeNode) => {
|
||||||
|
console.log(treeNode);
|
||||||
|
return new Promise(async (resolve) => {
|
||||||
|
if (treeNode.dataRef?.children) {
|
||||||
|
resolve();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const params = {
|
||||||
|
terms: [
|
||||||
|
{
|
||||||
|
terms: [
|
||||||
|
{
|
||||||
|
column:
|
||||||
|
treeNode.type === 'channel'
|
||||||
|
? 'channelId'
|
||||||
|
: 'collectorId',
|
||||||
|
value: treeNode.key,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
const res =
|
||||||
|
treeNode.type === 'channel'
|
||||||
|
? await edgeCollector(
|
||||||
|
<string>_props.edgeId,
|
||||||
|
params,
|
||||||
|
)
|
||||||
|
: await edgePoint(
|
||||||
|
<string>_props.edgeId,
|
||||||
|
params,
|
||||||
|
);
|
||||||
|
(<any>treeNode.dataRef).children = res.result?.[0].map((item: any) => ({
|
||||||
|
...item,
|
||||||
|
title: item.name,
|
||||||
|
key: item.id,
|
||||||
|
type: treeNode.type === 'channel' ? 'collector' : 'point',
|
||||||
|
parentId: treeNode.key,
|
||||||
|
checkable: treeNode.type === 'channel' ? true : false,
|
||||||
|
isLeaf: treeNode.type === 'channel' ? false : true,
|
||||||
|
}));
|
||||||
|
treeList.value = [...treeList.value];
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
|
};
|
||||||
const _delete = (_key: string) => {
|
const _delete = (_key: string) => {
|
||||||
const _index = rightList.value.findIndex((i) => i.key === _key);
|
const _index = rightList.value.findIndex((i) => i.key === _key);
|
||||||
rightList.value.splice(_index, 1);
|
rightList.value.splice(_index, 1);
|
||||||
|
@ -144,7 +225,7 @@ const handleClick = async () => {
|
||||||
metadataId: (_props.metaData as any[]).find(
|
metadataId: (_props.metaData as any[]).find(
|
||||||
(i: any) => i.name === element.name,
|
(i: any) => i.name === element.name,
|
||||||
)?.metadataId,
|
)?.metadataId,
|
||||||
provider: dataSource.value.find(
|
provider: treeList.value.find(
|
||||||
(it: any) => it.id === item.parentId,
|
(it: any) => it.id === item.parentId,
|
||||||
).provider,
|
).provider,
|
||||||
}));
|
}));
|
||||||
|
@ -167,13 +248,19 @@ const handleClick = async () => {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (filterParms && filterParms.length !== 0) {
|
if (filterParms && filterParms.length !== 0) {
|
||||||
const res = await addDevice(_props.deviceData);
|
const res: any = await addDevice(_props.deviceData);
|
||||||
if (res.status === 200) {
|
if (res.status === 200) {
|
||||||
const resq = await saveEdgeMap(_props.edgeId, {
|
const resq: any = await saveEdgeMap(_props.edgeId, {
|
||||||
deviceId: res.result?.id,
|
deviceId: res.result?.id,
|
||||||
provider: filterParms[0]?.provider,
|
provider: filterParms[0]?.provider,
|
||||||
requestList: filterParms,
|
requestList: filterParms,
|
||||||
});
|
});
|
||||||
|
const resp = await saveDeviceMapping(_props.edgeId, {
|
||||||
|
info: [{
|
||||||
|
deviceId: res.result?.id,
|
||||||
|
deviceName: res.result?.name,
|
||||||
|
}],
|
||||||
|
})
|
||||||
if (res.status === 200) {
|
if (res.status === 200) {
|
||||||
onlyMessage('操作成功');
|
onlyMessage('操作成功');
|
||||||
_emits('save');
|
_emits('save');
|
||||||
|
@ -191,7 +278,8 @@ const handleClose = () => {
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
if (_props.edgeId) {
|
if (_props.edgeId) {
|
||||||
handleSearch();
|
// handleSearch();
|
||||||
|
getChannel();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
:checkedKeys="checkedKeys"
|
:checkedKeys="checkedKeys"
|
||||||
:load-data="onLoadData"
|
:load-data="onLoadData"
|
||||||
@check="onCheck"
|
@check="onCheck"
|
||||||
|
v-model:expandedKeys="expandedKeys"
|
||||||
/>
|
/>
|
||||||
</j-card>
|
</j-card>
|
||||||
<div style="width: 100px">
|
<div style="width: 100px">
|
||||||
|
@ -120,7 +121,11 @@ const handleSearch = async () => {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
const expandedKeys = ref<string[]>([])
|
||||||
const onCheck = (keys: string[], e: any) => {
|
const onCheck = (keys: string[], e: any) => {
|
||||||
|
// console.log(expandedKeys.push(e));
|
||||||
|
expandedKeys.value.push(e.node.id)
|
||||||
checkedKeys.value = [...keys];
|
checkedKeys.value = [...keys];
|
||||||
leftList.value = e?.checkedNodes || [];
|
leftList.value = e?.checkedNodes || [];
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue