Files
cattleTransportation/pc-cattle-transportation/DRIVER_DELETE_IMPLEMENTATION.md
2025-10-27 17:38:20 +08:00

187 lines
6.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 司机管理删除功能实现报告
## 概述
实现司机管理页面中的删除按钮功能,可以删除数据库中的司机数据。
## 实现内容
### 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