【员工】员工管理
员工管理模块,由 yudao-module-hrm 后端模块的 employee 包实现,前端实现在 @/views/hrm/employee 目录,员工自助页面实现在 @/views/hrm/portal/employee 目录。
员工主档 hrm_employee 是整个 HRM 的业务主键:招聘的候选人转员工后落在这里,考勤、社保、薪资、绩效也都通过 employee_id 关联到这里。员工档案通过可空的 user_id 关联后台账号,因此待入职、已离职或暂未开通账号的员工也可以正常保留档案。
- 员工档案:主档 + 8 张子档案表,覆盖经历、证书、联系人、合同、材料附件和工资卡。
- 入转调离:转正、调岗、晋升、降级、转全职、离职、再入职,统一沉淀为异动记录。
- 员工字段设置:配置新建表单与档案页展示哪些字段、员工能改哪些字段。
本文涉及表如下图所示:
# 1. 员工档案
员工档案,由 HrmEmployeeController 提供接口(/hrm/employee);个人经历、联系人、合同、材料附件等子档案,分别由 employee 包下的子 Controller 提供接口。
# 1.1 主表表结构
省略 creator/create_time/updater/update_time/deleted/tenant_id 等通用字段
CREATE TABLE `hrm_employee` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '员工编号',
`name` varchar(255) NOT NULL COMMENT '员工姓名',
`job_number` varchar(64) DEFAULT NULL COMMENT '工号',
`user_id` bigint DEFAULT NULL COMMENT '后台用户编号',
`mobile` varchar(255) DEFAULT NULL COMMENT '手机号',
`email` varchar(255) DEFAULT NULL COMMENT '邮箱',
`country` varchar(64) DEFAULT NULL COMMENT '国家或地区',
`nation` varchar(64) DEFAULT NULL COMMENT '民族',
`id_type` tinyint DEFAULT NULL COMMENT '证件类型',
`id_number` varchar(255) DEFAULT NULL COMMENT '证件号码',
`sex` tinyint DEFAULT NULL COMMENT '性别',
`native_place` varchar(128) DEFAULT NULL COMMENT '籍贯',
`birthday` datetime DEFAULT NULL COMMENT '出生时间',
`age` int DEFAULT NULL COMMENT '年龄快照',
`address` varchar(255) DEFAULT NULL COMMENT '户籍地址',
`highest_education` tinyint DEFAULT NULL COMMENT '最高学历',
`dept_id` bigint DEFAULT NULL COMMENT '部门编号',
`leader_employee_id` bigint DEFAULT NULL COMMENT '直属上级员工编号',
`entry_status` tinyint DEFAULT NULL COMMENT '入职状态',
`status` tinyint DEFAULT NULL COMMENT '员工状态',
`type` tinyint DEFAULT NULL COMMENT '聘用形式',
`entry_time` datetime DEFAULT NULL COMMENT '入职时间',
`probation` int DEFAULT NULL COMMENT '试用期(月)',
`regular_time` datetime DEFAULT NULL COMMENT '转正时间',
`leave_time` datetime DEFAULT NULL COMMENT '离职时间',
`post_name` varchar(255) DEFAULT NULL COMMENT '职位名称',
`post_level` varchar(255) DEFAULT NULL COMMENT '岗位职级',
`work_city` varchar(64) DEFAULT NULL COMMENT '工作城市',
`work_address` varchar(255) DEFAULT NULL COMMENT '工作地点',
`work_detail_address` varchar(255) DEFAULT NULL COMMENT '工作详细地址',
`channel_id` bigint DEFAULT NULL COMMENT '招聘渠道编号',
`candidate_id` bigint DEFAULT NULL COMMENT '招聘候选人编号',
`company_age_start_time` datetime DEFAULT NULL COMMENT '司龄起算时间',
`company_age` int DEFAULT NULL COMMENT '司龄快照(年)',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='HRM 员工主档';
① user_id 逻辑关联 system_users 表的 id 字段,允许为空。同一后台账号只能绑定一份员工档案;绑定后,员工才能进入 HRM 员工端并接收站内通知。
② dept_id 关联 system_dept 表,leader_employee_id 自关联 hrm_employee 表。员工职位直接保存在 post_name 字段,它与招聘职位(hrm_recruit_post)、System 岗位是不同的业务对象。
③ 枚举 entry_status 入职状态(HrmEmployeeEntryStatusEnum,字典 hrm_employee_entry_status:1 = 在职,2 = 待入职,3 = 待离职,4 = 离职),表达员工所处的在职生命周期。详见 §2.2 状态流转。
④ 枚举 type 聘用形式(HrmEmployeeTypeEnum,字典 hrm_employee_type)和 status 员工状态(HrmEmployeeStatusEnum,字典 hrm_employee_status)是大类与明细的关系,status 已经隐含了所属 type:
type | 说明 | 对应的 status |
|---|---|---|
| 1 | 正式 | 1 正式、2 试用 |
| 2 | 非正式 | 3 实习、4 兼职、5 劳务、6 顾问、7 返聘、8 外包 |
其中只有实习、兼职可以「转为全职」(CONVERTIBLE_TO_FULL_TIME_STATUSES);社保、薪资等��块要求员工为正式或试用状态。
⑤ candidate_id 和 channel_id 记录招聘来源,分别关联 hrm_recruit_candidate、hrm_recruit_channel 表。候选人转员工后,可由员工档案继续追溯应聘职位和招聘渠道,详见 《【招聘】招聘管理》。
⑥ age 年龄、company_age 司龄是业务快照:实际展示时按 birthday、company_age_start_time 的自然日期计算,快照字段用于列表筛选与统计。
该表包含 8 个子表,均通过 employee_id 关联主表,在员工详情页以页签形式维护:
| 表 | 关系 | 主要内容 |
|---|---|---|
hrm_employee_education_experience | 1:N | 学历、院校、专业、入学与毕业时间、教学方式 |
hrm_employee_work_experience | 1:N | 工作单位、职位、起止时间、离职原因、证明人 |
hrm_employee_training_experience | 1:N | 培训课程、机构、时长、成绩和证书 |
hrm_employee_certificate | 1:N | 证书名称、级别、编号、有效期和发证机构 |
hrm_employee_contact | 1:N | 联系人、关系、电话、单位、职务和地址 |
hrm_employee_contract | 1:N | 合同编号、类型、期限、签约公司、提醒和附件 |
hrm_employee_file | 1:N | 身份证、学历、简历、体检、合同和离职材料 |
hrm_employee_salary_card | 1:0..1 | 卡号、开户地区、银行和支行 |
这些表保存员工资料本身;工资、社保的业务数据分别在薪资和社保模块维护。
# 1.2 子表结构
hrm_employee_education_experience 表结构
CREATE TABLE `hrm_employee_education_experience` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '教育经历编号',
`employee_id` bigint NOT NULL COMMENT '员工编号',
`education` tinyint DEFAULT NULL COMMENT '学历',
`graduate_school` varchar(255) DEFAULT NULL COMMENT '毕业院校',
`major` varchar(255) DEFAULT NULL COMMENT '专业',
`admission_time` datetime DEFAULT NULL COMMENT '入学时间',
`graduation_time` datetime DEFAULT NULL COMMENT '毕业时间',
`teaching_methods` tinyint DEFAULT NULL COMMENT '教学方式',
`first_degree` bit DEFAULT NULL COMMENT '是否第一学历',
`sort` int DEFAULT NULL COMMENT '显示顺序',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='HRM 员工教育经历';
① employee_id 关联 hrm_employee 表的 id 字段,同一员工可以维护多条教育经历,详情页按 sort 排序。
② education 学历(HrmEmployeeEducationEnum,字典 hrm_employee_education)、teaching_methods 教学方式(HrmEmployeeTeachingMethodEnum)。
③ first_degree 标记第一学历,不代表最高学历,员工主档的 highest_education 仍单独维护。
hrm_employee_work_experience 表结构
CREATE TABLE `hrm_employee_work_experience` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '工作经历编号',
`employee_id` bigint NOT NULL COMMENT '员工编号',
`work_unit` varchar(255) DEFAULT NULL COMMENT '工作单位',
`post_name` varchar(255) DEFAULT NULL COMMENT '职位名称',
`start_time` datetime DEFAULT NULL COMMENT '开始时间',
`end_time` datetime DEFAULT NULL COMMENT '结束时间',
`reason` varchar(1024) DEFAULT NULL COMMENT '离职原因',
`witness_name` varchar(255) DEFAULT NULL COMMENT '证明人姓名',
`witness_phone` varchar(32) DEFAULT NULL COMMENT '证明人电话',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
`sort` int DEFAULT NULL COMMENT '显示顺序',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='HRM 员工工作经历';
employee_id 关联员工主档。工作单位、岗位、任职区间和离职原因都属于入职前的档案资料,不会反向修改员工当前的部门或职位。
hrm_employee_training_experience 表结构
CREATE TABLE `hrm_employee_training_experience` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '培训经历编号',
`employee_id` bigint NOT NULL COMMENT '员工编号',
`course` varchar(128) DEFAULT NULL COMMENT '培训课程',
`organization_name` varchar(128) DEFAULT NULL COMMENT '培训机构',
`start_time` datetime DEFAULT NULL COMMENT '开始时间',
`end_time` datetime DEFAULT NULL COMMENT '结束时间',
`duration` varchar(64) DEFAULT NULL COMMENT '培训时长',
`result` varchar(64) DEFAULT NULL COMMENT '培训结果',
`certificate_name` varchar(128) DEFAULT NULL COMMENT '取得证书',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
`sort` int DEFAULT NULL COMMENT '显示顺序',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='HRM 员工培训经历';
课程、机构、培训时长、结果和取得证书都是文字快照,不关联绩效,也不会自动生成 hrm_employee_certificate 证书记录。
hrm_employee_certificate 表结构
CREATE TABLE `hrm_employee_certificate` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '证书编号',
`employee_id` bigint NOT NULL COMMENT '员工编号',
`name` varchar(255) DEFAULT NULL COMMENT '证书名称',
`level` varchar(255) DEFAULT NULL COMMENT '证书级别',
`no` varchar(255) DEFAULT NULL COMMENT '证书编号',
`start_time` datetime DEFAULT NULL COMMENT '有效期开始时间',
`end_time` datetime DEFAULT NULL COMMENT '有效期结束时间',
`issuing_authority` varchar(255) DEFAULT NULL COMMENT '发证机构',
`issuing_time` datetime DEFAULT NULL COMMENT '发证时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
`sort` int DEFAULT NULL COMMENT '显示顺序',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='HRM 员工证书';
证书业务编号保存在 no 字段,数据库不建立唯一约束,HR 可按实际情况维护多条同名或同编号记录。
hrm_employee_contact 表结构
CREATE TABLE `hrm_employee_contact` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '联系人编号',
`employee_id` bigint NOT NULL COMMENT '员工编号',
`name` varchar(64) DEFAULT NULL COMMENT '联系人姓名',
`relation` varchar(64) DEFAULT NULL COMMENT '与员工关系',
`phone` varchar(40) DEFAULT NULL COMMENT '联系电话',
`work_unit` varchar(128) DEFAULT NULL COMMENT '工作单位',
`post_name` varchar(128) DEFAULT NULL COMMENT '职位名称',
`address` varchar(255) DEFAULT NULL COMMENT '联系地址',
`sort` int DEFAULT NULL COMMENT '显示顺序',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='HRM 员工联系人';
用于保存家属、紧急联系人等档案资料。联系人不会创建后台账号,也不会参与员工的直属汇报关系。
hrm_employee_contract 表结构
CREATE TABLE `hrm_employee_contract` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '合同编号',
`employee_id` bigint NOT NULL COMMENT '员工编号',
`no` varchar(128) DEFAULT NULL COMMENT '合同业务编号',
`type` tinyint DEFAULT NULL COMMENT '合同类型',
`status` tinyint DEFAULT NULL COMMENT '合同状态',
`start_time` datetime DEFAULT NULL COMMENT '合同开始时间',
`end_time` datetime DEFAULT NULL COMMENT '合同结束时间',
`term` int DEFAULT NULL COMMENT '合同期限(月)',
`sign_company` varchar(255) DEFAULT NULL COMMENT '签约公司',
`sign_time` datetime DEFAULT NULL COMMENT '签订时间',
`expire_remind` bit DEFAULT NULL COMMENT '是否到期提醒',
`file_urls` varchar(2048) DEFAULT NULL COMMENT '合同附件地址数组',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
`sort` int DEFAULT NULL COMMENT '显示顺序',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='HRM 员工合同';
① 枚举 type 合同类型(HrmEmployeeContractTypeEnum):1 固定期限劳动合同、2 无固定期限劳动合同、3 以完成一定工作任务为期限的劳动合同、4 实习协议、5 劳务合同、6 返聘协议、7 劳务派遣合同、8 借调合同、9 其他。
② 枚举 status 合同状态(HrmEmployeeContractStatusEnum):0 未执行、1 执行中、2 已到期。合同期限和状态不会自动替代员工主档的入转调离状态。
③ expire_remind 表示是否参与到期提醒,命中后展示在 HR 工作台的「合同到��」待办中。
④ file_urls 只保存平台文件地址,文件上传复用 Infra 文件能力。
hrm_employee_file 表结构
CREATE TABLE `hrm_employee_file` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '材料编号',
`employee_id` bigint NOT NULL COMMENT '员工编号',
`type` tinyint NOT NULL COMMENT '材料类型',
`url` varchar(512) NOT NULL COMMENT '文件地址',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='HRM 员工材料附件';
枚举 type 材料类型(HrmEmployeeFileTypeEnum)按 3 组划分:11~19 基本资料(身份证、学历证明、证件照、工资银行卡、社保卡等)、21~27 档案资料(劳动合同、入职简历、登记表、体检单、转正申请表等)、31~33 离职资料(离职审批、离职证明等)。
详情页按员工整组读取和保存材料列表,不建立独立的文件内容表。
hrm_employee_salary_card 表结构
CREATE TABLE `hrm_employee_salary_card` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '工资卡编号',
`employee_id` bigint NOT NULL COMMENT '员工编号',
`bank_card_number` varchar(64) DEFAULT NULL COMMENT '银行卡号',
`bank_area_id` int DEFAULT NULL COMMENT '开户地区编号',
`bank_name` varchar(64) DEFAULT NULL COMMENT '银行名称',
`bank_branch_name` varchar(128) DEFAULT NULL COMMENT '开户支行',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='HRM 员工工资卡';
工资卡与员工是 1:0..1,通过 employee_id 查询并覆盖保存当前记录;bank_area_id 使用平台地区编号。删除工资卡只删除收款资料,不删除员工薪资档案和历史工资。
# 1.3 管理后台
对应 [HRM 人力资源 -> 员工管理 -> 员工档案] 菜单,对应 yudao-ui-admin-vue3 项目的 @/views/hrm/employee 目录。
# 列表
支持按姓名、手机号、工号、部门、岗位、入职时间、转正时间、招聘渠道和聘用形式筛选。列表顶部按正式、试用、实习、兼职、劳务、顾问、返聘、外包、在职、全职、待入职、待离职、已离职展示页签及数量(页签口径见 HrmEmployeeStatusTabEnum)。
点击员工姓名进入详情,行内【编辑】打开主档表单,【更多】按员工当前状态展示可执行的人事动作。

