187 lines
6.1 KiB
Markdown
187 lines
6.1 KiB
Markdown
|
|
# 司机管理删除功能实现报告
|
|||
|
|
|
|||
|
|
## 概述
|
|||
|
|
|
|||
|
|
实现司机管理页面中的删除按钮功能,可以删除数据库中的司机数据。
|
|||
|
|
|
|||
|
|
## 实现内容
|
|||
|
|
|
|||
|
|
### 1. 后端实现
|
|||
|
|
|
|||
|
|
#### 控制器 (`MemberController.java`)
|
|||
|
|
|
|||
|
|
新增删除司机接口:
|
|||
|
|
|
|||
|
|
```402:447:tradeCattle/aiotagro-cattle-trade/src/main/java/com/aiotagro/cattletrade/business/controller/MemberController.java
|
|||
|
|
/**
|
|||
|
|
* 删除司机
|
|||
|
|
*/
|
|||
|
|
@SaCheckPermission("member:delete")
|
|||
|
|
@PostMapping("/deleteDriver")
|
|||
|
|
@Transactional
|
|||
|
|
public AjaxResult deleteDriver(@RequestBody Map<String, Object> params) {
|
|||
|
|
try {
|
|||
|
|
Integer id = (Integer) params.get("id");
|
|||
|
|
if (id == null) {
|
|||
|
|
return AjaxResult.error("司机ID不能为空");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 查询司机信息,获取member_id
|
|||
|
|
Map<String, Object> driverInfo = memberDriverMapper.selectDriverById(id);
|
|||
|
|
if (driverInfo == null) {
|
|||
|
|
return AjaxResult.error("司机信息不存在");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
Integer memberId = (Integer) driverInfo.get("member_id");
|
|||
|
|
|
|||
|
|
// 删除司机详情(member_driver表)
|
|||
|
|
int driverResult = memberDriverMapper.deleteById(id);
|
|||
|
|
|
|||
|
|
// 如果member_id存在,也删除member表记录
|
|||
|
|
if (memberId != null) {
|
|||
|
|
int memberResult = memberMapper.deleteById(memberId);
|
|||
|
|
if (memberResult > 0 && driverResult > 0) {
|
|||
|
|
return AjaxResult.success("删除成功");
|
|||
|
|
} else if (driverResult > 0) {
|
|||
|
|
return AjaxResult.success("删除司机信息成功");
|
|||
|
|
} else {
|
|||
|
|
return AjaxResult.error("删除失败");
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
if (driverResult > 0) {
|
|||
|
|
return AjaxResult.success("删除成功");
|
|||
|
|
} else {
|
|||
|
|
return AjaxResult.error("删除失败");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
} catch (Exception e) {
|
|||
|
|
e.printStackTrace();
|
|||
|
|
return AjaxResult.error("删除司机失败:" + e.getMessage());
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 删除逻辑说明
|
|||
|
|
|
|||
|
|
1. **删除两个表的数据**:
|
|||
|
|
- 删除 `member_driver` 表中的司机详细信息
|
|||
|
|
- 删除 `member` 表中的基础会员信息
|
|||
|
|
|
|||
|
|
2. **事务保证**:使用 `@Transactional` 注解确保数据一致性
|
|||
|
|
|
|||
|
|
3. **权限控制**:使用 `@SaCheckPermission("member:delete")` 进行权限验证
|
|||
|
|
|
|||
|
|
### 2. 前端实现
|
|||
|
|
|
|||
|
|
#### API接口 (`userManage.js`)
|
|||
|
|
|
|||
|
|
添加删除司机API方法:
|
|||
|
|
|
|||
|
|
```70:77:pc-cattle-transportation/src/api/userManage.js
|
|||
|
|
// 司机 - 删除
|
|||
|
|
export function driverDel(id) {
|
|||
|
|
return request({
|
|||
|
|
url: '/member/deleteDriver',
|
|||
|
|
method: 'POST',
|
|||
|
|
data: { id },
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 页面实现 (`driver.vue`)
|
|||
|
|
|
|||
|
|
导入必要的依赖:
|
|||
|
|
```60:63:pc-cattle-transportation/src/views/userManage/driver.vue
|
|||
|
|
import { ElMessage, ElMessageBox } from 'element-plus';
|
|||
|
|
import { Picture } from '@element-plus/icons-vue';
|
|||
|
|
import baseSearch from '@/components/common/searchCustom/index.vue';
|
|||
|
|
import { driverList, driverDel } from '@/api/userManage.js';
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
实现删除方法:
|
|||
|
|
```160:181:pc-cattle-transportation/src/views/userManage/driver.vue
|
|||
|
|
// 删除
|
|||
|
|
const delClick = (row) => {
|
|||
|
|
ElMessageBox.confirm('请确认是否删除该司机数据?', '删除', {
|
|||
|
|
confirmButtonText: '确定',
|
|||
|
|
cancelButtonText: '取消',
|
|||
|
|
type: 'warning',
|
|||
|
|
})
|
|||
|
|
.then(() => {
|
|||
|
|
driverDel(row.id)
|
|||
|
|
.then(() => {
|
|||
|
|
ElMessage.success('删除成功');
|
|||
|
|
getDataList();
|
|||
|
|
})
|
|||
|
|
.catch((error) => {
|
|||
|
|
ElMessage.error('删除失败');
|
|||
|
|
console.error('删除失败:', error);
|
|||
|
|
});
|
|||
|
|
})
|
|||
|
|
.catch(() => {
|
|||
|
|
// 用户取消删除
|
|||
|
|
});
|
|||
|
|
};
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 功能特点
|
|||
|
|
|
|||
|
|
1. **二次确认**:点击删除按钮时,会弹出确认对话框
|
|||
|
|
2. **直接删除**:确认后直接调用后端接口删除数据库记录
|
|||
|
|
3. **级联删除**:删除司机记录时,同时删除关联的会员基础信息
|
|||
|
|
4. **自动刷新**:删除成功后自动刷新列表
|
|||
|
|
5. **错误处理**:删除失败时显示错误提示
|
|||
|
|
6. **事务保护**:使用数据库事务确保数据一致性
|
|||
|
|
7. **权限控制**:需要 `member:delete` 权限才能执行删除操作
|
|||
|
|
|
|||
|
|
## 工作流程
|
|||
|
|
|
|||
|
|
1. 用户点击"删除"按钮
|
|||
|
|
2. 弹出确认对话框:"请确认是否删除该司机数据?"
|
|||
|
|
3. 用户点击"确定"
|
|||
|
|
4. 前端调用 `/member/deleteDriver` 接口,传递司机ID
|
|||
|
|
5. 后端查询司机信息,获取关联的 member_id
|
|||
|
|
6. 后端删除 `member_driver` 表中的司机信息
|
|||
|
|
7. 后端删除 `member` 表中的会员基础信息
|
|||
|
|
8. 返回成功响应
|
|||
|
|
9. 前端显示"删除成功"提示
|
|||
|
|
10. 自动刷新司机列表
|
|||
|
|
|
|||
|
|
## 数据库影响
|
|||
|
|
|
|||
|
|
删除操作会影响以下表:
|
|||
|
|
|
|||
|
|
1. **member_driver表**:删除司机的详细信息(姓名、车牌、照片等)
|
|||
|
|
2. **member表**:删除会员的基础信息(手机号、状态等)
|
|||
|
|
|
|||
|
|
## 注意事项
|
|||
|
|
|
|||
|
|
1. **不可恢复**:删除操作是物理删除,不可恢复(除非有备份)
|
|||
|
|
2. **关联数据**:删除司机前需要检查该司机是否有关联的运单或其他业务数据
|
|||
|
|
3. **权限要求**:需要具有 `member:delete` 权限的用户才能删除
|
|||
|
|
4. **事务保护**:使用事务确保即使部分删除失败也不会导致数据不一致
|
|||
|
|
|
|||
|
|
## 后续改进建议
|
|||
|
|
|
|||
|
|
1. **软删除**:考虑实现软删除(添加 `is_delete` 标记)
|
|||
|
|
2. **关联检查**:删除前检查司机是否有关联的运单
|
|||
|
|
3. **级联处理**:如果有关联数据,提供选项:
|
|||
|
|
- 阻止删除
|
|||
|
|
- 解绑后删除
|
|||
|
|
- 级联删除所有关联数据
|
|||
|
|
4. **操作日志**:记录删除操作的日志
|
|||
|
|
|
|||
|
|
## 修改的文件
|
|||
|
|
|
|||
|
|
### 后端
|
|||
|
|
- ✅ `tradeCattle/aiotagro-cattle-trade/src/main/java/com/aiotagro/cattletrade/business/controller/MemberController.java` - 新增删除接口
|
|||
|
|
|
|||
|
|
### 前端
|
|||
|
|
- ✅ `pc-cattle-transportation/src/api/userManage.js` - 添加删除API方法
|
|||
|
|
- ✅ `pc-cattle-transportation/src/views/userManage/driver.vue` - 实现删除功能
|
|||
|
|
|
|||
|
|
## 创建时间
|
|||
|
|
|
|||
|
|
2025-01-16
|
|||
|
|
|