优化打手注册和列表筛选
This commit is contained in:
@@ -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 || '-'
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user