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 管理后台
      • 2. 薪资档案与调薪
        • 2.1 主表表结构
        • 2.2 记录表结构
        • 2.3 状态流转
        • 2.4 管理后台
      • 3. 与其它模块的衔接
    • 【薪资】月度工资、工资条
    • 【绩效】绩效模板、绩效计划
    • 【绩效】绩效考核、绩效档案
  • 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 后端模块的 salary.config、salary.employeeinfo 包实现,前端实现在 @/views/hrm/salary/config、@/views/hrm/salary/employee-info 目录。

薪资是 HRM 中表最多、链路最长的模块,共 13 张表,按「计薪设置 → 薪资档案 → 月度工资 → 工资条」四段组织。本文解决的是前两段,也就是「按什么规则算、每个人算多少」:

  • 计薪设置:计薪周期、计税规则、薪资组、工资项和调薪模板,配置一次后长期沿用。
  • 薪资档案与调薪:员工当前薪资 + 定薪调薪记录,支持立即或未来生效。

配置就绪后的月度核算与工资条发放,详见 《【薪资】月度工资、工资条》。

本文涉及表如下图所示:

薪资模块表关系

# 1. 计薪设置

计薪周期,由 HrmSalaryConfigController 提供接口(/hrm/salary/config);计税规则、薪资组、工资项和调薪模板,分别由 HrmSalaryTaxRuleController、HrmSalaryGroupController、HrmSalaryOptionController、HrmSalaryChangeTemplateController 提供接口。

首次初始化计薪周期时,系统会同时创建第一张「未核算」的月度工资表,因此计薪设置是薪资模块的启动开关。

# 1.1 表结构

省略 creator/create_time/updater/update_time/deleted/tenant_id 等通用字段,下同;需要说明唯一约束时保留 tenant_id,JSON 字段由 TypeHandler 完成对象转换

CREATE TABLE `hrm_salary_config` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',

  `cycle_start_day` int DEFAULT NULL COMMENT '计薪周期开始日',
  `cycle_end_day` int DEFAULT NULL COMMENT '计薪周期结束日',
  `start_year` int DEFAULT NULL COMMENT '起始年份',
  `start_month` int DEFAULT NULL COMMENT '起始月份',

  `social_security_month_type` tinyint DEFAULT NULL COMMENT '社保对应月份',

  `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_hrm_salary_config_tenant_id` (`tenant_id`)
) ENGINE=InnoDB COMMENT='HRM 薪资配置';

① tenant_id 唯一,因此每个租户只能初始化一套计薪周期。

② cycle_start_day 为 1 时,cycle_end_day 保存为 31;否则结束日为「开始日减 1」,即自然月跨月计薪。初始化后开始日、结束日和起始年月只读,只允许调整社保对应月份。

③ 枚举 social_security_month_type 社保对应月份(HrmSalarySocialSecurityMonthTypeEnum):0 上月、1 当月、2 次月。核算时按该配置读取对应月份的社保记录。


计薪设置还包含以下 5 张配置表:

// TODO @AI:这个每个子表,要拆分独立的小节么?这样貌似更好的截图?理解起来也更舒服?

表 说明 关键约束
hrm_salary_tax_rule 计税规则 被薪资组引用时不可删除
hrm_salary_group 薪资组 员工未命中薪资组时不能参与核算
hrm_salary_option_template 标准工资项目录 平台统一维护,code 全局唯一
hrm_salary_option 租户工资项 tenant_id + code 唯一
hrm_salary_change_template 调薪模板 默认模板不可删除
hrm_salary_tax_rule 表结构
CREATE TABLE `hrm_salary_tax_rule` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',

  `name` varchar(64) NOT NULL COMMENT '计税规则名称',
  `type` tinyint DEFAULT NULL COMMENT '计税类型',
  `tax_enabled` bit DEFAULT NULL COMMENT '是否计税',
  `threshold` decimal(12,2) DEFAULT NULL COMMENT '起征阈值',
  `decimal_scale` int DEFAULT NULL COMMENT '保留小数位数',
  `cycle_type` tinyint DEFAULT NULL COMMENT '计税周期类型',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='HRM 计税规则';

① 枚举 type 计税类型(HrmSalaryTaxTypeEnum,字典 hrm_salary_tax_type):1 工资薪金所得税、2 劳务报酬所得税、3 不计税。税率档位由 HrmSalaryTaxRateEnum 内置(工资薪金 7 级、劳务报酬 3 级),不需要在页面维护。

② tax_enabled = 0 时不计算个税;启用后由 threshold 起征阈值、decimal_scale 保留小数位数和 cycle_type 计税周期共同决定计税口径。

