|
|
@@ -0,0 +1,663 @@
|
|
|
+# OKR 绩效系统全链路重构设计
|
|
|
+
|
|
|
+**日期**:2026-07-06
|
|
|
+**状态**:已确认
|
|
|
+**视觉方向**:Surgical Observatory / 手术观测台
|
|
|
+**适用范围**:全部 Web 页面、必要的后端接口与 SQLite 数据迁移
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 1. 目标
|
|
|
+
|
|
|
+本轮重构不只统一视觉,而是以前端体验为出发点,重新梳理 OKR 制定、审核、执行、绩效评审、面谈、确认与申诉的完整闭环。
|
|
|
+
|
|
|
+完成后系统应具备以下特征:
|
|
|
+
|
|
|
+- 呈现高端科技公司、AI 智慧医疗、优雅克制的产品气质。
|
|
|
+- 使用深色科技外壳和冷白临床数据工作区。
|
|
|
+- 保持高信息密度,同时通过网格、留白、字重和分隔线建立秩序。
|
|
|
+- 用户始终知道当前周期、当前阶段、待办事项和下一步操作。
|
|
|
+- 前端不再重复拼装周期、权限和流程状态。
|
|
|
+- 后端接口直接支持页面工作流,必要时允许新增接口、字段和表。
|
|
|
+- 现有 SQLite 数据必须无损保留。
|
|
|
+- 保持单 JAR 部署方式。
|
|
|
+
|
|
|
+## 2. 硬性约束
|
|
|
+
|
|
|
+### 2.1 业务约束
|
|
|
+
|
|
|
+- 周期主状态机保持:
|
|
|
+
|
|
|
+ `DRAFT → OKR_ALIGN → EXECUTING → ASSESSING → ARCHIVED`
|
|
|
+
|
|
|
+- OKR 评分满分 60。
|
|
|
+- 绩效维度评分满分 40。
|
|
|
+- 加分、扣分和等级规则保持当前实现。
|
|
|
+- 权限继续以组织上下级关系为主,`SUPER_ADMIN` 保留绕过能力。
|
|
|
+- 历史归档数据不可因模板、组织或目标后续变更而失真。
|
|
|
+- 评分修正必须进入 `audit_correction`,不得覆盖审计历史。
|
|
|
+
|
|
|
+### 2.2 技术约束
|
|
|
+
|
|
|
+- 前端继续使用 Vue 3、Vite、Pinia、Element Plus。
|
|
|
+- 后端继续使用 Spring Boot、MyBatis-Plus、SQLite。
|
|
|
+- 不使用外部 CDN。
|
|
|
+- 字体、图标和静态资源必须打包进单 JAR。
|
|
|
+- 新接口优先以增量方式加入;旧接口在前端迁移完成前继续可用。
|
|
|
+- 数据库变化必须通过 `schema_migration` 前向迁移。
|
|
|
+
|
|
|
+## 3. 视觉系统
|
|
|
+
|
|
|
+### 3.1 核心气质
|
|
|
+
|
|
|
+设计关键词:
|
|
|
+
|
|
|
+- 临床仪器般精确
|
|
|
+- 科研工作台
|
|
|
+- 冷静、可信、可追溯
|
|
|
+- AI 辅助而非 AI 炫技
|
|
|
+- 数据优先
|
|
|
+
|
|
|
+禁止以下表现:
|
|
|
+
|
|
|
+- 紫蓝大渐变铺满内容区
|
|
|
+- 营销式大标题和口号
|
|
|
+- 卡片套卡片
|
|
|
+- 大量胶囊标签
|
|
|
+- 霓虹发光和模糊光斑
|
|
|
+- 无业务含义的装饰图形
|
|
|
+- Unicode 几何字符和 emoji 充当图标
|
|
|
+- 无数据支持的“AI 诊断”文案
|
|
|
+
|
|
|
+### 3.2 色彩
|
|
|
+
|
|
|
+| 用途 | 建议值 | 规则 |
|
|
|
+|---|---:|---|
|
|
|
+| 外壳最深色 | `#120d4a` | 主导航轨、底部账户区 |
|
|
|
+| 外壳基础色 | `#1d166b` | 上下文导航 |
|
|
|
+| 品牌主色 | `#2b1f99` | 主要操作、关键选中态 |
|
|
|
+| 医疗青 | `#3ad4d8` | 流程连线、实时状态、聚焦 |
|
|
|
+| 页面背景 | `#f5f8fa` | 冷白微蓝灰 |
|
|
|
+| 主表面 | `#ffffff` | 表格和主要工作区 |
|
|
|
+| 次级表面 | `#f8fafc` | 表头、分组、只读区 |
|
|
|
+| 主文字 | `#18212f` | 标题、主要数据 |
|
|
|
+| 次级文字 | `#5f6b7a` | 说明和次要数据 |
|
|
|
+| 边界 | `#dfe7ee` | 控件、区段和表格边界 |
|
|
|
+
|
|
|
+品牌主色只承担关键动作和选中态;医疗青只承担流程、实时状态和交互焦点。警告、危险、成功继续使用语义色,不使用品牌色替代业务状态。
|
|
|
+
|
|
|
+### 3.3 字体与图标
|
|
|
+
|
|
|
+- 中文:本地子集化的思源黑体。
|
|
|
+- 英文和数字:IBM Plex Sans。
|
|
|
+- UI 最多使用两套字体。
|
|
|
+- 正文基准 14px。
|
|
|
+- 表头、状态和字段标签为 10–11px。
|
|
|
+- 页面标题控制在 18–22px,不使用营销式超大标题。
|
|
|
+- 图标优先复用 `@element-plus/icons-vue`。
|
|
|
+- 若现有图标缺失,只补充一个风格统一、可本地打包的成熟图标库。
|
|
|
+
|
|
|
+### 3.4 间距、圆角和层级
|
|
|
+
|
|
|
+- 间距阶梯:4、8、12、16、24、32px。
|
|
|
+- 控件圆角:4px。
|
|
|
+- 普通面板圆角:6px。
|
|
|
+- 抽屉、弹窗圆角上限:8px。
|
|
|
+- 状态默认使用色点加文字,不默认使用胶囊。
|
|
|
+- 普通内容区不使用阴影。
|
|
|
+- 阴影只用于弹窗、抽屉、下拉和确实发生遮挡关系的浮层。
|
|
|
+
|
|
|
+### 3.5 动效
|
|
|
+
|
|
|
+- 时长控制在 140–180ms。
|
|
|
+- 只使用淡入、轻微位移、尺寸和透明度变化。
|
|
|
+- 禁止弹跳、弹性和持续循环动画。
|
|
|
+- 支持 `prefers-reduced-motion`。
|
|
|
+- 页面加载采用骨架屏,不使用通用旋转加载图标占据主视觉。
|
|
|
+
|
|
|
+## 4. 全局壳层与信息架构
|
|
|
+
|
|
|
+### 4.1 双层导航
|
|
|
+
|
|
|
+桌面端采用选中视觉稿中的双层导航:
|
|
|
+
|
|
|
+- 64px 主导航轨:只展示产品一级模块和图标。
|
|
|
+- 176px 上下文导航:展示当前一级模块内的页面。
|
|
|
+- 上下文导航允许折叠。
|
|
|
+
|
|
|
+一级模块:
|
|
|
+
|
|
|
+1. 工作台
|
|
|
+2. 目标与对齐
|
|
|
+3. 绩效评审
|
|
|
+4. 系统管理
|
|
|
+
|
|
|
+二级页面映射:
|
|
|
+
|
|
|
+| 一级模块 | 二级页面 |
|
|
|
+|---|---|
|
|
|
+| 工作台 | 当前周期、我的待办、团队风险 |
|
|
|
+| 目标与对齐 | 我的 OKR、团队 OKR、OKR 对齐、执行进度 |
|
|
|
+| 绩效评审 | 我的绩效、待我评审、绩效沟通、绩效申诉、历史绩效 |
|
|
|
+| 系统管理 | 考核周期、组织架构、绩效模板、考核维度、操作日志 |
|
|
|
+
|
|
|
+通知从独立主导航项调整为系统状态线入口,保留原有通知页面和深链接。
|
|
|
+
|
|
|
+### 4.2 系统状态线
|
|
|
+
|
|
|
+页面顶部使用 36px 状态线,展示:
|
|
|
+
|
|
|
+- 当前周期和阶段
|
|
|
+- 系统状态
|
|
|
+- 未读通知
|
|
|
+- 当前用户和账户菜单
|
|
|
+
|
|
|
+### 4.3 页面上下文栏
|
|
|
+
|
|
|
+每个页面使用统一的 `PageContextBar`:
|
|
|
+
|
|
|
+- 页面标题
|
|
|
+- 当前对象
|
|
|
+- 当前周期
|
|
|
+- 筛选条件
|
|
|
+- 主要操作
|
|
|
+
|
|
|
+标题、周期、状态和主要操作不再散落于独立 hero、横幅或卡片中。
|
|
|
+
|
|
|
+### 4.4 响应式
|
|
|
+
|
|
|
+- `≥1280px`:完整双层导航。
|
|
|
+- `1024–1279px`:主导航轨常驻,上下文导航收起为弹出面板。
|
|
|
+- `<1024px`:导航使用抽屉,工作台矩阵降级为纵向分组。
|
|
|
+- 表格优先保留关键列,次要字段进入行详情,不直接压缩到不可读。
|
|
|
+
|
|
|
+## 5. 统一工作台
|
|
|
+
|
|
|
+登录后默认进入新增的工作台页面,不再直接进入周期列表。
|
|
|
+
|
|
|
+工作台包含:
|
|
|
+
|
|
|
+- 当前周期阶段轨道
|
|
|
+- 周期剩余时间
|
|
|
+- 我的待办
|
|
|
+- 团队完成率
|
|
|
+- 待审核事项
|
|
|
+- 阻塞和风险项
|
|
|
+- 近期截止节点
|
|
|
+
|
|
|
+待办类型:
|
|
|
+
|
|
|
+- 制定或修改 OKR
|
|
|
+- 审核下属 OKR
|
|
|
+- 更新 KR 进度
|
|
|
+- 提交自评
|
|
|
+- 完成终评
|
|
|
+- 发布结果
|
|
|
+- 记录或回复面谈
|
|
|
+- 确认结果
|
|
|
+- 处理申诉
|
|
|
+
|
|
|
+点击待办必须直接进入具体周期、人员和业务对象,不允许只跳到泛列表页。
|
|
|
+
|
|
|
+## 6. 全局周期上下文
|
|
|
+
|
|
|
+新增 Pinia `workspace` store,统一维护:
|
|
|
+
|
|
|
+- 当前周期
|
|
|
+- 可选周期
|
|
|
+- 当前阶段
|
|
|
+- 当前用户在该阶段的待办
|
|
|
+- 当前页面允许执行的动作
|
|
|
+
|
|
|
+规则:
|
|
|
+
|
|
|
+- URL 中的 `periodId` 是可分享、可刷新的最终来源。
|
|
|
+- URL 未提供 `periodId` 时,使用 store 中最近选择的有效周期。
|
|
|
+- store 也无有效值时,使用后端返回的推荐周期。
|
|
|
+- 切换周期时同步更新 URL,并刷新当前页面业务数据。
|
|
|
+- 页面不得自行重复实现“过滤非归档周期”“默认选择第一个周期”等逻辑。
|
|
|
+
|
|
|
+## 7. OKR 全链路设计
|
|
|
+
|
|
|
+统一流程:
|
|
|
+
|
|
|
+`周期发布 → 上级目标 → 我的制定 → 上级审核 → 执行更新 → 进入考评`
|
|
|
+
|
|
|
+### 7.1 我的 OKR
|
|
|
+
|
|
|
+采用三段式工作台:
|
|
|
+
|
|
|
+- 左侧:上级目标和必须承接的 KR。
|
|
|
+- 中央:我的 O/KR 编辑与结果表格。
|
|
|
+- 右侧检查器:权重、对齐关系、字段问题和提交条件。
|
|
|
+
|
|
|
+能力:
|
|
|
+
|
|
|
+- 保存草稿
|
|
|
+- 继续编辑
|
|
|
+- 正式提交
|
|
|
+- 查看驳回原因
|
|
|
+- 重新提交
|
|
|
+- 执行阶段更新 KR
|
|
|
+
|
|
|
+提交前检查:
|
|
|
+
|
|
|
+- O 标题有效
|
|
|
+- KR 数量符合规则
|
|
|
+- KR 权重合计为 100
|
|
|
+- 必须承接的 KR 已建立来源关系
|
|
|
+- 所有 KR 具备目标值
|
|
|
+
|
|
|
+### 7.2 团队 OKR
|
|
|
+
|
|
|
+使用列表和详情分栏:
|
|
|
+
|
|
|
+- 左侧按“待审核、未提交、已驳回、阻塞、正常”排序。
|
|
|
+- 中央展示选中人员的 O/KR。
|
|
|
+- 右侧展示对齐、权重、阻塞和审核上下文。
|
|
|
+
|
|
|
+驳回必须填写原因。通过操作需要明确展示被审核的人员和目标数量。
|
|
|
+
|
|
|
+### 7.3 OKR 对齐
|
|
|
+
|
|
|
+使用树形矩阵:
|
|
|
+
|
|
|
+- 层级编号
|
|
|
+- 目标类型
|
|
|
+- 对齐度
|
|
|
+- KR 进度
|
|
|
+- 负责人
|
|
|
+- 状态
|
|
|
+
|
|
|
+右侧检查器展示:
|
|
|
+
|
|
|
+- 目标详情
|
|
|
+- 负责人
|
|
|
+- 关键结果
|
|
|
+- 来源和下游承接关系
|
|
|
+- 孤立状态
|
|
|
+- 风险项
|
|
|
+- 当前可执行操作
|
|
|
+
|
|
|
+### 7.4 执行进度
|
|
|
+
|
|
|
+个人和团队 KR 使用统一数据矩阵。
|
|
|
+
|
|
|
+点击 KR 行打开详情抽屉:
|
|
|
+
|
|
|
+- 当前值和目标值
|
|
|
+- 状态
|
|
|
+- 更新备注
|
|
|
+- 完整进度历史
|
|
|
+- 来源 KR
|
|
|
+- 下游承接目标
|
|
|
+
|
|
|
+## 8. 绩效评审闭环
|
|
|
+
|
|
|
+统一流程:
|
|
|
+
|
|
|
+`员工自评 → 上级终评 → 发布结果 → 面谈反馈 → 员工确认或申诉 → 归档`
|
|
|
+
|
|
|
+### 8.1 我的绩效
|
|
|
+
|
|
|
+同一页面承载:
|
|
|
+
|
|
|
+- 自评表单
|
|
|
+- 自评已提交状态
|
|
|
+- 终评结果
|
|
|
+- 面谈反馈
|
|
|
+- 结果确认
|
|
|
+- 申诉入口
|
|
|
+
|
|
|
+页面根据 `workflowState` 只突出当前主操作,其他历史阶段以只读方式折叠展示。
|
|
|
+
|
|
|
+### 8.2 评审中心
|
|
|
+
|
|
|
+采用选中视觉稿的核心布局:
|
|
|
+
|
|
|
+- 左侧:员工评审队列。
|
|
|
+- 中央:证据、自评、终评三列矩阵。
|
|
|
+- 右侧:偏差和缺失证据检查器。
|
|
|
+- 底部:固定总分、差异、评语和提交操作。
|
|
|
+
|
|
|
+诊断规则必须基于真实数据,例如:
|
|
|
+
|
|
|
+- 自评和终评差异超过阈值
|
|
|
+- KR 完成率与评分明显不匹配
|
|
|
+- 缺少绩效说明
|
|
|
+- 存在阻塞 KR
|
|
|
+- 加减分没有说明
|
|
|
+
|
|
|
+### 8.3 绩效沟通
|
|
|
+
|
|
|
+面谈记录必须绑定:
|
|
|
+
|
|
|
+- 周期
|
|
|
+- 员工
|
|
|
+- 上级
|
|
|
+- 对应终评分
|
|
|
+
|
|
|
+上级记录亮点、问题、改进建议和面谈纪要;员工提交回复后,上级可以关闭面谈。
|
|
|
+
|
|
|
+### 8.4 申诉与修正
|
|
|
+
|
|
|
+申诉详情同时展示:
|
|
|
+
|
|
|
+- 原始终评分
|
|
|
+- 终评明细
|
|
|
+- 面谈记录
|
|
|
+- 申诉理由
|
|
|
+- 处理回复
|
|
|
+- 修正记录
|
|
|
+
|
|
|
+任何修正都必须填写原因并写入 `audit_correction`。
|
|
|
+
|
|
|
+### 8.5 历史绩效
|
|
|
+
|
|
|
+提供正式历史接口,一次返回最近周期结果,不再由前端逐周期调用单期结果接口。
|
|
|
+
|
|
|
+## 9. 页面组件体系
|
|
|
+
|
|
|
+新增或重构以下通用组件:
|
|
|
+
|
|
|
+| 组件 | 职责 |
|
|
|
+|---|---|
|
|
|
+| `AppShell` | 双层导航、状态线和响应式外壳 |
|
|
|
+| `ModuleRail` | 一级模块图标导航 |
|
|
|
+| `ContextNav` | 模块内二级页面导航 |
|
|
|
+| `PageContextBar` | 标题、周期、筛选和主操作 |
|
|
|
+| `WorkflowRail` | OKR—绩效阶段轨道 |
|
|
|
+| `SplitWorkbench` | 列表、主区、详情检查器布局 |
|
|
|
+| `DataMatrix` | 表格、树表、评分矩阵基础 |
|
|
|
+| `InspectorPanel` | 右侧上下文详情 |
|
|
|
+| `StickyActionBar` | 总分、差异、状态和提交 |
|
|
|
+| `StatusLabel` | 色点与状态文字 |
|
|
|
+| `MetricBar` | 进度和分数构成 |
|
|
|
+| `EmptyState` | 无数据和下一步指引 |
|
|
|
+| `ErrorState` | 可恢复错误 |
|
|
|
+| `SkeletonState` | 页面加载状态 |
|
|
|
+
|
|
|
+页面归入四类:
|
|
|
+
|
|
|
+1. 数据浏览:周期、历史、日志、通知。
|
|
|
+2. 分栏工作台:对齐、团队 OKR、评审、沟通、组织。
|
|
|
+3. 编辑配置:个人 OKR、绩效模板、考核维度。
|
|
|
+4. 结果详情:我的绩效、申诉、归档结果。
|
|
|
+
|
|
|
+## 10. 接口设计
|
|
|
+
|
|
|
+### 10.1 工作台概览
|
|
|
+
|
|
|
+新增:
|
|
|
+
|
|
|
+`GET /api/workspace/overview?periodId={id}`
|
|
|
+
|
|
|
+响应包含:
|
|
|
+
|
|
|
+- 推荐周期和可选周期
|
|
|
+- 当前阶段
|
|
|
+- 我的待办
|
|
|
+- 团队汇总
|
|
|
+- 风险汇总
|
|
|
+- 近期节点
|
|
|
+- `allowedActions`
|
|
|
+
|
|
|
+### 10.2 OKR 工作台
|
|
|
+
|
|
|
+新增:
|
|
|
+
|
|
|
+`GET /api/okr/workbench?periodId={id}`
|
|
|
+
|
|
|
+响应包含:
|
|
|
+
|
|
|
+- 我的目标
|
|
|
+- 上级目标
|
|
|
+- 待审核目标
|
|
|
+- 必须承接项
|
|
|
+- 提交检查结果
|
|
|
+- `workflowState`
|
|
|
+- `allowedActions`
|
|
|
+- `version`
|
|
|
+
|
|
|
+新增或扩展写接口:
|
|
|
+
|
|
|
+- 保存草稿
|
|
|
+- 正式提交
|
|
|
+- 审核通过
|
|
|
+- 驳回并记录原因
|
|
|
+- 更新 KR 进度
|
|
|
+
|
|
|
+所有写接口使用明确 DTO,并校验版本号。
|
|
|
+
|
|
|
+### 10.3 评审工作台
|
|
|
+
|
|
|
+新增:
|
|
|
+
|
|
|
+- `GET /api/scores/review-queue?periodId={id}`
|
|
|
+- `GET /api/scores/history`
|
|
|
+
|
|
|
+扩展现有评分详情响应,一次返回:
|
|
|
+
|
|
|
+- OKR 证据
|
|
|
+- 自评分
|
|
|
+- 终评分
|
|
|
+- 评分明细
|
|
|
+- 面谈
|
|
|
+- 申诉
|
|
|
+- 诊断
|
|
|
+- `workflowState`
|
|
|
+- `allowedActions`
|
|
|
+- `version`
|
|
|
+
|
|
|
+### 10.4 错误协议
|
|
|
+
|
|
|
+业务错误继续使用统一响应结构,并补充:
|
|
|
+
|
|
|
+- `code`
|
|
|
+- `message`
|
|
|
+- `fieldErrors`
|
|
|
+- `details`
|
|
|
+- `conflictVersion`
|
|
|
+
|
|
|
+版本冲突返回 HTTP 409。
|
|
|
+
|
|
|
+## 11. 数据模型
|
|
|
+
|
|
|
+### 11.1 评分明细表
|
|
|
+
|
|
|
+新增 `performance_score_item`:
|
|
|
+
|
|
|
+| 字段 | 说明 |
|
|
|
+|---|---|
|
|
|
+| `id` | 主键 |
|
|
|
+| `score_id` | 对应 `performance_score` |
|
|
|
+| `item_type` | `KR` 或 `DIMENSION` |
|
|
|
+| `reference_id` | KR 或维度 ID |
|
|
|
+| `name` | 提交时名称快照 |
|
|
|
+| `max_score` | 满分或权重基准 |
|
|
|
+| `score` | 实际评分 |
|
|
|
+| `description` | 说明或评语 |
|
|
|
+| `sort_order` | 展示顺序 |
|
|
|
+| `snapshot_json` | 必要的证据快照 |
|
|
|
+| `created_at` | 创建时间 |
|
|
|
+| `updated_at` | 更新时间 |
|
|
|
+
|
|
|
+`comments_json` 继续保留,作为兼容字段和历史快照。
|
|
|
+
|
|
|
+### 11.2 状态
|
|
|
+
|
|
|
+终评分状态明确为:
|
|
|
+
|
|
|
+`SUBMITTED → PUBLISHED → CONFIRMED`
|
|
|
+
|
|
|
+面谈和申诉继续独立维护状态,但通过周期、用户和终评分建立可靠关联。
|
|
|
+
|
|
|
+### 11.3 索引
|
|
|
+
|
|
|
+补充高频查询索引:
|
|
|
+
|
|
|
+- 周期 + 用户 + 类型
|
|
|
+- 周期 + 评分状态
|
|
|
+- 评分明细 + 评分 ID
|
|
|
+- OKR 周期 + 用户
|
|
|
+- KR 来源关系
|
|
|
+- 通知用户 + 未读状态
|
|
|
+
|
|
|
+## 12. 数据迁移
|
|
|
+
|
|
|
+迁移延续现有 `schema_migration`。
|
|
|
+
|
|
|
+要求:
|
|
|
+
|
|
|
+1. 启动时检测待执行迁移。
|
|
|
+2. 执行前将数据库备份到 `data/backups/`。
|
|
|
+3. 每个迁移在独立事务内运行。
|
|
|
+4. 失败时整体回滚并阻止应用继续启动。
|
|
|
+5. 迁移只新增表、字段、索引或安全回填。
|
|
|
+6. 不删除历史字段。
|
|
|
+7. 将可解析的 `comments_json` 回填到 `performance_score_item`。
|
|
|
+8. 无法解析的 JSON 原样保留并记录迁移日志。
|
|
|
+9. 回填后校验记录数量和评分总分。
|
|
|
+
|
|
|
+迁移必须使用包含旧结构和历史数据的数据库副本进行测试。
|
|
|
+
|
|
|
+## 13. 前端状态与数据流
|
|
|
+
|
|
|
+数据流分三层:
|
|
|
+
|
|
|
+1. API 层负责请求和响应规范化。
|
|
|
+2. Pinia store 负责全局周期、用户、待办和权限上下文。
|
|
|
+3. 页面只负责局部筛选、编辑状态和展示。
|
|
|
+
|
|
|
+页面不得:
|
|
|
+
|
|
|
+- 自行推断跨模块权限。
|
|
|
+- 重复实现周期默认选择。
|
|
|
+- 直接解析多个版本的后端返回结构。
|
|
|
+- 用多个接口拼装同一工作台首屏。
|
|
|
+
|
|
|
+写操作完成后,优先局部更新当前对象;涉及阶段、待办或权限变化时刷新工作台上下文。
|
|
|
+
|
|
|
+## 14. 错误和边界状态
|
|
|
+
|
|
|
+- 字段错误在控件附近显示。
|
|
|
+- 全局消息只用于跨页面结果或不可定位错误。
|
|
|
+- 409 版本冲突展示新旧版本差异和刷新入口。
|
|
|
+- 403 展示权限状态,不显示空白页面。
|
|
|
+- 无数据状态明确说明原因和下一步。
|
|
|
+- 接口失败提供重试。
|
|
|
+- 危险操作展示受影响周期、人员和数据数量。
|
|
|
+- 归档状态全部只读。
|
|
|
+
|
|
|
+## 15. 验证策略
|
|
|
+
|
|
|
+### 15.1 后端
|
|
|
+
|
|
|
+- 服务单元测试
|
|
|
+- 周期状态机测试
|
|
|
+- 权限测试
|
|
|
+- 接口契约测试
|
|
|
+- 评分口径测试
|
|
|
+- 历史数据库迁移测试
|
|
|
+- 迁移失败回滚测试
|
|
|
+
|
|
|
+### 15.2 前端
|
|
|
+
|
|
|
+- Vitest 组件测试
|
|
|
+- Pinia 状态测试
|
|
|
+- API 响应规范化测试
|
|
|
+- 主题 token 守卫
|
|
|
+- 评分契约守卫
|
|
|
+- 响应式布局检查
|
|
|
+
|
|
|
+### 15.3 端到端
|
|
|
+
|
|
|
+使用 Playwright 覆盖:
|
|
|
+
|
|
|
+1. 周期发布
|
|
|
+2. 上级制定和下级承接
|
|
|
+3. OKR 提交、驳回、修改和通过
|
|
|
+4. KR 进度更新
|
|
|
+5. 员工自评
|
|
|
+6. 上级终评和发布
|
|
|
+7. 面谈和员工回复
|
|
|
+8. 结果确认
|
|
|
+9. 申诉和审计修正
|
|
|
+10. 历史归档查看
|
|
|
+
|
|
|
+### 15.4 交付验证
|
|
|
+
|
|
|
+- 前端生产构建成功。
|
|
|
+- 后端测试通过。
|
|
|
+- 单 JAR 构建成功。
|
|
|
+- 静态资源与前端构建产物一致。
|
|
|
+- 新数据库可初始化。
|
|
|
+- 历史数据库可无损迁移并启动。
|
|
|
+
|
|
|
+## 16. 实施阶段
|
|
|
+
|
|
|
+### 阶段 1:基础壳层
|
|
|
+
|
|
|
+- 字体和设计 token
|
|
|
+- 双层导航
|
|
|
+- 页面上下文栏
|
|
|
+- 全局周期 store
|
|
|
+- 工作台概览接口和页面
|
|
|
+
|
|
|
+### 阶段 2:OKR 链路
|
|
|
+
|
|
|
+- 我的 OKR
|
|
|
+- 团队 OKR
|
|
|
+- OKR 对齐
|
|
|
+- 执行进度
|
|
|
+- OKR 聚合接口和版本控制
|
|
|
+
|
|
|
+### 阶段 3:绩效链路
|
|
|
+
|
|
|
+- 我的绩效
|
|
|
+- 评审中心
|
|
|
+- 绩效沟通
|
|
|
+- 申诉
|
|
|
+- 历史绩效
|
|
|
+- 评分明细表和迁移
|
|
|
+
|
|
|
+### 阶段 4:管理页面
|
|
|
+
|
|
|
+- 周期管理
|
|
|
+- 组织架构
|
|
|
+- 绩效模板
|
|
|
+- 考核维度
|
|
|
+- 通知
|
|
|
+- 操作日志
|
|
|
+
|
|
|
+### 阶段 5:全链路验收
|
|
|
+
|
|
|
+- 端到端测试
|
|
|
+- 历史数据迁移
|
|
|
+- 响应式检查
|
|
|
+- 单 JAR 部署验证
|
|
|
+
|
|
|
+每个阶段独立提交并保持可回退。
|
|
|
+
|
|
|
+## 17. 完成标准
|
|
|
+
|
|
|
+- 全部页面使用统一壳层、组件和视觉 token。
|
|
|
+- 所有页面能明确展示当前周期和阶段。
|
|
|
+- 所有关键操作可以从工作台待办直达。
|
|
|
+- OKR 和绩效链路不存在依赖用户手动跨页面寻找下一步的断点。
|
|
|
+- 前端不再通过多次串行请求拼装工作台首屏。
|
|
|
+- 前后端评分口径一致。
|
|
|
+- 历史绩效通过正式接口查询。
|
|
|
+- 评分明细结构化存储并兼容旧 JSON。
|
|
|
+- 历史 SQLite 数据迁移前有备份,迁移失败可回滚。
|
|
|
+- 关键业务链路具备自动化测试。
|
|
|
+- 最终产物可作为单 JAR 运行。
|
|
|
+
|
|
|
+## 18. 非目标
|
|
|
+
|
|
|
+- 不引入与当前业务无关的 AI 聊天功能。
|
|
|
+- 不新增没有数据来源的预测和诊断。
|
|
|
+- 不修改评分口径。
|
|
|
+- 不切换数据库或部署架构。
|
|
|
+- 不在本轮引入深色内容主题。
|
|
|
+- 不重写与目标无关的后端模块。
|