|
| 1 | +# 团队平台移动端导航准则 |
| 2 | + |
| 3 | +> 状态:团队平台共享页面的响应式开发基线 |
| 4 | +> 适用项目:`pvbb` |
| 5 | +> 适用范围:使用 `TeamHomeSidebar` 与现代工作台外壳的团队广场、公开主页、活动页和团队工作台 |
| 6 | +> 整理日期:2026-08-02 |
| 7 | +
|
| 8 | +## 1. 目标 |
| 9 | + |
| 10 | +桌面端的团队平台左侧栏同时承载平台发现入口、团队管理入口、成员团队入口和角色入口。移动端不得把这套长侧栏简单排到正文底部,也不应把数量不固定的团队列表压缩成固定底部导航。 |
| 11 | + |
| 12 | +移动端统一采用“左侧悬浮触发按钮 + 左侧侧滑抽屉”: |
| 13 | + |
| 14 | +- 屏幕左侧边缘显示紧凑的悬浮触发按钮,并在页面滚动时保持可访问。 |
| 15 | +- 触发按钮统一只显示团队导航图标,不展示当前团队 Logo、名称或其他团队身份信息。 |
| 16 | +- 触发按钮只表达“打开团队导航”,团队上下文统一留在页面信息卡和抽屉内部呈现。 |
| 17 | +- 点击触发按钮后,从左侧打开全高抽屉;原桌面侧栏的信息结构在抽屉中完整保留。 |
| 18 | +- 选择入口、切换团队、点击遮罩或关闭按钮、按下 `Escape`、发生路由切换时均关闭抽屉。 |
| 19 | + |
| 20 | +## 2. 响应式边界 |
| 21 | + |
| 22 | +- `> 1100px`:桌面双栏,左侧工作台保持 `sticky`。 |
| 23 | +- `821px–1100px`:页面主体改为单列,侧栏内部可使用双列面板。 |
| 24 | +- `<= 820px`:不再展示内联侧栏,改为左侧悬浮按钮和左侧抽屉。 |
| 25 | +- 团队列表很多时只允许抽屉内部滚动,不得继续撑高正文。 |
| 26 | +- 抽屉宽度使用视口宽度的约 `88%`,并设置合理最大宽度;必须处理顶部和底部安全区。 |
| 27 | + |
| 28 | +断点属于共享工作台合同。后续页面不得在自己的页面样式中再次改变侧栏的排列顺序或复制另一套移动导航。 |
| 29 | + |
| 30 | +## 3. 信息层级 |
| 31 | + |
| 32 | +抽屉继续沿用桌面端顺序: |
| 33 | + |
| 34 | +1. 团队平台标识和关闭操作。 |
| 35 | +2. 团队广场、团队活动等平台发现入口。 |
| 36 | +3. 团队工作区。 |
| 37 | +4. “团队管理”分组。 |
| 38 | +5. “我的团队”分组。 |
| 39 | +6. “我的角色”等跨平台入口。 |
| 40 | + |
| 41 | +管理身份和成员身份由现有路由表达: |
| 42 | + |
| 43 | +- `/team/manage/org/:id`:管理视图。 |
| 44 | +- `/team/my/org/:id`:成员视图。 |
| 45 | + |
| 46 | +移动适配不得新增 `mode` 查询参数,也不得在抽屉中重新实现团队权限判断。 |
| 47 | + |
| 48 | +## 4. 实现边界 |
| 49 | + |
| 50 | +- 共享数据加载、团队去重排序、当前团队判断和路由生成继续由 `src/components/team/org/team_home_sidebar.vue` 负责。 |
| 51 | +- `src/pages/team/App.vue` 只负责现代工作台外壳,不为单个业务页面维护抽屉状态。 |
| 52 | +- CSS 负责断点、定位、遮罩、位移、滚动、安全区和动效。 |
| 53 | +- JavaScript 只负责开关状态、路由后关闭、`Escape` 关闭和页面滚动锁定。 |
| 54 | +- 桌面端必须复用同一份导航 DOM 与数据,禁止复制一份独立的移动团队列表。 |
| 55 | +- 新增团队平台共享页面时,应加入 `isModernWorkspace` 路由集合,从而继承统一外壳;不得在业务页面底部手工插入 `TeamHomeSidebar`。 |
| 56 | + |
| 57 | +## 5. 交互与可访问性 |
| 58 | + |
| 59 | +- 触发器使用原生 `button`,提供“打开团队导航”的 `aria-label`、`aria-controls` 与 `aria-expanded`。 |
| 60 | +- 触发按钮固定在左侧垂直居中的安全位置,不占据正文布局高度,也不得遮挡公共页头的核心操作。 |
| 61 | +- 遮罩和关闭按钮必须有清晰的关闭语义。 |
| 62 | +- 所有可点击项保留 `:focus-visible` 状态。 |
| 63 | +- 抽屉关闭时,其内部控件不得继续进入键盘焦点顺序。 |
| 64 | +- 打开抽屉时锁定背景页面滚动;组件卸载时必须清理滚动锁。 |
| 65 | +- 支持 `prefers-reduced-motion: reduce`,关闭位移动效。 |
| 66 | +- 抽屉中的团队 Logo 加载失败时继续使用共享默认图,不因移动端结构增加另一套回退逻辑。 |
| 67 | + |
| 68 | +## 6. 验收清单 |
| 69 | + |
| 70 | +- 桌面端侧栏视觉、分组、展开逻辑和路由行为未发生回归。 |
| 71 | +- `820px` 以下正文出现在团队长列表之前。 |
| 72 | +- 左侧触发按钮只显示导航图标,不泄露或重复展示当前团队身份。 |
| 73 | +- 抽屉能够通过触发器、遮罩、关闭按钮和 `Escape` 完整开关。 |
| 74 | +- 点击团队广场、团队活动、团队条目或角色入口后抽屉关闭。 |
| 75 | +- 管理团队与成员团队较多时,滚动限制在抽屉内部。 |
| 76 | +- 抽屉打开时背景不可滚动,关闭和组件卸载后恢复。 |
| 77 | +- iPhone 安全区、窄屏长团队名和失效 Logo 均没有遮挡或溢出。 |
| 78 | +- 路由仍使用既有 `manage_my_org`、`view_my_org` 等名称,没有引入移动端专用业务路由。 |
0 commit comments