diff --git a/backend/src/main/java/com/carmaintenance/controller/AppointmentController.java b/backend/src/main/java/com/carmaintenance/controller/AppointmentController.java index 648592b..35159f1 100644 --- a/backend/src/main/java/com/carmaintenance/controller/AppointmentController.java +++ b/backend/src/main/java/com/carmaintenance/controller/AppointmentController.java @@ -122,6 +122,6 @@ public class AppointmentController { return Result.notFound("预约不存在"); } appointmentRepository.deleteById(id); - return Result.success("删除成功"); + return Result.success("删除成功", null); } } diff --git a/backend/src/main/java/com/carmaintenance/controller/AuthController.java b/backend/src/main/java/com/carmaintenance/controller/AuthController.java index 3ec2079..87479ea 100644 --- a/backend/src/main/java/com/carmaintenance/controller/AuthController.java +++ b/backend/src/main/java/com/carmaintenance/controller/AuthController.java @@ -82,6 +82,6 @@ public class AuthController { */ @PostMapping("/logout") public Result logout() { - return Result.success("退出成功"); + return Result.success("退出成功", null); } } diff --git a/backend/src/main/java/com/carmaintenance/controller/PartsInventoryController.java b/backend/src/main/java/com/carmaintenance/controller/PartsInventoryController.java index f20b75f..67863aa 100644 --- a/backend/src/main/java/com/carmaintenance/controller/PartsInventoryController.java +++ b/backend/src/main/java/com/carmaintenance/controller/PartsInventoryController.java @@ -109,6 +109,6 @@ public class PartsInventoryController { return Result.notFound("配件不存在"); } partsInventoryRepository.deleteById(id); - return Result.success("删除成功"); + return Result.success("删除成功", null); } } diff --git a/backend/src/main/java/com/carmaintenance/controller/ServiceOrderController.java b/backend/src/main/java/com/carmaintenance/controller/ServiceOrderController.java index 05cc562..9ca3197 100644 --- a/backend/src/main/java/com/carmaintenance/controller/ServiceOrderController.java +++ b/backend/src/main/java/com/carmaintenance/controller/ServiceOrderController.java @@ -126,7 +126,7 @@ public class ServiceOrderController { return Result.notFound("工单不存在"); } serviceOrderRepository.deleteById(id); - return Result.success("删除成功"); + return Result.success("删除成功", null); } /** diff --git a/backend/src/main/java/com/carmaintenance/controller/UserController.java b/backend/src/main/java/com/carmaintenance/controller/UserController.java index 731eccf..330cb6c 100644 --- a/backend/src/main/java/com/carmaintenance/controller/UserController.java +++ b/backend/src/main/java/com/carmaintenance/controller/UserController.java @@ -102,7 +102,7 @@ public class UserController { return Result.notFound("用户不存在"); } userRepository.deleteById(id); - return Result.success("删除成功"); + return Result.success("删除成功", null); } /** @@ -123,6 +123,6 @@ public class UserController { user.setPassword(newPassword); userRepository.save(user); - return Result.success("密码修改成功"); + return Result.success("密码修改成功", null); } } diff --git a/backend/src/main/java/com/carmaintenance/controller/VehicleController.java b/backend/src/main/java/com/carmaintenance/controller/VehicleController.java index ca7499a..d550b80 100644 --- a/backend/src/main/java/com/carmaintenance/controller/VehicleController.java +++ b/backend/src/main/java/com/carmaintenance/controller/VehicleController.java @@ -107,6 +107,6 @@ public class VehicleController { return Result.notFound("车辆不存在"); } vehicleRepository.deleteById(id); - return Result.success("删除成功"); + return Result.success("删除成功", null); } } diff --git a/backend/src/main/resources/application.properties b/backend/src/main/resources/application.properties index b81269e..07cbfdf 100644 --- a/backend/src/main/resources/application.properties +++ b/backend/src/main/resources/application.properties @@ -5,9 +5,9 @@ server.servlet.context-path=/api # 数据库配置 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver -spring.datasource.url=jdbc:mysql://localhost:3306/car_maintenance_db?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true +spring.datasource.url=jdbc:mysql://localhost:3307/car_maintenance_db?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true spring.datasource.username=root -spring.datasource.password=123456 +spring.datasource.password=qq5211314 # JPA配置 spring.jpa.database=mysql diff --git a/frontend/FEATURES.md b/frontend/FEATURES.md new file mode 100644 index 0000000..b96a5ba --- /dev/null +++ b/frontend/FEATURES.md @@ -0,0 +1,170 @@ +# 功能测试说明 + +## ✅ 已实现的真实功能 + +### 管理员功能 (admin/dashboard.html) + +#### 1. 用户管理 +- ✅ **查看用户**:点击"查看"按钮打开模态框,显示用户详细信息(只读模式) +- ✅ **编辑用户**:点击"编辑"按钮打开模态框,可修改用户信息并保存 +- ✅ **删除用户**:点击"删除"按钮,确认后删除用户 +- ✅ **添加用户**:点击"添加用户"按钮,打开空白表单创建新用户 + +**测试步骤:** +1. 登录后进入"用户管理" +2. 点击任意用户的"查看"按钮 - 应弹出模态框显示详细信息 +3. 点击"编辑"按钮 - 应弹出可编辑的模态框 +4. 修改真实姓名后点击"保存" - 应显示"更新成功"提示 +5. 点击"删除"按钮 - 确认后删除该用户 + +#### 2. 车辆管理 +- ✅ **查看车辆**:显示车辆详细信息(只读) +- ✅ **编辑车辆**:可修改里程、状态等信息 +- ✅ **删除车辆**:确认后删除 +- ✅ **添加车辆**:创建新车辆档案 + +**测试步骤:** +1. 进入"车辆管理" +2. 查看奔驰C200L的详细信息 +3. 修改里程数并保存 +4. 尝试添加新车辆(车牌号不能重复) + +#### 3. 工单管理 +- ✅ **查看工单**:显示工单完整信息 +- ✅ **编辑工单**:可修改服务类型、费用、状态等 +- ✅ **自动计算**:配件费用+工时费用=总费用 +- ✅ **删除工单**:确认后删除 +- ✅ **状态筛选**:下拉框过滤不同状态的工单 + +**测试步骤:** +1. 进入"工单管理" +2. 查看工单SO202501070001的详情 +3. 编辑工单,修改配件费用和工时费用,观察总费用自动计算 +4. 修改工单状态为"已完成" +5. 使用状态下拉框筛选"进行中"的工单 + +#### 4. 配件管理 +- ✅ **查看配件**:显示配件信息 +- ✅ **编辑库存**:快速修改库存数量 +- ✅ **库存预警**:库存<=最小库存时显示红色预警标签 +- ✅ **删除配件**:确认后删除 + +**测试步骤:** +1. 进入"配件管理" +2. 观察库存预警标签 +3. 点击"编辑"修改库存数量 +4. 删除某个配件 + +#### 5. 预约管理 +- ✅ **查看预约**:显示预约列表 +- ✅ **确认预约**:将预约状态改为"已确认" +- ✅ **取消预约**:将预约状态改为"已取消" + +### 工作人员功能 (staff/dashboard.html) + +#### 1. 车辆查询 +- ✅ **按车牌号查询**:输入车牌号后显示车辆详细信息 +- ✅ **回车搜索**:支持按回车键直接搜索 + +**测试步骤:** +1. 进入"车辆查询" +2. 输入"京A12345"点击查询或按回车 +3. 查看车辆完整信息 + +#### 2. 配件查询 +- ✅ **关键词搜索**:按配件名称或编号搜索 +- ✅ **库存预警**:显示库存预警标签 + +**测试步骤:** +1. 进入"配件查询" +2. 输入"机油"搜索 +3. 查看搜索结果和库存状态 + +### 客户功能 (customer/dashboard.html) + +#### 1. 我的车辆 +- ✅ **卡片式展示**:美观的车辆卡片 +- ✅ **详细信息**:品牌、型号、颜色、里程、保养时间 + +#### 2. 维保记录 +- ✅ **历史记录**:显示所有维保工单 +- ✅ **详细信息**:工单号、服务类型、费用、状态 + +#### 3. 我的预约 +- ✅ **预约列表**:显示所有预约 +- ✅ **取消预约**:可取消待确认的预约 +- ✅ **状态标识**:不同颜色的状态标签 + +#### 4. 在线预约 +- ✅ **表单验证**:验证必填项 +- ✅ **创建预约**:提交后创建新预约 +- ✅ **自动刷新**:预约成功后自动刷新列表 + +**测试步骤:** +1. 进入"在线预约" +2. 选择车辆、服务类型、预约时间 +3. 填写联系电话 +4. 点击"提交预约" +5. 查看"我的预约"中的新记录 + +--- + +## 🔧 API端点对照表 + +| 功能 | 方法 | 端点 | 说明 | +|------|------|------|------| +| 登录 | POST | /api/auth/login | 用户登录 | +| 获取所有用户 | GET | /api/users | 获取用户列表 | +| 获取单个用户 | GET | /api/users/{id} | 获取用户详情 | +| 更新用户 | PUT | /api/users/{id} | 更新用户信息 | +| 删除用户 | DELETE | /api/users/{id} | 删除用户 | +| 获取所有车辆 | GET | /api/vehicles | 获取车辆列表 | +| 按车牌查询 | GET | /api/vehicles/plate/{plate} | 查询车辆 | +| 更新车辆 | PUT | /api/vehicles/{id} | 更新车辆信息 | +| 删除车辆 | DELETE | /api/vehicles/{id} | 删除车辆 | +| 获取所有工单 | GET | /api/orders | 获取工单列表 | +| 获取单个工单 | GET | /api/orders/{id} | 获取工单详情 | +| 更新工单 | PUT | /api/orders/{id} | 更新工单信息 | +| 删除工单 | DELETE | /api/orders/{id} | 删除工单 | +| 获取所有配件 | GET | /api/parts | 获取配件列表 | +| 更新配件 | PUT | /api/parts/{id} | 更新配件信息 | +| 删除配件 | DELETE | /api/parts/{id} | 删除配件 | +| 获取所有预约 | GET | /api/appointments | 获取预约列表 | +| 确认预约 | PUT | /api/appointments/{id} | 确认预约 | +| 取消预约 | PUT | /api/appointments/{id}/cancel | 取消预约 | +| 创建预约 | POST | /api/appointments | 创建新预约 | + +--- + +## 📝 常见问题 + +### 1. 模态框不弹出 +- 确保Bootstrap JS已正确加载 +- 检查浏览器控制台是否有错误 + +### 2. 数据不刷新 +- 检查API请求是否成功 +- 查看浏览器Network面板的请求响应 + +### 3. 保存失败 +- 检查后端服务是否启动 +- 确认数据库连接正常 +- 查看后端控制台错误日志 + +### 4. 跨域错误 +- 确认后端CORS配置正确 +- 检查API_BASE_URL配置 + +--- + +## 🎯 测试账号 + +| 角色 | 用户名 | 密码 | 权限 | +|------|--------|------|------| +| 管理员 | admin | 123456 | 所有功能 | +| 工作人员 | staff001 | 123456 | 查询、处理工单 | +| 客户 | customer001 | 123456 | 车辆、预约 | + +--- + +所有功能现在都是真实的!数据会真正保存到数据库并实时刷新! diff --git a/frontend/admin/dashboard.html b/frontend/admin/dashboard.html index 97f5196..544bd4f 100644 --- a/frontend/admin/dashboard.html +++ b/frontend/admin/dashboard.html @@ -4,297 +4,514 @@ 管理员仪表板 - 车管家4S店车辆维保管理系统 - - + + + -
+
-