打手列表新增VIP等级筛选
This commit is contained in:
@@ -420,6 +420,8 @@ export type ListInput = {
|
|||||||
workerType?: string
|
workerType?: string
|
||||||
/** 后台打手列表按主键精确定位。 */
|
/** 后台打手列表按主键精确定位。 */
|
||||||
workerId?: number
|
workerId?: number
|
||||||
|
/** 后台打手列表按 VIP 等级筛选。 */
|
||||||
|
levelId?: number
|
||||||
/** 后台待验收筛选:普通单按接单人,拼单按参与打手等级。 */
|
/** 后台待验收筛选:普通单按接单人,拼单按参与打手等级。 */
|
||||||
workerLevelIds?: number[]
|
workerLevelIds?: number[]
|
||||||
categoryId?: number
|
categoryId?: number
|
||||||
|
|||||||
@@ -236,8 +236,15 @@ export async function listWorkerUsers({
|
|||||||
keyword = '',
|
keyword = '',
|
||||||
workerType = '',
|
workerType = '',
|
||||||
workerId = 0,
|
workerId = 0,
|
||||||
|
levelId = 0,
|
||||||
}: ListInput = {}): Promise<{ items: WorkerUserRow[]; total: number }> {
|
}: 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 }>(
|
const totalResult = await query<{ total: number }>(
|
||||||
`SELECT COUNT(*)::int AS total FROM worker_users wu ${whereClause}`,
|
`SELECT COUNT(*)::int AS total FROM worker_users wu ${whereClause}`,
|
||||||
params,
|
params,
|
||||||
@@ -299,7 +306,8 @@ function buildWorkerUserWhere({
|
|||||||
keyword = '',
|
keyword = '',
|
||||||
workerType = '',
|
workerType = '',
|
||||||
workerId = 0,
|
workerId = 0,
|
||||||
}: Pick<ListInput, 'status' | 'keyword' | 'workerType' | 'workerId'>) {
|
levelId = 0,
|
||||||
|
}: Pick<ListInput, 'status' | 'keyword' | 'workerType' | 'workerId' | 'levelId'>) {
|
||||||
const filters: string[] = []
|
const filters: string[] = []
|
||||||
const params: unknown[] = []
|
const params: unknown[] = []
|
||||||
if (status) {
|
if (status) {
|
||||||
@@ -320,6 +328,10 @@ function buildWorkerUserWhere({
|
|||||||
params.push(workerId)
|
params.push(workerId)
|
||||||
filters.push(`wu.id = $${params.length}`)
|
filters.push(`wu.id = $${params.length}`)
|
||||||
}
|
}
|
||||||
|
if (levelId) {
|
||||||
|
params.push(levelId)
|
||||||
|
filters.push(`wu.level_id = $${params.length}`)
|
||||||
|
}
|
||||||
return {
|
return {
|
||||||
whereClause: filters.length > 0 ? `WHERE ${filters.join(' AND ')}` : '',
|
whereClause: filters.length > 0 ? `WHERE ${filters.join(' AND ')}` : '',
|
||||||
params,
|
params,
|
||||||
|
|||||||
@@ -27,10 +27,12 @@ export async function listAdminWorkerUsers(query: JsonObject = {}) {
|
|||||||
const page = normalizePage(query.page)
|
const page = normalizePage(query.page)
|
||||||
const pageSize = normalizePageSize(query.pageSize)
|
const pageSize = normalizePageSize(query.pageSize)
|
||||||
const workerId = normalizeOptionalId(query.workerId ?? query.worker_id) || 0
|
const workerId = normalizeOptionalId(query.workerId ?? query.worker_id) || 0
|
||||||
|
const levelId = normalizeOptionalId(query.levelId ?? query.level_id) || 0
|
||||||
const { items, total } = await listWorkerUsers({
|
const { items, total } = await listWorkerUsers({
|
||||||
page,
|
page,
|
||||||
pageSize,
|
pageSize,
|
||||||
workerId,
|
workerId,
|
||||||
|
levelId,
|
||||||
status: String(query.status || '').trim(),
|
status: String(query.status || '').trim(),
|
||||||
keyword: String(query.keyword || '').trim(),
|
keyword: String(query.keyword || '').trim(),
|
||||||
workerType: String(query.workerType || query.worker_type || '').trim(),
|
workerType: String(query.workerType || query.worker_type || '').trim(),
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ export default function WorkersPanel() {
|
|||||||
const [keywordInput, setKeywordInput] = useState('')
|
const [keywordInput, setKeywordInput] = useState('')
|
||||||
const [keyword, setKeyword] = useState('')
|
const [keyword, setKeyword] = useState('')
|
||||||
const [workerType, setWorkerType] = useState('')
|
const [workerType, setWorkerType] = useState('')
|
||||||
|
const [levelId, setLevelId] = useState(0)
|
||||||
const [targetWorkerId, setTargetWorkerId] = useState(0)
|
const [targetWorkerId, setTargetWorkerId] = useState(0)
|
||||||
const [page, setPage] = useState(1)
|
const [page, setPage] = useState(1)
|
||||||
const [pageSize, setPageSize] = useState(ADMIN_DEFAULT_PAGE_SIZE)
|
const [pageSize, setPageSize] = useState(ADMIN_DEFAULT_PAGE_SIZE)
|
||||||
@@ -91,6 +92,7 @@ export default function WorkersPanel() {
|
|||||||
setKeyword('')
|
setKeyword('')
|
||||||
setStatus('')
|
setStatus('')
|
||||||
setWorkerType('')
|
setWorkerType('')
|
||||||
|
setLevelId(0)
|
||||||
setPage(1)
|
setPage(1)
|
||||||
}, [searchParams])
|
}, [searchParams])
|
||||||
|
|
||||||
@@ -100,6 +102,7 @@ export default function WorkersPanel() {
|
|||||||
status,
|
status,
|
||||||
keyword,
|
keyword,
|
||||||
workerType,
|
workerType,
|
||||||
|
levelId,
|
||||||
targetWorkerId,
|
targetWorkerId,
|
||||||
page,
|
page,
|
||||||
pageSize,
|
pageSize,
|
||||||
@@ -109,6 +112,7 @@ export default function WorkersPanel() {
|
|||||||
status,
|
status,
|
||||||
keyword,
|
keyword,
|
||||||
workerType,
|
workerType,
|
||||||
|
levelId: levelId || undefined,
|
||||||
workerId: targetWorkerId || undefined,
|
workerId: targetWorkerId || undefined,
|
||||||
page,
|
page,
|
||||||
pageSize,
|
pageSize,
|
||||||
@@ -152,6 +156,7 @@ export default function WorkersPanel() {
|
|||||||
setKeyword('')
|
setKeyword('')
|
||||||
setStatus('')
|
setStatus('')
|
||||||
setWorkerType('')
|
setWorkerType('')
|
||||||
|
setLevelId(0)
|
||||||
setTargetWorkerId(0)
|
setTargetWorkerId(0)
|
||||||
setPage(1)
|
setPage(1)
|
||||||
setSearchParams(
|
setSearchParams(
|
||||||
@@ -474,6 +479,21 @@ export default function WorkersPanel() {
|
|||||||
setPage(1)
|
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 type="primary" icon={<SearchOutlined />} onClick={searchWorkers}>
|
||||||
查询
|
查询
|
||||||
</Button>
|
</Button>
|
||||||
|
|||||||
Reference in New Issue
Block a user