优化打手订单与界面

This commit is contained in:
yml2213
2026-08-16 13:52:45 +08:00
parent 8a5ba4c2f3
commit 4dd94cde27
5 changed files with 266 additions and 25 deletions
@@ -215,6 +215,7 @@ export type ListInput = {
categoryId?: number
workerSharingId?: number
visibleAfterIso?: string
sort?: 'id_desc' | 'worker_claimed_at_desc'
}
export type ProductRuleListInput = {
@@ -743,6 +743,7 @@ export async function listWorkOrders({
categoryId = 0,
workerSharingId = 0,
visibleAfterIso = '',
sort = 'id_desc',
}: ListInput = {}): Promise<{ items: WorkOrderRow[]; total: number }> {
const { whereClause, params } = buildWorkOrderWhere({
status,
@@ -761,11 +762,32 @@ export async function listWorkOrders({
params,
)
const offset = (page - 1) * pageSize
const orderBy =
sort === 'worker_claimed_at_desc' && workerSharingId
? (() => {
params.push(workerSharingId)
const workerIdPlaceholder = `$${params.length}`
return `COALESCE(
CASE
WHEN wo.assigned_worker_id = ${workerIdPlaceholder} THEN wo.assigned_at
END,
(
SELECT wos.created_at
FROM work_order_shares wos
WHERE wos.work_order_id = wo.id
AND wos.worker_id = ${workerIdPlaceholder}
AND wos.status != 'cancelled'
ORDER BY wos.created_at DESC
LIMIT 1
)
) DESC NULLS LAST, wo.id DESC`
})()
: 'wo.id DESC'
params.push(pageSize, offset)
const itemsResult = await query<WorkOrderRow>(
`${WORK_ORDER_SELECT}
${whereClause}
ORDER BY wo.id DESC
ORDER BY ${orderBy}
LIMIT $${params.length - 1} OFFSET $${params.length}`,
params,
)
@@ -994,6 +994,7 @@ export async function listWorkerMyOrders(query: JsonObject = {}, session: Worker
status: String(query.status || '').trim(),
keyword: String(query.keyword || '').trim(),
workerSharingId: worker.id,
sort: 'worker_claimed_at_desc',
})
const permissions = resolveWorkerPermissions(worker)
const myShares = await listWorkerSharesByWorker(worker.id)