基于 FastAPI+Vue3 的人事档案管理系统

发布时间:2026/11/2 20:57:23

基于 FastAPI+Vue3 的人事档案管理系统 校验登录想让用户数量 账号和密码 再去user表里面查出 和 用户输入的对比 如果有信息不对提示什么错误 要是没有信息不对提示登陆成功day03_book_router.post(/login,description用户登录,summary用户登录) async def post_book(user_data:UserRegister): dataawait User.get_or_none(usernameuser_data.username) if not data: return {code: 400, message: 用户不存在} if data.password ! user_data.password: return {code: 400, message: 密码错误} return { code: 200, message: 登录成功, data: { username: data.username, password: data.password } }查询全部部门通过GET方法day03_book_router.get(/list,description获取部门列表,summary获取部门列表) async def get_book_list(): data await Department.all().prefetch_related(employees) data_list[] for i in data: data_list.append({ id: i.id, name: i.name, description: i.location, created_at: i.phone, updated_at: i.updated_at, }) return { code: 200, message: 获取成功, data:data_list, total: len(data_list), }for 里面是想要返回的字段 部门ID、名称、位置、联系电话、更新时间for i in data: data_list.append({ id: i.id, name: i.name, description: i.location, created_at: i.phone, updated_at: i.updated_at, })新增部门POST接受到前端传过来的值Department.create(**department_data.dict())这一块是转成为字典day03_book_router.post(/create,description创建部门,summary创建部门) async def post_department(department_data:DepartmentRegister): data await Department.create(**department_data.dict()) return {code: 200, message: 创建成功, data: data}编辑部门 PUT根据前端传过来的ID进行查询部门exclude_unsetTrue 更新前端传过来的字段update_from_dict 更新数据并保存day03_book_router.put(/update,description更新部门,summary更新部门) async def get_department(id:int, department_data:DepartmentUpdate): data await Department.filter(idid).first() li department_data.dict(exclude_unsetTrue) if not data: return {code: 400, message: 部门不存在} await data.update_from_dict(li) await data.save() return {code: 200, message: 更新成功, data: data}删除部门 DELETE加载员工关联判断部门下是否存在员工有员工提示下面有员工不能删除这个部门无员工执行删除命令day03_book_router.delete(/delete,description删除部门,summary删除部门) async def delete_department(id:int): articles await Department.get_or_none(idid).prefetch_related(employees) if not articles: return {code: 400, message: 部门不存在} if len(articles.employees)0: return {code: 400, message: 部门下有员工请先删除员工} await articles.delete() return {code: 200, message: 删除成功}员工分页列表GET支持分页page/size、姓名模糊查询、部门ID筛选、状态筛选用Q拼接多条件查询预加载所属部门并格式化返回员工全部基础信息字段day03_book_router.get(/all,description获取员工列表,summary获取员工列表) async def get_department_list( page:int1, size:int10, name:str | NoneQuery(None,description姓名模糊搜索), department:int | NoneQuery(None,description部门ID), status:str | NoneQuery(None,description员工状态) ): filter_conditionQ() if name: filter_condition Q(name__containsname) if department: filter_condition Q(department_iddepartment) if status: filter_condition Q(statusstatus) offset (page - 1) * size query await Employee.filter(filter_condition).prefetch_related(department).offset(offset).limit(size) # data await query.offset(offset).limit(size) data_list[] for i in query: i_info{ id: i.id, name: i.name, emp_no: i.emp_no, gender: i.gender, age: i.age, phone: i.phone, email: i.email, hore_date: i.hore_date, salary: i.salary, status: i.status, department:None } if i.department: i_info[department]{ name: i.department.name } data_list.append(i_info) return { code: 200, message: 获取成功, data:data_list }增加员工POSTday03_book_router.post(/creatall,description创建员工,summary创建员工) async def post_employee(employee_data:EmployeeRegister): dic employee_data.dict() dic[department_id] dic.pop(department) data await Employee.create(**dic) return {code: 200, message: 创建成功, data: data}employee_data.dict()把Pydantic对象转换成普通python字典里面存放前端提交所有字段。前端传参示例{name:张三,emp_no:001,department:1,...}dic.pop(department)pop(department取出字典中department 的值就是前端传的部门ID 数字)·同时从字典里删除department 这个 keydic[department_id] .·给字典新增键department_id值为上面拿到的部门ID修改 PUT根据 id 查询部门exclude_unsetTrue只更新前端传入字段day03_book_router.put(/updateall,description更新员工,summary更新员工) async def put_employee(id:int, employee_data:EmployeeUpdate): data await Employee.filter(idid).first() if not data: return {code: 400, message: 员工不存在} li employee_data.dict(exclude_unsetTrue) await data.update_from_dict(li) await data.save() return {code: 200, message: 更新成功, data: data}删除DELETE删除员工时加载相关档案 同步删除员工档案day03_book_router.delete(/deleteall,description删除员工,summary删除员工) async def delete_employee(id:int): data await Employee.filter(idid).first().prefetch_related(profile) if not data: return {code: 400, message: 员工不存在} await data.delete() return {code: 200, message: 删除成功}
延伸阅读

