diff --git a/src/main/java/com/campus/water/controller/WorkOrderController.java b/src/main/java/com/campus/water/controller/WorkOrderController.java index eaee8c4..726e12a 100644 --- a/src/main/java/com/campus/water/controller/WorkOrderController.java +++ b/src/main/java/com/campus/water/controller/WorkOrderController.java @@ -73,15 +73,20 @@ public class WorkOrderController { } } - // 新增:审核工单接口(管理员专用) + // 1. 创建请求体类 + @Data + public static class ReviewOrderRequest { + private String orderId; + private boolean approved; + } + + // 2. 修改接口接收方式 @PostMapping("/review") @PreAuthorize("hasAnyRole('SUPER_ADMIN', 'AREA_ADMIN')") - public ResultVO reviewOrder( - @RequestParam String orderId, - @RequestParam boolean approved) { + public ResultVO reviewOrder(@RequestBody ReviewOrderRequest request) { try { - boolean result = workOrderService.reviewOrder(orderId, approved); - return result ? ResultVO.success(true, approved ? "审核通过" : "审核不通过") + boolean result = workOrderService.reviewOrder(request.getOrderId(), request.isApproved()); + return result ? ResultVO.success(true, request.isApproved() ? "审核通过" : "审核不通过") : ResultVO.error(400, "审核失败,工单状态异常"); } catch (Exception e) { return ResultVO.error(500, "审核失败:" + e.getMessage()); diff --git a/src/main/java/com/campus/water/controller/web/AreaController.java b/src/main/java/com/campus/water/controller/web/AreaController.java index aebfddf..ab0326b 100644 --- a/src/main/java/com/campus/water/controller/web/AreaController.java +++ b/src/main/java/com/campus/water/controller/web/AreaController.java @@ -72,7 +72,7 @@ public class AreaController { @RequestBody @Parameter(description = "区域信息(areaId为必填)") Area area ) { try { - if (area.getAreaId() == null || area.getAreaId().trim().isEmpty()) { + if (area.getAreaId() == null) { return ResponseEntity.ok(ResultVO.error(400, "区域ID不能为空")); } Area updatedArea = areaService.updateArea(area); diff --git a/src/main/resources/web/src/views/area/Campus.vue b/src/main/resources/web/src/views/area/Campus.vue index 18f6055..a922eff 100644 --- a/src/main/resources/web/src/views/area/Campus.vue +++ b/src/main/resources/web/src/views/area/Campus.vue @@ -1,4 +1,4 @@ - + \ No newline at end of file + diff --git a/src/main/resources/web/src/views/area/Urban.vue b/src/main/resources/web/src/views/area/Urban.vue index ad6efd7..d6e0ce1 100644 --- a/src/main/resources/web/src/views/area/Urban.vue +++ b/src/main/resources/web/src/views/area/Urban.vue @@ -1,4 +1,3 @@ - + \ No newline at end of file + diff --git a/src/main/resources/web/src/views/equipment/WaterMaker.vue b/src/main/resources/web/src/views/equipment/WaterMaker.vue index 9142ea4..a5df1f4 100644 --- a/src/main/resources/web/src/views/equipment/WaterMaker.vue +++ b/src/main/resources/web/src/views/equipment/WaterMaker.vue @@ -145,8 +145,8 @@
diff --git a/src/main/resources/web/src/views/personnel/Admin.vue b/src/main/resources/web/src/views/personnel/Admin.vue index c2ef0d7..c07dc5f 100644 --- a/src/main/resources/web/src/views/personnel/Admin.vue +++ b/src/main/resources/web/src/views/personnel/Admin.vue @@ -287,7 +287,7 @@ const fetchAdminList = async () => { admins.value = (response.data || []).map((admin: any) => ({ adminId: admin.adminId || '', name: admin.adminName || '未知姓名', // 正确映射 - account: admin.account || '', + account: admin.adminId || '', phone: admin.phone || '未知电话', role: admin.role || '未知角色', status: 'active' as AdminStatus diff --git a/src/main/resources/web/src/views/personnel/Maintenance.vue b/src/main/resources/web/src/views/personnel/Maintenance.vue index e96e345..92201b0 100644 --- a/src/main/resources/web/src/views/personnel/Maintenance.vue +++ b/src/main/resources/web/src/views/personnel/Maintenance.vue @@ -26,8 +26,10 @@
diff --git a/src/main/resources/web/src/views/workorder/Timeout.vue b/src/main/resources/web/src/views/workorder/Timeout.vue index 7e81f43..a392f85 100644 --- a/src/main/resources/web/src/views/workorder/Timeout.vue +++ b/src/main/resources/web/src/views/workorder/Timeout.vue @@ -165,8 +165,8 @@ @@ -221,12 +221,12 @@ interface TimeoutOrder { } // 维修人员接口 -interface MaintenanceStaff { - id: string +interface Repairman { + repairmanId: string repairmanName: string - phone: string - areaId: string // 负责片区 - status: 'idle' | 'busy' | 'vacation' // 状态 + phone?: string + areaId: string + status?: 'idle' | 'busy' | 'vacation' } // 响应式数据 @@ -251,7 +251,7 @@ const assignDialogVisible = ref(false) const currentOrder = ref(null) const selectedStaffId = ref('') const assignRemark = ref('') -const allStaff = ref([]) +const allStaff = ref([]) // 加载超时工单数据 - 修改此函数以支持时间筛选 const loadTimeoutOrders = async () => { @@ -371,7 +371,7 @@ const loadMaintenanceStaff = async (areaId: string) => { const response = await request<{ code: number msg: string - data: MaintenanceStaff[] + data: Repairman[] }>('/api/web/repairman/by-area/' + areaId, { method: 'GET', headers: { @@ -383,7 +383,13 @@ const loadMaintenanceStaff = async (areaId: string) => { console.log('响应数据结构:', typeof response.data, response.data) if (response.code === 200) { - allStaff.value = response.data || [] // 成功时会设置维修人员数据 + allStaff.value = (response.data || []).map(staff => ({ + repairmanId: staff.repairmanId, + repairmanName: staff.repairmanName, + phone: staff.phone || '未知', + areaId: staff.areaId || '', + status: staff.status || 'idle' + })) } else { console.error('获取维修人员失败:', response.msg) // 失败时输出错误信息 alert('获取维修人员失败:' + response.msg) @@ -498,17 +504,28 @@ const handleStaffChange = () => { } // 确认派单 +// 确认派单 - 修改为JSON格式 const confirmAssign = async () => { if (!currentOrder.value || !selectedStaffId.value) return try { + console.log('🚀 发送派单请求(使用JSON格式)...') + + // 检查Token是否存在 const token = authStore.token if (!token) { - router.push('/login') + alert('认证失败:未找到用户Token,请重新登录') return } - // 调用派单API + // 构建 JSON 数据 + const requestData = { + orderId: currentOrder.value.id, + repairmanId: selectedStaffId.value + } + + console.log('📤 JSON请求数据:', requestData) + const response = await request<{ code: number msg: string @@ -516,29 +533,41 @@ const confirmAssign = async () => { }>('/api/work-orders/assign', { method: 'POST', headers: { - 'Authorization': `Bearer ${token}`, - 'Content-Type': 'application/x-www-form-urlencoded' + 'Content-Type': 'application/json', // 修改为JSON格式 + 'Authorization': `Bearer ${token}` }, - body: new URLSearchParams({ - orderId: currentOrder.value.id, - repairmanId: selectedStaffId.value - }) + body: JSON.stringify(requestData) // 发送JSON字符串 }) + console.log('✅ 派单响应:', response) + if (response.code === 200 && response.data) { alert('派单成功') closeAssignDialog() - loadTimeoutOrders() // 重新加载工单列表 + loadTimeoutOrders() } else { const errorMsg = response.msg || '派单失败' - alert(errorMsg) + alert(`派单失败:${errorMsg} (错误码: ${response.code})`) } } catch (error: any) { - console.error('派单请求异常:', error) - alert('派单失败:' + (error.message || '网络错误')) + console.error('❌ 派单请求异常:', error) + + // 显示详细的错误信息 + if (error.message.includes('401') || error.message.includes('403')) { + alert('权限不足或认证失败:请重新登录') + authStore.logout() + } else if (error.message.includes('Unexpected token')) { + alert('派单失败:后端期望JSON格式,但可能接口配置不正确。请联系后端开发人员确认接口参数接收方式。') + } else { + alert('派单失败:' + (error.message || '未知错误')) + } } } + + + + // 页面加载时获取数据 onMounted(() => { console.log('Token:', authStore.token)