Industrial-image-management.../src/apis/system/menu-adapter.ts

61 lines
1.8 KiB
TypeScript
Raw Normal View History

2025-07-30 09:13:52 +08:00
import type * as T from './type'
import http from '@/utils/http'
import { convertMenuData } from '@/utils/menuConverter'
/**
* API获取菜单树形数据
*/
export function getMenuTreeForRole(query?: { terminalType?: string }) {
return http.get<any[]>('/menu/tree', query).then(res => {
// 假设响应格式为 { data: [...菜单数据], success: true, msg: "", code: 200 }
const data = res.data || [];
// 转换菜单数据为角色管理组件需要的格式
const convertedData = convertMenuData(data);
return convertedData;
});
}
/**
*
* @param menus
* @param selectedMenuIds ID集合
* @returns
*/
export function transformMenusWithPermissions(menus: any[], selectedMenuIds: string[] = []) {
// 深拷贝菜单数据,避免修改原始数据
const result = JSON.parse(JSON.stringify(menus));
// 递归处理菜单树,添加权限标记
const processMenus = (items: any[]) => {
return items.map(item => {
// 设置选中状态
item.isChecked = selectedMenuIds.includes(item.id.toString());
// 如果有子菜单,递归处理
if (item.children && item.children.length > 0) {
item.children = processMenus(item.children);
}
return item;
});
};
return processMenus(result);
}
/**
* ID列表
*/
export function getRoleMenuIds(roleId: string) {
return http.get<string[]>(`/role/get-menus/${roleId}`);
}
/**
*
*/
export function assignRoleMenus(roleId: string, menuIds: string[]) {
return http.post('/role/bind-menu', {
roleId,
menuIds
});
}