feat(hrm): 新增员工紧急联系人管理功能

完成员工紧急联系人模块的全流程开发,包括:
1. 数据库表结构、Mapper、Service、Controller后端代码
2. 前端页面、API接口、导入导出功能
3. 配套SQL脚本、导入模板与使用文档
4. 支持批量导入导出、数据校验与用户关联匹配
This commit is contained in:
2026-05-26 19:19:12 +08:00
parent 81e529a2dd
commit 12076c5d0b
19 changed files with 1509 additions and 0 deletions

View File

@@ -0,0 +1,41 @@
-- =====================================================================
-- 员工紧急联系人信息表
-- 通过 user_id 关联 sys_user自动带出姓名/性别/身份证号/联系电话
-- =====================================================================
CREATE TABLE IF NOT EXISTS `hrm_emergency_contact` (
`contact_id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '紧急联系人ID',
-- 关联信息(从 sys_user 自动带出 / 关联查询)
`user_id` BIGINT NOT NULL COMMENT '用户ID关联 sys_user',
`dept_id` BIGINT DEFAULT NULL COMMENT '部门ID关联 sys_dept从 sys_user 自动带出)',
-- 员工基本信息(新增/导入时从 sys_user 自动填充,允许手动修改)
`real_name` VARCHAR(30) DEFAULT NULL COMMENT '姓名(从 sys_user.nick_name 自动带出)',
`phone` VARCHAR(20) DEFAULT NULL COMMENT '联系电话(从 sys_user.phonenumber 自动带出)',
`id_card` VARCHAR(200) DEFAULT NULL COMMENT '身份证号(从 sys_user.id_card 自动带出)',
`gender` CHAR(1) DEFAULT '0' COMMENT '性别0男 1女 2未知从 sys_user.sex 自动带出)',
`age` INT DEFAULT NULL COMMENT '年龄',
-- 公司信息sys_user 无此字段,手动录入)
`company_name` VARCHAR(100) DEFAULT NULL COMMENT '公司名称',
`hire_date` DATE DEFAULT NULL COMMENT '入职时间',
-- 紧急联系人信息
`emergency_contact` VARCHAR(30) DEFAULT NULL COMMENT '紧急联系人姓名',
`relationship` VARCHAR(30) DEFAULT NULL COMMENT '与本人关系',
`emergency_phone1` VARCHAR(20) DEFAULT NULL COMMENT '紧急联系人电话1',
`emergency_phone2` VARCHAR(20) DEFAULT NULL COMMENT '紧急联系人电话2',
`emergency_address` VARCHAR(200) DEFAULT NULL COMMENT '紧急联系人地址',
-- 基础字段
`remark` VARCHAR(500) DEFAULT NULL COMMENT '备注',
`del_flag` CHAR(1) DEFAULT '0' COMMENT '删除标志0代表存在 2代表删除',
`create_by` VARCHAR(64) DEFAULT '' COMMENT '创建者',
`create_time` DATETIME DEFAULT NULL COMMENT '创建时间',
`update_by` VARCHAR(64) DEFAULT '' COMMENT '更新者',
`update_time` DATETIME DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`contact_id`) USING BTREE,
KEY `idx_user_id` (`user_id`) USING BTREE,
KEY `idx_dept_id` (`dept_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC COMMENT='员工紧急联系人信息表';

View File

@@ -0,0 +1,30 @@
-- =====================================================================
-- 清理紧急联系人菜单脏数据(执行前请确认)
-- =====================================================================
-- 方式1按 menu_id 范围删除(如果之前用的是 2000-2100 或 2070-2076
-- DELETE FROM sys_menu WHERE menu_id BETWEEN 2000 AND 2100;
-- DELETE FROM sys_menu WHERE menu_id BETWEEN 2070 AND 2076;
-- 方式2按菜单名称删除推荐更精确
-- DELETE FROM sys_menu WHERE menu_name = '紧急联系人';
-- 方式3按权限标识删除删除所有相关按钮权限
-- DELETE FROM sys_menu WHERE perms LIKE 'hrm:emergencyContact:%';
-- 方式4组合删除先查后删安全
-- 先查询确认
SELECT menu_id, menu_name, parent_id, perms, create_time
FROM sys_menu
WHERE menu_name = '紧急联系人'
OR perms LIKE 'hrm:emergencyContact:%';
-- 确认无误后再执行删除
-- DELETE FROM sys_menu WHERE menu_name = '紧急联系人' OR perms LIKE 'hrm:emergencyContact:%';
-- =====================================================================
-- 执行步骤:
-- 1. 先执行 SELECT 查询,确认要删除的数据
-- 2. 确认无误后,再执行 DELETE 语句
-- 3. 删除完成后,在若依系统菜单管理界面手动添加菜单
-- =====================================================================

View File

@@ -0,0 +1,115 @@
# 紧急联系人菜单手动添加指南
## 第一步清理脏数据在Navicat/DBeaver中执行
```sql
-- 先查询确认
SELECT menu_id, menu_name, parent_id, perms, create_time
FROM sys_menu
WHERE menu_name = '紧急联系人'
OR perms LIKE 'hrm:emergencyContact:%';
-- 确认无误后再执行删除
DELETE FROM sys_menu
WHERE menu_name = '紧急联系人'
OR perms LIKE 'hrm:emergencyContact:%';
```
---
## 第二步:在若依系统菜单管理中手动添加
### 1. 添加主菜单
进入 **系统管理 → 菜单管理**,点击【新增】按钮,填写以下信息:
| 字段 | 值 |
|------|-----|
| 上级菜单 | 人事中心(或你想要的父菜单) |
| 菜单类型 | 菜单 |
| 菜单图标 | user |
| 菜单名称 | 紧急联系人 |
| 显示排序 | 99 |
| 是否外链 | 否 |
| 路由地址 | emergencyContact |
| 组件路径 | hrm/emergencyContact/index |
| 权限字符 | hrm:emergencyContact:list |
| 路由参数 | (留空) |
| 是否缓存 | 缓存 |
| 显示状态 | 显示 |
| 菜单状态 | 正常 |
点击【确定】保存。
---
### 2. 添加按钮权限
主菜单添加成功后,在菜单列表中找到【紧急联系人】,点击右侧的【新增】按钮(添加子菜单/按钮)。
需要添加以下6个按钮权限
#### ① 查询按钮
- 菜单类型:按钮
- 菜单名称:查询
- 显示排序1
- 权限字符hrm:emergencyContact:query
- 显示状态:显示
- 菜单状态:正常
#### ② 新增按钮
- 菜单类型:按钮
- 菜单名称:新增
- 显示排序2
- 权限字符hrm:emergencyContact:add
- 显示状态:显示
- 菜单状态:正常
#### ③ 修改按钮
- 菜单类型:按钮
- 菜单名称:修改
- 显示排序3
- 权限字符hrm:emergencyContact:edit
- 显示状态:显示
- 菜单状态:正常
#### ④ 删除按钮
- 菜单类型:按钮
- 菜单名称:删除
- 显示排序4
- 权限字符hrm:emergencyContact:remove
- 显示状态:显示
- 菜单状态:正常
#### ⑤ 导出按钮
- 菜单类型:按钮
- 菜单名称:导出
- 显示排序5
- 权限字符hrm:emergencyContact:export
- 显示状态:显示
- 菜单状态:正常
#### ⑥ 导入按钮
- 菜单类型:按钮
- 菜单名称:导入
- 显示排序6
- 权限字符hrm:emergencyContact:import
- 显示状态:显示
- 菜单状态:正常
---
## 第三步:刷新系统
1. 添加完成后,**退出登录**或 **刷新页面**
2. 重新登录后,在对应父菜单下应该能看到【紧急联系人】菜单
3. 进入菜单测试功能是否正常
---
## 注意事项
1. **上级菜单选择**:如果想放在"人事中心"下,就选择"人事中心";如果想放在顶级,就选择"主类目"
2. **权限字符**:必须严格按照 `hrm:emergencyContact:list``hrm:emergencyContact:query` 等格式填写
3. **路由地址**:必须与前端路由配置一致,这里是 `emergencyContact`
4. **组件路径**:必须与前端组件路径一致,这里是 `hrm/emergencyContact/index`

View File

@@ -0,0 +1,42 @@
-- =====================================================================
-- 菜单 SQL员工紧急联系人管理若依框架兼容版
-- 必须分步执行,不能批量执行!
-- =====================================================================
-- ============================================================
-- 第一步:清理可能存在的脏数据(如果之前执行失败过)
-- ============================================================
-- DELETE FROM sys_menu WHERE menu_id BETWEEN 2070 AND 2076;
-- ============================================================
-- 第二步:插入主菜单(先执行这行,成功后再执行按钮)
-- parent_id = 0 表示顶级菜单可根据需要改为实际的HRM菜单ID
-- ============================================================
INSERT INTO sys_menu (
menu_id, menu_name, parent_id, order_num, path, component, query_param,
is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time
) VALUES (
2070, '紧急联系人', 0, 99, 'emergencyContact', 'hrm/emergencyContact/index', '',
1, 0, 'C', '0', '0', 'hrm:emergencyContact:list', 'user', 'admin', NOW()
);
-- ============================================================
-- 第三步:主菜单插入成功后,再执行按钮权限
-- ============================================================
INSERT INTO sys_menu (
menu_id, menu_name, parent_id, order_num, path, component,
is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time
) VALUES
(2071, '查询', 2070, 1, '#', NULL, 1, 0, 'F', '0', '0', 'hrm:emergencyContact:query', '#', 'admin', NOW()),
(2072, '新增', 2070, 2, '#', NULL, 1, 0, 'F', '0', '0', 'hrm:emergencyContact:add', '#', 'admin', NOW()),
(2073, '修改', 2070, 3, '#', NULL, 1, 0, 'F', '0', '0', 'hrm:emergencyContact:edit', '#', 'admin', NOW()),
(2074, '删除', 2070, 4, '#', NULL, 1, 0, 'F', '0', '0', 'hrm:emergencyContact:remove', '#', 'admin', NOW()),
(2075, '导出', 2070, 5, '#', NULL, 1, 0, 'F', '0', '0', 'hrm:emergencyContact:export', '#', 'admin', NOW()),
(2076, '导入', 2070, 6, '#', NULL, 1, 0, 'F', '0', '0', 'hrm:emergencyContact:import', '#', 'admin', NOW());
-- ============================================================
-- 使用说明:
-- 1. 如果之前执行失败过,先执行第一步的 DELETE 清理脏数据
-- 2. 先执行第二步(主菜单),确认成功后再执行第三步(按钮权限)
-- 3. 如需将菜单放在HRM模块下将 parent_id 从 0 改为 HRM菜单的实际ID
-- ============================================================

View File

@@ -0,0 +1,24 @@
-- =====================================================================
-- 示例数据:信息部员工紧急联系人
-- 使用前请将 user_id 替换为实际 sys_user 表中的 ID
-- =====================================================================
-- 示例数据1张伟
INSERT INTO `hrm_emergency_contact` (`user_id`, `dept_id`, `real_name`, `phone`, `id_card`, `gender`, `age`, `company_name`, `hire_date`, `emergency_contact`, `relationship`, `emergency_phone1`, `emergency_phone2`, `emergency_address`, `remark`, `del_flag`, `create_by`, `create_time`)
VALUES (1, 100, '张伟', '13800138001', '110101199001011234', '0', 36, '上海泛微网络科技股份有限公司', '2022-03-15', '李芳', '配偶', '13900139001', '13800138002', '上海市浦东新区张江高科技园区200号', '信息部经理', '0', 'admin', NOW());
-- 示例数据2李娜
INSERT INTO `hrm_emergency_contact` (`user_id`, `dept_id`, `real_name`, `phone`, `id_card`, `gender`, `age`, `company_name`, `hire_date`, `emergency_contact`, `relationship`, `emergency_phone1`, `emergency_phone2`, `emergency_address`, `remark`, `del_flag`, `create_by`, `create_time`)
VALUES (2, 100, '李娜', '13800138003', '110101199205022345', '1', 34, '上海泛微网络科技股份有限公司', '2021-07-01', '王强', '配偶', '13900139003', '', '上海市徐汇区漕河泾开发区100号', '需求分析师', '0', 'admin', NOW());
-- 示例数据3王强
INSERT INTO `hrm_emergency_contact` (`user_id`, `dept_id`, `real_name`, `phone`, `id_card`, `gender`, `age`, `company_name`, `hire_date`, `emergency_contact`, `relationship`, `emergency_phone1`, `emergency_phone2`, `emergency_address`, `remark`, `del_flag`, `create_by`, `create_time`)
VALUES (3, 100, '王强', '13800138005', '110101198803033456', '0', 38, '上海泛微网络科技股份有限公司', '2020-01-10', '刘静', '配偶', '13900139005', '13800138006', '上海市闵行区七宝镇50号', '开发主管', '0', 'admin', NOW());
-- 示例数据4赵敏
INSERT INTO `hrm_emergency_contact` (`user_id`, `dept_id`, `real_name`, `phone`, `id_card`, `gender`, `age`, `company_name`, `hire_date`, `emergency_contact`, `relationship`, `emergency_phone1`, `emergency_phone2`, `emergency_address`, `remark`, `del_flag`, `create_by`, `create_time`)
VALUES (4, 100, '赵敏', '13800138007', '110101199507044567', '1', 31, '上海泛微网络科技股份有限公司', '2023-05-20', '赵建国', '父母', '13900139007', '', '上海市静安区南京西路300号', '前端开发', '0', 'admin', NOW());
-- 示例数据5陈浩
INSERT INTO `hrm_emergency_contact` (`user_id`, `dept_id`, `real_name`, `phone`, `id_card`, `gender`, `age`, `company_name`, `hire_date`, `emergency_contact`, `relationship`, `emergency_phone1`, `emergency_phone2`, `emergency_address`, `remark`, `del_flag`, `create_by`, `create_time`)
VALUES (5, 100, '陈浩', '13800138009', '110101199608055678', '0', 30, '上海泛微网络科技股份有限公司', '2022-11-01', '陈芳', '父母', '13900139009', '13800138010', '上海市浦东新区陆家嘴环路1000号', '后端开发', '0', 'admin', NOW());

Binary file not shown.

View File

@@ -0,0 +1,25 @@
这是一个示例说明文件实际Excel模板需要通过系统下载
Excel模板字段顺序
1. 入职时间 (yyyy.MM.dd格式2025.06.18)
2. 公司名称 (如:山东福安德信息科技有限公司)
3. 部门 (如:信息化部)
4. 姓名 (如:高鑫磊)
5. 联系电话 (如18324818443)
6. 身份证号 (如341222200309052816)
7. 性别 (男/女/未知)
8. 年龄 (如23)
9. 紧急联系人 (如:李继敏)
10. 与本人关系 (如:母子)
11. 联系电话1 (如15955868031)
12. 联系电话2 (可选)
13. 紧急联系人地址 (如:安徽省阜阳市太和县皮条孙镇)
14. 备注 (可选)
示例数据:
2025.06.18,山东福安德信息科技有限公司,信息化部,高鑫磊,18324818443,341222200309052816,男,23,李继敏,母子,15955868031,,安徽省阜阳市太和县皮条孙镇,
2025.06.18,山东福安德信息科技有限公司,信息化部,刘敬超,19932047759,13043520021117093X,男,24,刘建领,父子,18932719783,,河北省邯郸市曲周县槐桥乡,
,山东福安德信息科技有限公司,信息化部,王文昊,19711921991,130923200312073014,男,22,王海军,父子,18233665966,18233691998,河北省沧州市东光县,
,山东福安德信息科技有限公司,信息化部,井昊东,17803227053,13063420041124001X,男,22,井小苗,母子,13803279482,18603228769,河北省保定市曲阳县七里庄村,
,山东福安德信息科技有限公司,信息化部,祖启佳,13308587452,520221200406220769,女,22,黄倩,母女,18188276838,,贵州省六盘水市水城县,
,山东福安德信息科技有限公司,信息化部,朱昊天,19930382154,131121200310093614,男,22,朱庆忠,父子,15832865136,,河北省衡水市枣强县,