2026-06-28-dashboard-workbench-minimal-entry-design.md 11 KB

工作台页面最小入口版设计

背景

当前项目已经完成第一个 case: 美发师最小闭环登录。登录成功后,用户会进入后台工作台页面 DashboardPage。但当前工作台页面仍然保留了较多“像是已完成、实际上并未进入当前开发范围”的内容,包括:

  • 欢迎区右侧的“今日预约 / 待跟进”统计提示
  • 4 个统计卡
  • 今日顾客
  • 待跟进顾客
  • 最近施术记录
  • 这些区块下的列表渲染、按钮跳转和相关接口请求

现阶段用户要求以自己的需求为准,将工作台页面收敛成一个“当前版本最小可用入口页”: 只保留 3 个主操作卡片作为可用入口,其余区域统一明确为“当前版本未开发”,同时删除除 UI 外的无效逻辑,避免前端表现误导用户。

用户还要求把 Git 流程纳入本 case 的执行范围。由于当前项目尚未被 Git 管理,因此需要先初始化仓库,再将登录 case 形成基线提交,然后在新的分支上开发本 case,开发完成后再合并回主分支。

目标

  • 将工作台页面收敛为“最小入口版”。
  • 页面只保留 3 个主操作卡片为真实可点击入口。
  • 欢迎区显示当前登录用户的真实用户名,而不是固定文案。
  • 将其余统计、列表、记录区块统一改为未开发态展示。
  • 删除这些未开发区块背后的数据请求、状态管理和交互逻辑。
  • 在代码中补充清晰注释,便于后续恢复开发。
  • 将 Git 初始化、基线提交、新分支开发和合并流程纳入执行。
  • 同步调整登录相关文档,记录工作台对 token 用户名字段的依赖。

非目标

  • 本 case 不开发预约系统。
  • 本 case 不开发顾客跟进系统。
  • 本 case 不开发工作台统计接口。
  • 本 case 不开发工作台列表接口。
  • 本 case 不新增新的工作台专属后端接口。
  • 本 case 不恢复“最近施术记录”等区块的数据渲染。
  • 本 case 不引入复杂的工作台状态机或缓存策略。

设计原则

  • 工作台只暴露当前真正可用的入口,不展示“看似能用”的半成品能力。
  • 未开发区域要明确可感知,不做假数据充数,不伪装成已实现功能。
  • 当前版本能删掉的无效逻辑就删掉,只保留对 UI 占位真正有帮助的结构。
  • 前端优先复用现有页面布局和 copy,避免不必要的重写。
  • 用户名展示优先复用登录 token,而不是为了工作台额外增加 /me 依赖。
  • 注释必须具体说明未来要恢复哪类业务数据,不写泛泛的 TODO。
  • Git 流程视为本 case 的前置工程要求,而不是独立附加事项。

当前页面现状

当前 frontend/src/pages/dashboard/DashboardPage.tsx 具有以下行为:

  • 页面初始化时会并行请求:
    • getWorkbenchData()
    • getCustomerDashboardSummary()
    • getTemplateDashboardSummary()
    • getStylistMe()
  • 欢迎区会根据当前时间生成问候语,并显示 stylistName
  • 右上角显示“今日预约 X 件 / 待跟进 X 件”
  • 页面中部显示 3 个主操作卡片
  • 页面下方显示 4 个统计卡
  • 页面更下方显示今日顾客、待跟进顾客、最近施术记录 3 个模块

这意味着当前页面把“入口能力”和“工作台数据聚合能力”耦合在了一起,不符合当前阶段最小可用范围。

方案选择

本 case 最终采用“最小收缩版工作台”方案:

  • 保留现有页面骨架、排版层级和 3 个入口卡片。
  • 删除不属于当前开发范围的数据请求和渲染逻辑。
  • 将非本期能力明确收敛为未开发态 UI。

不采用以下方案:

  • 完全静态重写版: 改动过大,后续恢复各区块时返工更多。
  • 接口预留壳子版: 会保留当前无价值的 state 和请求代码,不符合“除了 UI 以外逻辑都去掉”的要求。

