diff --git a/src/components/pages/WorkersPage.tsx b/src/components/pages/WorkersPage.tsx index d9b3aa9..93bb36a 100644 --- a/src/components/pages/WorkersPage.tsx +++ b/src/components/pages/WorkersPage.tsx @@ -78,6 +78,14 @@ export default function WorkersPage() { // 工单选择相关状态 const [workOrders, setWorkOrders] = useState([]) const [selectedWorkOrder, setSelectedWorkOrder] = useState("all") + // 每个工人的工单分页状态 + const [workerOrdersPagination, setWorkerOrdersPagination] = useState<{ + [workerId: string]: { + currentPage: number + pageSize: number + total: number + } + }>({}) // 获取工人工单列表 const fetchWorkOrdersList = async (workersId?: string) => { @@ -108,6 +116,23 @@ export default function WorkersPage() { } } + // 获取工人完成工单数量 + const fetchCompletedOrdersCount = async (workersId: string) => { + try { + const result = await apiGet(`/back/orders/list?pageNum=1&pageSize=999&workersId=${workersId}&status=7`) + + if (result && result.code === 200) { + const count = parseInt(result.total) || 0 + console.log(`工人 ${workersId} 完成工单数量:`, count) + return count + } + return 0 + } catch (error) { + console.error(`获取工人 ${workersId} 完成工单数量失败:`, error) + return 0 + } + } + // 获取工人列表 const fetchWorkersList = async (pageNum = currentPage, pageSizeParam = pageSize) => { try { @@ -117,24 +142,33 @@ export default function WorkersPage() { console.log('工人列表API返回结果:', result) if (result && result.code === 200 && result.rows) { - const processedWorkers = result.rows.map((worker: any) => ({ - id: worker.id, - name: worker.name, - workerId: worker.jobNum || worker.workersId || `W${worker.id}`, - phone: worker.phone, - dealerId: worker.distributorUserId, - dealerName: worker.distributorUser || '未知经销商', - province: worker.province, - skillLevel: mapAPISkillLevelToDisplay(worker.skillLevel), - joinDate: worker.createdAt, - status: mapJobStatusToDisplay(worker.job), - completedOrders: 0, - rating: 0, - specialties: worker.professionalSkills ? worker.professionalSkills.split(',').map((s: string) => s.trim()) : [], - workOrders: [], - apiData: worker + console.log('开始获取工人完成工单数量...') + const processedWorkers = await Promise.all(result.rows.map(async (worker: any) => { + // 获取该工人的完成工单数量 + const workersIdForQuery = worker.workersId || worker.jobNum || worker.id + console.log(`正在获取工人 ${worker.name}(${workersIdForQuery}) 的完成工单数量`) + const completedCount = await fetchCompletedOrdersCount(workersIdForQuery) + + return { + id: worker.id, + name: worker.name, + workerId: worker.jobNum || worker.workersId || `W${worker.id}`, + phone: worker.phone, + dealerId: worker.distributorUserId, + dealerName: worker.distributorUser || '未知经销商', + province: worker.province, + skillLevel: mapAPISkillLevelToDisplay(worker.skillLevel), + joinDate: worker.createdAt, + status: mapJobStatusToDisplay(worker.job), + completedOrders: completedCount, + rating: 0, + specialties: worker.professionalSkills ? worker.professionalSkills.split(',').map((s: string) => s.trim()) : [], + workOrders: [], + apiData: worker + } })) + console.log('工人列表及完成工单数量处理完成:', processedWorkers) setWorkers(processedWorkers) setTotal(parseInt(result.total) || 0) } else { @@ -442,6 +476,60 @@ export default function WorkersPage() { } } + // 获取指定工人的工单列表(支持分页) + const fetchWorkerOrders = async (workerId: string, pageNum: number = 1, pageSizeParam: number = 10) => { + const currentWorker = workers.find(w => w.id === workerId) + if (!currentWorker || !currentWorker.apiData) return + + try { + console.log(`获取工人 ${workerId} 的工单数据,页码: ${pageNum}, 每页: ${pageSizeParam}`) + + const workersIdParam = currentWorker.apiData.workersId || currentWorker.apiData.jobNum || workerId + const result = await apiGet(`/back/orders/list?pageNum=${pageNum}&pageSize=${pageSizeParam}&workersId=${workersIdParam}`) + + if (result && result.code === 200 && result.rows) { + const processedWorkOrders = result.rows.map((order: any) => ({ + id: order.workOrderNumber, + type: order.workOrderType, + merchant: order.merchantName, + mall: order.merchantLocation || order.merchantAddress || '地址未知', + equipment: order.equipmentName, + status: mapWorkOrderStatus(order.status), + completedDate: order.completedDate, + updatedAt: order.updatedAt, + startDate: order.scheduledDate || order.createdDate, + assignedDate: order.createdDate, + rating: null, + priority: order.priority, + responsiblePerson: order.responsiblePerson, + responsiblePhone: order.responsibleVirtualPhone, + workerPhone: order.workerVirtualPhone, + originalData: order + })) + + setWorkers(prev => prev.map(worker => + worker.id === workerId + ? { ...worker, workOrders: processedWorkOrders } + : worker + )) + + // 更新该工人的工单分页状态 + setWorkerOrdersPagination(prev => ({ + ...prev, + [workerId]: { + currentPage: pageNum, + pageSize: pageSizeParam, + total: parseInt(result.total) || 0 + } + })) + } else { + console.error('获取工单数据失败:', result?.msg || '未知错误') + } + } catch (error) { + console.error('请求工单数据失败:', error) + } + } + const toggleWorkerExpansion = async (workerId: string) => { const isCurrentlyExpanded = expandedWorkers.includes(workerId) @@ -449,47 +537,8 @@ export default function WorkersPage() { setExpandedWorkers((prev) => prev.filter((id) => id !== workerId)) } else { setExpandedWorkers((prev) => [...prev, workerId]) - - const currentWorker = workers.find(w => w.id === workerId) - if (currentWorker && currentWorker.apiData) { - try { - console.log(`获取工人 ${workerId} 的工单数据`) - - const workersIdParam = currentWorker.apiData.workersId || currentWorker.apiData.jobNum || workerId - const result = await apiGet(`/back/orders/list?pageNum=1&pageSize=10&workersId=${workersIdParam}`) - - if (result && result.code === 200 && result.rows) { - const processedWorkOrders = result.rows.map((order: any) => ({ - id: order.workOrderNumber, - type: order.workOrderType, - merchant: order.merchantName, - mall: order.merchantLocation || order.merchantAddress || '地址未知', - equipment: order.equipmentName, - status: mapWorkOrderStatus(order.status), - completedDate: order.completedDate, - updatedAt: order.updatedAt, - startDate: order.scheduledDate || order.createdDate, - assignedDate: order.createdDate, - rating: null, - priority: order.priority, - responsiblePerson: order.responsiblePerson, - responsiblePhone: order.responsibleVirtualPhone, - workerPhone: order.workerVirtualPhone, - originalData: order - })) - - setWorkers(prev => prev.map(worker => - worker.id === workerId - ? { ...worker, workOrders: processedWorkOrders } - : worker - )) - } else { - console.error('获取工单数据失败:', result?.msg || '未知错误') - } - } catch (error) { - console.error('请求工单数据失败:', error) - } - } + // 初始化分页并获取第一页数据 + await fetchWorkerOrders(workerId, 1, 10) } } @@ -929,48 +978,135 @@ export default function WorkersPage() {

工作记录

{worker.workOrders.length > 0 ? ( - - - - 工单编号 - 工单类型 - 商户信息 - 设备 - 状态 - 完成时间 - - - - {worker.workOrders.map((order: any) => ( - - {order.id} - - {order.type} - - -
-

{order.merchant}

-

{order.mall}

-
-
- -
- - {order.equipment} -
-
- {getWorkOrderStatusBadge(order.status)} - - {order.status === "completed" && order.updatedAt ? ( - {order.updatedAt} - ) : ( - - - )} - + <> +
+ + + 工单编号 + 工单类型 + 商户信息 + 设备 + 状态 + 完成时间 - ))} - -
+ + + {worker.workOrders.map((order: any) => ( + + {order.id} + + {order.type} + + +
+

{order.merchant}

+

{order.mall}

+
+
+ +
+ + {order.equipment} +
+
+ {getWorkOrderStatusBadge(order.status)} + + {order.status === "completed" && order.updatedAt ? ( + {order.updatedAt} + ) : ( + - + )} + +
+ ))} +
+ + {/* 工单分页组件 */} + {workerOrdersPagination[worker.id] && workerOrdersPagination[worker.id].total > 0 && ( +
+
+

+ 显示 {Math.min((workerOrdersPagination[worker.id].currentPage - 1) * workerOrdersPagination[worker.id].pageSize + 1, workerOrdersPagination[worker.id].total)} 到{" "} + {Math.min(workerOrdersPagination[worker.id].currentPage * workerOrdersPagination[worker.id].pageSize, workerOrdersPagination[worker.id].total)} 条,共 {workerOrdersPagination[worker.id].total} 条记录 +

+
+
+
+

每页显示

+ +

+
+
+ + +
+ {Array.from({ length: Math.min(5, Math.ceil(workerOrdersPagination[worker.id].total / workerOrdersPagination[worker.id].pageSize)) }, (_, i) => { + const pageNum = Math.max(1, workerOrdersPagination[worker.id].currentPage - 2) + i + if (pageNum > Math.ceil(workerOrdersPagination[worker.id].total / workerOrdersPagination[worker.id].pageSize)) return null + return ( + + ) + })} +
+ + +
+
+
+ )} + ) : (