Files
erp/plans/cheeky-shimmying-jellyfish.md
iven 841766b168
Some checks failed
CI / rust-check (push) Has been cancelled
CI / rust-test (push) Has been cancelled
CI / frontend-build (push) Has been cancelled
CI / security-audit (push) Has been cancelled
fix(用户管理): 修复用户列表页面加载失败问题
修复用户列表页面加载失败导致测试超时的问题,确保页面元素正确渲染
2026-04-19 08:46:28 +08:00

62 lines
2.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 插件侧边栏三级菜单重构
## Context
当前插件菜单是扁平结构,所有插件的页面(客户管理、联系人、沟通记录等)都平铺在"插件"分组下。随着更多插件接入,菜单会变得杂乱无章。需要改为三级结构:
```
插件(分组标题)
└ CRM插件名称可折叠
├ 客户管理
├ 联系人
├ 沟通记录
├ 标签管理
└ 客户关系
└ 未来插件名称(可折叠)
├ 页面1
└ 页面2
```
## 改动范围
仅涉及前端两个文件,无需后端改动(`PluginMenuItem.pluginId` 字段已存在)。
### 1. `apps/web/src/stores/plugin.ts`
**改动:** 新增 `PluginMenuGroup` 类型和 `pluginMenuGroups` getter。
```ts
export interface PluginMenuGroup {
pluginId: string;
pluginName: string; // 从 cachedPlugins 取 metadata.name
items: PluginMenuItem[];
}
```
在 store 中添加一个 `pluginMenuGroups` 计算属性Zustand getter`pluginId` 分组,取插件名称从 `plugins` 数组中查找。
### 2. `apps/web/src/layouts/MainLayout.tsx`
**改动:**
- 新增 `SidebarSubMenu` 组件:显示插件名称作为可折叠子标题,渲染其下级 `SidebarMenuItem`
- 子标题使用 `expand-icon` (右箭头) 指示可折叠,点击切换展开/收起
- 子标题样式:略深背景 + 左侧有缩进指示线
- 子菜单项有额外左缩进12px表示层级
- 折叠侧边栏时,子菜单标题只显示插件图标,悬浮弹出子项
**渲染逻辑:**
```
"插件" 标签
for each group in pluginMenuGroups:
<SidebarSubMenu title=group.pluginName items=group.items />
```
## 验证
1. 启动前端 `pnpm dev`,访问侧边栏
2. 确认 CRM 插件下所有 5 个菜单项嵌套在 "CRM" 子标题下
3. 点击 "CRM" 子标题可展开/收起
4. 折叠侧边栏后CRM 子项通过 tooltip 或悬浮展示
5. 点击各子项,路由正确跳转
6. 页面标题(面包屑)正确显示