ruoyi-vue-pro 开发指南 ruoyi-vue-pro 开发指南
  • 萌新必读
  • 后端手册
  • 中间件手册
  • 工作流手册
  • 大屏手册
  • 支付手册
  • 会员手册
  • 商城手册
  • ERP 手册
  • CRM 手册
  • MES 手册
  • WMS 手册
  • IM 即时通讯手册
  • AI 大模型手册
  • IoT 物联网手册
  • 公众号手册
  • 系统手册
  • 运维手册
  • 前端手册 Vue 3.x
  • 前端手册 Vben 5.x
  • 前端手册 Vue 2.x
  • 前端手册 Admin Uniapp
  • 工作流手册
  • 大屏手册
  • 支付手册
  • 会员手册
  • 商城手册
  • ERP 手册
  • CRM 手册
  • MES 手册
  • WMS 手册
  • IM 即时通讯手册
  • AI 大模型手册
  • IoT 物联网手册
  • 公众号手册
  • 系统手册
视频教程
  • Vue3 + element-plus (opens new window)
  • Vue3 + vben5(ant-design-vue、element-plus) (opens new window)
  • Vue2 + element-ui (opens new window)
微服务版 (opens new window)
作者博客 (opens new window)
GitHub (opens new window)
  • 萌新必读
  • 后端手册
  • 中间件手册
  • 工作流手册
  • 大屏手册
  • 支付手册
  • 会员手册
  • 商城手册
  • ERP 手册
  • CRM 手册
  • MES 手册
  • WMS 手册
  • IM 即时通讯手册
  • AI 大模型手册
  • IoT 物联网手册
  • 公众号手册
  • 系统手册
  • 运维手册
  • 前端手册 Vue 3.x
  • 前端手册 Vben 5.x
  • 前端手册 Vue 2.x
  • 前端手册 Admin Uniapp
  • 工作流手册
  • 大屏手册
  • 支付手册
  • 会员手册
  • 商城手册
  • ERP 手册
  • CRM 手册
  • MES 手册
  • WMS 手册
  • IM 即时通讯手册
  • AI 大模型手册
  • IoT 物联网手册
  • 公众号手册
  • 系统手册
视频教程
  • Vue3 + element-plus (opens new window)
  • Vue3 + vben5(ant-design-vue、element-plus) (opens new window)
  • Vue2 + element-ui (opens new window)
