feat(worker-platform): 增加寄卖白名单总开关,关闭后全员可发布

资金配置与打手列表可一键切换白名单模式;发布校验、打手端入口按总开关放行。同时收紧未开通判定、关权限确认和开通弹窗文案。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
yml2213
2026-09-21 14:23:00 +08:00
co-authored by Cursor
parent 937e51db6b
commit 9298b31b9b
17 changed files with 342 additions and 56 deletions
@@ -33,6 +33,7 @@ import {
Tabs,
Tag,
Typography,
Spin,
} from 'antd'
import { useEffect, useMemo, useRef, useState } from 'react'
@@ -54,6 +55,7 @@ import {
SURNAN_PUBLISH_ZONE_OPTIONS,
} from '@/utils/consignment-spec'
import { formatGiftCooldownRemaining } from '@/utils/consignment-cooldown'
import { canWorkerPublishConsignment } from '@/utils/consignment-whitelist'
import { formatDateTime } from '@/utils/date-time'
import { useIsMobile } from '@/utils/use-is-mobile'
@@ -200,13 +202,13 @@ export default function WorkerConsignmentPage() {
const publishDepositYuan = publishDepositFen / 100
const availableAmount = Number(worker?.wallet?.availableAmount || 0)
const canPublish = availableAmount >= publishDepositFen
const canConsign = worker?.canConsign !== false
const canConsign = canWorkerPublishConsignment({
profileReady: !profileQuery.isLoading && Boolean(worker),
whitelistEnabled: financeConfig?.consignmentWhitelistEnabled !== false,
workerCanConsign: worker?.canConsign === true,
})
const [contactOpen, setContactOpen] = useState(false)
const reviewingCount = records.filter((item) => item.group === 'reviewing').length
const activeCount = records.filter((item) => item.group === 'active').length
const finishedCount = records.filter((item) => item.group === 'finished').length
// 阶段 → 分组由后端下发(item.group),这里只把它映射到筛选角标计数上
const groupCounts = useMemo(() => {
const stageGroups = new Map<string, string>()
@@ -527,7 +529,7 @@ export default function WorkerConsignmentPage() {
<div className="worker-consignment-kpi-main">
<span className="worker-consignment-kpi-title">待审核</span>
<span className="worker-consignment-kpi-val">
{reviewingCount}
{groupCounts.reviewing}
<span className="worker-consignment-kpi-unit">单</span>
</span>
</div>
@@ -546,8 +548,8 @@ export default function WorkerConsignmentPage() {
<div className="worker-consignment-kpi-main">
<span className="worker-consignment-kpi-title">履约中</span>
<span className="worker-consignment-kpi-val">
{activeCount}
<span className="worker-consignment-kpi-unit">把</span>
{groupCounts.active}
<span className="worker-consignment-kpi-unit">单</span>
</span>
</div>
<div className="worker-consignment-kpi-icon in-progress">
@@ -565,8 +567,8 @@ export default function WorkerConsignmentPage() {
<div className="worker-consignment-kpi-main">
<span className="worker-consignment-kpi-title">已完成</span>
<span className="worker-consignment-kpi-val">
{finishedCount}
<span className="worker-consignment-kpi-unit">把</span>
{groupCounts.finished}
<span className="worker-consignment-kpi-unit">单</span>
</span>
</div>
<div className="worker-consignment-kpi-icon accepted">
@@ -588,7 +590,11 @@ export default function WorkerConsignmentPage() {
<DollarCircleOutlined /> 发布寄卖
</span>
),
children: !canConsign ? (
children: profileQuery.isLoading ? (
<div style={{ padding: '48px 16px', textAlign: 'center' }}>
<Spin />
</div>
) : !canConsign ? (
<div style={{ padding: '36px 16px', textAlign: 'center' }}>
<Empty
image={Empty.PRESENTED_IMAGE_SIMPLE}
@@ -601,7 +607,7 @@ export default function WorkerConsignmentPage() {
type="secondary"
style={{ fontSize: 13, marginBottom: 20 }}
>
为保障寄卖道具交付质量与履约安全,平台当前实行白名单审核制。请联系在线客服申请开通寄卖权限。
平台当前开启寄卖白名单。请联系客服申请开通,由后台运营开通后即可发布苏尔南寄卖。
</Typography.Paragraph>
<Button
type="primary"
@@ -972,6 +978,7 @@ export default function WorkerConsignmentPage() {
worker={worker}
financeConfig={financeConfig}
title="联系客服开通寄卖"
alertMessage="请扫码联系客服申请开通寄卖。开通由后台运营处理,通过后即可发布苏尔南。"
/>
</section>
)