Files
cattleTransportation/pc-cattle-transportation/DRIVER_DELETE_IMPLEMENTATION.md

187 lines
6.1 KiB
Markdown
Raw Normal View History

2025-10-27 17:38:20 +08:00
# 司机管理删除功能实现报告
## 概述
实现司机管理页面中的删除按钮功能,可以删除数据库中的司机数据。
## 实现内容
### 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