# 司机管理删除功能实现报告 ## 概述 实现司机管理页面中的删除按钮功能,可以删除数据库中的司机数据。 ## 实现内容 ### 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 params) { try { Integer id = (Integer) params.get("id"); if (id == null) { return AjaxResult.error("司机ID不能为空"); } // 查询司机信息,获取member_id Map 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