③ 枚举 cycle_type 计税周期(HrmSalaryTaxCycleTypeEnum):1 上年 12 月至本年 11 月、2 本年 1 月至 12 月。

④ 薪资组通过 tax_rule_id 选用规则。

hrm_salary_group 表结构
CREATE TABLE `hrm_salary_group` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',

  `name` varchar(64) NOT NULL COMMENT '薪资组名称',
  `salary_standard` decimal(12,2) DEFAULT NULL COMMENT '月计薪标准天数',
  `change_rule` varchar(255) DEFAULT NULL COMMENT '转正、调薪月计算规则',

  `dept_ids` varchar(20000) DEFAULT NULL COMMENT '适用部门编号 JSON',
  `employee_ids` varchar(20000) DEFAULT NULL COMMENT '适用员工编号 JSON',
  `tax_rule_id` bigint DEFAULT NULL COMMENT '计税规则编号',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='HRM 薪资组';

① dept_ids 关联 system_dept 表,employee_ids 关联 hrm_employee 表,tax_rule_id 关联 hrm_salary_tax_rule 表。

② 员工先按 employee_ids 精确匹配,再按所在部门及父部门匹配。未命中任何薪资组的员工不能参与月度核算,核算前的准备检查会把这些员工列出来。

③ salary_standard 月计薪标准天数用于按天折算,当前由后端固定写入 21.75;change_rule 同样由后端写入固定说明,不作为用户可配置的分支规则。转正月、调薪月会按周期内每天生效的薪资档案自动混合计算。

