fix(角色管理): 修复数据权限更新逻辑并移除调试日志
修复 updateDataScope 函数的数据权限更新逻辑,增加 updateAll 参数控制更新范围 优化菜单选择变化时的数据权限处理,增加读写权限的自动管理 移除所有调试用的 console.log 语句
This commit is contained in:
parent
977615baed
commit
07a27fa13d
|
@ -81,7 +81,7 @@ const rules: FormRules = {
|
||||||
};
|
};
|
||||||
|
|
||||||
watch(activeTab, async (val) => {
|
watch(activeTab, async (val) => {
|
||||||
console.log("activeTab", val); // 输出当前选中的标签的 key 或其他标识符
|
// console.log("activeTab", val); // 输出当前选中的标签的 key 或其他标识符
|
||||||
opRow.value = dataList.value.find(item => item.roleKey == val);
|
opRow.value = dataList.value.find(item => item.roleKey == val);
|
||||||
if (!opRow.value) {
|
if (!opRow.value) {
|
||||||
return;
|
return;
|
||||||
|
@ -89,7 +89,7 @@ watch(activeTab, async (val) => {
|
||||||
await getRoleInfo("update", opRow.value);
|
await getRoleInfo("update", opRow.value);
|
||||||
Object.assign(formData, opRow.value);
|
Object.assign(formData, opRow.value);
|
||||||
formData.menuIds = opRow.value.selectedMenuList;
|
formData.menuIds = opRow.value.selectedMenuList;
|
||||||
updateDataScope();
|
updateDataScope(true);
|
||||||
});
|
});
|
||||||
async function getRoleInfo(type: "add" | "update", row?: RoleDTO) {
|
async function getRoleInfo(type: "add" | "update", row?: RoleDTO) {
|
||||||
try {
|
try {
|
||||||
|
@ -149,23 +149,47 @@ watch(menuTree, (val) => {
|
||||||
};
|
};
|
||||||
|
|
||||||
// 遍历菜单树,开始收集菜单项
|
// 遍历菜单树,开始收集菜单项
|
||||||
console.log("遍历菜单树 val", val);
|
// console.log("遍历菜单树 val", val);
|
||||||
val.forEach(menuOption => {
|
val.forEach(menuOption => {
|
||||||
collectMenus(menuOption);
|
collectMenus(menuOption);
|
||||||
})
|
})
|
||||||
|
|
||||||
console.log("categories", categories); // 输出处理后的菜单选项结构,方便调试和查看结构
|
// console.log("categories", categories); // 输出处理后的菜单选项结构,方便调试和查看结构
|
||||||
// 更新处理后的菜单选项
|
// 更新处理后的菜单选项
|
||||||
processedMenuOptions.value = categories;
|
processedMenuOptions.value = categories;
|
||||||
});
|
});
|
||||||
|
|
||||||
// 监听菜单选择变化,更新数据权限
|
// 监听菜单选择变化,更新数据权限
|
||||||
const updateDataScope = () => {
|
const updateDataScope = (updateAll: boolean) => {
|
||||||
dataScope.value = {};
|
if (updateAll) {
|
||||||
|
dataScope.value = {};
|
||||||
|
}
|
||||||
|
// console.log("updateDataScope formData.menuIds", formData.menuIds);
|
||||||
processedMenuOptions.value.forEach(category => {
|
processedMenuOptions.value.forEach(category => {
|
||||||
const selectedItem = category.items.find(item => item.menuName == '读写' && formData.menuIds.includes(item.id));
|
// 检查是否有任何非“读写”的菜单权限被选中
|
||||||
const permission = selectedItem ? '1' : '0';
|
const hasSelectedMenu = category.items.some(item =>
|
||||||
dataScope.value[category.id] = `${category.id}-${permission}`;
|
item.menuName !== '读写' && formData.menuIds.includes(item.id)
|
||||||
|
);
|
||||||
|
// 检查是否有任何“读写”的菜单权限被选中
|
||||||
|
const hasWriteSelectedMenu = category.items.some(item =>
|
||||||
|
item.menuName == '读写' && formData.menuIds.includes(item.id)
|
||||||
|
);
|
||||||
|
|
||||||
|
if (hasSelectedMenu && !hasWriteSelectedMenu) {
|
||||||
|
// 有选中的菜单权限,默认选中只读
|
||||||
|
dataScope.value[category.id] = dataScope.value[category.id] || `${category.id}-0`;
|
||||||
|
} else if (hasSelectedMenu && hasWriteSelectedMenu) {
|
||||||
|
// 有选中的“读写”菜单权限,默认选中“读写”
|
||||||
|
dataScope.value[category.id] = dataScope.value[category.id] || `${category.id}-1`;
|
||||||
|
} else {
|
||||||
|
// 没有选中的菜单权限,不选中任何数据权限
|
||||||
|
dataScope.value[category.id] = null;
|
||||||
|
|
||||||
|
if (hasWriteSelectedMenu) {
|
||||||
|
const writeReadItem = category.items.find(item => item.menuName === '读写');
|
||||||
|
formData.menuIds = formData.menuIds.filter(id => id !== writeReadItem.id);
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -174,6 +198,9 @@ watch(
|
||||||
dataScope,
|
dataScope,
|
||||||
(newDataScope) => {
|
(newDataScope) => {
|
||||||
Object.entries(newDataScope).forEach(([categoryId, scopeValue]) => {
|
Object.entries(newDataScope).forEach(([categoryId, scopeValue]) => {
|
||||||
|
if (!scopeValue) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
const [id, permission] = scopeValue.split('-');
|
const [id, permission] = scopeValue.split('-');
|
||||||
const category = processedMenuOptions.value.find(cat => cat.id === Number(id));
|
const category = processedMenuOptions.value.find(cat => cat.id === Number(id));
|
||||||
if (!category) return;
|
if (!category) return;
|
||||||
|
@ -193,12 +220,20 @@ watch(
|
||||||
{ deep: true }
|
{ deep: true }
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// 监听菜单选择变化,更新数据权限
|
||||||
|
watch(() => formData.menuIds,
|
||||||
|
() => {
|
||||||
|
updateDataScope(false);
|
||||||
|
},
|
||||||
|
{ deep: true }
|
||||||
|
);
|
||||||
|
|
||||||
async function handleConfirm() {
|
async function handleConfirm() {
|
||||||
try {
|
try {
|
||||||
await formRef.value?.validate();
|
await formRef.value?.validate();
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
formData.dataScope = Object.values(dataScope.value).join(',');
|
formData.dataScope = Object.values(dataScope.value).join(',');
|
||||||
console.log("opType", opType.value);
|
// console.log("opType", opType.value);
|
||||||
if (opType.value === 'add') {
|
if (opType.value === 'add') {
|
||||||
await addRoleApi(formData as AddRoleCommand);
|
await addRoleApi(formData as AddRoleCommand);
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in New Issue