feat: 分组管理设备树

This commit is contained in:
xuziqiang
2024-07-09 18:04:09 +08:00
parent 6b93422b08
commit 717b2aad72
4 changed files with 48 additions and 11 deletions

View File

@@ -10,4 +10,5 @@ export enum group {
queryDeviceGroupTree = `${BASE_URL}/deviceGroup/queryDeviceGroupTree`, // 左侧树
creatOrUpdate = `${BASE_URL}/deviceGroup/creatOrUpdate`, // 左侧树节点新增编辑
del = `${BASE_URL}/deviceGroup/del`, // 左侧树节点新增编辑
move = `${BASE_URL}/deviceGroup/move`, // 左侧树节点新增编辑
}

View File

@@ -75,6 +75,11 @@ export const formSchema = [
component: 'NsInput',
show: false,
},
{
field: 'energyType',
component: 'NsInput',
show: false,
},
{
field: 'id',
component: 'NsInput',
@@ -155,6 +160,7 @@ export const treeConfig = (orgId) => {
labelField: 'cnValue',
valueField: 'cnValue',
placeholder: '请选择能耗种类',
autoSelectFirst: true,
},
},
{

View File

@@ -21,11 +21,9 @@
<ns-icon name="actionMore" size="14" class="actionMore" />
<template #overlay>
<a-menu>
<template v-for="(item, index) in actionList" :key="index">
<template v-for="(item, index) in filterAction(actionList, data)" :key="index">
<!-- 全部节点只需要新增子节点 -->
<a-menu-item
v-if="data.id !== 'all' || item.key === 'addNodeSon'"
@click="item.func(data)">
<a-menu-item @click="item.func(data)">
<span>{{ item.title }}</span>
</a-menu-item>
</template>
@@ -82,10 +80,12 @@
const addNodeSon = (data) => {
console.log(data);
nsModalFormConfig.value.title = '新增';
nsModalFormConfig.value.data = {
isCreate: true,
orgId: result,
energyType: data.formModel?.energyType,
};
if (data.id !== 'all') {
nsModalFormConfig.value.data.pid = data.id;
@@ -94,13 +94,18 @@
modalFormRef.value?.toggle();
};
const editNode = (data) => {
console.log(data);
nsModalFormConfig.value.title = '编辑';
nsModalFormConfig.value.data = data;
setTimeout(() => {
nsModalFormConfig.value.data = data;
}, 1);
modalFormRef.value?.toggle();
};
const moveNode = (data, type: opType) => {
console.log(data);
const flag = type === 'up';
http.post(group.move, { ...data, isUp: flag }).then(() => {
treeRef.value?.treeReload();
NsMessage.success('操作成功');
});
};
const deleteNode = (record) => {
@@ -111,12 +116,33 @@
onOk: () => {
http.post(group.del, { id: record.id }).then(() => {
treeRef.value?.treeReload();
NsMessage.success('删除成功');
treeRef.value?.clearSelectedKeys();
NsMessage.success('操作成功');
});
},
});
};
const filterAction = (data) => {};
const filterAction = (actions, data) => {
let list: string | any[] = ['addNodeSon', 'editNode', 'deleteNode'];
//判断逻辑先后不可颠倒
// 最后一个以及中间的不会包含isFirst即支持上移
if (!data?.isFirst) {
list.push('moveUp');
}
// 第一个以及中间的不会包含isEnd即支持下移
if (!data?.isEnd) {
list.push('moveDown');
}
// 只有一条即不支持上移也不支持下移
if (data.isOnlyOne) {
list = ['addNodeSon', 'editNode', 'deleteNode'];
}
// 全部根节点
if (data.id === 'all') {
list = ['addNodeSon'];
}
return actions.filter(({ key }) => list.includes(key));
};
const actionList = [
{ title: '新增子节点', key: 'addNodeSon', func: (data) => addNodeSon(data) },
{ title: '编辑', key: 'editNode', func: (data) => editNode(data) },

View File

@@ -80,7 +80,7 @@
treeState.loading = loading;
};
const httpPrams = computed(() => {
return { ...route.params, ...route.query, ...props.params };
return { ...route.params, ...route.query, ...props.params, ...formModel };
});
const getData = (params = {}) => {
@@ -109,7 +109,11 @@
getData(params);
};
defineExpose({ treeReload });
const clearSelectedKeys = () => {
selectedKeys.value = [];
};
defineExpose({ treeReload, clearSelectedKeys });
</script>
<style lang="less" scoped>
@gap: 16px;