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

7.3 KiB
Raw Permalink Blame History

集团招聘网站设计文档

日期: 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_snapshot JSONField 投递时将简历内容序列化复制存储,与 Resume 主表解耦
status CharField pending / viewed / interviewing / hired / rejected
note TextField HR 备注
applied_at DateTimeField 投递时间

6. 页面结构与路由

公开门户(无需登录)

路由 页面 说明
/ 首页 职位推荐、公司展示、搜索入口
/jobs 职位列表 搜索+筛选(公司/地点/薪资/类别)
/jobs/:id 职位详情 职位描述、要求、投递按钮
/companies 公司列表 所有子公司展示
/companies/:id 公司详情 公司介绍 + 在招职位
/login 求职者登录 管理员也使用此页面登录,通过 role 跳转不同后台
/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)
  • 每次状态变更通过 Django 内置邮件后端SMTP同步发送通知邮件给求职者
  • 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