优化打手注册和列表筛选
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { ReloadOutlined } from '@ant-design/icons'
|
||||
import { ReloadOutlined, SearchOutlined } from '@ant-design/icons'
|
||||
import { useQuery, useQueryClient } from '@tanstack/react-query'
|
||||
import {
|
||||
App,
|
||||
@@ -45,6 +45,9 @@ export default function WorkersPanel() {
|
||||
const { message, modal } = App.useApp()
|
||||
const queryClient = useQueryClient()
|
||||
const [status, setStatus] = useState('')
|
||||
const [keywordInput, setKeywordInput] = useState('')
|
||||
const [keyword, setKeyword] = useState('')
|
||||
const [workerType, setWorkerType] = useState('')
|
||||
const [page, setPage] = useState(1)
|
||||
const [pageSize, setPageSize] = useState(ADMIN_DEFAULT_PAGE_SIZE)
|
||||
const [creditWorker, setCreditWorker] = useState<WorkerUser | null>(null)
|
||||
@@ -59,8 +62,8 @@ export default function WorkersPanel() {
|
||||
const withdrawalAccountChannel = Form.useWatch('accountChannel', withdrawalAccountForm)
|
||||
|
||||
const workersQuery = useQuery({
|
||||
queryKey: ['admin-worker-platform-workers', status, page, pageSize],
|
||||
queryFn: () => fetchAdminWorkerUsers({ status, page, pageSize }),
|
||||
queryKey: ['admin-worker-platform-workers', status, keyword, workerType, page, pageSize],
|
||||
queryFn: () => fetchAdminWorkerUsers({ status, keyword, workerType, page, pageSize }),
|
||||
})
|
||||
const levelsQuery = useQuery({
|
||||
queryKey: ['admin-worker-platform-levels'],
|
||||
@@ -79,6 +82,19 @@ export default function WorkersPanel() {
|
||||
])
|
||||
}
|
||||
|
||||
function searchWorkers() {
|
||||
setKeyword(keywordInput.trim())
|
||||
setPage(1)
|
||||
}
|
||||
|
||||
function clearWorkerFilters() {
|
||||
setKeywordInput('')
|
||||
setKeyword('')
|
||||
setStatus('')
|
||||
setWorkerType('')
|
||||
setPage(1)
|
||||
}
|
||||
|
||||
async function review(worker: WorkerUser, nextStatus: string) {
|
||||
try {
|
||||
await reviewAdminWorkerUser(worker.workerId, { status: nextStatus })
|
||||
@@ -269,7 +285,7 @@ export default function WorkersPanel() {
|
||||
render: (_, row) => (
|
||||
<Space wrap>
|
||||
{row.status !== 'active' ? (
|
||||
<Button onClick={() => review(row, 'active')}>通过</Button>
|
||||
<Button onClick={() => review(row, 'active')}>启用</Button>
|
||||
) : null}
|
||||
{row.status !== 'rejected' ? (
|
||||
<Button onClick={() => review(row, 'rejected')}>拒绝</Button>
|
||||
@@ -300,22 +316,49 @@ export default function WorkersPanel() {
|
||||
<Card
|
||||
title="打手"
|
||||
extra={
|
||||
<Space>
|
||||
<Space wrap className="filter-form">
|
||||
<Input
|
||||
allowClear
|
||||
value={keywordInput}
|
||||
placeholder="账号 / 昵称 / 手机号"
|
||||
style={{ width: 220 }}
|
||||
onChange={(event) => setKeywordInput(event.target.value)}
|
||||
onPressEnter={searchWorkers}
|
||||
/>
|
||||
<Select
|
||||
allowClear
|
||||
value={status}
|
||||
style={{ width: 150 }}
|
||||
options={[
|
||||
{ value: '', label: '全部状态' },
|
||||
{ value: 'pending_review', label: '待审核' },
|
||||
{ value: 'active', label: '已通过' },
|
||||
{ value: 'rejected', label: '已拒绝' },
|
||||
{ value: 'pending_review', label: '待处理' },
|
||||
{ value: 'active', label: '已启用' },
|
||||
{ value: 'rejected', label: '已冻结' },
|
||||
{ value: 'disabled', label: '已停用' },
|
||||
]}
|
||||
onChange={(nextStatus) => {
|
||||
setStatus(nextStatus)
|
||||
setStatus(nextStatus || '')
|
||||
setPage(1)
|
||||
}}
|
||||
/>
|
||||
<Select
|
||||
allowClear
|
||||
value={workerType || undefined}
|
||||
style={{ width: 140 }}
|
||||
placeholder="全部类型"
|
||||
options={[
|
||||
{ value: 'external', label: '外部打手' },
|
||||
{ value: 'internal', label: '内部打手' },
|
||||
]}
|
||||
onChange={(nextType) => {
|
||||
setWorkerType(nextType || '')
|
||||
setPage(1)
|
||||
}}
|
||||
/>
|
||||
<Button type="primary" icon={<SearchOutlined />} onClick={searchWorkers}>
|
||||
查询
|
||||
</Button>
|
||||
<Button onClick={clearWorkerFilters}>清空筛选</Button>
|
||||
<Button
|
||||
icon={<ReloadOutlined />}
|
||||
loading={workersQuery.isFetching}
|
||||
|
||||
@@ -226,9 +226,9 @@ export function resolveStatusColor(status: string) {
|
||||
|
||||
export function formatWorkerStatus(status: string) {
|
||||
const labels: Record<string, string> = {
|
||||
pending_review: '待审核',
|
||||
active: '已通过',
|
||||
rejected: '已拒绝',
|
||||
pending_review: '待处理',
|
||||
active: '已启用',
|
||||
rejected: '已冻结',
|
||||
disabled: '已停用',
|
||||
}
|
||||
return labels[status] || status
|
||||
|
||||
Reference in New Issue
Block a user