微服务版 (opens new window)
作者博客 (opens new window)
GitHub (opens new window)
  • 萌新必读

    • 简介
    • 交流群
    • 视频教程
    • 功能列表
    • 快速启动(后端项目)
    • 快速启动(前端项目)
    • 接口文档
    • 技术选型
    • 项目结构
    • 代码热加载
    • 一键改包
    • 迁移模块(适合新项目)
    • 删除功能(以租户为例)
    • 表结构变更(版本升级)
    • 国产信创数据库(DM 达梦、大金、OpenGauss、瀚高)
    • 如何去除 Redis 缓存
    • 内网穿透
    • 面试题、简历模版、简历优化
    • 项目外包
  • 后端手册

    • 新建模块
    • 代码生成【单表】(新增功能)
    • 代码生成【主子表】
    • 代码生成(树表)
    • 代码生成(移动端)
    • 功能权限
    • 数据权限
    • 用户体系
    • 三方登录
    • OAuth 2.0(SSO 单点登录)
    • SaaS 多租户【字段隔离】
    • SaaS 多租户【数据库隔离】
    • WebSocket 实时通信
    • 异常处理(错误码)
    • 参数校验、时间传参
    • 分页实现
    • VO 对象转换、数据翻译
    • 文件存储(上传下载)
    • Excel 导入导出
    • 操作日志、访问日志、异常日志
    • MyBatis 数据库
    • MyBatis 联表&分页查询
    • 多数据源(读写分离)、事务
    • Redis 缓存
    • 本地缓存
    • 异步任务
    • 分布式锁
    • 幂等性(防重复提交)
    • 请求限流(RateLimiter)
    • HTTP 接口签名(防篡改)
    • HTTP 接口加解密
    • 单元测试
    • 验证码
    • 工具类 Util
    • 配置管理
    • 数据库文档
  • 中间件手册

    • 定时任务
    • 消息队列(内存)
    • 消息队列(Redis)
    • 消息队列(RocketMQ)
    • 消息队列(RabbitMQ)
    • 消息队列(Kafka)
    • 限流熔断
  • 工作流手册

    • 工作流演示
    • 功能开启
    • 工作流(达梦适配)
    • 审批接入(流程表单)
    • 审批接入(业务表单)
    • 流程设计器(BPMN)
    • 流程设计器(钉钉、飞书)
    • 选择审批人、发起人自选
    • 会签、或签、依次审批
    • 流程发起、取消、重新发起
    • 审批通过、不通过、驳回
    • 审批加签、减签
    • 审批转办、委派、抄送
    • 执行监听器、任务监听器
    • 流程表达式
    • 流程审批通知
    • 移动端审批
  • 大屏手册

    • 报表设计器
    • 大屏设计器
  • 支付手册

    • 功能开启
    • 支付宝支付接入
    • 微信公众号支付接入
    • 微信小程序支付接入
    • 支付宝、微信退款接入
    • 支付宝转账接入
    • 微信转账接入
    • 钱包充值、支付、退款
    • 模拟支付、退款
    • 移动端支付管理
  • 会员手册

    • 功能开启
    • 微信公众号登录
    • 微信小程序登录
    • 微信小程序订阅消息
    • 微信小程序码
    • 会员用户、标签、分组
    • 会员等级、积分、签到
    • 移动端会员管理
  • 商城手册

    • 商城演示
    • 功能开启
    • 商城装修
    • 在线客服
    • 【商品】商品分类
    • 【商品】商品属性
    • 【商品】商品 SPU 与 SKU
    • 【商品】商品评价
    • 【交易】购物车
    • 【交易】交易订单
    • 【交易】售后退款
    • 【交易】快递发货
    • 【交易】门店自提
    • 【交易】分销返佣
    • 【营销】优惠劵
    • 【营销】积分商城
    • 【营销】拼团活动
    • 【营销】秒杀活动
    • 【营销】砍价活动
    • 【营销】满减送活动
    • 【营销】限时折扣
    • 【营销】内容管理
    • 【统计】会员、商品、交易统计
    • 移动端商城管理
  • ERP手册

    • ERP 演示
    • 功能开启
    • 【产品】产品信息、分类、单位
    • 【库存】产品库存、库存明细
    • 【库存】其它入库、其它出库
    • 【库存】库存调拨、库存盘点
    • 【采购】采购订单、入库、退货
    • 【销售】销售订单、出库、退货
    • 【财务】采购付款、销售收款
    • 移动端 ERP
  • CRM手册

    • CRM 演示
    • 功能开启
    • 【线索】线索管理
    • 【客户】客户管理、公海客户
    • 【商机】商机管理、商机状态
    • 【合同】合同管理、合同提醒
    • 【回款】回款管理、回款计划
    • 【产品】产品管理、产品分类
    • 【通用】数据权限
    • 【通用】跟进记录、待办事项
    • 移动端 CRM
  • AI大模型手册

    • AI 大模型演示
    • 功能开启
    • AI 聊天对话
    • AI 绘画创作
    • AI 知识库(RAG)
    • AI 音乐创作
    • AI 写作助手
    • AI 思维导图
    • AI 工具(function calling)
    • AI 工作流
    • Dify 工作流
    • FastGPT 工作流
    • Coze 智能体
    • 推理模式(thinking)
    • 联网搜索
    • MCP Client 客户端
    • MCP Server 服务端
    • 【模型接入】Claude
    • 【模型接入】OpenAI
    • 【模型接入】通义千问
    • 【模型接入】DeepSeek
    • 【模型接入】字节豆包
    • 【模型接入】腾讯混元
    • 【模型接入】硅基流动
    • 【模型接入】MiniMax
    • 【模型接入】月之暗面
    • 【模型接入】百川智能
    • 【模型接入】文心一言
    • 【模型接入】LLAMA
    • 【模型接入】智谱 GLM
    • 【模型接入】讯飞星火
    • 【模型接入】微软 OpenAI
    • 【模型接入】谷歌 Gemini
    • 【模型接入】Stable Diffusion
    • 【模型接入】Midjourney
    • 【模型接入】Suno
    • 【模型接入】Grok
    • 【模型接入】阶跃星辰
    • 移动端 AI 大模型
  • IoT物联网手册

    • 功能开启
    • 产品管理
    • 设备管理
    • 物模型配置
    • 设备网关与子设备
    • 设备动态注册
    • 设备接入(概述)
    • 设备接入(HTTP 协议)
    • 设备接入(MQTT 协议)
    • 设备接入(EMQX 协议)
    • 设备接入(TCP 协议)
    • 设备接入(UDP 协议)
    • 设备接入(WebSocket 协议)
    • 设备接入(CoAP 协议)
    • 设备接入(Modbus Client 模式)
    • 设备接入(Modbus Server 模式)
    • 设备接入(自定义协议)
    • 场景联动
    • 数据流转
    • 告警配置
    • OTA 固件升级
    • 移动端 IoT 物联网
  • MES手册

    • MES 演示
    • 功能开启
    • 【基础】物料产品、分类、计量单位
    • 【基础】客户管理、供应商管理
    • 【基础】车间设置、工作站设置
    • 【基础】编码规则
    • 【生产】工序设置、工艺流程
    • 【生产】生产工单
    • 【生产】生产排产、工序流转卡
    • 【生产】生产报工
    • 【生产】安灯配置、安灯呼叫
    • 【生产】工作记录
    • 【仓库】仓库与库区库位、条码赋码、SN码
    • 【仓库】批次管理、库存现有量、库存事务
    • 【仓库】到货通知、采购入库、采购退货
    • 【仓库】生产领料、生产退料、物料消耗
    • 【仓库】产品产出、产品入库
    • 【仓库】发货通知、销售出库、销售退货
    • 【仓库】外协发料、外协入库
    • 【仓库】其他入库、其他出库
    • 【仓库】调拨单、装箱管理
    • 【仓库】库存盘点
    • 【质量】检测项设置、常见缺陷
    • 【质量】质检方案
    • 【质量】来料检验(IQC)
    • 【质量】过程检验(IPQC)
    • 【质量】出货检验(OQC)
    • 【质量】退货检验(RQC)
    • 【质量】待检任务、检验结果、缺陷记录
    • 【设备】设备类型、设备台账
    • 【设备】点检保养项目、点检保养方案
    • 【设备】点检记录、保养记录、维修单
    • 【工具】工具类型、工装夹具台账
    • 【排班】班组设置、节假日设置
    • 【排班】排班计划、排班日历
    • 移动端 MES
  • WMS手册

    • WMS 演示
    • 功能开启
    • 【基础】仓库
    • 【基础】商品、SKU、分类、品牌
    • 【基础】往来企业(供应商、客户)
    • 【库存】库存记录、流水、统计
    • 【单据】入库
    • 【单据】出库
    • 【单据】移库
    • 【单据】盘库
    • 【其它】WMS、MES、ERP 对比
    • 移动端 WMS
  • HRM人力资源

    • HRM 演示
    • 功能开启
    • 【组织】工作台、组织架构
    • 【员工】员工管理
      • 1. 员工档案
        • 1.1 表结构
        • 1.2 子档案
        • 1.3 管理后台
      • 2. 入职、转正、异动与离职
        • 2.1 表结构
        • 2.2 管理后台
      • 3. 员工字段设置
        • 3.1 表结构
        • 3.2 管理后台
      • 4. 我的档案
        • 4.1 员工端
    • 【招聘】招聘管理
    • 【考勤】考勤管理
    • 【社保】社保管理
    • 【薪资】薪资管理
    • 【绩效】绩效模板、绩效计划
    • 【绩效】绩效考核、绩效档案
  • IM即时通讯手册

    • IM 演示
    • 功能开启
    • 【好友】好友关系、好友申请
    • 【群聊】群组、群成员、入群申请
    • 【消息】私聊、群聊、频道消息
    • 【频道】频道、频道素材
    • 【内容】表情、敏感词
    • 【通话】语音通话、视频通话、共享屏幕
    • 【WebSocket】实时推送与离线消息
    • 移动端 IM 即时通讯
  • 公众号手册

    • 功能开启
    • 公众号接入
    • 公众号粉丝
    • 公众号标签
    • 公众号消息
    • 模版消息
    • 自动回复
    • 公众号菜单
    • 公众号素材
    • 公众号图文
    • 公众号统计
    • 移动端公众号管理
  • 系统手册

    • 短信配置
    • 邮件配置
    • 站内信配置
    • Webhook(钉钉、飞书、企微)
    • 数据脱敏、字段权限
    • 敏感词
    • 地区 & IP 库
  • 运维手册

    • 开发环境
    • Linux 部署
    • Docker 部署
    • Jenkins 部署
    • 宝塔部署
    • 1Panel 部署
    • HTTPS 证书
    • 服务监控
    • Tomcat WAR 部署
  • 前端手册 Vue 3.x

    • 开发规范
    • 菜单路由
    • Icon 图标
    • 字典数据
    • 系统组件
    • 通用方法
    • 配置读取
    • CRUD 组件
    • 国际化
    • IDE 调试
    • 代码格式化
  • 前端手册 Vben 5.x

    • 开发规范
    • 菜单路由
    • 图标、主题、国际化
    • 字典数据
    • 系统组件
    • 通用方法
    • 配置读取
    • IDE 调试
    • 代码格式化
  • 前端手册 Vue 2.x

    • 开发规范
    • 菜单路由
    • Icon 图标
    • 字典数据
    • 系统组件
    • 通用方法
    • 配置读取
  • 前端手册 Admin Uniapp

    • 开发规范
    • 菜单路由
    • 图标、主题、国际化
    • 字典数据
    • 系统组件
    • 通用方法
    • IDE 调试
    • 代码格式化
    • 运行发布
  • 更新日志

    • 【v2026-07】
    • 【v2026-06】
    • 【v2026-05】
    • 【v2026-04】
    • 【v2026-03】
    • 【v2026-01】
    • 【v2025-12】
    • 【v2025-11】
    • 【v2025-10】
    • 【v2025-09】
    • 【v2025-08】
    • 【v2-6-1】2025-07-19
    • 【v2-6-0】2025-06-07
    • 【v2.5.0】2025-05-13
    • 【v2.4.2】2025-04-12
    • 【v2.4.1】2025-02-09
    • 【v2.4.0】2024-12-31
    • 【v2.3.0】2024-10-07
    • 【v2.2.0】2024-08-02
    • 【v2.1.0】2024-05-05
    • 【v2.0.1】2024-03-01
    • 【v2.0.0】2024-01-26
  • 开发指南
  • HRM人力资源
