-- ============================================================= -- 修复:模块「展示端(platforms)」误配置导致菜单整块消失 -- -- 背景: -- yz_system_modules.platforms 是与 status/is_show、菜单 views、角色 rights -- 并列的第四个维度,决定模块/菜单出现在 Web 端还是移动端: -- ["web"] 仅 Web 端(租户管理后台 PC) -- ["app"] 仅移动端(APP / 微信小程序) -- ["web","app"] 两端都显示 -- '' / NULL 全端显示(默认) -- -- 菜单自身未配置 platforms 时,按 path 前缀继承所属模块的 platforms -- (services.MenuVisibleOn)。所以模块一旦配错,其下整棵菜单都会被 -- 某一端整体剔除——而后台的「模块管理 / 菜单管理 / 角色管理」里 -- 所有开关都是正常的,界面上完全看不出原因。 -- -- 事故原因: -- add_module_platforms.sql 里的「使用示例」第 1、2 条是演示语句, -- 却被原样执行到了正式库: -- 例1 UPDATE yz_system_modules SET platforms = JSON_ARRAY('web') WHERE code = 'crm'; -- 例2 UPDATE yz_system_modules SET platforms = JSON_ARRAY('app') WHERE code = 'bianjiegongju'; -- -- 后果: -- 例2 → 租户后台(Web)左侧菜单里 /tools(便捷工具)整块消失: -- 记事本、日程提醒、账号管理全部不显示。 -- 例1 → 移动端工作台没有「客户关系」模块卡片,/apps/crm 下 29 条菜单全部不显示。 -- -- 修复:两个模块都恢复为两端可见。 -- 依据: -- · 便捷工具:backend/src/views/tools/ 有记事本/日程/密码库完整页面; -- uniapp/pages/toolbox/ 有 home/functions/mine/todo; -- 菜单 views 含 2;全部租户套餐都含 bianjiegongju。 -- · 客户关系:backend/src/views/apps/crm/ 与 uniapp/pages/crm/ 均已完整实现; -- SUBSYSTEMS 已注册 crm;菜单 views 全为 2(租户端两端共用)。 -- -- 回滚: -- UPDATE yz_system_modules SET platforms = JSON_ARRAY('app') -- WHERE code = 'bianjiegongju'; -- UPDATE yz_system_modules SET platforms = JSON_ARRAY('web') -- WHERE code = 'crm'; -- ============================================================= -- ---------- 修复前先看一眼现状 ---------- SELECT id, name, code, path, type, status, is_show, platforms FROM yz_system_modules WHERE code IN ('bianjiegongju', 'crm'); -- ---------- 恢复为两端可见 ---------- UPDATE yz_system_modules SET platforms = JSON_ARRAY('web', 'app'), update_time = NOW() WHERE code IN ('bianjiegongju', 'crm') AND delete_time IS NULL; -- ---------- 校验 ---------- SELECT id, name, code, path, type, status, is_show, platforms FROM yz_system_modules WHERE code IN ('bianjiegongju', 'crm'); -- ---------- 顺带体检:其余模块不应残留单端配置 ---------- -- 除本次修复的两个模块外,其余模块 platforms 应为 NULL(全端)。 SELECT id, name, code, path, platforms FROM yz_system_modules WHERE delete_time IS NULL AND platforms IS NOT NULL AND platforms <> '' AND code NOT IN ('bianjiegongju', 'crm');