优化
This commit is contained in:
@@ -78,6 +78,14 @@ export default function WorkersPage() {
|
||||
// 工单选择相关状态
|
||||
const [workOrders, setWorkOrders] = useState<any[]>([])
|
||||
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<any>(`/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,7 +142,14 @@ export default function WorkersPage() {
|
||||
console.log('工人列表API返回结果:', result)
|
||||
|
||||
if (result && result.code === 200 && result.rows) {
|
||||
const processedWorkers = result.rows.map((worker: any) => ({
|
||||
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}`,
|
||||
@@ -128,13 +160,15 @@ export default function WorkersPage() {
|
||||
skillLevel: mapAPISkillLevelToDisplay(worker.skillLevel),
|
||||
joinDate: worker.createdAt,
|
||||
status: mapJobStatusToDisplay(worker.job),
|
||||
completedOrders: 0,
|
||||
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,21 +476,16 @@ export default function WorkersPage() {
|
||||
}
|
||||
}
|
||||
|
||||
const toggleWorkerExpansion = async (workerId: string) => {
|
||||
const isCurrentlyExpanded = expandedWorkers.includes(workerId)
|
||||
|
||||
if (isCurrentlyExpanded) {
|
||||
setExpandedWorkers((prev) => prev.filter((id) => id !== workerId))
|
||||
} else {
|
||||
setExpandedWorkers((prev) => [...prev, workerId])
|
||||
|
||||
// 获取指定工人的工单列表(支持分页)
|
||||
const fetchWorkerOrders = async (workerId: string, pageNum: number = 1, pageSizeParam: number = 10) => {
|
||||
const currentWorker = workers.find(w => w.id === workerId)
|
||||
if (currentWorker && currentWorker.apiData) {
|
||||
if (!currentWorker || !currentWorker.apiData) return
|
||||
|
||||
try {
|
||||
console.log(`获取工人 ${workerId} 的工单数据`)
|
||||
console.log(`获取工人 ${workerId} 的工单数据,页码: ${pageNum}, 每页: ${pageSizeParam}`)
|
||||
|
||||
const workersIdParam = currentWorker.apiData.workersId || currentWorker.apiData.jobNum || workerId
|
||||
const result = await apiGet<any>(`/back/orders/list?pageNum=1&pageSize=10&workersId=${workersIdParam}`)
|
||||
const result = await apiGet<any>(`/back/orders/list?pageNum=${pageNum}&pageSize=${pageSizeParam}&workersId=${workersIdParam}`)
|
||||
|
||||
if (result && result.code === 200 && result.rows) {
|
||||
const processedWorkOrders = result.rows.map((order: any) => ({
|
||||
@@ -483,6 +512,16 @@ export default function WorkersPage() {
|
||||
? { ...worker, workOrders: processedWorkOrders }
|
||||
: worker
|
||||
))
|
||||
|
||||
// 更新该工人的工单分页状态
|
||||
setWorkerOrdersPagination(prev => ({
|
||||
...prev,
|
||||
[workerId]: {
|
||||
currentPage: pageNum,
|
||||
pageSize: pageSizeParam,
|
||||
total: parseInt(result.total) || 0
|
||||
}
|
||||
}))
|
||||
} else {
|
||||
console.error('获取工单数据失败:', result?.msg || '未知错误')
|
||||
}
|
||||
@@ -490,6 +529,16 @@ export default function WorkersPage() {
|
||||
console.error('请求工单数据失败:', error)
|
||||
}
|
||||
}
|
||||
|
||||
const toggleWorkerExpansion = async (workerId: string) => {
|
||||
const isCurrentlyExpanded = expandedWorkers.includes(workerId)
|
||||
|
||||
if (isCurrentlyExpanded) {
|
||||
setExpandedWorkers((prev) => prev.filter((id) => id !== workerId))
|
||||
} else {
|
||||
setExpandedWorkers((prev) => [...prev, workerId])
|
||||
// 初始化分页并获取第一页数据
|
||||
await fetchWorkerOrders(workerId, 1, 10)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -929,6 +978,7 @@ export default function WorkersPage() {
|
||||
|
||||
<h4 className="font-medium mb-3">工作记录</h4>
|
||||
{worker.workOrders.length > 0 ? (
|
||||
<>
|
||||
<Table>
|
||||
<TableHeader>
|
||||
<TableRow>
|
||||
@@ -971,6 +1021,92 @@ export default function WorkersPage() {
|
||||
))}
|
||||
</TableBody>
|
||||
</Table>
|
||||
{/* 工单分页组件 */}
|
||||
{workerOrdersPagination[worker.id] && workerOrdersPagination[worker.id].total > 0 && (
|
||||
<div className="flex items-center justify-between px-2 py-4 border-t mt-4">
|
||||
<div className="flex items-center space-x-2">
|
||||
<p className="text-sm text-gray-700">
|
||||
显示 {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} 条记录
|
||||
</p>
|
||||
</div>
|
||||
<div className="flex items-center space-x-2">
|
||||
<div className="flex items-center space-x-2">
|
||||
<p className="text-sm text-gray-700">每页显示</p>
|
||||
<Select
|
||||
value={workerOrdersPagination[worker.id].pageSize.toString()}
|
||||
onValueChange={(value) => {
|
||||
const newPageSize = parseInt(value)
|
||||
fetchWorkerOrders(worker.id, 1, newPageSize)
|
||||
}}
|
||||
>
|
||||
<SelectTrigger className="w-20">
|
||||
<SelectValue />
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
<SelectItem value="10">10</SelectItem>
|
||||
<SelectItem value="20">20</SelectItem>
|
||||
<SelectItem value="50">50</SelectItem>
|
||||
<SelectItem value="100">100</SelectItem>
|
||||
</SelectContent>
|
||||
</Select>
|
||||
<p className="text-sm text-gray-700">条</p>
|
||||
</div>
|
||||
<div className="flex items-center space-x-1">
|
||||
<Button
|
||||
variant="outline"
|
||||
size="sm"
|
||||
onClick={() => fetchWorkerOrders(worker.id, 1, workerOrdersPagination[worker.id].pageSize)}
|
||||
disabled={workerOrdersPagination[worker.id].currentPage === 1}
|
||||
>
|
||||
首页
|
||||
</Button>
|
||||
<Button
|
||||
variant="outline"
|
||||
size="sm"
|
||||
onClick={() => fetchWorkerOrders(worker.id, workerOrdersPagination[worker.id].currentPage - 1, workerOrdersPagination[worker.id].pageSize)}
|
||||
disabled={workerOrdersPagination[worker.id].currentPage === 1}
|
||||
>
|
||||
上一页
|
||||
</Button>
|
||||
<div className="flex items-center space-x-1">
|
||||
{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 (
|
||||
<Button
|
||||
key={pageNum}
|
||||
variant={workerOrdersPagination[worker.id].currentPage === pageNum ? "default" : "outline"}
|
||||
size="sm"
|
||||
onClick={() => fetchWorkerOrders(worker.id, pageNum, workerOrdersPagination[worker.id].pageSize)}
|
||||
className="w-8 h-8 p-0"
|
||||
>
|
||||
{pageNum}
|
||||
</Button>
|
||||
)
|
||||
})}
|
||||
</div>
|
||||
<Button
|
||||
variant="outline"
|
||||
size="sm"
|
||||
onClick={() => fetchWorkerOrders(worker.id, workerOrdersPagination[worker.id].currentPage + 1, workerOrdersPagination[worker.id].pageSize)}
|
||||
disabled={workerOrdersPagination[worker.id].currentPage >= Math.ceil(workerOrdersPagination[worker.id].total / workerOrdersPagination[worker.id].pageSize)}
|
||||
>
|
||||
下一页
|
||||
</Button>
|
||||
<Button
|
||||
variant="outline"
|
||||
size="sm"
|
||||
onClick={() => fetchWorkerOrders(worker.id, Math.ceil(workerOrdersPagination[worker.id].total / workerOrdersPagination[worker.id].pageSize), workerOrdersPagination[worker.id].pageSize)}
|
||||
disabled={workerOrdersPagination[worker.id].currentPage >= Math.ceil(workerOrdersPagination[worker.id].total / workerOrdersPagination[worker.id].pageSize)}
|
||||
>
|
||||
末页
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</>
|
||||
) : (
|
||||
<div className="text-center py-8 text-gray-500">
|
||||
<Wrench className="h-8 w-8 mx-auto mb-2 opacity-50" />
|
||||
|
||||
Reference in New Issue
Block a user