diff --git a/doc/api/员工信息管理API文档.md b/doc/api/员工信息管理API文档.md index f82cd09..27fb92e 100644 --- a/doc/api/员工信息管理API文档.md +++ b/doc/api/员工信息管理API文档.md @@ -136,9 +136,9 @@ Authorization: Bearer {token} |--------|------|------|------|----------| | employeeId | Long | 是 | 员工ID(柜员号,7位数字) | 必填,7位数字,唯一 | | name | String | 是 | 姓名 | 最大100字符 | -| deptId | Long | 否 | 所属部门ID | | +| deptId | Long | 是 | 所属部门ID | 必填 | | idCard | String | 是 | 身份证号 | 18位,符合国标,唯一 | -| phone | String | 否 | 电话 | 11位手机号 | +| phone | String | 是 | 电话 | 必填,11位手机号 | | hireDate | Date | 否 | 入职时间 | yyyy-MM-dd | | status | String | 是 | 状态 | 0=在职, 1=离职 | @@ -230,11 +230,13 @@ Authorization: Bearer {token} **Excel 格式说明**: **Sheet1: 员工信息** -| 姓名 | 柜员号 | 所属部门ID | 身份证号 | 电话 | 入职时间 | 状态▼ | +| 姓名* | 柜员号* | 所属部门ID* | 身份证号* | 电话* | 入职时间 | 状态▼* | |------|--------|------------|----------|------|----------|------| | 张三 | 1000001 | 100 | 110101199001011234 | 13800138000 | 2020-01-01 | 在职 | -**注**: 带 ▼ 标记的列包含下拉框,选项来自字典 `ccdi_employee_status`。 +**注**: +- 带 * 标记的列为必填项(姓名、柜员号、所属部门、身份证号、电话、状态) +- 带 ▼ 标记的列包含下拉框,选项来自字典 `ccdi_employee_status` **使用 @DictDropdown 注解实现**: - 状态字段使用 `@DictDropdown(dictType = "ccdi_employee_status")` 注解 @@ -259,11 +261,16 @@ Authorization: Bearer {token} **Excel 格式**: **Sheet1: 员工信息** -| 姓名 | 柜员号 | 所属部门ID | 身份证号 | 电话 | 入职时间 | 状态 | +| 姓名* | 柜员号* | 所属部门ID* | 身份证号* | 电话* | 入职时间 | 状态* | |------|--------|------------|----------|------|----------|------| | 张三 | 1000001 | 100 | 110101199001011234 | 13800138000 | 2020-01-01 | 在职 | -**说明**: 柜员号列为7位数字,必填,唯一。 +**说明**: +- ***标记为必填项**: 姓名、柜员号、所属部门、身份证号、电话、状态** +- 柜员号: 7位数字,必填,唯一 +- 所属部门: 必须填写有效的部门ID +- 电话: 必须填写11位手机号 +- 入职时间: 选填,格式为 yyyy-MM-dd **响应示例**: ```json @@ -291,9 +298,11 @@ Authorization: Bearer {token} | 该柜员号已存在 | 新增时柜员号重复 | | 柜员号不能为空 | 新增时柜员号为空 | | 柜员号必须为7位数字 | 柜员号格式不正确 | +| 所属部门不能为空 | 新增时所属部门为空 | | 该身份证号已存在 | 新增/编辑时身份证号重复 | | 姓名不能为空 | 新增时姓名为空 | | 身份证号格式不正确 | 身份证号不符合18位国标 | +| 电话不能为空 | 新增时电话为空 | | 电话格式不正确 | 手机号不符合11位格式 | | 状态只能填写'在职'或'离职' | 状态值不正确 | diff --git a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiEmployeeAddDTO.java b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiEmployeeAddDTO.java index 3909138..201a0cf 100644 --- a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiEmployeeAddDTO.java +++ b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiEmployeeAddDTO.java @@ -36,6 +36,7 @@ public class CcdiEmployeeAddDTO implements Serializable { private Long employeeId; /** 所属部门ID */ + @NotNull(message = "所属部门不能为空") private Long deptId; /** 身份证号 */ @@ -44,6 +45,7 @@ public class CcdiEmployeeAddDTO implements Serializable { private String idCard; /** 电话 */ + @NotBlank(message = "电话不能为空") @Pattern(regexp = "^1[3-9]\\d{9}$", message = "电话格式不正确") private String phone; diff --git a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiEmployeeEditDTO.java b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiEmployeeEditDTO.java index eaf0b46..2cfcdb1 100644 --- a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiEmployeeEditDTO.java +++ b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiEmployeeEditDTO.java @@ -1,5 +1,6 @@ package com.ruoyi.ccdi.domain.dto; +import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Pattern; import jakarta.validation.constraints.Size; @@ -30,13 +31,16 @@ public class CcdiEmployeeEditDTO implements Serializable { private String name; /** 所属部门ID */ + @NotNull(message = "所属部门不能为空") private Long deptId; /** 身份证号 */ + @NotBlank(message = "身份证号不能为空") @Pattern(regexp = "^[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}[0-9Xx]$", message = "身份证号格式不正确") private String idCard; /** 电话 */ + @NotBlank(message = "电话不能为空") @Pattern(regexp = "^1[3-9]\\d{9}$", message = "电话格式不正确") private String phone; diff --git a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiEmployeeServiceImpl.java b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiEmployeeServiceImpl.java index 5f61013..f563ac7 100644 --- a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiEmployeeServiceImpl.java +++ b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiEmployeeServiceImpl.java @@ -241,9 +241,15 @@ public class CcdiEmployeeServiceImpl implements ICcdiEmployeeService { if (addDTO.getEmployeeId() == null) { throw new RuntimeException("柜员号不能为空"); } + if (addDTO.getDeptId() == null) { + throw new RuntimeException("所属部门不能为空"); + } if (StringUtils.isEmpty(addDTO.getIdCard())) { throw new RuntimeException("身份证号不能为空"); } + if (StringUtils.isEmpty(addDTO.getPhone())) { + throw new RuntimeException("电话不能为空"); + } if (StringUtils.isEmpty(addDTO.getStatus())) { throw new RuntimeException("状态不能为空"); } diff --git a/ruoyi-ui/src/views/ccdiEmployee/index.vue b/ruoyi-ui/src/views/ccdiEmployee/index.vue index a0b8d9f..f1ff7cc 100644 --- a/ruoyi-ui/src/views/ccdiEmployee/index.vue +++ b/ruoyi-ui/src/views/ccdiEmployee/index.vue @@ -315,11 +315,15 @@ export default { { required: true, message: "柜员号不能为空", trigger: "blur" }, { pattern: /^\d{7}$/, message: "柜员号必须为7位数字", trigger: "blur" } ], + deptId: [ + { required: true, message: "所属部门不能为空", trigger: "change" } + ], idCard: [ { required: true, message: "身份证号不能为空", trigger: "blur" }, { pattern: idCardPattern, message: "请输入正确的18位身份证号", trigger: "blur" } ], phone: [ + { required: true, message: "电话不能为空", trigger: "blur" }, { pattern: phonePattern, message: "请输入正确的11位手机号", trigger: "blur" } ], status: [ diff --git a/sql/ccdi_employee_status_dict.sql b/sql/ccdi_employee_status_dict.sql new file mode 100644 index 0000000..04276dd --- /dev/null +++ b/sql/ccdi_employee_status_dict.sql @@ -0,0 +1,15 @@ +-- ======================================== +-- 员工状态字典类型和数据 +-- ======================================== + +-- 插入字典类型 +INSERT INTO sys_dict_type (dict_id, dict_name, dict_type, status, create_by, create_time, remark) +VALUES (109, '员工状态', 'ccdi_employee_status', '0', 'admin', NOW(), '员工状态列表'); + +-- 插入字典数据 - 在职 +INSERT INTO sys_dict_data (dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark) +VALUES (143, 1, '在职', '1', 'ccdi_employee_status', '', 'primary', 'N', '0', 'admin', NOW(), '在职状态'); + +-- 插入字典数据 - 离职 +INSERT INTO sys_dict_data (dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark) +VALUES (144, 2, '离职', '0', 'ccdi_employee_status', '', 'danger', 'N', '0', 'admin', NOW(), '离职状态'); diff --git a/员工信息导入模板.xlsx b/员工信息导入模板.xlsx new file mode 100644 index 0000000..1617327 Binary files /dev/null and b/员工信息导入模板.xlsx differ