diff --git a/src/views/permissions/permission.vue b/src/views/permissions/permission.vue index a54f698..79dfc9c 100644 --- a/src/views/permissions/permission.vue +++ b/src/views/permissions/permission.vue @@ -694,6 +694,8 @@ const handleAddRole = async function () { } }); }); + addRole.value.roleName = addRole.value.roleName.replace(/\s+/g, ''); + console.log('去除角色名空格:',addRole.value.roleName); const res = await API({ @@ -859,52 +861,47 @@ const handleEditRolePermissionCheck = (checkedNodes, { checkedKeys }) => { const handleCheckChange = async (checkedNodes, checkedInfo) => { const { checkedKeys, checkedNodes: allCheckedNodes } = checkedInfo; - - // 判断是否有选中的节点(避免空数组报错) - if (allCheckedNodes.length === 0) return; - // 取第一个选中的节点 - const node = allCheckedNodes[0]; - // 选中状态 - const checked = checkedKeys.includes(node.id); - - console.log('checkedInfo', checkedInfo); - console.log('node', node); - console.log('checked', checked); - - if (checked) { - const newCheckedKeys = [...checkedInfo.checkedKeys]; - console.log('初始选中项:', newCheckedKeys); - // 执行递归前先清空可能的重复父级(可选优化) - const uniqueKeys = [...new Set(newCheckedKeys)]; - - selectParentNodes(data.value, node.id, uniqueKeys); - console.log('包含父级的选中项:', uniqueKeys); - addRole.value.checkedKeys = uniqueKeys; - } else { - addRole.value.checkedKeys = checkedInfo.checkedKeys; - console.log('else'); - + + // 判断是否有选中的节点 + if (allCheckedNodes.length === 0) { + addRole.value.checkedKeys = []; + return; } + + // 创建一个Set存储所有需要选中的ID(包括父级) + const allKeys = new Set(checkedKeys); + + // 遍历所有选中的节点,为每个节点添加其父级 + allCheckedNodes.forEach(node => { + // 为每个选中的节点单独查找父级 + selectParentNodes(data.value, node.id, allKeys); + }); + + // 将Set转换为数组并更新 + addRole.value.checkedKeys = Array.from(allKeys); + console.log('包含所有父级的选中项:', addRole.value.checkedKeys); }; const selectParentNodes = (treeData, nodeId, checkedKeys) => { - if (!Array.isArray(treeData)) return false; + if (!Array.isArray(treeData)) return false; for (const item of treeData) { - if (item.children && Array.isArray(item.children) && item.children.length > 0) { - const found = selectParentNodes(item.children, nodeId, checkedKeys); - if (found) { - // 避免重复添加父级 - if (!checkedKeys.includes(item.id)) { - checkedKeys.push(item.id); - } + // 先检查子节点 + if (item.children && item.children.length > 0) { + const foundInChildren = selectParentNodes(item.children, nodeId, checkedKeys); + if (foundInChildren) { + // 找到子节点后添加当前节点(父节点) + checkedKeys.add(item.id); return true; } } + + // 检查当前节点是否为目标节点 if (item.id === nodeId) { return true; } } + return false; }; //点击角色权限菜单树点击展示逻辑