增加管理员联系二维码
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user