day08-企业端功能相关-查询,展示,登录,审核 基于 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 三种机制串起来既保证安全也让管理端与企业端的协作闭环顺滑。后续可继续补充短信服务商对接、企业信息变更审核、以及新增职位发布等模块。

相关新闻

最新新闻

游戏音频提取完全指南:5步轻松解密ACB/AWB到WAV格式

游戏音频提取完全指南:5步轻松解密ACB/AWB到WAV格式

游戏音频提取完全指南:5步轻松解密ACB/AWB到WAV格式 【免费下载链接】acbDecrypter 项目地址: https://gitcode.com/gh_mirrors/ac/acbDecrypter acbDecrypter是一款专业的游戏音频解密工具,专门用于提取和转换游戏中的加密音频文件。无论你是游…

2026/7/29 3:57:53
STM32 HAL库实现SPWM正弦波生成:从原理到工程实践

STM32 HAL库实现SPWM正弦波生成:从原理到工程实践

1. 项目概述与核心价值最近在做一个需要精密交流信号源的小项目,手头正好有块STM32F103的开发板,就琢磨着能不能直接用MCU生成一个干净的正弦波。直接上DAC输出阶梯波当然可以,但想要波形质量好、频率稳定,还得上SPWM(…

2026/7/29 3:57:53
基于Bluno Beetle的避障小车:从硬件搭建、滤波算法到蓝牙调试全解析

基于Bluno Beetle的避障小车:从硬件搭建、滤波算法到蓝牙调试全解析

1. 项目缘起:从“玩具”到“学习平台”的转变最近在整理工作室的物料,翻出来几个之前玩智能硬件剩下的Bluno Beetle主控板。这玩意儿个头小得像个硬币,但集成了蓝牙4.0和Arduino兼容的核心,当年买来是想做点穿戴式小玩意儿&#x…

2026/7/29 3:57:53
2026年企业薪酬体系如何科学设计?这5家专业公司值得关注

2026年企业薪酬体系如何科学设计?这5家专业公司值得关注

在2026年的人才市场竞争中,薪酬体系早已不是简单的“发多少钱”的问题,而是企业战略落地的核心杠杆。然而,超过60%的企业HR在年度薪酬设计时都面临同样的困境:报告数据不准、更新太慢、缺乏定制化解读,导致薪酬方案要么…

2026/7/29 3:57:53
NBM7100A双级DC-DC架构在物联网低功耗设计中的应用

NBM7100A双级DC-DC架构在物联网低功耗设计中的应用

1. 项目背景与核心挑战在物联网终端设备设计中,CR2032等不可充电纽扣电池的寿命瓶颈一直是困扰工程师的难题。这类电池的典型容量在220mAh左右,当负载电流超过10mA时,输出电压会急剧下降。而现代低功耗无线模块(如BLE、LoRa&#…

2026/7/29 3:57:53
SpringBoot+Vue2智能垃圾分类系统开发实战

SpringBoot+Vue2智能垃圾分类系统开发实战

1. 项目概述:SpringBoot智能垃圾分类管理系统的核心价值这套基于SpringBootVue2的智能垃圾分类管理系统源码,是我在参与某市智慧社区建设项目时沉淀下来的实战成果。系统通过图像识别与数据联动,实现了从垃圾投放到清运调度的全流程数字化管理…

2026/7/29 3:52:53

月新闻