医梦AI 内部绩效考核系统。OKR(40%) + KPI(60%) 双轨模型,树形汇报权限,同屏联动展示。独立部署、本地 SQLite 存储、单 JAR 一键启动。
| 层 | 选型 | 版本 |
|---|---|---|
| 运行时 | JDK | 17 LTS |
| 后端框架 | Spring Boot | 3.2.x |
| ORM | MyBatis-Plus | 3.5.x |
| 数据库 | SQLite (WAL 模式) | — |
| 认证 | Spring Security + JWT | 6.x |
| 前端框架 | Vue 3 + Composition API | 3.4+ |
| UI 库 | Element Plus | 2.6+ |
| 构建工具 | Vite + Maven | — |
| 状态管理 | Pinia | 2.x |
单 JAR 部署:Vue 打包产物放入 Spring Boot static 目录,java -jar 同时服务前端和后端 API。
application.yml 中 server.port 修改).db 文件./start.sh(内部执行 npm build → mvn package → java -jar):5173 代理到后端 :8080,热更新okr-performance/
├── backend/ # Spring Boot 3.x
│ ├── pom.xml
│ └── src/main/java/com/yimeng/okr/
│ ├── OkrApplication.java
│ ├── config/ # Security, CORS, MyBatis-Plus
│ ├── security/ # JWT Filter, TokenProvider
│ ├── controller/ # REST 控制器
│ ├── service/ # 业务逻辑
│ ├── mapper/ # MyBatis-Plus Mapper
│ ├── entity/ # 数据库实体
│ ├── dto/ # 请求/响应 DTO
│ ├── enums/ # 枚举
│ ├── exception/ # 全局异常处理
│ └── schedule/ # 定时任务
├── frontend/ # Vue 3 + Vite
│ └── src/
│ ├── router/ # Vue Router
│ ├── stores/ # Pinia
│ ├── api/ # Axios + API 模块
│ ├── views/ # 页面组件
│ ├── components/ # 通用组件
│ ├── composables/ # 组合函数
│ └── assets/ # 静态资源(含 logo)
├── data/ # SQLite 数据库文件目录
├── scripts/start.sh # 一键启动脚本
└── docs/
侧边栏三组菜单,基于角色动态显示:
| 分组 | 菜单项 | 路由 | 可见角色 |
|---|---|---|---|
| 工作台 | 考核周期 | /periods | 全部 |
| 我的 OKR | /okr/my | 全部 | |
| 我的绩效 | /scores/my | 全部 | |
| 考评管理 | 绩效打分 | /scoring | 上级(有下属者) |
| 绩效沟通 | /feedback | 上级 | |
| 系统管理 | 组织架构 | /org | 超级管理员 |
| KPI 模板库 | /kpi/templates | 上级 + 管理员 | |
| 操作日志 | /system/logs | 超级管理员 | |
| 数据备份 | /system/backup | 超级管理员 |
关键设计决策:
snapshot_json 字段,历史周期数据不受后续修改影响audit_correction 表实现——原记录逻辑删除,修正写入新表,全程留痕performance_score.type 区分自评(SELF)、上级初审(SUPERIOR)、最终结果(FINAL)待发布 → OKR对齐 → 执行中 → 考评中 → 已归档
| 转换 | 触发方式 | 行为 |
|---|---|---|
| 待发布→OKR对齐 | 管理员手动 | 为全员创建空白OKR记录,部门OKR可发布 |
| OKR对齐→执行中 | 管理员手动(或周期开始日自动) | 员工OKR锁定,不可修改 |
| 执行中→考评中 | 周期结束日自动(定时任务) | 员工可自评,上级可打分 |
| 考评中→已归档 | 管理员手动 | 数据快照,锁定不可修改 |
不预设固定角色。权限完全基于 sys_user.superior_id 树形汇报关系动态生效:
WHERE evaluated_user.superior_id = current_user.id| 模块 | 前缀 | 核心端点 |
|---|---|---|
| Auth | /api/auth | POST login, register; GET me; PUT password |
| 组织架构 | /api/org | CRUD departments; PUT members, superior |
| 考核周期 | /api/periods | CRUD periods; PUT status; GET progress |
| OKR | /api/okr | CRUD objectives & krs; POST submit; PUT review, progress |
| KPI | /api/kpi | CRUD templates, configs |
| 绩效打分 | /api/scores | POST self, superior; GET my (含 OKR 联动) |
| 绩效反馈 | /api/feedback | POST interview, reply; GET by id |
| 系统 | /api/system | GET logs; POST backup, restore |
所有打分相关 GET 端点返回当期 OKR 完整记录,实现同屏联动。
纳入:账号与组织 → 考核周期 → OKR 管理 → KPI 配置 → 绩效打分(同屏) → 绩效反馈(同屏) → 操作日志 预留:数据统计与分析、自动备份、KPI 模板库完善、历史趋势曲线