页面结构设计

1. 欢迎区

欢迎区保留以下内容:

  • 时间问候语: 早上好 / 下午好 / 晚上好
  • 当前登录用户名
  • 工作台说明文案

用户名显示规则:

  • 由当前登录 token 解析得到。
  • 不再通过 getStylistMe() 额外请求。

原因:

  • 当前页面不需要为了欢迎语发起额外接口请求。
  • 登录 token 已经是当前登录身份的本地载体,工作台应优先复用它。

2. 欢迎区右侧统计文案

当前右上角“今日预约 0 件 / 待跟进 0 件”在本版本中隐藏:

  • 页面上不显示该行文案。
  • 代码中保留一条注释,明确说明欢迎区统计当前版本未开发,未来再接预约/跟进真实数据。

原因:

  • 该信息目前没有真实业务来源。
  • 显示 0 会给用户造成“系统已经实现,只是暂时没有数据”的错误认知。

3. 三个主操作卡片

这 3 个卡片是当前页面唯一可点击的真实入口:

  1. 新建顾客 -> /customers/new
  2. AI 发型模拟 -> /simulation
  3. 发型模板 -> /templates

要求:

  • 保留当前卡片视觉层次和按钮可点击状态。
  • 不增加新的入口卡片。
  • 不改变这 3 个入口的路由目标。

4. 四个统计卡

统计卡区块继续保留布局,但进入未开发态:

  • 保留 4 卡并列布局。
  • 不再显示真实统计数字。
  • 数字位置显示占位,例如 --。
  • 卡片说明文字保留,但卡片整体置灰。
  • 增加“当前版本暂未开发”说明文案。

对应逻辑要求:

  • 删除 customerSummary
  • 删除 templateSummary
  • 删除 getCustomerDashboardSummary()
  • 删除 getTemplateDashboardSummary()

原因:

  • 当前版本不开发这些统计能力。
  • 保留数据请求只会制造维护成本和错误联想。

5. 今日顾客 / 待跟进顾客 / 最近施术记录

这 3 个大区块保留标题和板块结构,但统一改为未开发态:

  • 区块标题继续显示,页面视觉结构不塌。
  • 区块内容替换为统一的置灰空状态。
  • 显示“当前版本暂未开发”的明确文案。
  • 不再显示任何列表项。

对应逻辑要求:

  • 删除 dashboardData 相关 state
  • 删除 getWorkbenchData()
  • 删除 appointments
  • 删除 followUps
  • 删除 records
  • 不再渲染列表映射逻辑

未开发态交互设计

1. 未开发区块按钮

未开发区块中的按钮不再保留真实导航逻辑:

  • 优先改为禁用态按钮
  • 视觉上明确不可点击
  • 同时通过按钮文案或邻近说明告诉用户“当前版本暂未开发”

不采用“保留点击后再 toast 提示”的方案,原因如下:

  • 当前能力明确未开发,禁用态更直接
  • 可以减少无意义点击与额外交互噪声
  • 更符合“只有 3 个卡片可点击”的版本边界

2. 只有三张卡片可点击

工作台页面最终交互规则是:

  • 只有 3 个主操作卡片可点击
  • 其余区域全部不可进入新页面
  • 用户不会被误导去尝试尚未实现的工作流

用户名来源设计

Token 载体

为支持欢迎区显示当前登录用户名,本 case 要求登录 token payload 承载最小必要字段:

  • sub
  • email
  • username

这意味着本 case 会联动调整登录 token 契约。

前端解析方式

前端新增一个轻量工具用于解析当前 token 中的用户信息:

  • 只负责安全地读取 payload
  • 只消费当前工作台需要的字段
  • 不引入 JWT 校验逻辑
  • 失败时返回空值,避免页面崩溃

说明:

  • 前端本地解析 token 只用于展示用户名,不用于鉴权决策。
  • 实际鉴权仍然以 token 是否存在及后端校验结果为准。

注释策略

