以 frontend/public/prototype.html 为唯一视觉与交互参考,把现有 Vue 应用重构为
白色编辑画布、深靛蓝产品区、药丸操作、1px 中性边框和五色语义反馈的 Cohere 风格。
保留现有周期状态机、OKR 60 + KPI 40、组织树权限、审计修正与单 JAR 发布。
完成时,18 个原型页面均有对应路由、真实数据来源和 loading/empty/error 状态;不能用 样例文案或虚构 AI 结论替代业务数据。
| 原型交互 | 当前能力 | 实施结论 |
|---|---|---|
| 工作台:周期切换、四指标、风险、待办、团队概览 | workspace/overview 已提供周期、待办、风险、团队概览 |
前端聚合并补充指标映射;规则提示只由风险/截止/统计数据生成。 |
| 我的/团队 OKR:色条 KR、承接关系、进度与延迟 | 现有 OKR、团队、上级和进度接口 | 前端重构,无数据库变化。 |
| 对齐树与异常操作 | alignment-graph、risk-items 已存在 |
前端用 graph 的节点/边/风险渲染树与异常表;保留现有对齐操作。 |
| 甘特执行图、里程碑 | execution-timeline 有 KR、周期、进度历史;KR 无专属时间字段 |
先以周期范围 + 历史点实现;若产品确认需要独立里程碑,执行数据库阶段。 |
| 我的绩效/历史:大分数、分解、趋势 | scores/my、scores/trend、scores/statistics 已存在 |
前端重构;统计仅 HR 管理员可见。 |
| 打分、申诉、反馈 | 现有评分、申诉、反馈 API 完整 | 前端重构;不改变评分和申诉状态机。 |
| 通知:未读、类型筛选 | 通知分页、已读、unread-by-type 已存在 |
补类型筛选和未读徽章同步。 |
| 日志:日期/类型筛选、分页 | 已有 action、entityType、startDate、endDate 与分页 | 补全前端筛选控件和本地日期格式化。 |
git status --short 与 API 清单。npm test、npm run verify:theme、npm run verify:scoring、npm run build、mvn test。文件:frontend/src/styles/{theme,components,element-plus}.css、
components/shell/{AppShell,ModuleRail,ContextNav,SystemStatusBar}.vue。
验收:桌面 1440px、平板 1024px、手机 768px 三个断点;不新增路由。
GET /api/workspace/overview 渲染周期切换、四个指标卡、风险预警、待办和团队概览。periodId;风险链接必须携带关联对象(后端未提供 objectId 时先补 DTO)。MyOkrView:Objective/KR 色条、低进度红色、来源 KR/上级承接表。TeamOkrView:成员网格、完成率、延迟/严重标签和详情跳转。AlignmentView:以 alignment-graph 的 nodes/edges/riskIds 渲染 CSS 树和异常表;使用现有 align API。OkrExecutionView:以 execution-timeline 渲染周期轨道、进度历史和风险标签;更新进度继续提交
newValue/status/remark。验收:员工、直属主管、HR 管理员、无关员工四类权限;无关员工不能看到他人目标或风险。
MyResultView:巨型终评、OKR/KPI/加扣分分解、确认/申诉入口和 scores/trend 柱图。HistoryView:按归档周期表格与趋势,当前周期用青色高亮;无历史时只显示空态。ScoringListView:待评、已完成、申诉中状态,批量动作仅在后端有对应能力时显示。ScoringEditView:自评/上级双栏、滑块、扣分红色反馈;不改变 60/40 计算。ScoreAppealView 与 FeedbackView:状态流、紧急标记、会谈记录与规则提示。验收:提交自评、主管终评、发布、确认/申诉全链路的现有集成测试继续通过。
当前数据库可支持“周期级”甘特:assessment_period.start_date/end_date + kr_progress_log。
若需要原型中每个 KR 的独立开始/结束时间和多个里程碑,新增以下增量迁移:
ALTER TABLE kr_key_result ADD COLUMN start_date TEXT;
ALTER TABLE kr_key_result ADD COLUMN due_date TEXT;
CREATE TABLE IF NOT EXISTS kr_milestone (
id INTEGER PRIMARY KEY AUTOINCREMENT,
kr_id INTEGER NOT NULL,
title TEXT NOT NULL,
due_date TEXT,
completed_at TEXT,
status VARCHAR(20) NOT NULL DEFAULT 'PENDING',
sort_order INTEGER NOT NULL DEFAULT 0,
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL
);
CREATE INDEX IF NOT EXISTS idx_kr_milestone_kr ON kr_milestone(kr_id, sort_order);
迁移必须在 DatabaseMigrationRunner 中使用新版本、备份和事务;schema.sql 同步更新。
没有该产品确认时不执行此阶段,不凭空制造日期数据。
mvn test、权限/聚合接口集成测试、迁移首次/重复/失败回滚测试。./scripts/build.sh,确认 frontend/dist/index.html 与
backend/src/main/resources/static/index.html 一致,并检查 JAR 内引用的 hash 资源存在。