打手列表新增VIP等级筛选
This commit is contained in:
@@ -420,6 +420,8 @@ export type ListInput = {
|
||||
workerType?: string
|
||||
/** 后台打手列表按主键精确定位。 */
|
||||
workerId?: number
|
||||
/** 后台打手列表按 VIP 等级筛选。 */
|
||||
levelId?: number
|
||||
/** 后台待验收筛选:普通单按接单人,拼单按参与打手等级。 */
|
||||
workerLevelIds?: number[]
|
||||
categoryId?: number
|
||||
|
||||
@@ -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<ListInput, 'status' | 'keyword' | 'workerType' | 'workerId'>) {
|
||||
levelId = 0,
|
||||
}: Pick<ListInput, 'status' | 'keyword' | 'workerType' | 'workerId' | 'levelId'>) {
|
||||
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,
|
||||
|
||||
@@ -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(),
|
||||
|
||||
@@ -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)
|
||||
}}
|
||||
/>
|
||||
<Select
|
||||
allowClear
|
||||
value={levelId || undefined}
|
||||
style={{ width: 140 }}
|
||||
placeholder="全部等级"
|
||||
loading={levelsQuery.isLoading}
|
||||
options={(levelsQuery.data?.data.items || []).map((item) => ({
|
||||
value: item.levelId,
|
||||
label: item.name,
|
||||
}))}
|
||||
onChange={(nextLevelId) => {
|
||||
setLevelId(nextLevelId || 0)
|
||||
setPage(1)
|
||||
}}
|
||||
/>
|
||||
<Button type="primary" icon={<SearchOutlined />} onClick={searchWorkers}>
|
||||
查询
|
||||
</Button>
|
||||
|
||||
Reference in New Issue
Block a user