37 lines
3.6 KiB
Markdown
37 lines
3.6 KiB
Markdown
# 2026-06-02
|
||
|
||
## 修复供应商菜单权限不生效的 Bug
|
||
- **根本原因**:管理员设置页面 `SettingsSidebarModulesAdmin.jsx` 中 personal 区域使用 `provider` key,而实际侧栏 `SiderBar.jsx` 使用 `supplier` key(以及 `supplier-apply`、`supplier-channel`、`supplier-pricing-settings`、`supplier-dashboard` 子菜单),导致 key 不匹配
|
||
- **修复文件**:`web/src/pages/Setting/Operation/SettingsSidebarModulesAdmin.jsx`
|
||
- 初始状态中 personal 区域:`provider` → `supplier`,并补充子菜单 key
|
||
- 重置默认配置中:`provider` → `supplier`
|
||
- sectionConfigs UI 展示:`provider` → `supplier`,并补充子菜单模块
|
||
- 修复后管理员禁用供应商相关模块即可正确生效
|
||
|
||
## 新增聊天区域角色级菜单配置功能
|
||
- **需求**:管理员可针对不同角色(普通用户/管理员/超级管理员)独立配置聊天区域的操练场和聊天菜单可见性
|
||
- **修改文件**:
|
||
1. `controller/misc.go`:GetStatus API 新增 `SidebarModulesByRole` 配置返回
|
||
2. `web/src/hooks/common/useSidebar.js`:finalConfig 计算末尾添加角色覆盖逻辑,读取用户角色和 SidebarModulesByRole 配置
|
||
3. `web/src/pages/Setting/Operation/SettingsSidebarModulesAdmin.jsx`:新增角色配置 UI(RadioGroup 切换角色 + Switch 控制模块),独立保存到 `SidebarModulesByRole`
|
||
- **数据格式**:`SidebarModulesByRole` = `{ "1": { "chat": { "playground": false } }, "10": {...}, "100": {...} }`,角色值与 USER_ROLES 一致
|
||
- **覆盖逻辑**:角色配置优先级高于全局 SidebarModulesAdmin 配置,显式设为 false 的模块对对应角色隐藏
|
||
- **后续优化**:角色配置扩展为所有菜单区域(chat/console/personal/admin),UI 复用 sectionConfigs 动态渲染全部模块
|
||
|
||
## 修复超级管理员点击"系统设置"菜单异常
|
||
- **根本原因**:`SettingsSidebarModulesAdmin.jsx` 中 `sectionConfigs` 用 `const` 声明在组件内部(第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.go`:GetStatus API 移除 `SidebarModulesAdmin` 返回
|
||
- **配置流程简化**:管理员只需配置角色菜单权限(SidebarModulesByRole),用户个人设置在此基础上自定义,不需要保存两次
|