# y_resume **Repository Path**: ladenli/y_resume ## Basic Information - **Project Name**: y_resume - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-08 - **Last Updated**: 2026-09-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 简历管理系统 基于 Go + Vue 3 的本地简历管理系统,支持 AI 智能解析与打分排序。 ## 功能特性 - **简历上传**:支持 Word/PDF/TXT/MD 格式,AI 自动解析 20+ 结构化字段(PDF 需为文字型,扫描件暂不支持) - **AI 打分排序**:DeepSeek 根据用户期望描述对搜索结果打分并给出评语 - **关键词搜索**:多字段 SQL LIKE 模糊匹配,支持学历/标签/城市/年限/创建人/修改人/时间范围组合筛选 - **列表自定义**:可配置显示哪些列(保存在浏览器)、列宽拖拽调整,姓名可点击进入详情 - **标签管理**:全员共享标签(记录创建者),支持 AND/OR 两种筛选模式,标签操作留痕可恢复 - **多用户**:角色权限(管理员/普通用户),简历全员可见共享协作 - **回收站**:软删除+恢复+彻底删除,原始文件随简历进入统一回收站 - **操作留痕**:简历编辑日志(合并展示字段变更)、标签操作记录、创建人/修改人跟踪 - **工作台统计**:简历总数、本月新增、备注超 N 字统计(阈值可调)、本月各用户简历数 - **批量操作**:批量删除、CSV 导出 ## 技术栈 | 层级 | 技术 | |------|------| | 前端 | Vue 3 + TypeScript + Element Plus + Pinia | | 后端 | Go + Gin + GORM | | 数据库 | SQLite(纯 Go 驱动,零 CGO 依赖) | | 文件解析 | DOCX(ZIP+XML)、PDF(ledongthuc/pdf 纯 Go 提取) | | AI | DeepSeek Chat API(简历解析 + 标签推荐 + 打分排序) | | 日志 | lumberjack(按大小滚动,保留 10 天) | ## 快速开始 ### 环境要求 - Go 1.25+ - Node.js 18+ - DeepSeek API Key(可选,不配置则 AI 功能不可用) ### 配置 ```bash cd server # 复制示例配置 cp config.example.yaml config.yaml # 编辑 config.yaml,填入 DeepSeek API Key ``` ### 启动后端 ```bash cd server go build -o y_resume_server . ./y_resume_server # 服务启动于 http://localhost:8080 # 默认管理员: admin / admin123 ``` ### 启动前端(开发模式) ```bash cd web npm install npm run dev # 前端启动于 http://localhost:5173,自动代理 /api → :8080 ``` ### 生产部署 ```bash cd web && npm run build && cp -r dist/* ../server/static/ cd ../server && go build -o y_resume_server . ./y_resume_server ``` ## 项目结构 ``` ├── server/ # Go 后端 │ ├── main.go # 入口 │ ├── config/ # 配置 / DB / 种子数据 │ ├── middleware/ # JWT / CORS / 日志 │ ├── handler/ # auth/resume/search/tag/user/stats/score │ ├── service/ # AI解析 / AI打分 / 标签 │ ├── repository/ # GORM 数据访问 │ ├── model/ # 数据模型(13 张表) │ ├── dto/ # 请求/响应结构体 │ ├── router/ # 路由注册 │ ├── utils/ # JWT / bcrypt / 文件 / 文本提取 │ └── integration_test/ # API 集成测试 ├── web/ # Vue 3 前端 │ └── src/ │ ├── views/ # 10 个页面 │ ├── components/ # 布局组件 │ ├── api/ # Axios 封装 │ ├── stores/ # Pinia 状态(auth/app/resume) │ ├── router/ # 路由 + 守卫 │ └── types/ # TypeScript 类型 ├── test_data/ # 测试简历文件(23 份 .docx + 1 份 .pdf) ├── CLAUDE.md # Claude Code 项目指南 └── README.md ``` ## API 参考 ### 接口总览 | 模块 | 方法 | 路径 | 说明 | |------|------|------|------| | **认证** | POST | `/api/v1/auth/login` | 登录 | | | POST | `/api/v1/auth/refresh` | 刷新 Token | | | GET | `/api/v1/auth/me` | 当前用户信息 | | **简历** | GET | `/api/v1/resumes` | 列表(分页+筛选) | | | POST | `/api/v1/resumes` | 上传简历 | | | POST | `/api/v1/resumes/upload` | 批量上传 | | | GET | `/api/v1/resumes/:id` | 详情 | | | PUT | `/api/v1/resumes/:id` | 编辑 | | | DELETE | `/api/v1/resumes/:id` | 软删除 | | | PUT | `/api/v1/resumes/:id/restore` | 恢复 | | | DELETE | `/api/v1/resumes/:id/hard` | 彻底删除 | | | GET | `/api/v1/resumes/recycle` | 回收站列表 | | | GET | `/api/v1/resumes/:id/logs` | 简历编辑日志 | | | GET | `/api/v1/resumes/:id/download` | 下载原始文件 | | | POST | `/api/v1/resumes/:id/parse` | 触发AI重新解析 | | | POST | `/api/v1/resumes/batch/delete` | 批量删除 | | **搜索** | GET | `/api/v1/search/basic` | 关键词搜索 | | | POST | `/api/v1/search/score` | AI 打分排序 | | | GET | `/api/v1/search/history` | 搜索历史 | | | DELETE | `/api/v1/search/history` | 清除历史 | | | GET | `/api/v1/search/export` | 导出 CSV | | **标签** | GET/POST | `/api/v1/tags` | 列表/创建 | | | PUT/DELETE | `/api/v1/tags/:id` | 修改/删除 | | | GET | `/api/v1/tags/logs` | 标签操作记录 | | | PUT | `/api/v1/tags/restore/:id` | 恢复已删除标签 | | **统计** | GET | `/api/v1/stats/dashboard` | 仪表盘(支持 `remark_min_len` 备注统计阈值) | | | GET | `/api/v1/stats/tags` | 标签统计 | | | GET | `/api/v1/stats/user_monthly` | 本月各用户简历数 (admin) | | **用户** | GET/POST | `/api/v1/users` | 列表/创建 (admin) | | | PUT | `/api/v1/users/:id` | 修改 (admin) | | | PUT | `/api/v1/users/:id/status` | 启用/禁用 (admin) | | | PUT | `/api/v1/users/:id/password` | 重置密码 (admin) | | | DELETE | `/api/v1/users/:id` | 删除 (admin) | | **设置** | PUT | `/api/v1/settings/profile` | 修改个人信息 | ### 统一响应格式 ```json { "code": 0, "message": "ok", "data": { ... } } ``` ## 配置参考 ```yaml server: port: 8080 mode: debug # debug | release database: path: ./data/resume.db backup_dir: ./data/backups backup_keep_days: 7 jwt: secret: "change-me-in-production" expires_hours: 24 refresh_hours: 168 upload: dir: ./uploads max_file_size: 20971520 # 20MB allowed_types: - application/vnd.openxmlformats-officedocument.wordprocessingml.document - application/msword - application/pdf - text/plain - text/markdown deepseek: api_key: "sk-your-key" base_url: "https://api.deepseek.com" chat_model: "deepseek-chat" timeout_seconds: 60 max_retries: 3 daily_limit_per_user: 50 vector_search: top_k: 20 # 向量搜索返回条数 min_score: 0.3 # 相似度阈值 scoring_max_resumes: 200 # AI打分单次处理上限 log: level: info file: ./logs/server.log ``` ## 默认账号 | 用户名 | 密码 | 角色 | |--------|------|------| | admin | admin123 | 管理员 | ## 测试 ```bash cd server && go test ./... -count=1 ``` ## License MIT