fix: bug#15992、15977

This commit is contained in:
fuhao 2023-07-20 11:42:45 +08:00 committed by GitHub
parent b03dd8846e
commit b6f89216b4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 166 additions and 58 deletions

View File

@ -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>

View File

@ -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,16 +127,83 @@ 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 || [];
}; };
const onRight = () => { const onRight = () => {
console.log(rightList.value,leftList.value); console.log(rightList.value, leftList.value);
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>

View File

@ -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 || [];
}; };