|
@ -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({ |
|
|
const res = await API({ |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -860,50 +862,46 @@ const handleEditRolePermissionCheck = (checkedNodes, { checkedKeys }) => { |
|
|
const handleCheckChange = async (checkedNodes, checkedInfo) => { |
|
|
const handleCheckChange = async (checkedNodes, checkedInfo) => { |
|
|
const { checkedKeys, checkedNodes: allCheckedNodes } = 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) => { |
|
|
const selectParentNodes = (treeData, nodeId, checkedKeys) => { |
|
|
if (!Array.isArray(treeData)) return false; |
|
|
|
|
|
|
|
|
if (!Array.isArray(treeData)) return false; |
|
|
|
|
|
|
|
|
for (const item of treeData) { |
|
|
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; |
|
|
return true; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 检查当前节点是否为目标节点 |
|
|
if (item.id === nodeId) { |
|
|
if (item.id === nodeId) { |
|
|
return true; |
|
|
return true; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
return false; |
|
|
return false; |
|
|
}; |
|
|
}; |
|
|
//点击角色权限菜单树点击展示逻辑 |
|
|
//点击角色权限菜单树点击展示逻辑 |
|
|