tokenFactory/.codebuddy/memory/2026-06-02.md

3.6 KiB
Raw Blame History

2026-06-02

修复供应商菜单权限不生效的 Bug

  • 根本原因:管理员设置页面 SettingsSidebarModulesAdmin.jsx 中 personal 区域使用 provider key而实际侧栏 SiderBar.jsx 使用 supplier key以及 supplier-applysupplier-channelsupplier-pricing-settingssupplier-dashboard 子菜单),导致 key 不匹配
  • 修复文件web/src/pages/Setting/Operation/SettingsSidebarModulesAdmin.jsx
    • 初始状态中 personal 区域:providersupplier,并补充子菜单 key
    • 重置默认配置中:providersupplier
    • sectionConfigs UI 展示:providersupplier,并补充子菜单模块
  • 修复后管理员禁用供应商相关模块即可正确生效

新增聊天区域角色级菜单配置功能

  • 需求:管理员可针对不同角色(普通用户/管理员/超级管理员)独立配置聊天区域的操练场和聊天菜单可见性
  • 修改文件
    1. controller/misc.goGetStatus API 新增 SidebarModulesByRole 配置返回
    2. web/src/hooks/common/useSidebar.jsfinalConfig 计算末尾添加角色覆盖逻辑,读取用户角色和 SidebarModulesByRole 配置
    3. web/src/pages/Setting/Operation/SettingsSidebarModulesAdmin.jsx:新增角色配置 UIRadioGroup 切换角色 + Switch 控制模块),独立保存到 SidebarModulesByRole
  • 数据格式SidebarModulesByRole = { "1": { "chat": { "playground": false } }, "10": {...}, "100": {...} },角色值与 USER_ROLES 一致
  • 覆盖逻辑:角色配置优先级高于全局 SidebarModulesAdmin 配置,显式设为 false 的模块对对应角色隐藏
  • 后续优化角色配置扩展为所有菜单区域chat/console/personal/adminUI 复用 sectionConfigs 动态渲染全部模块

修复超级管理员点击"系统设置"菜单异常

  • 根本原因SettingsSidebarModulesAdmin.jsxsectionConfigsconst 声明在组件内部第340行buildDefaultRoleConfig()useState 初始值中调用第172行引用了尚未声明的 sectionConfigs,触发 JavaScript Temporal Dead Zone 错误,导致整个 Setting 页面崩溃
  • 修复方案:将 sectionConfigs 提取为组件外部常量,内部用 translatedSections 做翻译映射
  • 同时修复
    • resetSidebarModules 中 personal 缩进混乱 + 遗漏 supplier 子菜单 key
    • useEffect fallback 中仍有旧的 provider key 和 'distributor-apply' key 未修正

优化菜单权限管理功能(去重+简化)

  • 问题:侧边栏管理页面存在两套重复配置(全局控制 SidebarModulesAdmin + 角色配置 SidebarModulesByRole需要保存两次
  • 修改文件
    1. web/src/pages/Setting/Operation/SettingsSidebarModulesAdmin.jsx:移除全局控制部分,只保留角色菜单权限配置,一个保存按钮;普通用户角色不显示管理员区域配置
    2. web/src/hooks/common/useSidebar.js:移除 adminConfig/SidebarModulesAdmin 依赖,改用角色配置(SidebarModulesByRole)作为基础配置与用户个人配置合并
    3. web/src/components/settings/personal/cards/NotificationSettings.jsx:移除 adminConfig/mergeAdminConfig 引用,改用后端权限检查
    4. web/src/components/settings/OperationSetting.jsx:移除 SidebarModulesAdmin state
    5. controller/misc.goGetStatus API 移除 SidebarModulesAdmin 返回
  • 配置流程简化管理员只需配置角色菜单权限SidebarModulesByRole用户个人设置在此基础上自定义不需要保存两次