Files
aiot-platform-ui/apps/web-antd/src/api/system/menu/index.ts
lzh 72ed0eb5aa feat(@vben/web-antd): 支持按 platform 过滤多前端菜单
业务平台 (biz) 与物联运维平台 (iot) 共享同一后端,需按前端来源过滤菜单,
避免同一角色在两端看到相同菜单。

- 新增 CLIENT_ID 常量,请求拦截器 / 基础 client 统一注入 X-Client-Id 头,
  后端密码登录 & refresh-token 据此绑定 token 的 client/platform
- SystemMenuApi.Menu 增加 platform 字段
- 菜单表单新增"所属平台"选择项(PLATFORM_OPTIONS),为 null 则两端共享

配合后端迁移 sql/mysql/migrations/2026-04-20_oauth2_client_platform.sql。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 23:40:19 +08:00

61 lines
1.5 KiB
TypeScript

import { requestClient } from '#/api/request';
export namespace SystemMenuApi {
/** 菜单信息 */
export interface Menu {
id: number;
name: string;
permission: string;
type: number;
sort: number;
parentId: number;
path: string;
icon: string;
component: string;
componentName?: string;
status: number;
visible: boolean;
keepAlive: boolean;
alwaysShow?: boolean;
platform?: string;
createTime: Date;
}
}
/** 查询菜单(精简)列表 */
export async function getSimpleMenusList() {
return requestClient.get<SystemMenuApi.Menu[]>('/system/menu/simple-list');
}
/** 查询菜单列表 */
export async function getMenuList(params?: Record<string, any>) {
return requestClient.get<SystemMenuApi.Menu[]>('/system/menu/list', {
params,
});
}
/** 获取菜单详情 */
export async function getMenu(id: number) {
return requestClient.get<SystemMenuApi.Menu>(`/system/menu/get?id=${id}`);
}
/** 新增菜单 */
export async function createMenu(data: SystemMenuApi.Menu) {
return requestClient.post('/system/menu/create', data);
}
/** 修改菜单 */
export async function updateMenu(data: SystemMenuApi.Menu) {
return requestClient.put('/system/menu/update', data);
}
/** 删除菜单 */
export async function deleteMenu(id: number) {
return requestClient.delete(`/system/menu/delete?id=${id}`);
}
/** 批量删除菜单 */
export async function deleteMenuList(ids: number[]) {
return requestClient.delete(`/system/menu/delete-list?ids=${ids.join(',')}`);
}