diff --git a/apps/backend/src/repositories/worker-platform/types.ts b/apps/backend/src/repositories/worker-platform/types.ts index 7d058673..a4134637 100644 --- a/apps/backend/src/repositories/worker-platform/types.ts +++ b/apps/backend/src/repositories/worker-platform/types.ts @@ -420,6 +420,8 @@ export type ListInput = { workerType?: string /** 后台打手列表按主键精确定位。 */ workerId?: number + /** 后台打手列表按 VIP 等级筛选。 */ + levelId?: number /** 后台待验收筛选:普通单按接单人,拼单按参与打手等级。 */ workerLevelIds?: number[] categoryId?: number diff --git a/apps/backend/src/repositories/worker-platform/worker-repo.ts b/apps/backend/src/repositories/worker-platform/worker-repo.ts index 563e479e..47d5be30 100644 --- a/apps/backend/src/repositories/worker-platform/worker-repo.ts +++ b/apps/backend/src/repositories/worker-platform/worker-repo.ts @@ -236,8 +236,15 @@ export async function listWorkerUsers({ keyword = '', workerType = '', workerId = 0, + levelId = 0, }: ListInput = {}): Promise<{ items: WorkerUserRow[]; total: number }> { - const { whereClause, params } = buildWorkerUserWhere({ status, keyword, workerType, workerId }) + const { whereClause, params } = buildWorkerUserWhere({ + status, + keyword, + workerType, + workerId, + levelId, + }) const totalResult = await query<{ total: number }>( `SELECT COUNT(*)::int AS total FROM worker_users wu ${whereClause}`, params, @@ -299,7 +306,8 @@ function buildWorkerUserWhere({ keyword = '', workerType = '', workerId = 0, -}: Pick) { + levelId = 0, +}: Pick) { const filters: string[] = [] const params: unknown[] = [] if (status) { @@ -320,6 +328,10 @@ function buildWorkerUserWhere({ params.push(workerId) filters.push(`wu.id = $${params.length}`) } + if (levelId) { + params.push(levelId) + filters.push(`wu.level_id = $${params.length}`) + } return { whereClause: filters.length > 0 ? `WHERE ${filters.join(' AND ')}` : '', params, diff --git a/apps/backend/src/services/worker-platform/admin-worker-user-service.ts b/apps/backend/src/services/worker-platform/admin-worker-user-service.ts index 0311883a..73985cac 100644 --- a/apps/backend/src/services/worker-platform/admin-worker-user-service.ts +++ b/apps/backend/src/services/worker-platform/admin-worker-user-service.ts @@ -27,10 +27,12 @@ export async function listAdminWorkerUsers(query: JsonObject = {}) { const page = normalizePage(query.page) const pageSize = normalizePageSize(query.pageSize) const workerId = normalizeOptionalId(query.workerId ?? query.worker_id) || 0 + const levelId = normalizeOptionalId(query.levelId ?? query.level_id) || 0 const { items, total } = await listWorkerUsers({ page, pageSize, workerId, + levelId, status: String(query.status || '').trim(), keyword: String(query.keyword || '').trim(), workerType: String(query.workerType || query.worker_type || '').trim(), diff --git a/apps/frontend/src/pages/admin/panels/WorkersPanel.tsx b/apps/frontend/src/pages/admin/panels/WorkersPanel.tsx index c8eccecf..a6e051b3 100644 --- a/apps/frontend/src/pages/admin/panels/WorkersPanel.tsx +++ b/apps/frontend/src/pages/admin/panels/WorkersPanel.tsx @@ -57,6 +57,7 @@ export default function WorkersPanel() { const [keywordInput, setKeywordInput] = useState('') const [keyword, setKeyword] = useState('') const [workerType, setWorkerType] = useState('') + const [levelId, setLevelId] = useState(0) const [targetWorkerId, setTargetWorkerId] = useState(0) const [page, setPage] = useState(1) const [pageSize, setPageSize] = useState(ADMIN_DEFAULT_PAGE_SIZE) @@ -91,6 +92,7 @@ export default function WorkersPanel() { setKeyword('') setStatus('') setWorkerType('') + setLevelId(0) setPage(1) }, [searchParams]) @@ -100,6 +102,7 @@ export default function WorkersPanel() { status, keyword, workerType, + levelId, targetWorkerId, page, pageSize, @@ -109,6 +112,7 @@ export default function WorkersPanel() { status, keyword, workerType, + levelId: levelId || undefined, workerId: targetWorkerId || undefined, page, pageSize, @@ -152,6 +156,7 @@ export default function WorkersPanel() { setKeyword('') setStatus('') setWorkerType('') + setLevelId(0) setTargetWorkerId(0) setPage(1) setSearchParams( @@ -474,6 +479,21 @@ export default function WorkersPanel() { setPage(1) }} /> +