# 新增
通过弹窗 EmployeeForm.vue 完成。新增时可选择「在职」或「待入职」,表单根据员工字段设置加载对应字段(详见 §3 员工字段设置)。后端会校验后台账号、部门、直属上级、招聘渠道和候选人等关联是否存在。

另外可点击【从后台用户创建】,由 EmployeeCreateFromUserForm.vue 先排除已绑定的账号,再批量建档。系统会复制用户昵称、邮箱和性别,HR 仍需补充部门、岗位、聘用形式和入职信息。

# 修改
列表或详情页点击【编辑】,继续使用 EmployeeForm.vue。
⚠️ 注意:修改姓名、联系方式、部门、直属上级和任职资料不会自动创建异动记录。需要保留人事动作历史时,应使用下文「入职、转正、异动与离职」中的专用操作。
# 导入与导出
点击【导入】,由 EmployeeImportForm.vue 下载模板并上传 Excel。导入按工号判重,支持「跳过重复」「覆盖重复」「重复即失败」三种策略(HrmEmployeeImportDuplicateStrategyEnum),结果分别返回新增、覆盖、跳过和失败的工号。
点击【导出】,按当前查询条件导出员工档案,不受当前分页限制。
# 员工详情
点击员工姓名进入 @/views/hrm/employee/detail/index.vue。页面顶部由 EmployeePostInfo.vue、EmployeeBasicInfo.vue 展示任职和基本信息,下方以页签维护各类子档案:

★ 教育 / 工作 / 培训经历、证书、联系人(员工详情「基本信息」Tab):由对应子表存储,均支持新增、修改、删除,分别由 HrmEmployeeEducationExperienceController、HrmEmployeeWorkExperienceController、HrmEmployeeTrainingExperienceController、HrmEmployeeCertificateController、HrmEmployeeContactController 提供接口。

★ 员工合同(员工详情「员工合同」Tab):由 hrm_employee_contract 表存储,支持新增、修改、删除,由 HrmEmployeeContractController 提供接口。

★ 材料附件(员工详情 Tab):由 EmployeeMaterialFiles.vue 展示,HrmEmployeeFileController 提供整组保存接口,不逐条增删。

★ 工资卡(员工详情 Tab):由 EmployeeSalaryCardInfo.vue、EmployeeSalaryCardForm.vue 维护,HrmEmployeeSalaryCardController 提供保存与删除接口。

★ 工资社保(员工详情 Tab):展示员工当前薪资档案与参保资料,详见 《【薪资】计薪设置、薪资档案》 和 《【社保】社保管理》。

★ 异动记录(员工详情 Tab):由 EmployeeChangeRecordList.vue 只读展示 hrm_employee_change_record,不能从详情页直接改写历史动作。

# 批量操作
勾选员工后,【批量操作】支持设置参保方案、发送档案填写通知,以及批量删除。其中设置参保方案只允许正式或试用且未离职的员工。
# 删除
单条删除与批量删除均为逻辑删除,只删除员工主档,不删除其后台账号,也不会级联清理已产生的招聘、考勤、薪资、社保和绩效历史。因此执行前应先确认历史数据仍可正确展示,批量删除弹窗也会明确提示「后台账号及历史业务记录将保留」。
# 2. 入职、转正、异动与离职
入转调离动作由 HrmEmployeeController 提供接口。每次转正、调岗、晋升、降级、转全职和再入职都会写入 hrm_employee_change_record 异动记录;离职计划则保存在 hrm_employee_quit_info。
# 2.1 表结构
CREATE TABLE `hrm_employee_change_record` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '异动记录编号',
`employee_id` bigint NOT NULL COMMENT '员工编号',
`type` tinyint DEFAULT NULL COMMENT '异动类型',
`reason` tinyint DEFAULT NULL COMMENT '异动原因',
`old_dept_id` bigint DEFAULT NULL COMMENT '原部门编号',
`new_dept_id` bigint DEFAULT NULL COMMENT '新部门编号',
`old_post_name` varchar(255) DEFAULT NULL COMMENT '原岗位',
`new_post_name` varchar(255) DEFAULT NULL COMMENT '新岗位',
`old_post_level` varchar(255) DEFAULT NULL COMMENT '原职级',
`new_post_level` varchar(255) DEFAULT NULL COMMENT '新职级',
`old_work_address` varchar(255) DEFAULT NULL COMMENT '原工作地点',
`new_work_address` varchar(255) DEFAULT NULL COMMENT '新工作地点',
`old_leader_employee_id` bigint DEFAULT NULL COMMENT '原直属上级',
`new_leader_employee_id` bigint DEFAULT NULL COMMENT '新直属上级',
`probation` int DEFAULT NULL COMMENT '试用期(月)',
`effect_time` datetime DEFAULT NULL COMMENT '计划生效时间',
`applied_time` datetime DEFAULT NULL COMMENT '实际生效时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='HRM 员工异动记录';
① 枚举 type 异动类型(HrmEmployeeChangeTypeEnum):
| 值 | 枚举 | 说明 | 触发操作 |
|---|---|---|---|
| 4 | REGULAR | 转正 | regularEmployee |
| 5 | TRANSFER | 调岗 | transferEmployee |
| 6 | PROMOTION | 晋升 | promoteEmployee |
| 7 | DEMOTION | 降级 | demoteEmployee |
| 8 | FULL_TIME | 转为全职 | convertEmployeeToFullTime |
| 9 | REHIRE | 再入职 | rehireEmployee(仅立即生效,不支持预约) |
② 枚举 reason 异动原因(HrmEmployeeChangeReasonEnum):1 组织架构调整、2 个人申请、3 工作安排、4 违规违纪、5 绩效不达标、6 个人身体原因、7 不适应当前岗位。其中调岗、晋升只能选 1~3(TRANSFER_AND_PROMOTION_REASONS),降级只能选 4~7(DEMOTION_REASONS)。
③ effect_time 是计划生效时间,applied_time 是实际生效时间。预约生效的记录先落库、applied_time 为空,等待 HrmEmployeeChangeJob 到期执行后回填。
④ old_* / new_* 成对保存变更前后的部门、岗位、职级、工作地点和直属上级,用于详情页展示变动轨迹。
该表配套一张离职信息表:
hrm_employee_quit_info(员工离职信息):保存离职计划与结算信息,由 HrmEmployeeQuitInfoController 在员工详情页只读回显。
hrm_employee_quit_info 表结构
CREATE TABLE `hrm_employee_quit_info` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '离职信息编号',
`employee_id` bigint NOT NULL COMMENT '员工编号',
`plan_quit_time` datetime DEFAULT NULL COMMENT '计划离职时间',
`apply_quit_time` datetime DEFAULT NULL COMMENT '申请离职时间',
`salary_settlement_time` datetime DEFAULT NULL COMMENT '薪资结算时间',
`type` tinyint DEFAULT NULL COMMENT '离职类型',
`reason` tinyint DEFAULT NULL COMMENT '离职原因',
`old_employee_status` tinyint DEFAULT NULL COMMENT '离职前员工状态',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='HRM 员工离职信息';
① 枚举 type 离职类型(HrmEmployeeQuitTypeEnum):1 主动离职、2 被动离职、3 退休。
② 枚举 reason 离职原因(HrmEmployeeQuitReasonEnum)与离职类型联动:1~10 属于主动离职(家庭原因、身体原因、薪资原因、交通不便、工作压力、管理问题、无晋升机会、职业规划、合同到期放弃续签、其他个人原因),11~16 属于被动离职(试用期内辞退、违反公司条例、组织调整 / 裁员、绩效不达标辞退、合同到期不续签、其他原因)。
③ old_employee_status 记录办理离职前的员工状态,供「取消离职」时恢复使用。
# 2.2 状态流转
员工的入转调离生命周期由 HrmEmployeeServiceImpl 控制,entry_status 表达阶段,status 表达身份。状态枚举 HrmEmployeeEntryStatusEnum:
| 状态值 | 枚举 | 说明 | 可执行操作 |
|---|---|---|---|
| 1 | ACTIVE | 在职 | 转正、调岗、晋升、降级、转全职、离职 |
| 2 | PENDING_ENTRY | 待入职 | 确认入职 |
| 3 | PENDING_LEAVE | 待离职 | 取消离职 |
| 4 | LEFT | 离职 | 办理再入职、修改离职信息 |
状态流转说明
候选人转员工 ──→ 待入职(2) ──确认入职──→ 在职(1) ──离职──→ 离职(4) ──再入职──→ 在职(1)
│ ↑
└──预约离职──→ 待离职(3)
│
└──取消离职──→ 在职(1)
- 确认入职(
confirmEmployeeEntry):待入职 → 在职。补全实际入职资料;如果员工来自招聘候选人,候选人同步���新为已入职。 - 转正(
regularEmployee):试用 → 正式。立即生效时同步更新员工状态和转正时间;预约生效时先写入待执行的异动记录,之后由 HrmEmployeeChangeJob 到期执行。 - 调岗 / 晋升 / 降级(
transferEmployee/promoteEmployee/demoteEmployee):调整部门、职位、职级、工作地点和直属上级,均支持立即或预约生效。 - 转为全职(
convertEmployeeToFullTime):实习、兼职 → 正式。把聘用形式转为正式,并保存转全职后的岗位、职级和任职信息。 - 离职(
quitEmployee):立即离职直接更新员工主档;未来离职先把员工置为待离职,到plan_quit_time后由 HrmEmployeeChangeJob 更新为离职。 - 取消离职(
cancelEmployeeQuit):待离职 → 在职。按old_employee_status恢复办理离职前的员工状态。 - 再入职(
rehireEmployee):离职 → 在职。沿用原员工编号,并更新新的部门、岗位、直属上级和入职时间。
# 2.3 管理后台
入转调离入口同时存在于员工列表的【更多】菜单和员工详情页,相关表单都位于 @/views/hrm/employee 目录。页面根据 entry_status 和 status 只展示当前员工可执行的动作。
# 确认入职与再入职
待入职员工点击【确认入职】,由 EmployeeForm.vue 补全实际入职资料;已离职员工点击【办理再入职】,同一表单切换到再入职模式。