hrm_salary_option_template 表结构
CREATE TABLE `hrm_salary_option_template` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',

  `code` int NOT NULL COMMENT '标准工资项编码',
  `parent_code` int NOT NULL DEFAULT 0 COMMENT '父工资项编码',
  `name` varchar(64) NOT NULL COMMENT '工资项名称',

  `type` tinyint NOT NULL DEFAULT 1 COMMENT '工资项类型',
  `system_flag` bit NOT NULL DEFAULT 0 COMMENT '是否系统默认项',
  `tax_enabled` bit NOT NULL DEFAULT 1 COMMENT '是否计税',
  `visible` bit NOT NULL DEFAULT 1 COMMENT '是否显示',
  `calculate_enabled` bit NOT NULL DEFAULT 1 COMMENT '是否参与计算',
  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_hrm_salary_option_template_code` (`code`)
) ENGINE=InnoDB COMMENT='HRM 标准工资项目录';

标准目录不带 tenant_id,由平台统一维护。code 全局唯一,parent_code 指向同表 code,用于组织工资项树;标准编码见 HrmSalaryOptionCodeEnum,其中应发工资、应税工资、个人所得税、实发工资和各项累计值属于系统计算项(COMPUTED_CODES),不允许手工填写。

租户通过「同步标准项」把目录复制或补齐到自己的 hrm_salary_option 中。

hrm_salary_option 表结构
CREATE TABLE `hrm_salary_option` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',

  `code` int NOT NULL COMMENT '工资项编码',
  `parent_code` int NOT NULL DEFAULT 0 COMMENT '父工资项编码',
  `name` varchar(64) NOT NULL COMMENT '工资项名称',
  `template_id` bigint DEFAULT NULL COMMENT '标准工资项目录编号',

  `type` tinyint NOT NULL DEFAULT 1 COMMENT '工资项类型',
  `system_flag` bit NOT NULL DEFAULT 0 COMMENT '是否系统默认项',
  `tax_enabled` bit NOT NULL DEFAULT 1 COMMENT '是否计税',
  `visible` bit NOT NULL DEFAULT 1 COMMENT '是否显示',
  `calculate_enabled` bit NOT NULL DEFAULT 1 COMMENT '是否参与计算',
  `enabled` bit NOT NULL DEFAULT 1 COMMENT '是否启用',
  `remark` varchar(255) DEFAULT NULL COMMENT '备注',

  `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_hrm_salary_option_tenant_code` (`tenant_id`, `code`)
) ENGINE=InnoDB COMMENT='HRM 租户工资项';

① template_id 关联 hrm_salary_option_template 表的 id 字段;tenant_id + code 唯一,parent_code 指向同租户的父项编码。

② 枚举 type 工资项类型(HrmSalaryOptionTypeEnum,字典 hrm_salary_option_type):0 减项、1 加项、2 计算项。

③ 三个开关的职责不同:enabled 控制企业是否使用该项,visible 控制工资表和工资条是否展示,calculate_enabled 控制是否参与汇总计算。

hrm_salary_change_template 表结构
CREATE TABLE `hrm_salary_change_template` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',

  `name` varchar(64) NOT NULL COMMENT '调薪模板名称',
  `default_status` bit NOT NULL DEFAULT 0 COMMENT '是否默认模板',
  `options` varchar(4000) DEFAULT NULL COMMENT '可调整工资项 JSON',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='HRM 调薪模板';

options 保存工资项的 code 与名称快照,用于限定定薪、调薪表单可编辑的项目。同一租户只有一条默认模板:默认模板可以修改,也可以把其它模板设为默认,但当前默认模板不能删除。

# 1.2 管理后台

对应 [HRM 人力资源 -> 薪资管理 -> 计薪设置] 菜单,对应 yudao-ui-admin-vue3 项目的 @/views/hrm/salary/config 目录。

# 初始化计薪周期

首次进入 config/index.vue 时填写计薪周期开始日、工资起始年月和社保对应月份。保存后,系统同时创建首张月度工资表。

管理后台 - 计薪设置

# 修改计薪周期

初始化后,开始日、结束日和起始年月只读,只允许修改社保对应月份。

# 计税规则

tax-rule/index.vue 展示规则列表及被薪资组使用的数量,新增、修改由 SalaryTaxRuleForm.vue 完成。已被薪资组引用的规则不能删除。

管理后台 - 计税规则

# 薪资组

group/index.vue 展示薪资组列表,新增、修改打开 SalaryGroupForm.vue,配置薪资组名称、计税规则和适用部门 / 员工;表单只读展示固定的 21.75 天 / 月计薪标准,以及转正、调薪生效日前后工资混合计算的说明。保存适用范围时,后端会处理不同薪资组之间重复的部门和员工。

管理后台 - 薪资组

# 工资项

option/index.vue 按「企业工资项」和「系统工资项」两个页签展示工资项树。

  • 企业工资项:可【同步标准项】把平台标准目录补齐到本租户,也可通过 SalaryOptionForm.vue 新增自定义项。标准项的「删除」等同于停用,只有自定义项才会逻辑删除。
  • 系统工资项:只能控制预置项是否展示,不能新增或删除。

管理后台 - 企业工资项

# 调薪模板

change-template/index.vue 展示模板列表,新增、修改打开 SalaryChangeTemplateForm.vue 选择可调整工资项。非默认模板才可删除。

管理后台 - 调薪模板

# 2. 薪资档案与调薪

员工当前薪资,由 HrmSalaryEmployeeInfoController 提供接口(/hrm/salary/employee-info);定薪、调薪和未来变更记录,由 HrmSalaryChangeRecordController 提供查询、取消和删除接口(/hrm/salary/change-record)。

两张表的 employee_id 都关联 hrm_employee 表,不直接关联后台账号。

# 2.1 主表表结构

CREATE TABLE `hrm_salary_employee_info` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',

  `employee_id` bigint NOT NULL COMMENT '员工编号',

  `change_type` tinyint DEFAULT NULL COMMENT '变更类型',
  `change_reason` tinyint DEFAULT NULL COMMENT '变更原因',
  `effect_time` datetime DEFAULT NULL COMMENT '生效时间',

  `regular_salary` decimal(12,2) DEFAULT NULL COMMENT '正式工资',
  `probation_salary` decimal(12,2) DEFAULT NULL COMMENT '试用期工资',
  `salary_options` varchar(20000) DEFAULT NULL COMMENT '正式工资项快照 JSON',
  `probation_salary_options` varchar(20000) DEFAULT NULL COMMENT '试用期工资项快照 JSON',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_hrm_salary_employee_info_employee_id` (`employee_id`)
) ENGINE=InnoDB COMMENT='HRM 员工薪资档案';

① employee_id 唯一,每名员工只有一份当前有效薪资档案;历史和未来薪资保存在 hrm_salary_change_record 中。

② 枚举 change_type 变更类型(HrmSalaryEmployeeInfoChangeTypeEnum,字典 hrm_salary_change_type):0 未定薪、1 已定薪、2 已调薪。列表据此把操作按钮显示为【定薪】或【调薪】。

③ 枚举 change_reason 变更原因(HrmSalaryChangeReasonEnum,字典 hrm_salary_change_reason):0 入职定薪、1 入职核定、2 转正、3 晋升、4 调动、5 年中调薪、6 年度调薪、7 特别调薪、8 其他。

④ salary_options、probation_salary_options 是工资项 JSON 快照。后续修改工资项配置不会回写已生效的薪资记录。


该表包含一张记录表:

  • hrm_salary_change_record(定薪调薪记录):保存每一次定薪、调薪的前后金额与工资项快照,同一员工同时只允许一条待生效记录。

# 2.2 记录表结构

