refactor: 简化工作台上手入口和个人设置(portal-onboarding-profile-simplification)

这个提交包含在:
2026-05-29 18:28:40 +08:00
父节点 48260b57b7
当前提交 6b7dce4651
共修改 12 个文件,包含 443 行新增和 319 行删除
@@ -0,0 +1,4 @@
{"file": ".trellis/spec/hyb-oa/frontend-react-vite-design.md", "reason": "核对 A-class 工作台、个人设置页和欢迎弹窗是否符合小团队任务优先和降噪规则。"}
{"file": ".trellis/spec/hyb-oa/security-privacy.md", "reason": "核对页面和证据不泄露敏感信息、权限原始字段和企业微信原始标识。"}
{"file": ".trellis/spec/hyb-oa/docs-and-evidence.md", "reason": "核对截图与验证报告只记录相对路径和脱敏摘要。"}
{"file": ".trellis/tasks/05-29-portal-onboarding-profile-simplification/research/grill-decisions.md", "reason": "核对实现是否符合已确认的产品决策。"}
@@ -0,0 +1,4 @@
{"file": ".trellis/spec/hyb-oa/frontend-react-vite-design.md", "reason": "前端工作台、欢迎弹窗和个人设置页降噪的设计与验证约束。"}
{"file": ".trellis/spec/hyb-oa/security-privacy.md", "reason": "个人设置页不得暴露敏感账号、权限和企业微信原始标识。"}
{"file": ".trellis/spec/hyb-oa/docs-and-evidence.md", "reason": "截图和验证证据需记录相对路径与脱敏摘要。"}
{"file": ".trellis/tasks/05-29-portal-onboarding-profile-simplification/research/grill-decisions.md", "reason": "用户通过 grill-me 确认的产品决策。"}
@@ -0,0 +1,45 @@
# 实施说明
## Plan
1. 移除 `PortalHomePage` 的常驻 `GettingStartedCard` 渲染和清单数据,保留首次欢迎弹窗触发逻辑。
2. 精简 `WelcomeDialog`:
- 标题改为常用入口语义。
- 只保留处理待办、提交报销、请假 3 个入口。
- 移除个人设置、通知中心、考勤汇总。
3. 精简 `ProfilePage`:
- 第一屏主内容只保留账号信息、通知设置、企业微信绑定。
- 完整员工档案作为次要入口。
- 组织/角色状态移入折叠 `账号详情`。
- 移除权限 code 默认展示。
4. 更新 `login-portal-ux.spec.ts` 中 onboarding 断言,覆盖:
- 欢迎弹窗入口数量和文案。
- 快速上手清单不再显示。
- 个人设置默认不出现权限 code。
5. 跑本地验证并用 Playwright 生成截图。
## Risk
- 工作台新员工引导测试原本依赖 `快速上手` 卡片,需要同步改断言。
- 个人设置页如果完全移除角色信息,管理员排查账号状态会少一个入口;因此保留折叠的自然语言 `账号详情`。
- 移除快速上手可能影响首次用户发现功能;通过欢迎弹窗 3 个常用入口和左侧导航承接。
## Rollback
- 若用户确认仍需要常驻上手清单,可恢复 `GettingStartedCard`,但只放真实任务型入口,不再放个人设置/通知中心/流程说明。
## Local Evidence
- 截图:
- `output/playwright/portal-onboarding-profile-simplification/welcome-dialog.png`
- `output/playwright/portal-onboarding-profile-simplification/portal-workbench.png`
- `output/playwright/portal-onboarding-profile-simplification/profile-settings.png`
- 验证:
- `cd client && npm run build`:通过。
- `cd client && E2E_BASE_URL=http://127.0.0.1:5173 npx playwright test tests/e2e/login-portal-ux.spec.ts --workers=1 --reporter=list`:12/12 通过。
- `node scripts/qa/check-ui-design-rules.mjs`:通过。
- `python3 ./.trellis/scripts/task.py validate 05-29-portal-onboarding-profile-simplification`:通过。
- `node scripts/qa/check-trellis-governance.mjs`:通过。
- `node scripts/qa/check-process-contract.mjs --baseline --json`:通过。
- `node scripts/qa/audit-docs.mjs --check-registry`:通过,保留既有 `unregistered docs files: 24` 警告。
- `git diff --check`:通过。
@@ -0,0 +1,112 @@
# 工作台上手入口与个人设置降噪
## Goal
把工作台从“新手教学清单”拉回“今天该处理什么”的小团队工作入口,同时把个人设置页降噪成用户熟悉的账号与通知设置页。解决当前快速上手入口承诺与落地页面不一致的问题,降低国内小于 10 人科技初创公司员工首次使用 OA 的理解成本。
## What I Already Know
- 用户已通过 `grill-me` 逐项确认:
- 工作台首页不承担常驻新手教学职责。
- 删除常驻“快速上手”清单。
- 首次欢迎弹窗保留,但改成轻量“常用入口”,最多 3 个入口。
- `个人设置` 只放账号信息、通知设置、企业微信绑定。
- 不在个人设置页默认展示权限 code。
- 删除 `完善个人资料` 这个上手入口。
- `了解请假流程` 改成业务入口 `请假` / `提交请假`。
- `查看通知中心` 不放在欢迎/上手入口里,只在有未读通知时作为任务出现。
- 本轮不新建“我的档案”页面。
- 本地截图确认后,再部署公网。
- 当前 `PortalHomePage.tsx` 里存在 `GettingStartedCard` 和 4 个上手项:完善个人资料、设置通知偏好、了解请假流程、查看通知中心。
- 当前 `ProfilePage.tsx` 同时展示基本信息、完整员工档案、通知提醒、企业微信绑定、组织信息、账号状态、角色与权限 code,默认页面偏复杂。
- 当前 `WelcomeDialog.tsx` 包含个人设置和通知中心入口,描述仍像新手功能列表。
## Scope
- 前端页面与交互文案改动:
- 工作台首页 onboarding 区域。
- 首次欢迎弹窗。
- PC 个人设置页。
- 前端聚焦测试与本地截图证据。
- 本地验证通过后提交代码;公网部署不纳入本任务直接执行。
## Requirements
- 工作台页面:
- 删除常驻 `快速上手` 卡片及其完成度清单。
- 不再显示 `完善个人资料`、`设置通知偏好`、`了解请假流程`、`查看通知中心` 作为上手步骤。
- 保留“今日任务”“下一步”和已有工作台业务信息架构。
- 不新增新的 onboarding 常驻区块。
- 欢迎弹窗:
- 保留首次欢迎弹窗。
- 改为轻量“常用入口”语义,不表达必须完成的步骤。
- 入口最多 3 个:处理待办、提交报销、请假。
- 不包含个人设置、通知中心、考勤汇总。
- 个人设置页:
- 默认只展示用户能理解、能操作、经常需要看的内容:
- 账号信息:姓名、员工号、邮箱、手机号。
- 通知设置:企业微信消息提醒开关,以及关闭后仍保留站内通知的说明。
- 企业微信绑定:绑定状态、绑定/重新绑定/解绑操作。
- 组织归属、直属汇报、账号状态、角色摘要最多进入折叠的 `账号详情`。
- 默认不展示权限 code。
- 不新建 `我的档案` 页面。
- 完整员工档案只保留为次要入口,不能让用户误以为个人设置就是档案维护中心。
- 文案:
- 使用自然中文,避免 `Portal`、`Workflow` 等英文产品词。
- `了解请假流程` 这类说明型入口不再出现;业务入口用 `请假` 或 `提交请假`。
- 通知中心不作为上手入口出现。
## Acceptance Criteria
- [ ] 工作台不再显示常驻 `快速上手` 清单。
- [ ] 欢迎弹窗只显示最多 3 个常用业务入口,且不包含个人设置和通知中心。
- [ ] 个人设置页第一屏只呈现账号信息、通知设置、企业微信绑定这三类核心内容。
- [ ] 个人设置页默认不展示权限 code。
- [ ] `了解请假流程`、`查看通知中心`、`完善个人资料` 不再作为上手清单入口出现。
- [ ] 本地截图能证明工作台、欢迎弹窗、个人设置页降噪效果。
- [ ] 通过前端 typecheck、build、聚焦 Playwright、UI 设计规则和 Trellis governance。
## Test Plan
```bash
cd client && npm run typecheck
cd client && npm run build
cd client && npx playwright test tests/e2e/login-portal-ux.spec.ts --workers=1 --reporter=list
node scripts/qa/check-ui-design-rules.mjs
python3 ./.trellis/scripts/task.py validate 05-29-portal-onboarding-profile-simplification
node scripts/qa/check-trellis-governance.mjs
git diff --check
```
本地截图:
- 工作台:确认没有常驻快速上手,第一屏聚焦今日任务。
- 欢迎弹窗:确认是轻量常用入口。
- 个人设置:确认默认页面简洁、无权限 code 堆叠。
## Definition Of Done
- 代码改动完成并通过本地验证。
- 截图证据保存在当前 task research 或 `output/playwright/` 对应目录。
- 提交中文 commit,commit message 引用本 task。
- 本轮不直接告知用户公网已更新;公网部署作为截图确认后的后续步骤执行。
## Out Of Scope
- 不新建“我的档案”页面。
- 不改后端用户/权限/员工档案模型。
- 不改真实业务流程、不创建业务数据、不执行审批/付款/企业微信写入。
- 不扩大为全站导航重构。
- 不在本任务内直接部署公网;部署需本地截图确认后另行执行。
## Technical Notes
- 主要代码:
- `client/src/pages/PortalHomePage.tsx`
- `client/src/components/onboarding/WelcomeDialog.tsx`
- `client/src/pages/ProfilePage.tsx`
- `client/tests/e2e/login-portal-ux.spec.ts`
- 设计约束:
- `.trellis/spec/hyb-oa/frontend-react-vite-design.md`
- `docs/产品设计规则.md`
- 当前用户背景:国内小于 10 人科技初创公司,一个人开发维护,优先减少默认复杂度和误导入口。
@@ -0,0 +1,21 @@
# Grill-me 决策记录
## 已确认
- 工作台首页不承担常驻新手教学职责。
- 删除常驻“快速上手”清单。
- 首次欢迎弹窗保留,但改成轻量“常用入口”,最多 3 个入口。
- `个人设置` 只放账号信息、通知设置、企业微信绑定。
- 不在个人设置页默认展示权限 code。
- 删除 `完善个人资料` 这个上手入口。
- `了解请假流程` 改成业务入口 `请假` / `提交请假`。
- `查看通知中心` 不放在欢迎/上手入口里,只在有未读通知时作为任务出现。
- 本轮不新建“我的档案”页面。
- 本地截图确认后,再部署公网。
- 单独创建 Trellis task,不混入 `oa-seven-day-trial-live-ops`。
## 产品判断
- 面向国内小于 10 人科技初创公司,工作台优先回答“今天该处理什么”,不要让用户先学习系统。
- 上手入口必须和落地页面一致:说“流程”就应该是说明,说“申请”才进入申请页。
- 个人设置页应符合常见账号设置心智,不展示开发者视角的权限 code。
@@ -0,0 +1,31 @@
{
"id": "portal-onboarding-profile-simplification",
"name": "portal-onboarding-profile-simplification",
"title": "工作台上手入口与个人设置降噪",
"description": "删除工作台常驻快速上手清单,轻量化首次欢迎弹窗,并将个人设置页降噪为账号、通知和企业微信绑定。",
"status": "in_progress",
"dev_type": null,
"scope": "frontend",
"package": null,
"priority": "P2",
"creator": "shunli",
"assignee": "shunli",
"createdAt": "2026-05-29",
"completedAt": null,
"branch": null,
"base_branch": "main",
"worktree_path": null,
"commit": null,
"pr_url": null,
"subtasks": [],
"children": [],
"parent": null,
"relatedFiles": [
"client/src/pages/PortalHomePage.tsx",
"client/src/components/onboarding/WelcomeDialog.tsx",
"client/src/pages/ProfilePage.tsx",
"client/tests/e2e/login-portal-ux.spec.ts"
],
"notes": "",
"meta": {}
}