Recruitment_site/docs/superpowers/specs/2026-03-24-recruitment-webs...

218 lines
7.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 集团招聘网站设计文档
**日期:** 2026-03-24
**状态:** 已确认
---
## 1. 项目概述
为中型集团5-20 家子公司)构建一个内部招聘网站,类似智联招聘但更简洁。支持多公司多角色管理,求职者可注册登录、搜索职位、在线填写或上传简历进行投递。
---
## 2. 技术栈
| 层级 | 技术选型 |
|------|----------|
| 前端 | Vue 3 + Vue Router + Pinia + Element Plus |
| 后端 | Django 4.2 + Django REST Framework |
| 认证 | djangorestframework-simplejwtJWT |
| 数据库 | PostgreSQL |
| 缓存 | Redis |
| 文件存储 | 本地存储 / 对象存储OSS |
| 部署 | Nginx + Gunicorn |
---
## 3. 架构方案
**方案Django 后端 + 单个 Vue3 SPA前后端分离**
前端单页应用通过 Vue Router 划分三个区域,使用路由守卫控制访问权限。后端提供 RESTful APINginx 反向代理静态资源和 API 请求。
```
用户浏览器
Nginx
├── / → Vue3 静态文件
└── /api/ → Django (Gunicorn)
├── 认证模块
├── 职位模块
├── 投递模块
└── 组织架构模块
PostgreSQL + Redis
```
---
## 4. 用户角色
| 角色 | 标识 | 权限说明 |
|------|------|----------|
| 超级管理员 | superadmin | 管理组织架构、所有用户、查看全局职位 |
| 公司管理员 | admin | 管理本公司职位、处理本公司投递记录 |
| 求职者 | seeker | 注册登录、搜索职位、管理简历、投递职位 |
---
## 5. 数据模型
### Organization 组织架构
| 字段 | 类型 | 说明 |
|------|------|------|
| id | PK | 主键 |
| name | CharField | 公司名称 |
| parent | FK(self, null) | 父级公司(集团为 null |
| logo | ImageField | 公司 Logo |
| description | TextField | 公司简介 |
| email | EmailField | 公司联系邮箱 |
| is_active | BooleanField | 是否启用 |
### User 用户
| 字段 | 类型 | 说明 |
|------|------|------|
| id | PK | 主键 |
| username | CharField | 登录账号 |
| email | EmailField | 用户邮箱 |
| phone | CharField | 手机号 |
| role | CharField | superadmin / admin / seeker |
| organization | FK(Organization, null) | 所属公司admin 角色使用) |
| is_active | BooleanField | 账号状态 |
### Job 职位
| 字段 | 类型 | 说明 |
|------|------|------|
| id | PK | 主键 |
| organization | FK(Organization) | 所属公司 |
| title | CharField | 职位名称 |
| category | CharField | 职位类别 |
| location | CharField | 工作地点 |
| salary | CharField | 薪资范围 |
| description | TextField | 职位描述(富文本) |
| status | CharField | draft / published / closed |
| created_at | DateTimeField | 创建时间 |
### Resume 简历
| 字段 | 类型 | 说明 |
|------|------|------|
| id | PK | 主键 |
| user | FK(User) | 所属求职者 |
| name | CharField | 姓名 |
| gender | CharField | 性别 |
| birthday | DateField | 出生日期 |
| education | JSONField | 教育经历列表PostgreSQL JSONB |
| experience | JSONField | 工作经历列表PostgreSQL JSONB |
| attachment | FileField | 简历附件PDF/Word |
### Application 投递记录
| 字段 | 类型 | 说明 |
|------|------|------|
| id | PK | 主键 |
| job | FK(Job) | 投递的职位 |
| applicant | FK(User) | 求职者 |
| resume | FK(Resume) | 投递时关联的简历(快照) |
| status | CharField | pending / viewed / interviewing / hired / rejected |
| note | TextField | HR 备注 |
| applied_at | DateTimeField | 投递时间 |
---
## 6. 页面结构与路由
### 公开门户(无需登录)
| 路由 | 页面 | 说明 |
|------|------|------|
| `/` | 首页 | 职位推荐、公司展示、搜索入口 |
| `/jobs` | 职位列表 | 搜索+筛选(公司/地点/薪资/类别) |
| `/jobs/:id` | 职位详情 | 职位描述、要求、投递按钮 |
| `/companies` | 公司列表 | 所有子公司展示 |
| `/companies/:id` | 公司详情 | 公司介绍 + 在招职位 |
| `/login` | 求职者登录 | - |
| `/register` | 求职者注册 | - |
### 求职者中心seeker 登录后可访问)
| 路由 | 页面 | 说明 |
|------|------|------|
| `/seeker/resume` | 我的简历 | 填写/编辑在线简历 + 上传附件 |
| `/seeker/applications` | 我的投递 | 投递记录列表 + 状态追踪 |
| `/seeker/profile` | 账号设置 | 修改密码/邮箱/手机号 |
### 管理后台admin/superadmin 登录后可访问)
| 路由 | 页面 | 权限 |
|------|------|------|
| `/admin/jobs` | 职位管理 | admin本公司/ superadmin全局只读 |
| `/admin/applications` | 投递管理 | admin本公司 |
| `/admin/organizations` | 组织架构管理 | superadmin 专属 |
| `/admin/users` | 用户管理 | superadmin 专属 |
### 路由守卫规则
- 未登录访问 `/seeker/*` → 跳转 `/login`,登录后返回原页
- 未登录访问 `/admin/*` → 跳转管理员登录页
- admin 角色访问 superadmin 专属页 → 403
- seeker 角色访问 `/admin/*` → 403
---
## 7. 关键业务流程
### 流程 1求职者投递
1. 求职者浏览职位详情,点击"投递"
2. 检查是否已登录,未登录跳转注册/登录页
3. 检查简历是否填写完整,未完善提示引导至简历页
4. 弹出投递确认框,确认后创建 Application 记录status: pending
5. 投递成功提示,可在"我的投递"查看进度
### 流程 2HR 处理投递(状态流转)
```
待查看(pending) → 已查看(viewed) → 面试中(interviewing) → 已录用(hired)
→ 已拒绝(rejected)
```
- 每次状态变更自动发送邮件通知求职者
- HR 可在任意阶段填写备注
### 流程 3公司管理员发布职位
1. 填写职位信息(标题、描述、薪资、地点、类别)
2. 保存草稿status: draft或直接发布status: published
3. 需要停止招聘时手动关闭status: closed
4. 权限隔离:管理员只能操作本公司职位
---
## 8. Django App 划分
```
offer_backend/
├── apps/
│ ├── accounts/ # 用户认证、角色管理
│ ├── organizations/ # 组织架构(集团/子公司)
│ ├── jobs/ # 职位管理
│ ├── resumes/ # 简历管理
│ └── applications/ # 投递记录
```
---
## 9. 项目目录结构
```
offer/
├── offer_backend/ # Django 后端
│ ├── apps/
│ ├── config/ # 设置、URL、wsgi
│ ├── manage.py
│ └── requirements.txt
└── offer_frontend/ # Vue3 前端
├── src/
│ ├── views/
│ │ ├── portal/ # 公开门户页面
│ │ ├── seeker/ # 求职者中心页面
│ │ └── admin/ # 管理后台页面
│ ├── stores/ # Pinia 状态管理
│ ├── router/ # Vue Router
│ └── api/ # API 请求封装
└── package.json
```