基于 FastAPI Vue3 实现 BOSS 直聘风格企业招聘平台企业端全栈实战本文记录我将一个课程项目中的企业端功能从零迁移并落地到自研后端fastApiFastAPI Tortoise ORM与前端boss_uiVue3的完整过程。涵盖企业列表、详情、审核、短信验证码登录、入驻认证等 6 大核心功能以及前后端分层架构设计思路。一、背景与功能概览在企业招聘平台中企业端与管理端是两个最核心的角色。企业要能入驻平台、展示工商信息、发布职位平台方则要对企业的资质进行审核保证信息真实。本次实现围绕企业端 6 大功能展开技术栈后端FastAPI Tortoise ORM异步 python-jose JWT Pydantic v2 Aerich前端Vue3script setup Vite Element Plus Vue Router4 Axios。前后端均遵循API Router → Service → ORM Model三层架构。二、数据库设计一张主表 三张扩展表企业信息具有主信息 工商详情 资质材料 审核记录的天然分层结构。我把原本单表的设计拆成 4 张表既符合范式也方便按场景查询t_enterprise企业主表名称、账号状态、认证类型、提交时间等t_enterprise_info工商详情统一社会信用代码、法人、注册资本、行业、规模、经营范围t_enterprise_qualification资质材料联系人 营业执照/身份证图片 URLt_enterprise_review审核记录结果、原因、审核人、时间并定义了 7 个枚举统一管理状态AccountStatus0 正常/1 待审核/2 封禁、AuthType、RegisterStatus、CompanyScale、FinancingStage、AuditType等。用IntEnumField存库保证可读性与扩展性。三、Service 层核心业务逻辑Service 层是本次实现的重头戏把跨表事务、权限校验、外部调用都收敛在这里。1. 入驻保存事务 文件上传save_enterprise_info在in_transaction()中一次性写入 3 张表并把营业执照、法人身份证正反面三张图片上传到 OSS任一环节失败整体回滚2. 完整详情4 表联合get_enterprise_full_detail通过get_or_none关联查询三张扩展表并把行业 ID 解析为行业名称、规模枚举解析为中文名前端拿到的就是开箱即用的数据。3. 审核通过即激活enterprise_review不仅写审核记录还会在review_result 1时自动把企业account_status改为正常、同步旧status字段——审核通过即可登录形成闭环。4. 短信验证码登录企业端不使用密码而是手机号 验证码send_login_sms_code校验手机号已在资质表注册 → 生成 6 位随机码 → 写入 Redisboss-api:enterprise-login:sms:{mobile}5 分钟过期。enterprise_login遍历该手机号对应的企业要求审核已通过再比对 Redis 中的验证码正确则用create_tokens签发 JWT。四、前端实现管理端 企业端前端采用 monorepo 结构boss-manage-ui管理端与boss-company-ui企业端共享 Axios 封装与 Element Plus 组件库通过 Vite proxy 把/api转发到127.0.0.1:8000。管理端认证审核CertificationList.vue由原本的 mock 数据改为真实接口调用getEnterpriseList({account_status:1})拉取待审列表从enterprise_info取法人、行业名用AUDIT_TYPE_MAP映射审核类型并支持批量通过CertificationAudit.vue在挂载时通过getEnterpriseFullDetail(id)填充公司信息、资质材料、营业执照预览审核时提交reviewEnterprise({enterprise_id, review_result})。企业端登录 入驻 主页Login.vue默认切换为验证码登录sendCode调enterpriseSendCode、onSubmit调enterpriseLogin登录成功后把companyToken、companyUserInfo含 enterpriseId写入 localStorage。Certification.vue提交认证时构建FormData以multipart/form-data上传三证图片行业选项来自/resume/industry/position枚举字段统一用 int 存储。CompanyProfile.vuefetchProfile读取 localStorage 中的 enterpriseId调enterpriseFullDetail填充公司名称、行业、规模、简介等并支持更新简介/邮箱/官网。两个项目均通过vite build验证构建产物清理后无残留。五、技术要点小结分层清晰路由只做参数解析与鉴权业务逻辑全部下沉到 Service模型只管数据。复用性与可测性都更好。事务保证一致性入驻涉及 3 张表 OSS 上传用in_transaction兜底避免主表有、详情表没的脏数据。审核即激活把审核通过 → 账号可用做成原子操作省去额外的状态机。无密码登录企业账号用手机号 短信验证码规避明文密码风险也更符合 B 端联系人才是账号的现实。枚举驱动状态/类型一律走枚举前后端用统一的中文映射表减少魔法数字。六、总结本文完整呈现了一个企业招聘平台企业端从数据建模、后端服务到前端页面的全栈落地过程。核心是把入驻 → 审核 → 登录这条主线用事务、JWT、Redis 三种机制串起来既保证安全也让管理端与企业端的协作闭环顺滑。后续可继续补充短信服务商对接、企业信息变更审核、以及新增职位发布等模块。