# 转正
试用员工点击【转正】,由 EmployeeRegularForm.vue 填写转正时间与原因。选择未来日期时为预约转正,列表中会提示待生效的异动。

# 调岗、晋升与降级
【调整部门 / 岗位】由 EmployeeTransferForm.vue 处理,【晋升】、【降级】分别由 EmployeePromoteForm.vue、EmployeeDemoteForm.vue 处理。三者表单结构相似,区别在于可选的异动原因不同。

# 转为全职
实习或兼职员工点击【转为全职】,由 EmployeeFullTimeForm.vue 填写原因、生效时间、试用期、部门、岗位、职级、直属上级、工作地点和备注。其它员工状态不会显示该入口。

# 离职、取消离职与修改离职信息
在职员工点击【办理离职】,由 EmployeeQuitForm.vue 填写计划离职时间、离职类型、原因和薪资结算时间。

待离职员工可填写原因后【取消离职】,恢复办理离职前的员工状态;已离职员工可以再次打开离职表单修改离职类型、原因和结算信息,但不会因此恢复在职。
# 3. 员工字段设置
员工字段设置,由 HrmEmployeeFieldConfigController 提供接口(/hrm/employee/config),配置统一保存在通用的 hrm_config 表中。
# 3.1 表结构
CREATE TABLE `hrm_config` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
`type` tinyint NOT NULL COMMENT '配置类型',
`value` varchar(255) NOT NULL COMMENT '配置值',
`sort` int DEFAULT NULL COMMENT '显示顺序',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='HRM 业务配置';
① 枚举 type 配置类型(HrmConfigTypeEnum)。该表被员工与招聘两个模块共用:
| 值 | 枚举 | 说明 | 维护菜单 |
|---|---|---|---|
| 1 | RECRUIT_ELIMINATE | 招聘淘汰原因 | 招聘管理 -> 招聘设置 -> 淘汰原因 |
| 2 | EMPLOYEE_CREATE_ACTIVE_FIELD | 新建在职员工字段 | 员工管理 -> 员工设置 |
| 3 | EMPLOYEE_CREATE_PENDING_FIELD | 新建待入职员工字段 | 员工管理 -> 员工设置 |
| 4 | EMPLOYEE_ARCHIVE_FIELD | 员工档案字段 | 员工管理 -> 员工设置 |
② 可配置的字段范围由 HrmEmployeeCreateFieldEnum(新建表单)和 HrmEmployeeArchiveFieldEnum(档案页)定义。两个枚举都带有「是否锁定」标记:姓名、入职状态、聘用形式、员工状态、入职时间等系统必要字段始终保留,不能通过页面隐藏或关闭。
# 3.2 管理后台
对应 [HRM 人力资源 -> 员工管理 -> 员工设置] 菜单,对应 yudao-ui-admin-vue3 项目的 @/views/hrm/employee/config 目录。
# 配置新建字段
由 EmployeeCreateFieldConfig.vue 分别配置「在职」和「待入职」两套新建表单的字段与顺序,对应 hrm_config 的 type=2、type=3。
# 配置档案字段
由 EmployeeArchiveFieldConfig.vue 配置员工档案页字段的显示与员工可编辑权限,对应 hrm_config 的 type=4。这里的「可编辑」控制的是员工端「我的档案」能否修改该字段,管理端不受影响。
两个页签保存的都是整组字段顺序与开关,不提供逐条删除配置。

# 4. 我的档案
员工端「我的档案」,由 HrmPortalEmployeeController 提供本人主档接口(/hrm/portal/employee),各类经历由同级 Portal Controller 提供只读接口。
# 4.1 员工端
对应 [HRM 人力资源 -> HRM 员工端 -> 我的档案] 菜单,对应 yudao-ui-admin-vue3 项目的 @/views/hrm/portal/employee 目录。
# 查看档案
页面根据当前登录账号绑定的 hrm_employee.user_id 定位本人,展示基本信息、岗位信息,以及教育、工作、培训、证书、联系人等资料。这些子档案在员工端只读。

# 修改本人资料
点击【编辑】打开员工端 EmployeeForm.vue。表单先读取 HrmPortalEmployeeFieldConfigController 提供的可编辑范围(即员工设置中「档案字段」开放的字段),再保存主档。
员工不能借此修改部门、岗位、直属上级、员工状态或其他人的档案。
