商户端访问"角色管理-新增"时,菜单权限树一直显示"加载中,请稍候",无法正常加载菜单数据。
数据库 sys_menu 表缺少 platform_id 字段,导致后端查询时 SQL 报错或返回空结果。
前端: sj-merchant-web/src/views/system/role/index.vue
→ handleAdd() 方法
→ getMenuTreeselect()
→ API: GET /system/menu/treeselect
后端: SysMenuController.treeselect()
→ SysMenuServiceImpl.selectMenuList()
→ 查询条件包含: .eq(SysMenu::getPlatformId, platformId)
.env.development 中 VITE_APP_PLATFORM_CODE="SHANGHUDUAN"PLATFORM_CODE: SHANGHUDUANPlatformUtils.getId() → 返回 1(商户端)ADMIN(0, "PINGTAIDUAN", "平台端")MERCHANT(1, "SHANGHUDUAN", "商户端")SysMenuServiceImpl.java:82-87
int platformId = menu.getPlatformId()==null? PlatformUtils.getId() : menu.getPlatformId();
menuList = baseMapper.selectVoList(
wrapper.eq(SysMenu::getPlatformId, platformId) // ← 这里强制过滤 platform_id
SysMenu.java:104-105
// 平台ID
private Integer platformId; // ← 实体类有字段
ry_vue_5.X.sql:235-257
create table sys_menu (
menu_id bigint(20) not null,
menu_name varchar(50) not null,
-- ... 其他字段
remark varchar(500) default '',
-- ❌ 缺少 platform_id 字段
primary key (menu_id)
);
# 在 MySQL 中执行
mysql -u root -p your_database < script/sql/add_platform_id_to_menu.sql
根据业务需求,决定哪些菜单属于哪个平台:
-- 查看当前所有菜单
SELECT menu_id, menu_name, parent_id FROM sys_menu ORDER BY menu_id;
-- 方案 A: 所有菜单都设为平台端(管理端和商户端共享)
UPDATE sys_menu SET platform_id = 0;
-- 方案 B: 区分平台(根据实际业务调整)
-- 平台端菜单(租户管理、系统监控等)
UPDATE sys_menu SET platform_id = 0 WHERE menu_id IN (6, 2, 109, 113);
-- 商户端菜单(用户管理、角色管理等)
UPDATE sys_menu SET platform_id = 1 WHERE menu_id IN (1, 100, 101, 102, 103, 104, 105);
如需进一步调试,可在以下位置打断点:
控制器层
SysMenuController.java:87 - 查看返回的菜单列表服务层
SysMenuServiceImpl.java:83 - 查看 SQL 查询条件SysMenuServiceImpl.java:87 - 查看 platformId 值平台工具类
PlatformUtils.java:8 - 查看请求头中的 PLATFORM_CODEPlatform.java:38 - 查看平台 ID 转换逻辑检查后端日志,查看是否有 SQL 异常或权限问题。
DESC sys_menu;
-- 或
SHOW COLUMNS FROM sys_menu LIKE 'platform_id';
根据业务设计,通常商户端只能看到 platform_id = 1 的菜单。如果需要共享某些菜单,可以考虑:
platform_id IN (0, 1) 的查询sj-merchant-web/src/api/system/menu/index.tssj-merchant-web/src/views/system/role/index.vueruoyi-system/src/main/java/org/dromara/system/controller/system/SysMenuController.javaruoyi-system/src/main/java/org/dromara/system/service/impl/SysMenuServiceImpl.javayp-common-platform/src/main/java/org/dromara/common/platform/