Files
order_site/apps/frontend/src/pages/claim/ClaimFeifeiSteps.tsx
T
yml2213 c70c3ff6a5 拆分领取页 ClaimPage 为多模块
将 snapshot、轮询、共享 UI、UID/lewan/feifei 步骤组件物理拆分,主文件只保留页面编排与状态。
2026-07-10 13:55:43 +08:00

111 lines
3.3 KiB
TypeScript

import {
CheckCircleOutlined,
ExclamationCircleOutlined,
LinkOutlined,
} from '@ant-design/icons'
import { Alert, Button, Card, Typography } from 'antd'
import type {
ClaimKuaishouFeifeiFlowInfo,
ClaimOrderInfo,
ClaimProductInfo,
} from '@/types/claim'
import type { ClaimSnapshot } from './claim-snapshot'
import { InfoTile, UidEditRow } from './claim-shared'
export function FeifeiClaimPanel({
feifei,
expectedUid,
order,
product,
taskLastError,
onOpen,
uidInput,
submittingUid,
onUidChange,
onResubmitUid,
}: {
feifei: ClaimKuaishouFeifeiFlowInfo
expectedUid: string
order: ClaimOrderInfo | null
product: ClaimProductInfo | null
taskLastError?: string
onOpen: () => void
uidInput: string
submittingUid: boolean
onUidChange: (value: string) => void
onResubmitUid: () => void
}) {
const openReady = Boolean(feifei.h5UrlWithUid || feifei.h5.rechargeUrl || feifei.h5.entryUrl)
return (
<Card className="claim-content-card">
<div className="claim-feifei-main">
<span className="claim-feifei-label">kuaishou-feifei</span>
<Typography.Title level={2}>第 2 步:打开领取链接</Typography.Title>
<p>{feifei.rechargeStatusLabel || '待领取'}</p>
</div>
<UidEditRow
uidInput={uidInput}
submitting={submittingUid}
onChange={onUidChange}
onSubmit={onResubmitUid}
/>
<div className="claim-info-grid">
<InfoTile label="填写 UID" value={expectedUid || '-'} />
<InfoTile label="订单号" value={order?.platformOrderId || '-'} />
<InfoTile label="平台单号" value={feifei.orderNo || feifei.platformOrderNo || '-'} />
<InfoTile label="领取商品" value={product?.title || '-'} />
</div>
<Alert
type="info"
showIcon
message="将携带你填写的 UID 打开领取页,请确认游戏内角色一致。"
/>
<Button
type="primary"
size="large"
icon={<LinkOutlined />}
disabled={!openReady || !expectedUid}
onClick={onOpen}
block
style={{ marginTop: 16 }}
>
打开领取链接
</Button>
{taskLastError ? (
<Alert type="warning" showIcon message={taskLastError} style={{ marginTop: 12 }} />
) : null}
</Card>
)
}
export function FeifeiResultStep({ snapshot }: { snapshot: ClaimSnapshot }) {
return (
<Card className="claim-content-card">
<div className="claim-result-header">
{snapshot.resultVariant === 'warning' ? (
<ExclamationCircleOutlined className="claim-large-icon claim-icon-warning" />
) : (
<CheckCircleOutlined className={`claim-large-icon claim-icon-${snapshot.resultVariant}`} />
)}
<div>
<Typography.Title level={2}>{snapshot.resultTitle}</Typography.Title>
<p className="claim-muted">{snapshot.resultDescription}</p>
</div>
</div>
<div className="claim-info-grid">
<InfoTile label="填写 UID" value={snapshot.expectedUid || '-'} />
<InfoTile label="状态" value={snapshot.feifei?.rechargeStatusLabel || '-'} />
<InfoTile label="订单号" value={snapshot.order?.platformOrderId || '-'} />
<InfoTile label="领取商品" value={snapshot.product?.title || '-'} />
</div>
</Card>
)
}