开源 OKR 目标管理系统

OKR 目标管理系统

一套面向企业的 OKR(Objectives and Key Results)目标管理平台,支持目标创建与追踪、上下级对齐、数据看板、评论反馈以及组织与周期管理,帮助团队实现目标对齐与高效协作。

github: https://github.com/zhouwenjun-hub/okr

gitee: https://gitee.com/imagine0820/okr

技术栈

层级 技术 版本
前端框架 Vue 2 + Vue Router 3 + Vuex 3 2.7.16
图表 ECharts 5 + vue-echarts 5.6.0
对齐树 vue-okr-tree 自定义仓库
HTTP 客户端 Axios 1.15.0
前端构建 Vue CLI 5 5.0.8
后端框架 Spring Boot 3.2.5
后端语言 Java 17
ORM MyBatis-Plus 3.5.7
安全认证 Spring Security + JWT (jjwt) 0.12.5
数据库 MySQL 8.0
密码加密 BCrypt -
工具库 Lombok -

功能模块

1. OKR 管理

创建、编辑、删除目标(Objective)和关键结果(Key Result)。每个目标包含标题、进度、权重、评分、进度记录和对齐关系;每个关键结果包含标题、进度、权重和评分。

2. 目标对齐

对齐树视图(vue-okr-tree)以横向树形结构展示目标在组织中的级联关系,支持拖拽、缩放和点击查看详情。

3. 评论反馈

用户可以对其他人的 OKR 进行评论,评论包含用户信息和时间戳,便于上下级之间的目标沟通与反馈。

4. 数据看板

管理/分析视图,包含:

  • 四大指标卡片:填写率、对齐率、7日更新率、评分率
  • 关注项列表:未填写 OKR、未对齐、进度停滞、进度过低
  • 分布图表:目标数量分布、状态分布、进度分布、评分分布
  • 明细数据表:按人员或部门查看详细数据,支持分页与筛选

6. 部门管理(管理员)

树形结构的部门增删改查,指定部门负责人,添加/移除部门成员。

7. 周期管理(管理员)

创建/编辑 OKR 周期(如"2025 Q1"),归档已结束的周期。

8. 用户管理(管理员)

创建用户、编辑用户信息、查看上下级关系、分配到部门。

项目结构

复制代码
okr/
├── front/                          # Vue 2 前端
│   ├── src/
│   │   ├── api/                    # API 模块(auth, objective, keyResult, comment, period, department, user, dashboard, alignment)
│   │   ├── components/
│   │   │   ├── modals/             # ObjectiveModal, KrModal, ProgressModal, AlignModal, UserEditModal
│   │   │   ├── dashboard/          # MetricCard, AttentionItem, DistributionCharts, DetailsTable
│   │   │   ├── AppHeader.vue       # 顶部导航栏
│   │   │   ├── Sidebar.vue         # 左侧边栏(用户层级 + 部门树)
│   │   │   ├── OkrCard.vue         # OKR 目标卡片
│   │   │   ├── KeyResult.vue       # 关键结果行组件
│   │   │   ├── Comments.vue        # 评论区
│   │   │   ├── AlignmentNode.vue   # 对齐树节点
│   │   │   ├── AlignPopover.vue    # 对齐信息悬浮弹窗
│   │   │   ├── Toast.vue           # 通知提示
│   │   │   └── DeptNode.vue        # 部门树节点
│   │   ├── store/
│   │   │   └── modules/            # Vuex 模块(auth, user, okr, comment, alignment, department, dashboard)
│   │   ├── views/
│   │   │   ├── LoginView.vue       # 登录页
│   │   │   ├── OkrView.vue         # OKR 列表页
│   │   │   ├── AlignmentView.vue   # 对齐树视图
│   │   │   ├── DashboardView.vue   # 数据看板
│   │   │   ├── SystemManageView.vue       # 管理后台:部门 + 周期管理
│   │   │   ├── DepartmentManageView.vue   # 部门树增删改查
│   │   │   └── PeriodManageView.vue       # 周期增删改查 + 归档
│   │   ├── router/index.js         # 路由定义 + 认证守卫
│   │   ├── main.js                 # 应用入口
│   │   └── App.vue                 # 根组件
│   ├── public/index.html
│   ├── vue.config.js               # 开发服务器代理配置
│   └── package.json
│
├── server/                         # Spring Boot 后端
│   ├── src/main/java/com/okr/
│   │   ├── config/                 # SecurityConfig, CorsConfig, MybatisPlusConfig
│   │   ├── security/               # JwtTokenProvider, JwtAuthFilter, UserDetailsServiceImpl
│   │   ├── controller/             # AuthController, ObjectiveController, KeyResultController, CommentController, PeriodController, DepartmentController, UserController, DashboardController, AlignmentController
│   │   ├── service/                # 业务逻辑层
│   │   ├── entity/                 # 实体类(OkrObjective, OkrKeyResult, OkrPeriod, OkrComment, SysUser, SysDepartment)
│   │   ├── dto/                    # 请求/响应 DTO
│   │   ├── mapper/                 # MyBatis-Plus Mapper 接口
│   │   └── common/                 # Result(统一响应包装), GlobalExceptionHandler
│   ├── src/main/resources/
│   │   ├── application.yml         # 主配置
│   │   └── application-local.yml   # 本地覆盖配置
│   ├── sql/
│   │   └── V1__init.sql            # 完整数据库 Schema + 种子数据
│   └── pom.xml
│
├── openspec/                       # OpenSpec 变更管理文档
├── tasks/                          # PRD 任务文件
├── .claude/                        # Claude Code 配置
└── .gitignore

