This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
医梦AI OKR绩效考核系统 — an internal performance review system using OKR (40%) + KPI (60%) dual-model scoring, tree-based reporting hierarchy, and split-panel UI. Single JAR deployment with embedded SQLite.
cd frontend
npm install # first time only
npm run dev # dev server on :5173, proxies /api to :18080
npm run build # production build → dist/
cd backend
mvn spring-boot:run # dev mode, expects data/ dir at project root
mvn clean package -DskipTests # produces target/okr-performance-1.0.0.jar
./scripts/start.sh # builds frontend → copies to backend/static → packages → java -jar
Backend starts on port 18080. Default super-admin: admin / emoon123456.
SQLite database at data/okr-performance.db. WAL mode enabled. Schema auto-created on startup from backend/src/main/resources/schema.sql. Delete the .db file to reset all data.
com.emoon.okr)controller/ → REST endpoints, delegates to services
service/ → business logic, transactional
mapper/ → MyBatis-Plus BaseMapper interfaces (no XML — annotations only)
entity/ → database entities with MyBatis-Plus @TableName
dto/ → request/response objects, ApiResult<T> wrapper
security/ → JwtTokenProvider, JwtAuthenticationFilter, SecurityUtils
config/ → SecurityConfig (permitAll /api/auth/**, auth required for /api/**),
DatabaseInitializer (runs schema.sql), DataInitializer (seed admin user),
MybatisPlusConfig (pagination plugin), MyMetaObjectHandler (auto-fill time fields)
exception/ → BusinessException + GlobalExceptionHandler (@RestControllerAdvice)
schedule/ → PeriodScheduler (daily 2am auto-advances period statuses)
enums/ → UserRole, PeriodStatus, PeriodType, KrStatus, Grade, ScoreType, ObjectiveType
/api/*ApiResult<T> with code (200 = success), message, data/api/auth/** is public, all other /api/** require authentication.SecurityUtils.getCurrentUserId() provides the authenticated user's ID in services.src/router/index.js → hash-mode routes, auth guard on all except /login
src/api/index.js → axios instance (baseURL /api), per-module API functions
src/stores/auth.js → Pinia auth store (accessToken, refreshToken, user)
src/components/ → shared components (MainLayout.vue is the shell with sidebar)
src/views/
auth/LoginView → login/register
period/ → assessment period management, KPI templates
okr/MyOkrView → personal OKR editing
scoring/ → ScoringListView (subordinate list), ScoringEditView (split-panel), MyResultView
feedback/ → interview notes / reply
org/OrgView → department tree, user management (super-admin only)
system/LogView → operation log viewer
backend/src/main/resources/static/ before packaging. Spring Boot serves it as static resources.deleted field (MyBatis-Plus logic-delete, 0=active, 1=deleted).snapshot_json at archive time — historical data survives later edits.audit_correction table before changing performance_score — "不可修改" semantics via audit trail.sys_user.superior_id tree — having subordinates grants review/scoring rights over direct reports. role=SUPER_ADMIN bypasses all checks.Primary: #2b1f99 (deep indigo, sidebar/accents), Secondary: #3ad4d8 (teal, highlights/CTA). Sidebar width: 220px.
本项目已安装 superpowers-zh 技能框架(20 个 skills)。
Skills 位于 .claude/skills/ 目录,每个 skill 有独立的 SKILL.md 文件。
当任务匹配某个 skill 时,使用 Skill 工具加载对应 skill 并严格遵循其流程。绝不要用 Read 工具读取 SKILL.md 文件。
如果你认为哪怕只有 1% 的可能性某个 skill 适用于你正在做的事情,你必须调用该 skill 检查。