166 lines
5.8 KiB
JavaScript
166 lines
5.8 KiB
JavaScript
import { getMenuList, assignRoleMenus, getUserList } from '@/api/permission.js';
|
||
import { ElMessage } from 'element-plus';
|
||
|
||
/**
|
||
* 为超级管理员账户分配所有菜单权限
|
||
* @param {string} mobile 手机号,默认为 '15900000000'
|
||
* @returns {Promise<boolean>} 是否成功
|
||
*/
|
||
export async function assignAllPermissionsToSuperAdmin(mobile = '15900000000') {
|
||
try {
|
||
console.log(`=== 开始为超级管理员 ${mobile} 分配所有菜单权限 ===`);
|
||
|
||
// 1. 获取用户列表,找到目标用户
|
||
const userListRes = await getUserList();
|
||
if (userListRes.code !== 200) {
|
||
throw new Error('获取用户列表失败');
|
||
}
|
||
|
||
const targetUser = userListRes.data.find(user => user.mobile === mobile);
|
||
if (!targetUser) {
|
||
throw new Error(`未找到手机号为 ${mobile} 的用户`);
|
||
}
|
||
|
||
console.log('=== 找到目标用户 ===', targetUser);
|
||
|
||
// 2. 获取所有菜单列表
|
||
const menuListRes = await getMenuList();
|
||
if (menuListRes.code !== 200) {
|
||
throw new Error('获取菜单列表失败');
|
||
}
|
||
|
||
const allMenus = menuListRes.data || [];
|
||
const allMenuIds = allMenus.map(menu => menu.id);
|
||
|
||
console.log('=== 获取到所有菜单 ===', {
|
||
totalMenus: allMenus.length,
|
||
menuIds: allMenuIds
|
||
});
|
||
|
||
// 3. 为超级管理员角色分配所有菜单权限
|
||
const assignRes = await assignRoleMenus({
|
||
roleId: targetUser.roleId,
|
||
menuIds: allMenuIds
|
||
});
|
||
|
||
if (assignRes.code === 200) {
|
||
console.log('=== 权限分配成功 ===');
|
||
ElMessage.success(`成功为超级管理员 ${mobile} 分配了 ${allMenuIds.length} 个菜单权限`);
|
||
return true;
|
||
} else {
|
||
throw new Error(assignRes.msg || '权限分配失败');
|
||
}
|
||
|
||
} catch (error) {
|
||
console.error('=== 权限分配失败 ===', error);
|
||
ElMessage.error(`权限分配失败: ${error.message}`);
|
||
return false;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 检查超级管理员权限状态
|
||
* @param {string} mobile 手机号,默认为 '15900000000'
|
||
* @returns {Promise<Object>} 权限状态信息
|
||
*/
|
||
export async function checkSuperAdminPermissions(mobile = '15900000000') {
|
||
try {
|
||
console.log(`=== 检查超级管理员 ${mobile} 的权限状态 ===`);
|
||
|
||
// 1. 获取用户列表,找到目标用户
|
||
const userListRes = await getUserList();
|
||
if (userListRes.code !== 200) {
|
||
throw new Error('获取用户列表失败');
|
||
}
|
||
|
||
const targetUser = userListRes.data.find(user => user.mobile === mobile);
|
||
if (!targetUser) {
|
||
throw new Error(`未找到手机号为 ${mobile} 的用户`);
|
||
}
|
||
|
||
// 2. 获取该用户当前已分配的菜单权限
|
||
const { getRoleMenuIds } = await import('@/api/permission.js');
|
||
const roleMenuRes = await getRoleMenuIds(targetUser.roleId);
|
||
|
||
if (roleMenuRes.code !== 200) {
|
||
throw new Error('获取角色菜单权限失败');
|
||
}
|
||
|
||
const assignedMenuIds = roleMenuRes.data || [];
|
||
|
||
// 3. 获取所有菜单数量
|
||
const menuListRes = await getMenuList();
|
||
if (menuListRes.code !== 200) {
|
||
throw new Error('获取菜单列表失败');
|
||
}
|
||
|
||
const totalMenus = menuListRes.data.length;
|
||
|
||
const status = {
|
||
user: targetUser,
|
||
totalMenus: totalMenus,
|
||
assignedMenus: assignedMenuIds.length,
|
||
isComplete: assignedMenuIds.length === totalMenus,
|
||
missingMenus: totalMenus - assignedMenuIds.length
|
||
};
|
||
|
||
console.log('=== 权限状态检查结果 ===', status);
|
||
|
||
return status;
|
||
|
||
} catch (error) {
|
||
console.error('=== 权限状态检查失败 ===', error);
|
||
throw error;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 一键为超级管理员分配所有权限(包含UI提示)
|
||
* @param {string} mobile 手机号,默认为 '15900000000'
|
||
*/
|
||
export async function quickAssignAllPermissions(mobile = '15900000000') {
|
||
try {
|
||
// 先检查当前状态
|
||
const status = await checkSuperAdminPermissions(mobile);
|
||
|
||
if (status.isComplete) {
|
||
ElMessage.info(`超级管理员 ${mobile} 已经拥有所有菜单权限`);
|
||
return true;
|
||
}
|
||
|
||
// 确认操作
|
||
const confirmed = await new Promise((resolve) => {
|
||
ElMessageBox.confirm(
|
||
`确定要为超级管理员 ${mobile} 分配所有菜单权限吗?\n\n当前状态:\n- 总菜单数:${status.totalMenus}\n- 已分配:${status.assignedMenus}\n- 缺失:${status.missingMenus}`,
|
||
'确认分配权限',
|
||
{
|
||
confirmButtonText: '确定',
|
||
cancelButtonText: '取消',
|
||
type: 'warning',
|
||
}
|
||
).then(() => resolve(true)).catch(() => resolve(false));
|
||
});
|
||
|
||
if (!confirmed) {
|
||
ElMessage.info('已取消权限分配');
|
||
return false;
|
||
}
|
||
|
||
// 执行分配
|
||
const success = await assignAllPermissionsToSuperAdmin(mobile);
|
||
|
||
if (success) {
|
||
// 重新检查状态
|
||
const newStatus = await checkSuperAdminPermissions(mobile);
|
||
ElMessage.success(`权限分配完成!现在拥有 ${newStatus.assignedMenus}/${newStatus.totalMenus} 个菜单权限`);
|
||
}
|
||
|
||
return success;
|
||
|
||
} catch (error) {
|
||
console.error('=== 快速分配权限失败 ===', error);
|
||
ElMessage.error(`操作失败: ${error.message}`);
|
||
return false;
|
||
}
|
||
}
|