文档目录
招聘求职页面

简介

本开发文档面向 DouPHP 小程序的“招聘求职”功能,聚焦于职位发布管理、简历投递处理、面试安排与候选人筛选等核心能力。文档从系统架构、数据流、业务逻辑、UI 组件实现到接口调用示例进行系统化说明,并给出常见问题解决方案与优化建议,帮助开发者快速理解并扩展该模块。

项目结构

招聘模块在系统中采用前后端分离的组织方式:

  • 后台管理(Admin):提供职位的增删改查、属性配置与批量操作界面
  • 前台展示(Front):对外提供职位列表与详情页面渲染
  • API 层(Api):为小程序提供统一的 JSON 接口
  • 小程序前端(Miniprogram):公司端招聘页面,包含列表、详情、交互逻辑与样式
graph TB
subgraph "后台管理"
A["admin/controller/job/JobController.php"]
V["admin/view/job.htm"]
end
subgraph "前台展示"
F["front/controller/job/JobController.php"]
S["front/service/job/JobService.php"]
M["front/model/job/Job.php"]
end
subgraph "API 层"
C["api/controller/job/JobController.php"]
end
subgraph "小程序前端"
MP_TS["miniprogram/company/pages/job/job.ts"]
MP_WXML["miniprogram/company/pages/job/job.wxml"]
MP_WXSS["miniprogram/company/pages/job/job.wxss"]
end
A --> S
F --> S
C --> S
S --> M
MP_TS --> C
MP_WXML --> MP_TS
MP_WXSS --> MP_TS
V --> A

核心组件

  • 后台控制器:负责后台招聘页面的路由、表单校验、分页列表与批量操作
  • 前台控制器与服务:负责公开页面渲染、分类筛选、分页、详情 Markdown 渲染与图片资源处理
  • API 控制器:为小程序提供统一的数据接口,复用前台服务
  • 模型:封装数据库查询与分类列表方法
  • 视图模板:后台表单与列表展示
  • 小程序页面:公司端招聘列表与详情交互

架构总览

招聘模块采用分层架构:

  • 表现层:后台视图、前台页面、小程序页面
  • 控制层:后台控制器、前台控制器、API 控制器
  • 服务层:前台 JobService 作为共享业务逻辑中心
  • 数据层:模型与 ORM 访问数据库
sequenceDiagram
participant MP as "小程序页面"
participant API as "API控制器"
participant SVC as "前台JobService"
participant MOD as "前台Job模型"
participant DB as "数据库"
MP->>API : "请求职位列表/详情"
API->>SVC : "buildListingData/getShowPageData"
SVC->>MOD : "查询已发布职位/获取详情"
MOD->>DB : "SELECT ... WHERE status=1"
DB-->>MOD : "结果集"
MOD-->>SVC : "职位数据"
SVC-->>API : "返回结构化数据"
API-->>MP : "JSON响应"

详细组件分析

后台招聘管理

  • 列表与筛选:支持按类别、类型、地点筛选,构建分页 URL 与查询条件
  • 新增/编辑:表单字段包括职位名称、类别、类型、地点、人数、职责、要求等
  • 删除与批量操作:通过 action 接口执行批量状态变更或清理
flowchart TD
Start(["进入后台招聘页"]) --> BuildFilters["提取筛选参数<br/>category/type/place"]
BuildFilters --> BuildState["构建属性状态与分页URL"]
BuildState --> FetchList["分页查询职位列表"]
FetchList --> RenderView["渲染job.htm视图"]
RenderView --> End(["完成"])

前台招聘展示

  • 列表页:按 class 分类筛选,分页显示,附带职位摘要与图片
  • 详情页:Markdown 内容渲染,图片地址转换,生成小程序跳转链接
  • SEO 与导航:注入页面标题、面包屑、导航菜单
sequenceDiagram
participant Browser as "浏览器"
participant FrontC as "前台JobController"
participant FrontS as "前台JobService"
participant Model as "Job模型"
participant DB as "数据库"
Browser->>FrontC : "GET /job?class=xxx&page=1"
FrontC->>FrontS : "buildListingData(page, class)"
FrontS->>Model : "classList(class)"
FrontS->>DB : "SELECT * FROM job WHERE status=1 ORDER BY sort,id DESC"
DB-->>FrontS : "结果集"
FrontS-->>FrontC : "job_list,pager,class_list"
FrontC-->>Browser : "渲染job.dwt页面"