本 case 要求在以下位置保留明确注释:

  • 欢迎区被隐藏的统计文案附近
  • 4 个统计卡的未开发态结构附近
  • 今日顾客 / 待跟进顾客 / 最近施术记录区块附近
  • token 解析用户名的工具附近

注释原则:

  • 不写“TODO: 后面再做”
  • 要直接说明“未来应从哪个业务域或接口恢复”
  • 示例表达方向:
    • 当前版本未开发预约/跟进统计,后续从 workbench 聚合接口恢复
    • 当前版本未开发顾客/记录列表,后续从工作台聚合数据恢复

需要移除的前端逻辑

本 case 完成后,DashboardPage 中应移除以下非必要逻辑:

  • getWorkbenchData()
  • getCustomerDashboardSummary()
  • getTemplateDashboardSummary()
  • getStylistMe()
  • dashboardData state
  • customerSummary state
  • templateSummary state
  • stylistName 由远程接口赋值的逻辑
  • 今日顾客 / 待跟进顾客 / 最近施术记录的列表渲染逻辑

保留:

  • 时间问候语逻辑
  • 页面布局结构
  • 3 个主入口卡片
  • 解析 token 获取用户名的本地逻辑

Git 流程设计

当前项目尚未被 Git 管理,因此本 case 的执行前置流程如下:

  1. 在项目根目录执行 git init
  2. 将当前已完成的“登录 case”代码和文档形成基线提交
  3. 以主分支作为基础,创建新的工作分支开发第二个 case
  4. 第二个 case 开发完成后合并回主分支

说明:

  • 因为仓库此前不存在,所以“基线提交”不是额外优化,而是本 case 正式开发所需前置条件。
  • 第二个 case 需要在独立分支开发,以满足用户要求并隔离本次页面收缩改动。

文档联动更新

本 case 除新增工作台 spec 外,还需要同步更新前一个登录 case 文档中的相关说明:

  • 登录 token payload 将新增 username
  • 工作台欢迎区将直接消费 token 中的 username

原因:

  • 否则文档会落后于实际契约
  • 后续开发者或 AI 只看登录文档时,会漏掉这条联动关系

测试策略

后端

后端测试只覆盖本 case 直接依赖的登录契约变化:

  • 登录成功签发 token 时包含 username
  • 现有登录测试更新到新 payload 约束

本 case 不新增工作台后端接口测试。

前端

前端测试重点如下:

  • 欢迎区显示从 token 解析出来的用户名
  • 页面只保留 3 个真实可点击卡片
  • 右上角“今日预约 / 待跟进”文案不显示
  • 4 个统计卡显示为未开发态
  • 3 个大区块显示为未开发态
  • 未开发区块的按钮不可跳转

手工验收

手工验收至少包括:

  • 登录后进入工作台
  • 欢迎语里显示当前登录用户名
  • 点击 3 个主入口卡片,跳转到正确页面
  • 其余区域无法进入新页面
  • 页面视觉结构完整,无明显塌陷或错位

验收标准

  • 登录后进入工作台时,欢迎区显示当前登录用户名,而不是固定写死名称。
  • 页面上只有 3 个主操作卡片可以点击。
  • 右上角“今日预约 / 待跟进”统计文案不再显示。
  • 4 个统计卡显示为未开发态,不再依赖真实统计请求。
  • 今日顾客、待跟进顾客、最近施术记录 3 个区块显示为未开发态。
  • 未开发区块中的按钮不再保留真实跳转行为。
  • DashboardPage 中与这些未开发区块相关的数据请求和 state 已被移除。
  • 代码中存在清晰注释,说明未来从哪个业务域恢复这些能力。
  • 项目完成 Git 初始化,并形成登录 case 基线提交。
  • 第二个 case 在新分支开发并最终合并回主分支。

推荐的下一步

在本设计确认后,下一步进入实现计划阶段,拆分为:

  1. 初始化 Git 仓库并建立登录 case 基线提交。
  2. 创建第二个 case 的开发分支。
  3. 调整登录 token payload,加入 username。
  4. 重构工作台页面为最小入口版。
  5. 更新相关测试与登录文档。
  6. 验收后合并回主分支。