项目需求:在勾选节点后提交,需要将所有勾选节点和半选节点id传回后端。
由于Ant Design Vue 的Tree组件没有提供获取半选节点的方法,所以需要自己处理
element ui中可以通过 getHalfCheckedKeys 方法来获取(如图):
下面是antd (vue3)方法:
const treeData = ref(); //节点树
const checkedKeys = ref(); //勾选状态
const halfCheckedKeys = ref(); //半选状态
// 获取节点树
const dataList: any = await getRoleMenuList();
treeData.value = dataList.data;
// 获取节点状态
let res = await getRoleMenu(roleId.value);
// 设置勾选节点
if (res.data) {
// 获取勾选节点
checkedKeys.value = resolveAllEunuchNodeId(treeData.value, res.data, []);
//获取半选节点
halfCheckedKeys.value = res.data.filter((v: any) =>
checkedKeys.value.every((val: any) => val != v),
);
}
});
// 勾选时将半选节点存储
const onCheck = (val, event: { halfCheckedKeys: any }) => {
halfCheckedKeys.value = event.halfCheckedKeys;
};
/**
* Tree解析所有太监节点ID
*
*/
const resolveAllEunuchNodeId = (json: any[], idArr: any[], temp: any[] = []) => {
for (const item of json) {
if (item.children && item.children.length !== 0) {
resolveAllEunuchNodeId(item.children, idArr, temp);
} else {
temp.push(...idArr.filter((id) => id === item.id));
}
}
return temp;
};