优化打手注册和列表筛选

This commit is contained in:
yml2213
2026-08-20 09:52:51 +08:00
parent f1575aec85
commit 12ca943170
14 changed files with 99 additions and 35 deletions
+3 -3
View File
@@ -352,9 +352,9 @@ function resolveSelectedKey(pathname: string) {
}
function formatWorkerStatus(status: string) {
if (status === 'active') return '已审核'
if (status === 'pending_review') return '待审核'
if (status === 'rejected') return '审核未通过'
if (status === 'active') return '已启用'
if (status === 'pending_review') return '待处理'
if (status === 'rejected') return '已冻结'
if (status === 'disabled') return '已停用'
return '未登录'
}
@@ -106,7 +106,7 @@ function SummaryCards() {
const summary = summaryQuery.data?.data
const items = [
{ label: '待审核打手', value: summary?.pendingWorkerCount || 0 },
{ label: '待处理打手', value: summary?.pendingWorkerCount || 0 },
{ label: '待完善订单', value: summary?.pendingMaterialCount || 0 },
{ label: '大厅订单', value: summary?.openOrderCount || 0 },
{ label: '代练中', value: summary?.inProgressOrderCount || 0 },
@@ -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
@@ -155,10 +155,8 @@ export default function WorkerLoginPage() {
}) {
setLoading(true)
try {
const response = await registerWorker(values)
message.success(
response.data.reviewRequired ? '注册成功,请等待后台审核' : '注册成功,请使用手机号登录',
)
await registerWorker(values)
message.success('注册成功,请使用手机号登录')
registerForm.resetFields()
} catch (error) {
message.error(error instanceof Error ? error.message : '注册失败')
@@ -944,7 +944,7 @@ export default function WorkerProfilePage() {
</span>
</div>
<div className="worker-profile-mobile-account-item">
<span className="worker-profile-mobile-acc-label"></span>
<span className="worker-profile-mobile-acc-label"></span>
<span className="worker-profile-mobile-acc-val">
<Tag color={resolveWorkerStatusColor(worker.status)}>
{formatWorkerStatus(worker.status)}
@@ -1184,7 +1184,7 @@ export default function WorkerProfilePage() {
<Descriptions.Item label="手机号">
{worker.phone || '-'}
</Descriptions.Item>
<Descriptions.Item label="审核状态">
<Descriptions.Item label="账号状态">
<Tag color={resolveWorkerStatusColor(worker.status)}>
{formatWorkerStatus(worker.status)}
</Tag>
@@ -1814,7 +1814,7 @@ export default function WorkerProfilePage() {
<Descriptions.Item label="手机号">
<Typography.Text copyable>{worker?.phone || '-'}</Typography.Text>
</Descriptions.Item>
<Descriptions.Item label="审核状态">
<Descriptions.Item label="账号状态">
{formatWorkerStatus(worker?.status || '')}
</Descriptions.Item>
<Descriptions.Item label="当前余额">
@@ -1852,9 +1852,9 @@ function formatMoney(value: number | undefined) {
}
function formatWorkerStatus(status: string) {
if (status === 'active') return '已审核'
if (status === 'pending_review') return '待审核'
if (status === 'rejected') return '审核未通过'
if (status === 'active') return '已启用'
if (status === 'pending_review') return '待处理'
if (status === 'rejected') return '已冻结'
if (status === 'disabled') return '已停用'
return status || '-'
}