Sfoglia il codice sorgente

docs: add frontend medtech redesign spec

wangkangyjy 1 mese fa
parent
commit
94bb2c38b8

+ 356 - 0
docs/superpowers/specs/2026-06-13-frontend-medtech-redesign.md

@@ -0,0 +1,356 @@
+# OKR 绩效系统前端医疗科技化重构设计
+
+日期:2026-06-13
+
+## 背景
+
+医梦AI OKR 绩效系统准备在公司内部上线。现有前端功能完整,覆盖登录、考核周期、OKR 对齐、团队 OKR、绩效自评、上级评分、绩效沟通、组织架构、模板配置和操作日志。主要问题不是业务缺失,而是视觉语言偏通用 AI 后台:高频使用紫青配色、圆角卡片、轻阴影、emoji 和分散的 scoped 样式,削弱了医疗科技公司内部系统应有的专业性、可靠性和审计感。
+
+本次重构采用“方案 B:设计系统 + 重点页面重构”。先建立统一视觉系统,再重构最影响观感和工作效率的核心页面。业务逻辑、接口契约、权限模型和后端不纳入本阶段改动。
+
+## 设计定位
+
+目标风格:现代医疗科技型内部工作台。
+
+关键词:
+
+- 专业:避免营销页、赛博风、过度装饰和泛 AI 视觉。
+- 可靠:用清晰状态、稳定布局、审计信息和低噪声交互建立信任。
+- 精密:像医疗数据工作台,而不是普通 SaaS 卡片墙。
+- 高效:提高 OKR、评分、周期流转等高频页面的信息密度。
+
+公司主题色保留:
+
+- 品牌深色:`#2b1f99`
+- 科技青色:`#3ad4d8`
+
+使用约束:
+
+- `#2b1f99` 用作品牌锚点、主按钮、当前导航、关键标题和少量高权重标记。
+- `#3ad4d8` 用作活跃状态、进度、焦点态和医疗科技感强调。
+- 内容区避免大面积紫色或青色背景。
+- 禁止使用大面积蓝紫渐变、漂浮光斑、营销式 hero 或纯装饰插画。
+
+## 现状判断
+
+已确认的主要问题:
+
+1. 样式分散。至少 17 个 Vue 文件包含 scoped style,重复定义页面标题、卡片、表格、空状态、阴影和圆角。
+2. 色彩硬编码严重。品牌色、状态色、背景色和弱文本色散落在页面组件中。
+3. 页面结构同质化。多个页面采用 `page-hero + 白色圆角卡片 + 轻阴影`,缺少业务特征。
+4. 内部系统质感不足。OKR 和评分页面大量使用 emoji、亮色 badge、圆角按钮,降低正式感。
+5. 关键信息层级不足。评分页、周期页和 OKR 页还没有形成“流程、状态、证据、决策”的稳定结构。
+
+## 改造目标
+
+可量化验收指标:
+
+| 指标 | 目标 |
+| --- | --- |
+| 颜色硬编码 | 核心页面硬编码颜色减少 70% 以上 |
+| 重复样式 | 页面标题、面板、空状态、状态条等重复 CSS 减少 60% 以上 |
+| 圆角体系 | 统一为 4px、6px、8px,避免大面积 12px+ 圆角 |
+| 阴影使用 | 大面积阴影减少 60% 以上,主要使用边框、分隔线和浅底色 |
+| emoji | 业务页面 emoji 全部替换为 Element Plus 图标或正式文本 |
+| 响应式 | 1366px、1440px、1920px、移动宽度下无明显重叠和断行问题 |
+| 构建 | `npm run build` 通过 |
+| 业务行为 | 不改变现有 API、路由和主要交互流程 |
+
+## 视觉系统
+
+### 色彩 token
+
+建议新增统一样式入口,例如 `frontend/src/styles/theme.css`,并在 `main.js` 或 `App.vue` 引入。
+
+核心 token:
+
+```css
+:root {
+  --color-brand: #2b1f99;
+  --color-brand-strong: #1d166b;
+  --color-brand-soft: #eceaf8;
+  --color-accent: #3ad4d8;
+  --color-accent-strong: #17a9ad;
+  --color-accent-soft: #e5fbfc;
+
+  --color-bg: #f5f8fa;
+  --color-surface: #ffffff;
+  --color-surface-subtle: #f8fafc;
+  --color-border: #dfe7ee;
+  --color-border-soft: #edf2f6;
+
+  --color-text: #18212f;
+  --color-text-secondary: #5f6b7a;
+  --color-text-muted: #8a97a8;
+
+  --color-success: #2e9d65;
+  --color-warning: #c98219;
+  --color-danger: #c94a4a;
+  --color-info: #4c6f91;
+}
+```
+
+状态语义:
+
+- 进行中 / 当前:accent 青色。
+- 完成 / 通过:success 绿色。
+- 待处理 / 考评中:warning 琥珀色。
+- 驳回 / 风险:danger 红色。
+- 草稿 / 归档:info 或中性灰蓝。
+
+### 布局 token
+
+```css
+:root {
+  --radius-xs: 4px;
+  --radius-sm: 6px;
+  --radius-md: 8px;
+
+  --shadow-panel: 0 1px 2px rgba(15, 23, 42, 0.04);
+  --shadow-popover: 0 12px 28px rgba(15, 23, 42, 0.12);
+
+  --space-page-x: 24px;
+  --space-page-y: 20px;
+  --layout-sidebar: 220px;
+  --layout-topbar: 52px;
+}
+```
+
+原则:
+
+- 面板用 `1px` 边框和轻微阴影,不做漂浮卡片堆叠。
+- 内容页背景统一浅冷灰。
+- 高密度工作页减少大标题占用,优先展示周期、人员、状态和待办。
+
+### 字体和排版
+
+保持系统中文字体栈,避免引入不可控外部字体。
+
+建议字号:
+
+- 页面标题:22px 或 24px,不再使用 28px 大标题作为默认。
+- 分区标题:15px 或 16px。
+- 表格和业务文本:13px 或 14px。
+- 辅助信息:12px。
+- 数字结果:根据场景 24px、32px、40px,但仅用于绩效总分等关键数据。
+
+### Element Plus 覆盖
+
+新增统一覆盖层,减少页面内重复样式:
+
+- 按钮默认不使用 `round`,统一 6px 圆角。
+- `el-card` 尽量减少使用;优先自定义业务面板类。
+- `el-tag` 降低饱和度,避免大量 dark tag。
+- 表格统一表头背景、行高、hover 和边框。
+- Dialog 的标题、footer、表单间距统一。
+
+## 通用组件和样式模式
+
+建议优先抽象为样式类,不急于过度组件化。稳定后再提取 Vue 组件。
+
+第一阶段需要的通用模式:
+
+1. `PageHeader` / `.app-page-header`
+   - 页面标题、描述、主要操作、当前周期/状态摘要。
+
+2. `.med-panel`
+   - 白色业务面板,统一边框、圆角、内边距、标题。
+
+3. `.status-strip`
+   - 周期状态、OKR 状态、自评状态的横向提示条。
+
+4. `.metric-row` / `.metric-card`
+   - 分数、完成率、周期数量、待办数量等指标。
+
+5. `.evidence-panel`
+   - 评分页左侧证据区:OKR 记录、自评、更新日志。
+
+6. `.decision-panel`
+   - 评分页右侧决策区:打分、公式、结果预览、提交。
+
+7. `.empty-state`
+   - 空数据提示统一样式。
+
+8. `.audit-note`
+   - 归档、不可修改、审核、时间戳等审计信息。
+
+## 页面改造方案
+
+### 1. 主布局 `MainLayout.vue`
+
+目标:建立系统第一印象。
+
+改造点:
+
+- 侧边栏继续使用深品牌色,但降低亮度和饱和噪声。
+- logo 区从居中展示改为更像企业系统的品牌栏。
+- 菜单 active 状态使用左侧细线 + 浅青文本,不使用过亮背景。
+- 顶部栏高度从 48px 调整到 52px,强化边界和用户信息。
+- 通知面板改为更清晰的消息列表,未读状态使用青色细点或左边线。
+- 用户角色 tag 降低饱和度,避免彩虹角色色影响专业感。
+
+### 2. 登录页 `LoginView.vue`
+
+目标:从“AI 暗色科技登录页”改为“医疗科技公司内部系统入口”。
+
+改造点:
+
+- 背景改为浅冷灰或低亮度品牌底,不使用 radial 科技光晕。
+- 登录卡片改为企业内控入口面板,显示系统名、组织名、账号登录。
+- 保留 logo,但减少大尺寸品牌展示。
+- 注册入口弱化。如内部系统不希望开放注册,后续可单独讨论是否隐藏。
+- 输入框和按钮使用统一 Element Plus 覆盖。
+
+### 3. 考核周期 `PeriodListView.vue`
+
+目标:从卡片列表升级为周期生命周期工作台。
+
+改造点:
+
+- 顶部显示周期总览:进行中、待发布、考评中、已归档数量。
+- 周期列表按状态分组,但减少彩色 badge,使用状态点和左边线。
+- 管理员操作区明确主次:发布、锁定、进入考评、归档、删除。
+- 状态说明变成紧凑的流程提示,而不是每张卡片重复大段说明。
+- 批量创建预览统一为表格化列表。
+
+### 4. 我的 OKR `MyOkrView.vue`
+
+目标:强化对齐关系和阶段任务。
+
+改造点:
+
+- 去掉 emoji,规则区改为“OKR 编写标准”信息面板。
+- 上级 OKR、我的 OKR、待审核 OKR 使用一致的目标/关键结果结构。
+- `O` 和 `KR` 标记改为克制的胶囊或短标签。
+- 对齐上级 KR 的选择区改成医疗系统式清单,显示承接来源、负责人、目标值。
+- 阻塞状态和驳回状态使用明确风险样式,但不大面积红底。
+
+### 5. 绩效考评 `ScoringEditView.vue`
+
+目标:做成评审工作台,这是第一阶段最重要页面。
+
+布局:
+
+- 左侧:证据区,占 52% 左右。
+- 右侧:评分决策区,占 420-480px,可在宽屏固定或保持独立滚动。
+- 低于断点后上下堆叠,保持原响应式能力。
+
+左侧证据区:
+
+- OKR 完整记录。
+- KR 完成率、目标值、当前值、权重。
+- 进度日志。
+- 员工自评和说明。
+
+右侧决策区:
+
+- OKR 逐 KR 打分。
+- 工作成果维度评分。
+- 加减分说明。
+- 公式、总分、评级。
+- 提交按钮。
+
+改造点:
+
+- 总分结果使用稳定的数据面板,不使用紫色大块背景。
+- 自评引用以“参考值”形式呈现,避免干扰主评分。
+- 加减分必须保留说明输入,视觉上强调审计留痕。
+
+### 6. 我的绩效 / 历史绩效
+
+目标:结果页体现确认、沟通闭环和归档可信度。
+
+改造点:
+
+- 结果总览包括总分、评级、状态、周期。
+- OKR 与工作成果分开展示贡献。
+- 自评与上级评分对比改为结构化对照。
+- 确认按钮和反馈沟通状态明确。
+- 历史记录强调归档和不可修改。
+
+### 7. 组织、模板、日志等管理页
+
+第一阶段只做全局样式适配:
+
+- 继承统一页面标题、表格、按钮和面板。
+- 不重构业务布局。
+- 操作日志保留高密度表格感,避免卡片化。
+
+## 实施顺序
+
+1. 新增全局样式基础
+   - `frontend/src/styles/theme.css`
+   - `frontend/src/styles/components.css`
+   - `frontend/src/styles/element-plus.css`
+   - 在入口引入。
+
+2. 改造主布局和登录页
+   - 先建立整体气质。
+   - 验证导航、通知、登录流程不受影响。
+
+3. 改造周期页和 PeriodBanner
+   - 统一周期状态表达。
+   - 提供后续 OKR、评分页复用样式。
+
+4. 改造我的 OKR 页面
+   - 替换 emoji。
+   - 统一 OKR/KR 信息结构。
+
+5. 改造绩效考评页
+   - 重构左右工作台视觉结构。
+   - 保持计算逻辑不变。
+
+6. 改造我的绩效和历史绩效
+   - 统一结果呈现和归档语义。
+
+7. 管理页统一适配
+   - 表格、空状态、按钮、面板。
+
+8. 视觉 QA 和构建验证
+   - `npm run build`
+   - 桌面宽度 1366、1440、1920 检查。
+   - 移动或窄屏检查评分页、OKR 页不重叠。
+
+## 非目标
+
+本阶段不做:
+
+- 不改后端接口。
+- 不改数据库结构。
+- 不改变评分公式。
+- 不改变 OKR 周期状态机。
+- 不引入大型 UI 框架替换 Element Plus。
+- 不做营销首页。
+- 不做复杂动画、3D、插画系统。
+- 不处理开放注册策略,除非后续明确要求。
+
+## 风险和应对
+
+风险 1:全局覆盖 Element Plus 影响已有页面。
+
+应对:覆盖规则使用 `.app-shell` 或明确类名约束,避免无边界覆盖。
+
+风险 2:页面 scoped 样式仍然覆盖新样式。
+
+应对:先保留页面结构,逐页移除重复样式;每次只改一个页面组。
+
+风险 3:评分页改动影响计算信任。
+
+应对:评分逻辑不动,只改展示结构;改造后用同一输入检查总分、评级、提交 payload 不变。
+
+风险 4:主题色使用过度,仍显 AI 感。
+
+应对:品牌深色只做锚点,科技青只做活跃和焦点;内容区以中性色和细边框为主。
+
+## 验收清单
+
+- 登录页符合内部医疗科技系统入口气质。
+- 主布局在折叠和展开状态下稳定。
+- 周期页能一眼看出当前阶段、下一步动作和管理员操作。
+- 我的 OKR 页面能清楚表达上级承接、本人目标、待审核事项。
+- 绩效考评页左侧证据、右侧决策分区明确。
+- 结果页能清楚表达分数组成、确认状态、反馈状态。
+- 所有核心页面无 emoji。
+- 核心页面无明显大面积渐变、漂浮光斑、营销式装饰。
+- `npm run build` 通过。
+- 未修改后端业务代码和接口契约。