218 lines
7.1 KiB
Markdown
218 lines
7.1 KiB
Markdown
# 集团招聘网站设计文档
|
||
|
||
**日期:** 2026-03-24
|
||
**状态:** 已确认
|
||
|
||
---
|
||
|
||
## 1. 项目概述
|
||
|
||
为中型集团(5-20 家子公司)构建一个内部招聘网站,类似智联招聘但更简洁。支持多公司多角色管理,求职者可注册登录、搜索职位、在线填写或上传简历进行投递。
|
||
|
||
---
|
||
|
||
## 2. 技术栈
|
||
|
||
| 层级 | 技术选型 |
|
||
|------|----------|
|
||
| 前端 | Vue 3 + Vue Router + Pinia + Element Plus |
|
||
| 后端 | Django 4.2 + Django REST Framework |
|
||
| 认证 | djangorestframework-simplejwt(JWT) |
|
||
| 数据库 | PostgreSQL |
|
||
| 缓存 | Redis |
|
||
| 文件存储 | 本地存储 / 对象存储(OSS) |
|
||
| 部署 | Nginx + Gunicorn |
|
||
|
||
---
|
||
|
||
## 3. 架构方案
|
||
|
||
**方案:Django 后端 + 单个 Vue3 SPA(前后端分离)**
|
||
|
||
前端单页应用通过 Vue Router 划分三个区域,使用路由守卫控制访问权限。后端提供 RESTful API,Nginx 反向代理静态资源和 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. 投递成功提示,可在"我的投递"查看进度
|
||
|
||
### 流程 2:HR 处理投递(状态流转)
|
||
```
|
||
待查看(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
|
||
```
|