更多相关文章

2026/11/2 2:16:25

VSCode 基于 C/C++ 官方扩展包和 MinGW-w64 配置 C/C++ 开发环境

1. 环境准备在开始配置 VSCode 的 C/C 开发环境之前,需要先安装以下两个核心组件:VSCode C/C 官方扩展包:在 VSCode 扩展商店中搜索 "C/C" 并安装由 Microsoft 发布的官方扩展包。MinGW-w64 编译器:这是一个 Windows 平…

2026/11/2 1:32:28

ZFX山海证券:从公开信息出发,观察用户体验路径与风险提示

对多数外汇相关用户来说,判断平台并不需要复杂术语,关键在于信息能否被快速理解、关键提示是否容易找到、服务体验是否稳定一致。以ZFX山海证券为例,这里聚焦这些更贴近实际使用的亮点与细节。外汇相关平台的价值,体现在长期一致性…

2026/10/24 13:23:56

Windows网络编程:connect函数详解与实战应用

1. Windows网络编程基础与connect函数定位在Windows网络编程领域,connect函数是建立客户端连接的核心API。作为Winsock2库的关键组成部分,它负责初始化面向连接的套接字通信链路。与UNIX系统不同,Windows环境下connect函数的实现需要考虑Wins…

2026/11/2 20:54:23

微信商家转账到零钱Java后台:幂等、状态机与对账避坑

简介:这份压缩包面向需要对接微信支付企业付款到零钱能力的Java后台开发者,聚焦工资、奖金发放及退款等企业向个人微信钱包转账场景,提供可直接参考的核心实现代码。包内共2个Java文件,压缩包约3KB,体量轻巧&#xff0…

2026/11/2 20:54:23

Git强制回滚操作指南与风险防范

1. Git强制回滚的核心场景与风险警示在团队协作开发中,我们经常会遇到需要撤销已提交代码的情况。上周我就遇到了一个典型场景:在紧急修复生产环境bug时,不小心将未完成的feature分支代码合并到了主分支。此时强制回滚就成了救命稻草——但必…

2026/11/2 20:54:23

大模型系统性入门指南:从提示词工程到RAG与微调的实操路径

1. 大模型系统性入门到底在学什么1.1 先搞清楚“入门”的边界在哪里很多人一说要学大模型,第一反应就是去搜“大模型学习路线”,然后收藏一堆从Transformer论文到RLHF再到分布式训练的链接,最后躺在收藏夹里吃灰。我见过太多这样的案例了。问…

2026/11/2 20:54:23

CactiEZ 10.1 华为/中兴/H3C 交换机监控模板与 OID 校准

简介:面向网络运维与机房管理人员的一套 CactiEZ 10.1 主机监控模板合集,针对交换机、路由器及常见网络设备在统一纳管时,手工创建模板和编写数据查询耗时且容易出错的问题整理,适合具备 SNMP 与 Cacti 基础的中级运维人员套用。压…

2026/11/2 20:54:23

友盟分享6.4.6 custom集成避坑与release排错

简介:面向 Android 开发者的友盟分享 Social SDK 6.4.6 定制包,聚焦移动应用社交分享能力的快速接入,适合需要同时对接微信、QQ、微博以及 Facebook、Twitter 等平台的开发项目。压缩包以 zip 形式提供,体积约 58.92MB&#xff0c…

2026/11/2 20:49:23

VoiceStudio:一站式语音内容生产工作台全解析

1. VoiceStudio 到底是什么:一个语音制作工作台的自我修养先抛结论:VoiceStudio 不是一个"又一个录音软件",而是一个把传统音频工作站(DAW)的录制能力、AI 语音合成(TTS)、音色克隆、…

2026/11/2 6:08:01

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/2 6:39:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 1:04:04

工业级SPI隔离设计:硬件抗扰与信号完整性实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 1:04:04

PLFM_RADAR:主动探测数据通道,构建低误报的数据感知系统

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 1:04:04

工业SPI隔离设计:MAX14431与STM32F746硬件抗干扰实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 6:08:01

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/2 6:39:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