fix(hrm): 修复新增调岗申请报 500(原部门/原岗位未回填)
问题:人力资源 → 调岗申请 → 新增调岗申请,提交报 500「系统异常」,
日志为 java.sql.SQLException: Field 'current_dept_id' doesn't have a default value。
根因(前端后端都有问题):
1. 库里 hrm_transfer_application 的 current_dept_id / current_post_id 是 NOT NULL 且无默认值,
但前端表单只有 currentDeptName / currentPostName 两个只读展示框,
从来不会提交 currentDeptId / currentPostId,插入必然失败。
2. 前端 form.vue 传了 employeeId,但后端 HrmTransferApplicationSaveReqVO 没有这个字段,被直接忽略。
3. 前端 onOpenChange 里写的是 employees[0](注释自称「暂时取第一个员工作为示例」),
调岗对象根本不对,不是用户想调的人。
改动:
后端
- SaveReqVO 新增 employeeId(被调岗员工)。
- createTransferApplication 重排逻辑:先按 employeeId(或 userId)查员工档案,
自动补全 userId / currentDeptId / currentPostId(post_ids 存 JSON 数组,取第一个),
补全后再做「目标部门/岗位不能与原部门/岗位相同」的校验
(原来校验在补全之前,补全出来的原部门会绕过校验)。
- 补全不到时抛明确业务错误,不再直接漏出 SQL 异常:
TRANSFER_APPLICATION_CURRENT_DEPT_REQUIRED / _CURRENT_POST_REQUIRED。
- RespVO 新增 employeeId,详情接口按 userId 反查员工档案回填,供前端修改时回显。
前端
- data.ts 新增「被调岗员工」下拉(ApiSelect,走 /hrm/employee/simple-list),
查看/修改场景禁用。
- form.vue 去掉 employees[0] 的示例逻辑,改为监听 employeeId 变化,
选中员工后带出原部门/原岗位名称(ID 由后端按档案补全)。
顺带移除不再需要的 currentEmployeeId。
验证(蓝羽 mom-lyzy 实测):
- 只传 employeeId 新增 → 成功,落库 user_id=345、current_dept_id=125、current_post_id=48,
与员工档案完全一致
- 目标部门选成原部门 → 正确拦截「调岗失败,原因:目标部门与原部门相同」
- 详情接口返回 employeeId=111、userId=345、currentDeptName=财务部
| | |
| | | import { getDictOptions } from '#/packages/effects/hooks/src'; |
| | | |
| | | import { getDeptList } from '#/api/system/dept'; |
| | | import { getEmployeeSimpleList } from '#/api/hrm/employee'; |
| | | import { getSimplePostList } from '#/api/system/post'; |
| | | import { getEmployeeSimpleList } from '#/api/hrm/employee'; |
| | | import { handleTree } from '#/packages/utils/src'; |