增加待补图订单筛选
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user