import { BugOutlined, CopyOutlined, LinkOutlined } from '@ant-design/icons' import { Alert, App, Button, Card, Col, Divider, Form, Input, Result, Row, Select, Space, Typography, } from 'antd' import { useMutation, useQuery } from '@tanstack/react-query' import { useMemo, useState } from 'react' import { Link } from 'react-router' import PageHeader from '@/components/admin/PageHeader' import { buildOpen91QueryDevMock, createAffiliateDashDevMock, createFeifeiDevMock, createKuaishouIndustryVoucherDevMock, createLewanDevMock, fetchDevMockStatus, type DevMockCreateResult, type DevMockKuaishouIndustryVoucherResult, type DevMockOpen91QueryResult, } from '@/services/admin' export default function AdminDevMockPage() { const { message } = App.useApp() const [lastCreate, setLastCreate] = useState(null) const [lastVoucherCreate, setLastVoucherCreate] = useState(null) const [lastQuery, setLastQuery] = useState(null) const statusQuery = useQuery({ queryKey: ['admin-dev-mock-status'], queryFn: () => fetchDevMockStatus(), retry: false, }) const status = statusQuery.data?.data const enabled = Boolean(status?.enabled) const lewanMutation = useMutation({ mutationFn: createLewanDevMock, onSuccess: (response) => { setLastCreate(response.data) message.success('lewan mock 已生成') }, onError: (error) => { message.error(error instanceof Error ? error.message : '生成失败') }, }) const feifeiMutation = useMutation({ mutationFn: createFeifeiDevMock, onSuccess: (response) => { setLastCreate(response.data) message.success('feifei mock 已生成') }, onError: (error) => { message.error(error instanceof Error ? error.message : '生成失败') }, }) const affiliateDashMutation = useMutation({ mutationFn: createAffiliateDashDevMock, onSuccess: (response) => { setLastCreate(response.data) message.success('affiliate-dash mock 已生成') }, onError: (error) => { message.error(error instanceof Error ? error.message : '生成失败') }, }) const voucherMutation = useMutation({ mutationFn: createKuaishouIndustryVoucherDevMock, onSuccess: (response) => { setLastVoucherCreate(response.data) message.success(`已生成 ${response.data.createdCount} 条电子凭证 Mock`) }, onError: (error) => { message.error(error instanceof Error ? error.message : '生成失败') }, }) const open91Mutation = useMutation({ mutationFn: buildOpen91QueryDevMock, onSuccess: (response) => { setLastQuery(response.data) message.success('91 查单请求已生成') }, onError: (error) => { message.error(error instanceof Error ? error.message : '生成失败') }, }) const defaultOrderNo = useMemo(() => lastCreate?.orderNo || '', [lastCreate?.orderNo]) if (statusQuery.isLoading) { return (
) } if (statusQuery.error || !enabled) { return (
) } return (
NODE_ENV={status?.nodeEnv || '-'} } /> } message="Mock 会写入开发库真实订单/任务,但 lewan 兑换走 mock 成功路径,feifei 不调用真实平台下单。" description="建议 UID 与默认角色一致:lewan 默认 10001,feifei 默认 166909256。" /> lewanMutation.mutate(values)} /> feifeiMutation.mutate(values)} /> affiliateDashMutation.mutate(values)} /> voucherMutation.mutate(values)} />
open91Mutation.mutate({ orderNo: values.orderNo, execute: values.execute === '1', }) } >
) } function FeifeiMockForm({ loading, onSubmit, }: { loading: boolean onSubmit: (values: Record) => void }) { const [form] = Form.useForm() const step = Form.useWatch('step', form) const uidRequired = step !== 'uid' return (
) } function AffiliateDashMockForm({ loading, onSubmit, }: { loading: boolean onSubmit: (values: Record) => void }) { const [form] = Form.useForm() const step = Form.useWatch('step', form) const uidRequired = step !== 'uid' return (
) } function KuaishouIndustryVoucherMockForm({ loading, onSubmit, }: { loading: boolean onSubmit: (values: { sellerId?: string }) => void }) { return (
) }