CREATE TABLE `hrm_salary_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 '调整原因',
  `status` tinyint DEFAULT NULL COMMENT '状态',
  `effect_time` datetime DEFAULT NULL COMMENT '生效时间',

  `before_total` decimal(12,2) DEFAULT NULL COMMENT '调整前正式薪资',
  `after_total` decimal(12,2) DEFAULT NULL COMMENT '调整后正式薪资',
  `probation_before_total` decimal(12,2) DEFAULT NULL COMMENT '调整前试用期薪资',
  `probation_after_total` decimal(12,2) DEFAULT NULL COMMENT '调整后试用期薪资',

  `salary_options` varchar(4000) DEFAULT NULL COMMENT '正式工资项后态快照 JSON',
  `probation_salary_options` varchar(4000) DEFAULT NULL COMMENT '试用期工资项后态快照 JSON',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='HRM 定薪调薪记录';

① 枚举 type 记录类型(HrmSalaryChangeRecordTypeEnum):1 定薪、2 调薪。

② 枚举 status 记录状态(HrmSalaryChangeRecordStatusEnum,字典 hrm_salary_change_record_status:0 = 待生效,1 = 已生效,2 = 已取消)。详见 §2.3 状态流转。

③ before_total / after_total 便于列表展示变动幅度,两个工资项字段保存变更后的明细。

# 2.3 状态流转

定薪、调薪记录的生命周期由 HrmSalaryEmployeeInfoServiceImpl 与 HrmSalaryChangeRecordServiceImpl 控制。状态枚举 HrmSalaryChangeRecordStatusEnum:

状态值 枚举 说明 可执行操作
0 PENDING 待生效 取消、删除
1 EFFECTIVE 已生效 —
2 CANCELLED 已取消 删除

状态流转说明

立即生效:创建 ──→ 已生效(1)(同步更新 hrm_salary_employee_info)

未来生效:创建 ──→ 待生效(0) ──HrmSalaryChangeJob──→ 已生效(1)
                       │
                       └──取消──→ 已取消(2)
  • 定薪 / 调薪(updateSalaryEmployeeInfo):生效时间为今天或过去时,立即更新当前薪资档案;未来日期只创建待生效记录。最早允许的生效日期由后端按当前月度工资表计算。
  • 到期生效(HrmSalaryChangeJob):把到期的待生效记录写入 hrm_salary_employee_info,并置为已生效。
  • 取消(cancelSalaryChangeRecord):仅待生效可取消。
  • 删除(deleteSalaryChangeRecord):仅待生效或已取消可删除,已生效记录不可删除,避免破坏调薪历史。

同一员工同时只允许存在一条待生效记录。

# 2.4 管理后台

对应 [HRM 人力资源 -> 薪资管理 -> 薪资档案] 菜单,对应 yudao-ui-admin-vue3 项目的 @/views/hrm/salary/employee-info 目录。

# 列表

支持按姓名、工号、部门、岗位和在职状态筛选,顶部按定薪状态展示页签及数量。未建立档案的员工显示【定薪】,已有档案的员工显示【调薪】。

管理后台 - 薪资档案

# 定薪与调薪

通过弹窗 SalaryEmployeeInfoForm.vue 完成。表单按调薪模板限定可填写的工资项,分别维护正式、试用期工资项,并填写生效时间、原因和备注。

管理后台 - 薪资档案调薪

# 批量调薪

选择多名员工后打开 SalaryEmployeeInfoBatchForm.vue,统一设置调薪项、调整方式(按比例 / 按金额,HrmSalaryBatchAdjustTypeEnum)、生效时间和原因。批量处理中,立即生效的记录同步更新当前档案,未来记录保持待生效,接口返回每名员工的成功或失败原因。

管理后台 - 批量调薪

# Excel 导入

SalaryEmployeeInfoImportForm.vue 支持「固定工资导入」和「调薪导入」两种模板,上传后展示成功数和逐行失败原因。导入时会排除系统计算类的父级工资项目录(EMPLOYEE_INFO_IMPORT_EXCLUDED_PARENT_CODES)。

管理后台 - 薪资档案导入

# 薪资详情与变更记录

点击员工姓名进入 employee-info/detail/index.vue。SalaryEmployeeInfoDetails.vue 展示当前正式、试用期工资和工资项;SalaryChangeRecordList.vue 展示全部定薪、调薪记录,并提供取消、删除操作。

管理后台 - 薪资档案详情

# 3. 与其它模块的衔接

  • 员工:定薪、调薪都以 hrm_employee.id 为业务关联,员工入职后即可定薪,不要求绑定后台账号。
  • 月度工资:核算时读取计薪周期内生效的薪资档案,因此调薪的生效日期决定了它从哪个月开始计入工资,详见 《【薪资】月度工资、工资条》。
【社保】社保管理
【薪资】月度工资、工资条

← 【社保】社保管理 【薪资】月度工资、工资条→

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