# Console 信息架构(IA)需求说明 **状态**:✅ 已批准 **版本**:v1.0(MVP 冻结版) **最近更新**:2025-12-22 ## 1. 目标与定位 - Console 是**全平台统一的管理端入口**,用于跨域工作(生活/学术/党建/报名选拔等)。 - 本文定义 Console 的信息架构(IA)与导航范式,作为所有模块 Console 端页面的统一约束,避免后续功能扩张导致导航失控。 ## 2. 设计原则(业内最佳实践取向) - **两级侧边栏**:侧边栏严格限制为两级(一级=平台域分组、二级=模块入口),避免三级/四级菜单带来的定位成本与信息噪音。 - **模块内二级导航**:模块内部子视图(如“待审核/已发布/已下架”)使用模块页内 Tabs/Segmented,不在侧边栏展开为第三级。 - **入口与范围分离**: - RBAC(权限码)解决“能不能进入模块/执行动作”。 - 数据范围(DataScope/业务映射)解决“能看到/能操作的数据范围”,由后端强制。 - **可扩展**:新增平台域/新增模块不改变既有范式;只需要注册新模块入口与其内部 Tabs。 - **可发现/低切换成本**:提供跨域工作台(WorkBench),聚合高频任务与快捷入口,减少在多个域之间的频繁跳转。 ## 3. 导航结构(冻结) ### 3.1 侧边栏层级(必须) - 一级:平台域分组(Domain Group) - 二级:模块入口(Module Entry) 示例(生活平台): - 生活平台 - 通知公告 - 课程资源分享 ### 3.2 模块内 Tabs(必须) 模块内部子视图以 Tabs/Segmented 呈现(可按权限动态显示): - 课程资源分享:待审核/已发布/已驳回/已下架/专业/课程/专业负责人 - 通知公告:已发布/草稿/已撤回(可继续沿用“状态 Tab + 筛选表单”的结构) > 允许保留子视图路由用于深链接(例如 `/console/resources/pending`),但不得在侧边栏扩展为第三级菜单项。 ### 3.3 空域分组策略(当前阶段) - 当前阶段**不展示空域分组**:当学术/党建/报名选拔域下没有任何可访问模块时,该分组不出现在侧边栏。 - 未来如需“展示建设中域”,应作为独立需求评审(避免现阶段噪音)。 ## 4. 工作台(/console/workbench) ### 4.1 默认落地页 - `/console` 默认跳转到 `/console/workbench`(仅当用户拥有任一 Console 权限时)。 ### 4.2 内容规范 - 工作台是“跨域任务入口”,内容按权限动态显示: - 待审核计数(如课程资源 pending) - 我的草稿/待发布(如通知公告 draft) - 常用入口(审计、模块管理入口) - 快捷入口仅用于跳转:**不改变权限边界**,不在工作台重复实现模块内功能。 - 工作台**不引入新的业务逻辑**:计数与列表口径复用现有 Service(避免重复实现数据范围与状态规则)。 ### 4.3 插件式接入规范(Workbench Provider) 目标:保证工作台在“多平台域 + 多模块”的长期演进下仍然可维护、可扩展且不失控。 - **按模块分文件注册**:每个模块在自身目录下提供一个 Workbench provider(例如 `lib/modules//.workbench.ts`),工作台核心不感知业务细节。 - **显式注册(可控)**:仅在 `lib/workbench/registry.ts` 中显式引入与注册 provider;未落地模块不注册即不显示(完全隐藏,避免“建设中”噪音)。 - **贡献模型**: - provider 可贡献 `cards`(待办/指标卡片)与 `quickLinks`(快捷入口)。 - provider 内部必须先做**权限判定**:无权限则返回空贡献。 - 权限判定使用统一 helper(封装 `hasPerm/hasAnyPerm`),并做缓存,避免工作台因多 provider 导致重复查权限。 - **口径复用(强约束)**: - 卡片计数与列表口径必须复用既有 Service/Repo(统一 DataScope/状态流转/软删规则),避免工作台重复实现业务过滤。 - 计数优先使用 list Service 的 `total`(通过 `pageSize=1` 获取)以复用同一套 where 条件。 - 如确需新增“纯计数”函数,也必须复用模块现有的 DataScope 构建器/过滤器(口径对齐)。 - **性能约束**: - 禁止 N+1:provider 之间独立,但每个 provider 内部应将查询控制在“权限判断 + 少量聚合查询”范围内。 - 卡片只做摘要统计,不渲染大列表;详情/处理统一跳转到模块页面完成。 - **固定口径(v1)**: - 通知公告“到期提醒窗口”:默认 7 天,可在工作台“自定义”中选择 `3/7/14/30`;仅统计 `published`,且 `expire_at ∈ (now, now + Nd]`。 - 课程资源“待审核”:仅统计 `pending`,范围由后端 Service 强制(`major_lead` 为本专业;`admin/super_admin` 全量)。 ### 4.4 默认展示策略(减压 / 专注模式) - 目标:避免模块齐全后形成“任务墙”,通过渐进披露降低信息压力,同时保留卡片形态与可发现性。 - 默认策略: - 快捷入口置顶,默认展开。 - **零值卡片隐藏**:当卡片的任一指标值均为 `0` 时,该卡片默认不出现在工作台主屏(仍可通过“显示全部”查看,不影响“自定义”列表)。 - **重点卡片上限 4 张**:按个人偏好排序后,优先展示前 4 张“有待办信号”的卡片。 - 其余卡片进入“显示全部”折叠区,默认收起,用户可按需展开查看完整工作台卡片集。 - 仅隐藏“零值卡片”,不对卡片内部的零值指标项做二次隐藏(便于保持口径一致与对比)。 ### 4.5 个性化偏好(Cookie 持久化) - 工作台提供“自定义”对话框: - 到期提醒窗口(`3/7/14/30`,默认 `7`) - 卡片/快捷入口的显示与排序 - 持久化策略:使用 Cookie 保存(仅对当前浏览器生效,可随时恢复默认;不做跨设备同步)。 ## 5. 权限与可见性(冻结) ### 5.1 模块入口可见性(RBAC) - 侧边栏模块入口由权限码控制:用户满足模块入口的任一 `permCodes` 即可显示该模块入口。 - 工作台入口对“可进入 Console 的用户”可见(不单独绑定权限码)。 ### 5.2 模块内 Tabs 可见性(RBAC) - Tabs 按各自操作/列表权限控制显示(例如“待审核”仅对 `campus:resource:review` 显示)。 ### 5.3 数据范围(DataScope/业务映射) - 所有列表与详情必须由后端 Service/Repository 强制注入数据范围过滤。 - 示例:`major_lead` 的资源范围由 `major_leads(major_id, user_id)` 映射决定,角色本身不等价于范围。 ## 6. 审计(统一要求) - Console 端的写操作必须记录审计日志(见 `audit.md`)。 - 各模块详情页应提供“查看审计”入口(跳转到 `/console/audit` 并带上 `targetType/targetId` 过滤)。