芋道源码
2026-08-02
目录

【员工】员工管理

员工管理由 yudao-module-hrm 后端模块的 employee 包实现,前端管理页面位于 @/views/hrm/employee,员工自助页面位于 @/views/hrm/portal/employee。

模块以独立的 hrm_employee 员工主档为核心,覆盖员工建档、资料维护、合同与附件、入职、转正、异动、离职和员工自助档案。员工档案通过可空的 user_id 关联后台账号,因此待入职、离职或暂未开通账号的员工也可以正常保留档案。

本文涉及表如下图所示:

员工管理表关系

# 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 '手机号',
  `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 '性别',
  `email` varchar(255) 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 '招聘渠道编号',
  `company_age_start_time` datetime DEFAULT NULL COMMENT '司龄起算时间',
  `company_age` int DEFAULT NULL COMMENT '司龄快照(年)',
  `candidate_id` bigint 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.id,leader_employee_id 自关联 hrm_employee.id。员工职位直接保存在 post_name,与招聘职位、System 岗位是不同的业务对象。

③ entry_status 表示在职生命周期,type 表示正式或非正式聘用形式,status 表示正式、试用、实习、兼职等具体身份:

字段 取值 说明
entry_status 1 在职、2 待入职、3 待离职、4 离职 员工当前所处的入职阶段
type 1 正式、2 非正式 聘用形式大类
status 1 正式、2 试用、3 实习、4 兼职、5 劳务、6 顾问、7 返聘、8 外包 具体员工身份

④ candidate_id 和 channel_id 记录招聘来源。候选人转员工后,可由员工档案继续追溯应聘职位和招聘渠道。

⑤ 生日和司龄根据 birthday、company_age_start_time 的自然日期计算;age、company_age 保存业务快照。

# 1.2 子档案

员工详情以 hrm_employee.id 为聚合根,子档案统一通过 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 卡号、开户地区、银行和支行

这些表保存员工资料本身;工资、社保的业务数据分别在薪资和社保模块维护。

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 排序。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 逻辑关联员工主档,工作单位、岗位、任职区间和离职原因都属于档案资料,不会反向修改员工当前的部门或职位。列表按 sort 展示。

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 员工培训经历';

每条培训经历通过 employee_id 归属员工,课程、机构、培训时长、结果和取得证书都是文字快照,不关联绩效或独立证书记录;同一员工可维护多条并按 sort 排序。

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 员工证书';

employee_id 逻辑关联员工主档;证书业务编号保存在 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 员工联系人';

联系人通过 employee_id 归属于员工,用于保存家属、紧急联系人等档案资料;联系方式不会创建后台账号,也不会参与员工直属汇报关系。

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 '合同类型',
  `start_time` datetime DEFAULT NULL COMMENT '合同开始时间',
  `end_time` datetime DEFAULT NULL COMMENT '合同结束时间',
  `term` int DEFAULT NULL COMMENT '合同期限(月)',
  `status` tinyint DEFAULT NULL COMMENT '合同状态',
  `sign_company` varchar(255) DEFAULT NULL COMMENT '签约公司',
  `sign_time` datetime DEFAULT NULL COMMENT '签订时间',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  `expire_remind` bit DEFAULT NULL COMMENT '是否到期提醒',
  `sort` int DEFAULT NULL COMMENT '显示顺序',
  `file_urls` varchar(2048) DEFAULT NULL COMMENT '合同附件地址数组',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='HRM 员工合同';

合同与员工是 1:N;file_urls 只保存平台文件地址,文件上传仍复用 Infra 文件能力。expire_remind 表示是否参与到期提醒,合同期限和状态不会自动替代员工主档的入转调离状态。

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 区分身份证、学历、简历、体检、合同和离职材料等类型,url 保存上传后的文件地址。详情页按员工整组读取和保存材料列表,不建立独立的文件内容表。

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 使用平台地区编号。删除工资卡只删除收款资料,不删除员工薪资档案和历史工资。

子档案保存

经历、证书、联系人和合同按各自的 sort 字段排序;合同的 file_urls 与材料附件的 url 只保存文件地址,文件上传复用平台文件能力。

# 1.3 管理后台

对应 [HRM 人力资源 -> 员工管理 -> 员工档案] 菜单,列表根组件为 @/views/hrm/employee/index.vue。员工主档由 HrmEmployeeController(/hrm/employee)提供接口,各类子档案由 employee 包下的子 Controller 提供接口。

# 列表

列表调用 GET /hrm/employee/page,支持按姓名、手机号、工号、部门、岗位、入职时间、转正时间、招聘渠道和聘用形式筛选;正式、试用、实习、待入职、待离职、已离职等页签数量由 GET /hrm/employee/status-count 返回。点击员工姓名进入详情,行内【编辑】打开主档表单,【更多】根据员工当前状态展示可执行的人事动作。

员工列表

# 新增员工

点击【新增】,由 @/views/hrm/employee/EmployeeForm.vue 调用 HrmEmployeeController 的 POST /hrm/employee/create。新增时可选择“在职”或“待入职”,表单根据员工字段设置加载对应字段;后端同时校验后台账号、部门、直属上级、招聘渠道和候选人等关联,生命周期初始状态不由前端任意填写。

管理后台 - 新增员工

点击【从后台用户创建】,由 EmployeeCreateFromUserForm.vue 先通过 GET /hrm/employee/bound-user-id-list 排除已绑定账号,再调用 POST /hrm/employee/create-list 批量建档。系统会复制用户昵称、邮箱和性别,HR 仍需补充部门、岗位、聘用形式和入职信息。

# 修改员工

列表或详情页点击【编辑】,继续使用 EmployeeForm.vue,先通过 GET /hrm/employee/get 回显,再调用 PUT /hrm/employee/update 保存主档。修改姓名、联系方式、部门、直属上级和任职资料不会自动创建一条异动记录;需要保留人事动作历史时,应使用下文的转正、调岗、晋升等专用操作。

# 导入与导出

点击【导入】,EmployeeImportForm.vue 通过 GET /hrm/employee/get-import-template 下载模板,并向 POST /hrm/employee/import 上传 Excel。导入支持“跳过重复”“覆盖重复”“重复即失败”三种策略,结果分别返回新增、覆盖、跳过和失败的工号。

点击【导出】,页面按当前查询条件调用 GET /hrm/employee/export-excel,导出员工档案。导出不会受当前分页限制。

# 员工详情与子档案

点击员工姓名进入 @/views/hrm/employee/detail/index.vue。详情页通过 HrmEmployeeController 的 GET /hrm/employee/get 加载主档,使用 EmployeePostInfo.vue、EmployeeBasicInfo.vue 展示任职和基本信息,并提供合同、教育/工作/培训经历、证书、联系人、工资社保、材料附件、异动记录和操作日志等页签。

员工详情

子档案的实际操作如下:

子档案 Vue 组件 Controller 与主要接口 操作
教育经历 EmployeeEducationExperienceList.vue、EmployeeEducationExperienceForm.vue HrmEmployeeEducationExperienceController(/hrm/employee/education-experience):GET /hrm/employee/education-experience/list、POST /hrm/employee/education-experience/create、PUT /hrm/employee/education-experience/update、DELETE /hrm/employee/education-experience/delete 新增、修改、删除
工作经历 EmployeeWorkExperienceList.vue、EmployeeWorkExperienceForm.vue HrmEmployeeWorkExperienceController(/hrm/employee/work-experience):GET /hrm/employee/work-experience/list、POST /hrm/employee/work-experience/create、PUT /hrm/employee/work-experience/update、DELETE /hrm/employee/work-experience/delete 新增、修改、删除
培训经历 EmployeeTrainingExperienceList.vue、EmployeeTrainingExperienceForm.vue HrmEmployeeTrainingExperienceController(/hrm/employee/training-experience):GET /hrm/employee/training-experience/list、POST /hrm/employee/training-experience/create、PUT /hrm/employee/training-experience/update、DELETE /hrm/employee/training-experience/delete 新增、修改、删除
证书 EmployeeCertificateList.vue、EmployeeCertificateForm.vue HrmEmployeeCertificateController(/hrm/employee/certificate):GET /hrm/employee/certificate/list、POST /hrm/employee/certificate/create、PUT /hrm/employee/certificate/update、DELETE /hrm/employee/certificate/delete 新增、修改、删除
联系人 EmployeeContactList.vue、EmployeeContactForm.vue HrmEmployeeContactController(/hrm/employee/contact):GET /hrm/employee/contact/list、POST /hrm/employee/contact/create、PUT /hrm/employee/contact/update、DELETE /hrm/employee/contact/delete 新增、修改、删除
合同 EmployeeContractList.vue、EmployeeContractForm.vue HrmEmployeeContractController(/hrm/employee/contract):GET /hrm/employee/contract/list、POST /hrm/employee/contract/create、PUT /hrm/employee/contract/update、DELETE /hrm/employee/contract/delete 新增、修改、删除、上传附件
材料附件 EmployeeMaterialFiles.vue HrmEmployeeFileController(/hrm/employee/file):GET /hrm/employee/file/list、PUT /hrm/employee/file/save 按员工整组保存材料
工资卡 EmployeeSalaryCardInfo.vue、EmployeeSalaryCardForm.vue HrmEmployeeSalaryCardController(/hrm/employee/salary-card):GET /hrm/employee/salary-card/get、PUT /hrm/employee/salary-card/save、DELETE /hrm/employee/salary-card/delete 保存或删除当前工资卡

异动记录由 EmployeeChangeRecordList.vue 调用 HrmEmployeeChangeRecordController(/hrm/employee/change-record)的 GET /hrm/employee/change-record/list 只读展示,不能从详情页直接改写历史动作。

# 批量操作与删除

勾选员工后,【批量操作】支持设置参保方案、调用 POST /hrm/employee/send-profile-fill-message 发送档案填写通知,以及调用 DELETE /hrm/employee/delete-list 批量删除。设置参保方案只允许正式或试用且未离职的员工。

单条删除调用 DELETE /hrm/employee/delete。当前页面不按在职状态隐藏删除入口;删除采用逻辑删除,只删除员工主档,不删除其后台账号,也不会级联清理已产生的招聘、考勤、薪资、社保和绩效历史。因此执行前应先确认历史数据仍可正确展示,批量删除弹窗也会明确提示“后台账号及历史业务记录将保留”。

# 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 员工异动记录';

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 '离职原因',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  `old_employee_status` tinyint DEFAULT NULL COMMENT '离职前员工状态',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='HRM 员工离职信息';

# 2.2 管理后台

入转调离入口同时存在于员工列表的【更多】菜单和员工详情页,相关表单都位于 @/views/hrm/employee。页面根据 entry_status 和 status 只展示当前员工可执行的动作。

# 确认入职与再入职

待入职员工点击【确认入职】,由 EmployeeForm.vue 补全实际入职资料并调用 PUT /hrm/employee/confirm-entry,员工进入在职状态;如果员工来自招聘候选人,候选人同步更新为已入职。

已离职员工点击【办理再入职】,同一表单切换到再入职模式并调用 POST /hrm/employee/rehire。系统继续沿用原员工编号,写入 type=9 的异动记录,并更新新的部门、岗位、直属上级和入职时间。

# 转正

试用员工可以使用 EmployeeRegularForm.vue 办理转正,调用 POST /hrm/employee/regular。立即生效时同步更新员工状态和转正时间;预约生效时先写入待执行的 type=4 异动记录,之后由 HrmEmployeeChangeJob 到期执行。

# 调岗、晋升与降级

【调整部门/岗位】使用 EmployeeTransferForm.vue 调用 POST /hrm/employee/transfer,可调整部门、职位、职级、工作地点和直属上级;【晋升】、【降级】分别使用 EmployeePromoteForm.vue、EmployeeDemoteForm.vue 调用 POST /hrm/employee/promote、POST /hrm/employee/demote。三类动作均支持立即或预约生效,对应异动类型为 5、6、7。

# 转为全职

实习或兼职员工可使用 EmployeeFullTimeForm.vue 调用 POST /hrm/employee/convert-to-full-time,把聘用形式转为正式并保存转全职后的岗位、职级和薪资相关任职信息;异动类型为 8。其它员工状态不会显示该入口。

# 离职、取消离职与修改离职信息

在职员工使用 EmployeeQuitForm.vue 调用 POST /hrm/employee/quit。立即离职会直接更新员工主档;未来离职先把员工置为待离职,到 plan_quit_time 后由 HrmEmployeeChangeJob 更新为离职。

待离职员工可填写原因并调用 PUT /hrm/employee/cancel-quit,恢复办理离职前的员工状态;已离职员工可以再次打开离职表单修改离职类型、原因和结算信息,但不会因此恢复在职。所有离职信息通过 HrmEmployeeQuitInfoController(/hrm/employee/quit-info)的 GET /hrm/employee/quit-info/get 在详情页只读回显。

# 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=2 配置新建在职员工字段,type=3 配置新建待入职员工字段,type=4 配置档案字段的可见与可编辑范围。姓名、手机号、工号、入职状态等必要字段始终保留。

# 3.2 管理后台

# 配置新建字段与档案字段

对应 [HRM 人力资源 -> 员工管理 -> 员工设置] 菜单,页面位于 @/views/hrm/employee/config/index.vue。EmployeeCreateFieldConfig.vue 分别调用 GET /hrm/employee/config/create-field/list、PUT /hrm/employee/config/create-field/save 配置在职和待入职的新建表单;EmployeeArchiveFieldConfig.vue 调用 GET /hrm/employee/config/archive-field/list、PUT /hrm/employee/config/archive-field/save 配置档案字段的显示和编辑权限。

保存的是整组字段顺序与开关,不提供逐条删除配置。系统必要字段始终保留,不能通过页面隐藏或关闭。

员工设置

# 4. 我的档案

员工端“我的档案”由 HrmPortalEmployeeController(/hrm/portal/employee)提供本人主档接口,各类经历由同级 Portal Controller 提供只读接口。

# 4.1 员工端

# 查看档案

对应 [HRM 人力资源 -> HRM 员工端 -> 我的档案] 菜单,页面位于 @/views/hrm/portal/employee/index.vue。页面通过 GET /hrm/portal/employee/get 根据当前登录账号绑定的 hrm_employee.user_id 定位本人,展示基本信息、岗位信息和教育、工作、培训、证书、联系人等资料;这些子档案在员工端只读。

我的档案

# 修改本人资料

点击【编辑】打开员工端 EmployeeForm.vue。表单先调用 HrmPortalEmployeeFieldConfigController(/hrm/portal/employee/field-config)的 GET /hrm/portal/employee/field-config/list 获取可编辑范围,再通过 PUT /hrm/portal/employee/update 保存管理员开放的主档字段。员工不能借此修改部门、岗位、直属上级、员工状态或其他人的档案。

【组织】工作台、组织架构
【招聘】招聘管理

← 【组织】工作台、组织架构 【招聘】招聘管理→

Theme by Vdoing | Copyright © 2019-2026 芋道源码 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×