快速开始

环境要求

  • Java 17+
  • Maven 3.6+
  • Node.js 16+
  • MySQL 8.0+

1. 数据库初始化

bash 复制代码
# 创建数据库
mysql -u root -p -e "CREATE DATABASE okr_system CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;"

# 导入 Schema 和种子数据
mysql -u root -p okr_system < server/sql/V1__init.sql

2. 启动后端

bash 复制代码
cd server

# (可选)创建 application-local.yml 配置本地数据库连接
# spring:
#   datasource:
#     url: jdbc:mysql://127.0.0.1:3306/okr_system?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&useSSL=false
#     username: root
#     password: your_password

mvn spring-boot:run

后端启动在 http://localhost:8080

3. 启动前端

bash 复制代码
cd front

npm install
npm run serve

前端开发服务器启动在 http://localhost:8081/api 请求自动代理到后端 8080 端口。

4. 访问系统

浏览器打开 http://localhost:8081,使用种子数据中的账号登录。

认证与安全

  • JWT 无状态认证 :登录后返回 JWT 令牌,前端存储在 localStorage,所有请求携带 Authorization: Bearer <token>
  • 令牌有效期:24 小时(86400000ms)
  • 密码加密:BCrypt 哈希
  • 权限控制ROLE_ADMINROLE_USER,管理员接口使用 @PreAuthorize("hasRole('ADMIN')")
  • 数据所有权:目标和关键结果仅所有者可修改
  • CORS :允许 localhost:* 来源
  • 全局异常处理 :统一 Result<> 错误响应(401、403、400、500)

开发说明

前端代理

开发环境下,前端通过 vue.config.js 配置代理,将 /api 请求转发到后端 http://localhost:8080,避免跨域问题。

自动填充

MyBatis-Plus 自动填充 created_atupdated_at 字段。

对齐树优化

ObjectiveService.getAlignmentTree() 使用批量加载优化,避免 N+1 查询问题。

构建部署

前端构建

bash 复制代码
cd front
npm run build

构建产物输出到 front/dist/ 目录,可部署到 Nginx 等 Web 服务器。

后端构建

bash 复制代码
cd server
mvn clean package -DskipTests
java -jar target/okr-server-1.0.0.jar

许可证

本项目基于 Apache License 2.0 开源协议发布。

相关推荐
Source.Liu2 小时前
【Matrix】Matrix 开源 Rust 项目全景
rust·开源
林会3 小时前
DeerFlow本地部署!调用本地大模型
python·开源
yumgpkpm3 小时前
Qwen3.6正式开源,华为昇腾910B实现高效适配
华为·ai作画·stable diffusion·开源·ai写作·llama·gpu算力
a1117763 小时前
PascalEditor( 3D建筑编辑器 开源)
前端·开源·html
冬奇Lab15 小时前
一天一个开源项目(第75篇):Hermes Agent - Nous Research 开源的自我进化 AI Agent
人工智能·开源·资讯
金融Tech趋势派1 天前
Hermes Agent开源45天登顶GitHub,深度解析其记忆机制与部署方案
人工智能·微信·开源·github·企业微信·openclaw·hermes agent
万岳软件开发小城1 天前
从SaaS到私有化部署:食堂采购系统源码的开发技术选型分析
开源·源码·软件开发·食堂采购系统源码·食堂采购软件开发·食堂采购平台搭建·erp系统开发
z6494315081 天前
【Python开源-单目测距】单目无人机多视角测距:DJI RTK图像 → 地面目标3D坐标与距离,平均RE仅2.12%
python·计算机视觉·开源·无人机