# 集团招聘网站设计文档 **日期:** 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 ```