增加管理员联系二维码

This commit is contained in:
yml2213
2026-08-15 16:24:36 +08:00
parent 521cbe9d38
commit 00491daf5b
9 changed files with 72 additions and 105 deletions
@@ -92,6 +92,9 @@ type FinanceConfigFormValues = {
qrCodeImageList?: UploadedFile[]
instructions?: string
}
adminContact?: {
wechatQrCodeImageList?: UploadedFile[]
}
withdraw?: {
enabled?: boolean
instructions?: string
@@ -177,6 +180,9 @@ export default function FinancePanel() {
qrCodeImage: values.recharge?.qrCodeImageList?.[0] || null,
instructions: String(values.recharge?.instructions || '').trim(),
},
adminContact: {
wechatQrCodeImage: values.adminContact?.wechatQrCodeImageList?.[0] || null,
},
withdraw: {
enabled: values.withdraw?.enabled !== false,
instructions: String(values.withdraw?.instructions || '').trim(),
@@ -371,6 +377,15 @@ export default function FinancePanel() {
</Form.Item>
</Card>
<Card title="管理员联系" size="small" style={{ marginBottom: 16 }}>
<Form.Item
label="管理员微信二维码"
name={['adminContact', 'wechatQrCodeImageList']}
>
<ImageUpload scene="worker-admin-contact" scope="admin" maxCount={1} />
</Form.Item>
</Card>
<Card title="押金与提现规则" size="small" style={{ marginBottom: 16 }}>
<Form.Item
label="押金解冻天数"
@@ -551,6 +566,11 @@ function mapFinanceConfigToFormValues(
qrCodeImageList: config?.recharge.qrCodeImage ? [config.recharge.qrCodeImage] : [],
instructions: config?.recharge.instructions || '',
},
adminContact: {
wechatQrCodeImageList: config?.adminContact.wechatQrCodeImage
? [config.adminContact.wechatQrCodeImage]
: [],
},
withdraw: {
enabled: config?.withdraw.enabled !== false,
instructions: config?.withdraw.instructions || '',
@@ -32,7 +32,6 @@ import { DeadlineCountdown } from '@/components/DeadlineCountdown'
import ImagePreviewList from '@/components/files/ImagePreviewList'
import ImageUpload from '@/components/files/ImageUpload'
import {
cancelWorkerOrder,
fetchWorkerMyOrders,
saveWorkerAcceptanceDraft,
saveWorkerOrderNote,
@@ -73,7 +72,7 @@ type DetailFieldItem = {
}
export default function WorkerOrdersPage() {
const { message, modal } = App.useApp()
const { message } = App.useApp()
const queryClient = useQueryClient()
const [status, setStatus] = useState('')
const [keywordInput, setKeywordInput] = useState('')
@@ -239,26 +238,6 @@ export default function WorkerOrdersPage() {
setPage(1)
}
function openCancelModal(order: WorkOrder) {
modal.confirm({
title: '确认取消接单?',
content:
'取消后订单将重新回到抢单大厅,冻结押金全额退还。30 天内取消次数有限,请谨慎操作。',
okText: '确认取消',
cancelText: '再想想',
okButtonProps: { danger: true },
onOk: async () => {
try {
await cancelWorkerOrder(order.workOrderId)
message.success('已取消接单,押金已退还')
await refreshAll()
} catch (error) {
message.error(error instanceof Error ? error.message : '取消接单失败')
}
},
})
}
const columns: TableColumnsType<WorkOrder> = [
{
title: '订单信息',
@@ -464,11 +443,6 @@ export default function WorkerOrdersPage() {
</Button>
) : null}
</Space>
{canCancelOrder(row) ? (
<Button type="link" danger size="small" onClick={() => openCancelModal(row)}>
</Button>
) : null}
</div>
),
},
@@ -596,11 +570,6 @@ export default function WorkerOrdersPage() {
<Tag color={resolveStatusColor(detailOrder.status)}>
{formatStatus(detailOrder.status)}
</Tag>
{canCancelOrder(detailOrder) ? (
<Button danger onClick={() => openCancelModal(detailOrder)}>
</Button>
) : null}
{canEditAcceptanceImages(detailOrder) ? (
<Button
type={canSubmitAcceptance(detailOrder) ? 'primary' : 'default'}
@@ -851,10 +820,6 @@ function getDisplayOrderNo(order: Pick<WorkOrder, 'platformOrderId'> | null | un
return String(order?.platformOrderId || '').trim() || '-'
}
function canCancelOrder(order: WorkOrder) {
return !order.myShare && order.status === 'in_progress'
}
function getRequirementFields(order: WorkOrder | null): CollectField[] {
if (!order) return []
const rawFields = Array.isArray(order.requirement?.fields)
@@ -1027,8 +1027,24 @@ export default function WorkerProfilePage() {
<Alert
showIcon
type="info"
message="充值、提现与审核问题目前都由后台管理员人工处理。提交申请后,如需加急,可把下方账号信息发给管理员。"
message="如需取消已接订单,请扫码联系管理员处理。充值、提现与审核问题由后台管理员人工处理。"
/>
{financeConfig?.adminContact?.wechatQrCodeImage ? (
<div style={{ textAlign: 'center' }}>
<Image
width={200}
src={
financeConfig.adminContact.wechatQrCodeImage.mediumUrl ||
financeConfig.adminContact.wechatQrCodeImage.url
}
alt="管理员微信二维码"
/>
</div>
) : (
<Typography.Text type="secondary">
</Typography.Text>
)}
<Descriptions column={1} bordered size="small">
<Descriptions.Item label="账号">
<Typography.Text copyable>{worker?.username || '-'}</Typography.Text>
@@ -179,6 +179,9 @@ export function saveAdminWorkerFinanceConfig(payload: {
qrCodeImage?: unknown
instructions?: string
}
adminContact?: {
wechatQrCodeImage?: unknown
}
withdraw?: {
enabled?: boolean
instructions?: string
-6
View File
@@ -153,12 +153,6 @@ export function saveWorkerAcceptanceDraft(
)
}
export function cancelWorkerOrder(workOrderId: number) {
return apiPost<{ order: WorkOrder }>(
`/api/v1/worker/orders/${workOrderId}/cancel`,
)
}
export function lookupCollectOrder(orderNo: string) {
return apiPost<CollectLookupResponse>('/api/v1/collect/lookup', { orderNo })
}
@@ -95,6 +95,9 @@ export type WorkerFinanceConfig = {
qrCodeImage: UploadedFile | null
instructions: string
}
adminContact: {
wechatQrCodeImage: UploadedFile | null
}
withdraw: {
enabled: boolean
instructions: string