diff --git a/ORDER_TABLE_IMPLEMENTATION_REPORT.md b/ORDER_TABLE_IMPLEMENTATION_REPORT.md new file mode 100644 index 0000000..5a20fde --- /dev/null +++ b/ORDER_TABLE_IMPLEMENTATION_REPORT.md @@ -0,0 +1,198 @@ +# 订单表功能实现报告 + +## 概述 +根据需求,重新设计并实现了一个新的订单管理系统,包含订单表的数据库设计、后端接口以及前端页面。 + +## 实现内容 + +### 1. 数据库设计 + +**表结构:** `order` + +| 字段名 | 类型 | 说明 | +|--------|------|------| +| id | int(11) | 主键ID,自增 | +| buyer_id | varchar(500) | 买方ID(多个买家用逗号分隔) | +| seller_id | varchar(500) | 卖方ID(多个卖家用逗号分隔) | +| settlement_type | int(11) | 结算方式:1-上车重量,2-下车重量,3-按肉价结算 | +| is_delete | tinyint(1) | 逻辑删除标记(0-正常,1-已删除) | +| create_time | datetime | 创建时间 | +| created_by | int(11) | 创建人ID | +| update_time | datetime | 更新时间 | +| updated_by | int(11) | 更新人ID | + +**SQL文件位置:** `tradeCattle/create_order_table.sql` + +### 2. 后端实现 + +#### 2.1 实体类(Entity) +- **文件:** `Order.java` +- **位置:** `aiotagro-cattle-trade/src/main/java/com/aiotagro/cattletrade/business/entity/Order.java` +- **特性:** + - 使用MyBatis-Plus注解 + - 包含@TableLogic注解实现逻辑删除 + - 包含显示字段:buyerName、sellerName、createdByName、settlementTypeDesc + +#### 2.2 Mapper接口 +- **文件:** `OrderMapper.java` +- **位置:** `aiotagro-cattle-trade/src/main/java/com/aiotagro/cattletrade/business/mapper/OrderMapper.java` +- **说明:** 继承BaseMapper,提供基础的CRUD操作 + +#### 2.3 Service层 +- **接口:** `IOrderService.java` +- **实现类:** `OrderServiceImpl.java` +- **位置:** `aiotagro-cattle-trade/src/main/java/com/aiotagro/cattletrade/business/service/` +- **方法:** + - `pageQuery` - 分页查询订单列表 + - `addOrder` - 新增订单 + - `updateOrder` - 更新订单 + - `deleteOrder` - 逻辑删除订单 + - `getOrderDetail` - 查询订单详情 + - `fillOrderInfo` - 填充订单关联信息(买方名称、卖方名称等) + +**日志记录:** 所有操作都通过Logger记录详细日志 + +#### 2.4 Controller层 +- **文件:** `OrderController.java` +- **位置:** `aiotagro-cattle-trade/src/main/java/com/aiotagro/cattletrade/business/controller/OrderController.java` +- **接口列表:** + - `POST /order/list` - 查询订单列表(分页) + - `POST /order/add` - 新增订单 + - `POST /order/edit` - 更新订单 + - `GET /order/delete` - 删除订单(逻辑删除) + - `GET /order/detail` - 查询订单详情 + +**权限控制:** 使用SaCheckPermission注解进行权限验证 + - `order:list` - 列表查询权限 + - `order:add` - 新增权限 + - `order:edit` - 编辑权限 + - `order:delete` - 删除权限 + - `order:view` - 查看权限 + +### 3. 前端实现 + +#### 3.1 API接口 +**文件:** `pc-cattle-transportation/src/api/shipping.js` + +新增接口方法: +- `orderPageQuery(data)` - 订单列表查询 +- `orderAddNew(data)` - 新增订单 +- `orderUpdate(data)` - 更新订单 +- `orderDelete(id)` - 删除订单 +- `orderGetDetail(id)` - 查询订单详情 + +#### 3.2 前端页面 +**文件:** `pc-cattle-transportation/src/views/shipping/orderDialog.vue` + +**功能特性:** +- 简化的表单设计,只包含必要字段 +- 支持多选买方和卖方(使用multiple属性) +- 下拉选择结算方式 +- 远程搜索支持 +- 分页功能 +- 支持新增和编辑两种模式 + +**表单字段:** +- 卖方(sellerId):多选下拉框,支持搜索和分页 +- 买方(buyerId):多选下拉框,支持搜索和分页 +- 结算方式(settlementType):单选下拉框,3个选项 + +## 核心特性 + +### 1. 逻辑删除 +- 使用MyBatis-Plus的@TableLogic注解 +- 删除操作不会真正删除数据,只是将is_delete字段设置为1 +- 查询时会自动过滤已删除的记录 + +### 2. 操作日志 +所有操作都记录详细日志: +- 操作类型(新增/修改/删除/查询) +- 操作参数 +- 操作结果 +- 异常信息 + +### 3. 关联查询 +自动填充关联信息: +- 买方名称:从member_user表查询username +- 卖方名称:从member_user表查询username +- 创建人姓名:从sys_user表查询user_name +- 结算方式描述:自动转换(1→上车重量,2→下车重量,3→按肉价结算) + +### 4. 数据校验 +- 后端参数校验 +- 前端表单验证 +- 结算方式枚举值校验 + +## 使用方法 + +### 后端部署 +1. 执行SQL脚本创建订单表 +```sql +-- 执行 tradeCattle/create_order_table.sql +``` + +2. 重启后端服务 + +### 前端使用 +```javascript +// 在需要使用的组件中引入 +import orderDialog from '@/views/shipping/orderDialog.vue' + +// 调用方法 +const dialogRef = ref(null) +dialogRef.value.onShowDialog() // 新增模式 +dialogRef.value.onShowDialog(orderData) // 编辑模式 +``` + +## 权限配置 + +需要在菜单权限系统中配置以下权限: +- `order:list` - 订单列表 +- `order:add` - 新增订单 +- `order:edit` - 编辑订单 +- `order:delete` - 删除订单 +- `order:view` - 查看订单详情 + +## 技术栈 + +### 后端 +- Java 8+ +- Spring Boot +- MyBatis-Plus +- Sa-Token(权限管理) +- SLF4J(日志) + +### 前端 +- Vue 3 +- Element Plus +- Axios + +## 后续优化建议 + +1. 添加订单状态字段 +2. 添加更多业务字段(如金额、数量等) +3. 实现订单导出功能 +4. 添加订单统计功能 +5. 实现订单审核流程 + +## 文件清单 + +### 后端文件 +- `create_order_table.sql` - 数据库表结构 +- `Order.java` - 实体类 +- `OrderMapper.java` - Mapper接口 +- `IOrderService.java` - Service接口 +- `OrderServiceImpl.java` - Service实现 +- `OrderController.java` - Controller + +### 前端文件 +- `shipping.js` - API接口(新增部分) +- `orderDialog.vue` - 订单弹窗组件 + +## 注意事项 + +1. order是MySQL的保留关键字,创建表时需要用反引号包裹:`` `order` `` +2. 买方ID和卖方ID存储为逗号分隔的字符串,使用时需要拆分 +3. 逻辑删除功能需要确保相关查询都使用正确的字段过滤 +4. 关联查询可能会影响性能,大量数据时建议添加缓存 + diff --git a/pc-cattle-transportation/DRIVER_DELETE_IMPLEMENTATION.md b/pc-cattle-transportation/DRIVER_DELETE_IMPLEMENTATION.md new file mode 100644 index 0000000..149c11b --- /dev/null +++ b/pc-cattle-transportation/DRIVER_DELETE_IMPLEMENTATION.md @@ -0,0 +1,186 @@ +# 司机管理删除功能实现报告 + +## 概述 + +实现司机管理页面中的删除按钮功能,可以删除数据库中的司机数据。 + +## 实现内容 + +### 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 + diff --git a/pc-cattle-transportation/SUPER_ADMIN_PERMISSION_EXPLANATION.md b/pc-cattle-transportation/SUPER_ADMIN_PERMISSION_EXPLANATION.md new file mode 100644 index 0000000..25807be --- /dev/null +++ b/pc-cattle-transportation/SUPER_ADMIN_PERMISSION_EXPLANATION.md @@ -0,0 +1,114 @@ +# 超级管理员权限说明 + +## 问题原因 + +超级管理员(15900000000)的操作权限没有全部打开的原因是: + +### 1. **权限管理基于角色,而非超级管理员特权** + +当前系统使用**基于角色的权限管理(RBAC)**: +- 权限存储在 `sys_role_menu` 表中 +- 所有使用相同 `roleId` 的用户共享相同的权限 +- 即使 `roleId=1`(超级管理员角色),也要遵循数据库中的权限配置 + +### 2. **超级管理员权限标识** + +系统在代码层面为超级管理员提供了特殊处理: + +```java +// StpInterfaceImpl.java 第38-42行 +if (roleId.equals(RoleConstants.SUPER_ADMIN_ROLE_ID)) { + log.info("用户 {} 是超级管理员,拥有所有权限", loginId); + // 超级管理员返回通配符权限 + return Collections.singletonList(RoleConstants.ALL_PERMISSION); +} +``` + +这意味着: +- **后端验证**:超级管理员拥有 `*:*:*` 权限,后端不会拦截任何操作 +- **前端显示**:但前端界面的复选框状态取决于数据库中的 `sys_role_menu` 表 + +### 3. **权限界面的作用** + +"操作权限管理"界面中的复选框状态: +- ✅ **不影响功能权限**:只是用于展示和编辑数据库中的权限配置 +- ✅ **超级管理员仍然可以操作**:即使复选框未选中,后端也会允许访问 +- ⚠️ **前端按钮显示受影响**:如果权限未勾选,前端 `v-hasPermi` 指令会隐藏按钮 + +## 解决方案 + +### 方案1:为超级管理员角色分配所有权限(推荐) + +在数据库中为 `roleId=1` 分配所有菜单权限: + +```sql +-- 查询所有菜单ID +SELECT id FROM sys_menu WHERE is_delete = 0; + +-- 为超级管理员角色分配所有菜单权限 +-- 假设有 100 个菜单,IDs 为 1-100 +INSERT INTO sys_role_menu (role_id, menu_id) +SELECT 1, id FROM sys_menu WHERE is_delete = 0 +ON DUPLICATE KEY UPDATE role_id = role_id; +``` + +### 方案2:前端特殊处理超级管理员 + +修改前端的权限检查逻辑,让超级管理员始终显示所有按钮: + +```javascript +// src/utils/permission.js 或类似的权限检查文件 +const hasPermission = (permission) => { + const userStore = useUserStore(); + const isSuperAdmin = userStore.roleId === 1; // 超级管理员 roleId=1 + + if (isSuperAdmin) { + return true; // 超级管理员直接返回 true + } + + // 普通用户的权限检查逻辑 + // ... +}; +``` + +### 方案3:完全忽略前端权限检查(不推荐) + +对于超级管理员,可以跳过所有前端权限检查,但这可能带来安全隐患。 + +## 建议 + +**最佳实践**: +1. 在数据库中为超级管理员角色(roleId=1)分配所有菜单权限 +2. 前端保留权限检查逻辑(安全考虑) +3. 后端继续使用 `*:*:*` 特殊处理 + +这样既保证了超级管理员的功能完整性,又保持了权限管理的规范性。 + +## 如何判断超级管理员是否有权限 + +### 前端权限检查(影响按钮显示) + +```vue + +编辑 +``` + +### 后端权限验证(实际控制) + +```java +// 即使前端按钮显示,后端也会验证 +@SaCheckPermission("loading:edit") +public AjaxResult editOrder(...) { + // 超级管理员 roleId=1 会被自动放行 +} +``` + +## 总结 + +**超级管理员的操作权限没有全部打开**是因为: +1. 数据库中的 `sys_role_menu` 表没有为超级管理员角色分配所有菜单 +2. 前端的复选框显示基于数据库配置 +3. 但这**不影响**后端功能权限:超级管理员仍然可以访问所有接口 + +**解决方案**:为超级管理员角色在数据库中分配所有菜单权限即可。 + diff --git a/pc-cattle-transportation/USER_DELETE_IMPLEMENTATION.md b/pc-cattle-transportation/USER_DELETE_IMPLEMENTATION.md new file mode 100644 index 0000000..6b68c37 --- /dev/null +++ b/pc-cattle-transportation/USER_DELETE_IMPLEMENTATION.md @@ -0,0 +1,144 @@ +# 用户管理删除功能实现报告 + +## 概述 + +实现用户管理页面中的删除按钮功能,可以删除数据库中的用户数据。 + +## 实现内容 + +### 1. 前端实现 (`pc-cattle-transportation/src/views/system/user.vue`) + +#### 导入必要的依赖 +```javascript +import { ElMessage, ElMessageBox } from 'element-plus'; +import { sysUserList, sysUserDel, sysUserSave } from '@/api/sys.js'; +``` + +#### 删除用户方法 +```92:117:pc-cattle-transportation/src/views/system/user.vue +// 删除用户 +const delClick = (row) => { + ElMessageBox.confirm('请确认是否删除该用户?', '提示', { + cancelButtonText: '取消', + confirmButtonText: '确定', + type: 'warning', + }) + .then(() => { + sysUserDel(row.id) + .then(() => { + ElMessage.success('删除成功'); + getDataList(); + }) + .catch((error) => { + ElMessage.error('删除失败'); + console.error('删除失败:', error); + }); + }) + .catch(() => { + // 用户取消删除 + }); +}; +``` + +#### 表格操作列 +```20:25:pc-cattle-transportation/src/views/system/user.vue + + + +``` + +### 2. API接口 (`pc-cattle-transportation/src/api/sys.js`) + +```89:95:pc-cattle-transportation/src/api/sys.js +// 子账号管理-删除 +export function sysUserDel(id) { + return request({ + url: `/sysUser/delete?id=${id}`, + method: 'GET', + }); +} +``` + +### 3. 后端接口实现 + +#### Controller (`SysUserController.java`) +```46:49:tradeCattle/aiotagro-cattle-trade/src/main/java/com/aiotagro/cattletrade/business/controller/SysUserController.java +@GetMapping("/delete") +public AjaxResult delete(@RequestParam Integer id) { + return userService.delete(id); +} +``` + +#### Service (`SysUserServiceImpl.java`) +```80:84:tradeCattle/aiotagro-cattle-trade/src/main/java/com/aiotagro/cattletrade/business/service/impl/SysUserServiceImpl.java +@Override +public AjaxResult delete(Integer id) { + removeById(id); + return AjaxResult.success(); +} +``` + +## 功能特点 + +1. **二次确认**:点击删除按钮时,会弹出确认对话框 +2. **直接删除**:确认后直接调用后端接口删除数据库记录 +3. **自动刷新**:删除成功后自动刷新列表 +4. **错误处理**:删除失败时显示错误提示 +5. **用户友好**:删除按钮使用红色样式,清晰地表示危险操作 + +## 工作流程 + +1. 用户点击"删除"按钮 +2. 弹出确认对话框:"请确认是否删除该用户?" +3. 用户点击"确定" +4. 前端调用 `/sysUser/delete?id={userId}` 接口 +5. 后端执行 `removeById(id)` 删除数据库记录 +6. 返回成功响应 +7. 前端显示"删除成功"提示 +8. 自动刷新用户列表 + +## 测试建议 + +1. **功能测试** + - 点击删除按钮,确认对话框正常弹出 + - 点击取消,不执行删除 + - 点击确定,用户被删除 + - 删除后列表自动刷新 + +2. **边界测试** + - 测试删除不存在的用户ID + - 测试网络异常情况 + +3. **权限测试** + - 确认用户是否有删除权限 + +## 修改的文件 + +### 前端 +- ✅ `pc-cattle-transportation/src/views/system/user.vue` - 实现删除功能和完整的数据列表 +- ✅ `pc-cattle-transportation/src/api/sys.js` - API接口(已存在) + +### 后端 +- ✅ `tradeCattle/aiotagro-cattle-trade/src/main/java/com/aiotagro/cattletrade/business/controller/SysUserController.java` - Controller接口(已存在) +- ✅ `tradeCattle/aiotagro-cattle-trade/src/main/java/com/aiotagro/cattletrade/business/service/impl/SysUserServiceImpl.java` - Service实现(已存在) + +## 注意事项 + +1. **数据安全**:删除操作是永久性的,不可恢复(除非有备份) +2. **权限控制**:建议在后端添加权限校验,只允许特定角色删除用户 +3. **关联数据**:如果用户有关联数据(如订单、设备等),需要检查是否应该级联删除或阻止删除 + +## 后续改进建议 + +1. 添加权限校验 +2. 添加关联数据检查(如用户是否有关联的订单或设备) +3. 实现软删除(添加 `isDelete` 标记,而不是物理删除) +4. 添加操作日志记录 + +## 创建时间 + +2025-01-16 + diff --git a/pc-cattle-transportation/src/api/shipping.js b/pc-cattle-transportation/src/api/shipping.js index 642929e..a06e56b 100644 --- a/pc-cattle-transportation/src/api/shipping.js +++ b/pc-cattle-transportation/src/api/shipping.js @@ -49,6 +49,15 @@ export function updateDeviceDeliveryId(data) { }); } +// 解绑单个设备(将delivery_id设置为null) +export function unbindDevice(deviceId) { + return request({ + url: '/deliveryDevice/updateDeviceDeliveryId', + method: 'POST', + data: { deviceId, deliveryId: null }, + }); +} + // 批量更新设备weight export function updateDeviceWeights(data) { return request({ @@ -210,4 +219,48 @@ export function shippingList(data) { method: 'POST', data, }); +} + +// ==================== 订单管理接口 ==================== +// 订单列表查询 +export function orderPageQuery(data) { + return request({ + url: '/order/list', + method: 'POST', + data, + }); +} + +// 新增订单 +export function orderAddNew(data) { + return request({ + url: '/order/add', + method: 'POST', + data, + }); +} + +// 更新订单 +export function orderUpdate(data) { + return request({ + url: '/order/edit', + method: 'POST', + data, + }); +} + +// 删除订单 +export function orderDelete(id) { + return request({ + url: `/order/delete?id=${id}`, + method: 'GET', + }); +} + +// 查询订单详情 +export function orderGetDetail(id) { + return request({ + url: `/order/detail?id=${id}`, + method: 'GET', + }); } \ No newline at end of file diff --git a/pc-cattle-transportation/src/api/userManage.js b/pc-cattle-transportation/src/api/userManage.js index 7594021..a7435cc 100644 --- a/pc-cattle-transportation/src/api/userManage.js +++ b/pc-cattle-transportation/src/api/userManage.js @@ -67,6 +67,15 @@ export function driverDetail(id) { }); } +// 司机 - 删除 +export function driverDel(id) { + return request({ + url: '/member/deleteDriver', + method: 'POST', + data: { id }, + }); +} + // --------- 会员管理 ----------- // 根据类型获取会员列表(用于装车订单下拉框) export function memberListByType(data) { @@ -75,4 +84,40 @@ export function memberListByType(data) { method: 'POST', data, }); +} + +// --------- 车辆管理 ----------- +// 车辆 - 列表 +export function vehicleList(data) { + return request({ + url: '/vehicle/list', + method: 'POST', + data, + }); +} + +// 车辆 - 新增 +export function vehicleAdd(data) { + return request({ + url: '/vehicle/add', + method: 'POST', + data, + }); +} + +// 车辆 - 编辑 +export function vehicleEdit(data) { + return request({ + url: '/vehicle/edit', + method: 'POST', + data, + }); +} + +// 车辆 - 删除 +export function vehicleDel(id) { + return request({ + url: `/vehicle/delete?id=${id}`, + method: 'GET', + }); } \ No newline at end of file diff --git a/pc-cattle-transportation/src/router/index.ts b/pc-cattle-transportation/src/router/index.ts index fce5c50..1f04a4e 100644 --- a/pc-cattle-transportation/src/router/index.ts +++ b/pc-cattle-transportation/src/router/index.ts @@ -183,6 +183,16 @@ export const constantRoutes: Array = [ }, component: () => import('~/views/userManage/driver.vue'), }, + { + path: '/userManage/vehicle', + name: 'VehicleManage', + meta: { + title: '车辆管理', + keepAlive: true, + requireAuth: true, + }, + component: () => import('~/views/userManage/vehicle.vue'), + }, ], }, // 早期预警路由 diff --git a/pc-cattle-transportation/src/views/earlywarning/list.vue b/pc-cattle-transportation/src/views/earlywarning/list.vue index 1e33648..40f93ef 100644 --- a/pc-cattle-transportation/src/views/earlywarning/list.vue +++ b/pc-cattle-transportation/src/views/earlywarning/list.vue @@ -52,6 +52,12 @@ @@ -121,6 +127,12 @@ const formItemList = reactive([ selectOptions: [ { value: 2, text: '数量盘单预警' }, { value: 3, text: '运输距离预警' }, + { value: 4, text: '设备停留预警' }, + { value: 5, text: '高温预警' }, + { value: 6, text: '低温预警' }, + { value: 7, text: '位置偏离预警' }, + { value: 8, text: '延误预警' }, + { value: 9, text: '超前到达预警' }, ], param: 'warningType', span: 7, diff --git a/pc-cattle-transportation/src/views/entry/details.vue b/pc-cattle-transportation/src/views/entry/details.vue index e90adff..ade8cb9 100644 --- a/pc-cattle-transportation/src/views/entry/details.vue +++ b/pc-cattle-transportation/src/views/entry/details.vue @@ -31,7 +31,7 @@ {{ data.baseInfo.createTime || '' }} {{ totalRegisteredDevices }} 个 - {{ getStatusText(data.baseInfo.status) }} + {{ getStatusText(data.baseInfo.status) }} @@ -1108,14 +1108,30 @@ const totalRegisteredDevices = computed(() => { const getStatusText = (status) => { const statusMap = { 1: '待装车', - 2: '装车中', - 3: '运输中', - 4: '已送达', - 5: '已完成' + 2: '已装车/预付款已支付', + 3: '已装车/尾款待支付', + 4: '已核验/待买家付款', + 5: '尾款已付款', + 6: '发票待开/进项票', + 7: '发票待开/销项' }; return statusMap[status] || '未知状态'; }; +// 根据状态返回标签类型(颜色) +const getStatusType = (status) => { + const typeMap = { + 1: 'info', // 待装车 - 灰色 + 2: 'success', // 已装车/预付款已支付 - 绿色 + 3: 'warning', // 已装车/尾款待支付 - 橙色 + 4: 'warning', // 已核验/待买家付款 - 橙色 + 5: 'success', // 尾款已付款 - 绿色 + 6: 'primary', // 发票待开/进项票 - 蓝色 + 7: 'primary' // 发票待开/销项 - 蓝色 + }; + return typeMap[status] || 'info'; +}; + onMounted(() => { data.id = route.query.id; data.status = route.query.status; diff --git a/pc-cattle-transportation/src/views/hardware/trackDialog.vue b/pc-cattle-transportation/src/views/hardware/trackDialog.vue index 151952e..b8c7380 100644 --- a/pc-cattle-transportation/src/views/hardware/trackDialog.vue +++ b/pc-cattle-transportation/src/views/hardware/trackDialog.vue @@ -70,8 +70,10 @@ diff --git a/pc-cattle-transportation/src/views/system/user.vue b/pc-cattle-transportation/src/views/system/user.vue index 27aba4d..3e8ada2 100644 --- a/pc-cattle-transportation/src/views/system/user.vue +++ b/pc-cattle-transportation/src/views/system/user.vue @@ -6,17 +6,21 @@
- - - - - - - - + + + + + + + + + +