API 接口(小程序)

  • 列表接口:route=job,支持 class 过滤与分页,返回 job_list、class_list、pager、total
  • 详情接口:route=job/detail,根据 id 获取详情,返回 title、job(含 image_url、miniprogram_url)
sequenceDiagram
participant MP as "小程序"
participant API as "API控制器"
participant SVC as "前台JobService"
MP->>API : "GET /api/job?class=xxx&page=1"
API->>SVC : "buildListingData"
SVC-->>API : "job_list,pager,class_list"
API-->>MP : "success(data)"
MP->>API : "GET /api/job/detail?id=123"
API->>SVC : "getShowPageData(123)"
SVC-->>API : "job对象"
API-->>MP : "success({title, job})"

小程序公司端招聘页面

  • 列表页:调用 API 获取职位列表,渲染卡片,支持分类切换与分页
  • 详情页:根据 id 拉取详情,展示 Markdown 内容与图片,提供小程序内跳转
  • 样式与交互:使用 wxss 定义布局,wxml 组织结构,ts 处理事件与数据绑定
flowchart TD
Load["加载job页面"] --> CallAPI["调用API获取列表"]
CallAPI --> RenderList["渲染职位卡片"]
RenderList --> ClickItem{"点击职位?"}
ClickItem -- 是 --> Detail["跳转到详情并拉取详情数据"]
Detail --> ShowDetail["渲染详情内容"]
ClickItem -- 否 --> End(["结束"])
ShowDetail --> End

依赖关系分析

  • 控制器依赖服务:后台与前台控制器均依赖 JobService 以复用业务逻辑
  • 服务依赖模型:JobService 通过 Job 模型进行数据访问与分类列表构建
  • 视图依赖控制器:后台视图 job.htm 由后台控制器渲染
  • 小程序依赖 API:小程序页面通过 API 控制器获取数据
graph LR
AdminCtrl["后台JobController"] --> Service["JobService"]
FrontCtrl["前台JobController"] --> Service
ApiCtrl["API JobController"] --> Service
Service --> Model["Job模型"]
AdminView["job.htm"] --> AdminCtrl
Miniprogram["小程序页面"] --> ApiCtrl

性能考虑

  • 分页与排序:列表查询使用分页与排序(sort ASC, id DESC),减少首屏数据量
  • 图片批量处理:通过 attachment()->urlBatch 批量转换图片地址,降低多次 I/O
  • 语言预热:language()->warmup 预加载多语言字段,避免重复查询
  • 配置化分页:分页大小由配置项 pagination.job 控制,便于调优

故障排查指南

  • 非法字符校验:API 与前台控制器对 class 参数进行非法字符检查,防止注入与错误路由
  • 路由 ID 校验:详情接口使用 RouteId::single 校验 id 合法性,无效时返回 422
  • 未找到数据:当职位不存在或未发布时,返回 404 或抛出领域异常
  • 表单校验:后台通过 Request 类进行表单验证,确保必填字段与格式正确

结论

DouPHP 招聘模块通过清晰的分层架构与共享服务实现了后台管理、前台展示与小程序接口的解耦与复用。当前版本已具备职位发布、列表筛选、详情展示与小程序对接能力。后续可在此基础上扩展简历投递、面试安排、候选人筛选与数据分析等功能,进一步提升招聘流程自动化与运营效率。

附录

接口调用示例(基于现有代码)

  • 获取职位列表
    • 路径:/api/job
    • 方法:GET
    • 参数:page(默认1)、class(可选)
    • 返回:{ title, job_list, class_list, pager, total }
  • 获取职位详情
    • 路径:/api/job/detail
    • 方法:GET
    • 参数:id(必需)
    • 返回:{ title, job },其中 job 包含 name、content、image_url、miniprogram_url 等

常见问答与解决方案

  • 简历去重处理:可在服务层增加基于手机号或邮箱的去重逻辑,提交前校验是否已存在
  • 面试冲突检测:引入面试日程表,创建面试时校验时间重叠与面试官可用性
  • 自动回复模板:结合消息通知模块,设置模板变量(如职位名称、面试时间),实现自动发送邀请与提醒
添加日期:2026-10-05