# HRM 模块删除接口补全
## 概述
为 HRM 模块中缺失删除接口的 Controller 补全删除功能,主要涉及员工相关子模块(教育经历、工作经历、紧急联系人)以及薪资模块的撤销/删除功能。
## 一、员工模块删除接口
### 涉及页面
- 员工详情页(教育经历、工作经历、紧急联系人模块)
### API
| 方法 | 路径 | 说明 |
|------|------|------|
| DELETE | /hrm/employee/education/delete | 删除教育经历 |
| DELETE | /hrm/employee/work-history/delete | 删除工作经历 |
| DELETE | /hrm/employee/emergency-contact/delete | 删除紧急联系人 |
**请求参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| id | Long | 是 | 记录ID |
**响应:**
```json
{
"code": 200,
"data": true,
"msg": "操作成功"
}
```
### 前端修改点
#### 1. 教育经历删除按钮
```html
删除
```
#### 2. 工作经历删除按钮
```html
删除
```
#### 3. 紧急联系人删除按钮
```html
删除
```
#### 4. 方法实现
```js
// 删除教育经历
handleDeleteEducation(row) {
this.$modal.confirm('是否确认删除该教育经历?').then(() => {
return deleteEducation(row.id);
}).then(() => {
this.getEducationList();
this.$modal.msgSuccess('删除成功');
}).catch(() => {});
},
// 删除工作经历
handleDeleteWorkHistory(row) {
this.$modal.confirm('是否确认删除该工作经历?').then(() => {
return deleteWorkHistory(row.id);
}).then(() => {
this.getWorkHistoryList();
this.$modal.msgSuccess('删除成功');
}).catch(() => {});
},
// 删除紧急联系人
handleDeleteEmergencyContact(row) {
this.$modal.confirm('是否确认删除该紧急联系人?').then(() => {
return deleteEmergencyContact(row.id);
}).then(() => {
this.getEmergencyContactList();
this.$modal.msgSuccess('删除成功');
}).catch(() => {});
},
```
#### 5. API 接口定义
```js
// api/hrm/employee.js
// 删除教育经历
export function deleteEducation(id) {
return request({
url: '/hrm/employee/education/delete',
method: 'delete',
params: { id }
});
}
// 删除工作经历
export function deleteWorkHistory(id) {
return request({
url: '/hrm/employee/work-history/delete',
method: 'delete',
params: { id }
});
}
// 删除紧急联系人
export function deleteEmergencyContact(id) {
return request({
url: '/hrm/employee/emergency-contact/delete',
method: 'delete',
params: { id }
});
}
```
---
## 二、薪资核算模块接口
### 涉及页面
- 薪酬核算列表页
### API
| 方法 | 路径 | 说明 |
|------|------|------|
| POST | /hrm/salary/calculation/revoke | 批量撤销薪酬核算确认 |
| DELETE | /hrm/salary/calculation/delete | 删除薪酬核算记录(仅待确认状态) |
**撤销确认请求:**
```json
{
"ids": [1, 2, 3]
}
```
**删除请求参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| id | Long | 是 | 核算记录ID |
**撤销确认逻辑说明:**
1. 仅已确认状态(status=10)的核算记录可以撤销
2. 撤销后状态恢复为待确认(status=0)
3. 同时删除关联的薪资发放明细
4. 如果已发放则不允许撤销
**删除逻辑说明:**
1. 仅待确认状态(status=0)的核算记录可以删除
2. 已确认或已发放的记录不可删除
### 前端修改点
```js
// api/hrm/salary/calculation.js
// 撤销薪酬核算确认
export function revokeSalaryCalculation(ids) {
return request({
url: '/hrm/salary/calculation/revoke',
method: 'post',
data: { ids }
});
}
// 删除薪酬核算记录
export function deleteSalaryCalculation(id) {
return request({
url: '/hrm/salary/calculation/delete',
method: 'delete',
params: { id }
});
}
```
```html
撤销确认
删除
```
```js
// 撤销确认
handleRevoke(row) {
this.$modal.confirm('撤销确认后,该记录将恢复为待确认状态,关联的发放明细将被删除。是否继续?').then(() => {
return revokeSalaryCalculation([row.id]);
}).then(() => {
this.getList();
this.$modal.msgSuccess('撤销成功');
}).catch(() => {});
},
// 删除
handleDelete(row) {
this.$modal.confirm('是否确认删除该薪酬核算记录?').then(() => {
return deleteSalaryCalculation(row.id);
}).then(() => {
this.getList();
this.$modal.msgSuccess('删除成功');
}).catch(() => {});
},
```
---
## 三、薪资发放模块接口
### 涉及页面
- 薪资发放列表页
- 薪资发放明细页
### API
| 方法 | 路径 | 说明 |
|------|------|------|
| POST | /hrm/salary/payment/revoke-detail | 批量撤销薪资发放明细 |
| DELETE | /hrm/salary/payment/delete | 删除薪资发放台账(仅待发放状态) |
**撤销发放请求:**
```json
{
"detailIds": [1, 2, 3]
}
```
**删除请求参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| id | Long | 是 | 发放台账ID |
**撤销发放逻辑说明:**
1. 仅已发放状态(status=10)的明细可以撤销
2. 撤销后明细状态恢复为待发放(status=0)
3. 同时将关联的核算记录恢复为已确认(status=10)
4. 如果整个台账的所有明细都被撤销,台账状态也会恢复为待发放
**删除台账逻辑说明:**
1. 仅待发放状态(status=0)的台账可以删除
2. 如果存在已发放明细,需先撤销所有明细才能删除
3. 删除台账会同时删除所有待发放明细
### 前端修改点
```js
// api/hrm/salary/payment.js
// 撤销薪资发放明细
export function revokeSalaryPaymentDetail(detailIds) {
return request({
url: '/hrm/salary/payment/revoke-detail',
method: 'post',
data: { detailIds }
});
}
// 删除薪资发放台账
export function deleteSalaryPayment(id) {
return request({
url: '/hrm/salary/payment/delete',
method: 'delete',
params: { id }
});
}
```
```html
撤销发放
删除
```
```js
// 撤销发放明细
handleRevokeDetail(row) {
this.$modal.confirm('撤销发放后,该明细将恢复为待发放状态,关联的核算记录将恢复为已确认。是否继续?').then(() => {
return revokeSalaryPaymentDetail([row.id]);
}).then(() => {
this.getDetailList();
this.$modal.msgSuccess('撤销成功');
}).catch(() => {});
},
// 删除发放台账
handleDelete(row) {
this.$modal.confirm('删除后将同时删除所有待发放明细,是否继续?').then(() => {
return deleteSalaryPayment(row.id);
}).then(() => {
this.getList();
this.$modal.msgSuccess('删除成功');
}).catch(() => {});
},
```
---
## 四、状态流转说明
### 薪酬核算状态
| 状态值 | 状态名称 | 说明 |
|--------|----------|------|
| 0 | 待确认 | 初始状态,可删除、可确认 |
| 10 | 已确认 | 可撤销确认 |
| 20 | 已发放 | 已完成发放,不可操作 |
### 薪资发放明细状态
| 状态值 | 状态名称 | 说明 |
|--------|----------|------|
| 0 | 待发放 | 初始状态 |
| 10 | 已发放 | 可撤销发放 |
### 状态流转图
```
薪酬核算:
待确认(0) --确认--> 已确认(10) --发放--> 已发放(20)
已确认(10) --撤销确认--> 待确认(0)
待确认(0) --删除--> (删除)
薪资发放明细:
待发放(0) --发放--> 已发放(10)
已发放(10) --撤销发放--> 待发放(0)
薪资发放台账:
待发放(0) --删除--> (删除)
注:需先撤销所有已发放明细才能删除
```
---
## 五、已有删除接口说明
以下模块已有删除接口,无需前端额外修改:
| 模块 | 删除接口路径 |
|------|-------------|
| 员工主表 | /hrm/employee/delete |
| 请假申请 | /hrm/leave/delete |
| 调岗申请 | /hrm/transfer/delete |
| 离职申请 | /hrm/resignation/delete |
| 考勤异常申请 | /hrm/attendance/exception/delete |
| 社保公积金配置 | /hrm/salary/social-security-config/delete |
| 个税税率配置 | /hrm/salary/tax-rate-config/delete |
| 社保公积金方案 | /hrm/salary/social-security-scheme/delete |
| 员工社保档案 | /hrm/salary/employee-social-security/delete |
## 六、不提供删除接口说明
以下模块不提供删除接口(审计类数据不允许直接删除):
- 考勤记录(/hrm/attendance/record)- 考勤数据属于审计数据
## 七、权限说明
| 权限标识 | 说明 |
|----------|------|
| hrm:employee:delete | 员工及子模块删除权限 |
| hrm:salary:confirm | 薪酬核算确认/撤销权限 |
| hrm:salary:delete | 薪酬核算/发放删除权限 |
| hrm:salary:pay | 薪资发放/撤销权限 |
## 八、注意事项
1. 删除操作需要二次确认,避免误删
2. 薪酬核算确认后不可直接删除,需先撤销确认
3. 薪资发放后不可直接删除台账,需先撤销所有已发放明细
4. 撤销操作会级联更新关联数据(如发放明细、核算状态等)
5. 删除操作需刷新列表数据