增加待补图订单筛选

This commit is contained in:
yml2213
2026-08-17 12:43:22 +08:00
parent baf09dc533
commit 1d9e102527
7 changed files with 50 additions and 9 deletions
@@ -226,6 +226,8 @@ export type ListInput = {
categoryId?: number
workerSharingId?: number
visibleAfterIso?: string
/** VIP 免审核后仍在补图期限内的订单;与状态筛选取并集 */
vipEvidencePending?: boolean
/** 置顶订单优先展示(抢单大厅使用) */
pinnedFirst?: boolean
sort?: 'id_desc' | 'worker_claimed_at_desc'
@@ -764,6 +764,7 @@ export async function listWorkOrders({
categoryId = 0,
workerSharingId = 0,
visibleAfterIso = '',
vipEvidencePending = false,
pinnedFirst = false,
sort = 'id_desc',
}: ListInput = {}): Promise<{ items: WorkOrderRow[]; total: number }> {
@@ -775,6 +776,7 @@ export async function listWorkOrders({
categoryId,
workerSharingId,
visibleAfterIso,
vipEvidencePending,
})
const totalResult = await query<{ total: number }>(
`
@@ -2585,13 +2587,27 @@ function buildWorkOrderWhere({
categoryId = 0,
workerSharingId = 0,
visibleAfterIso = '',
vipEvidencePending = false,
}: ListInput) {
const filters: string[] = []
const params: unknown[] = []
const normalizedStatuses = [
...new Set(statuses.map((item) => String(item || '').trim()).filter(Boolean)),
]
if (normalizedStatuses.length > 0) {
if (vipEvidencePending) {
const vipEvidencePendingWhere = `
wo.status = 'accepted'
AND wo.acceptance_json->>'reviewMode' = 'vip_auto'
AND wo.acceptance_json->>'evidenceStatus' = 'pending'
AND NULLIF(wo.acceptance_json->>'evidenceDueAt', '')::timestamptz > NOW()
`
if (normalizedStatuses.length > 0) {
params.push(normalizedStatuses)
filters.push(`(wo.status = ANY($${params.length}::text[]) OR (${vipEvidencePendingWhere}))`)
} else {
filters.push(`(${vipEvidencePendingWhere})`)
}
} else if (normalizedStatuses.length > 0) {
params.push(normalizedStatuses)
filters.push(`wo.status = ANY($${params.length}::text[])`)
}
@@ -696,12 +696,15 @@ export async function listAdminWorkOrders(query: JsonObject = {}) {
const page = normalizePage(query.page)
const pageSize = normalizePageSize(query.pageSize)
const workerId = normalizeOptionalId(query.workerId ?? query.worker_id) || 0
const statuses = normalizeStatuses(query.status)
const vipEvidencePending = normalizeBoolean(query.vipEvidencePending, false)
const { items, total } = await listWorkOrders({
page,
pageSize,
statuses: normalizeStatuses(query.status),
statuses,
keyword: String(query.keyword || '').trim(),
workerSharingId: workerId,
vipEvidencePending,
})
const shares = await listWorkOrderSharesByOrderIds(items.map((item) => Number(item.id)))
const sharesByOrderId = new Map<number, WorkOrderShareRow[]>()
@@ -89,6 +89,7 @@ import {
mapWorkerUser,
normalizeAmountFen,
assertWithdrawChannelAllowedForAmount,
normalizeBoolean,
normalizeFinanceRequestStatus,
normalizeFinanceRequestType,
normalizeInteger,
@@ -1114,12 +1115,14 @@ export async function listWorkerMyOrders(query: JsonObject = {}, session: Worker
await settleOverdueWorkOrders({ workerId: worker.id, limit: 50 })
const page = normalizePage(query.page)
const pageSize = normalizePageSize(query.pageSize)
const vipEvidencePending = normalizeBoolean(query.vipEvidencePending, false)
const { items, total } = await listWorkOrders({
page,
pageSize,
statuses: normalizeStatuses(query.status),
keyword: String(query.keyword || '').trim(),
workerSharingId: worker.id,
vipEvidencePending,
sort: 'worker_claimed_at_desc',
})
const permissions = resolveWorkerPermissions(worker)