// dudu 桌面端 · 登录 / 购买窗口(点击走完整流程:登录(微信扫码 / 邮箱验证码)→ 选时长包 → 支付 → 完成) function LoginPurchaseWindow() { const { Button, Badge, Input } = window.DuduDesignSystem_2e0172; const [step, setStep] = React.useState('login'); // login | plans | pay | done const [plan, setPlan] = React.useState('m'); const [mode, setMode] = React.useState('wechat'); // wechat | email const [email, setEmail] = React.useState(''); const [code, setCode] = React.useState(''); const [cd, setCd] = React.useState(0); // 验证码冷却秒数(演示 3s) React.useEffect(() => { if (cd <= 0) return; const t = setTimeout(() => setCd(cd - 1), 1000); return () => clearTimeout(t); }, [cd]); const PACKS = { s: { label: '100 分钟', price: 9, desc: '约 ¥0.09 / 分钟', tag: '' }, m: { label: '500 分钟', price: 39, desc: '约 ¥0.078 / 分钟', tag: '省 13%' }, l: { label: '2000 分钟', price: 129, desc: '约 ¥0.065 / 分钟', tag: '省 28%' }, }; const Center = ({ children }) => (
{children}
); return ( {step === 'login' && (
登录 dudu
{/* 登录方式分段切换(与设置页「外观」同控件语言) */} {[['wechat', '微信扫码'], ['email', '邮箱登录']].map(([val, lab]) => ( ))} {mode === 'wechat' ? ( <>
打开微信扫一扫,确认后自动登录
) : (
setEmail(e.target.value)} style={{ width: '100%', boxSizing: 'border-box' }} />
setCode(e.target.value.replace(/\D/g, ''))} style={{ flex: 1, minWidth: 0 }} />
未注册的邮箱将自动创建账号
)}
)} {step === 'plans' && (
购买时长 wang*** 试用中
{Object.entries(PACKS).map(([key, p]) => { const active = plan === key; return ( ); })}
时长不过期 · 每天另有 3 分钟免费试用
)} {step === 'pay' && (
微信扫码支付
¥{PACKS[plan].price} · {PACKS[plan].label}时长包
支付完成后自动开通
)} {step === 'done' && (
已到账 {PACKS[plan].label}
时长余额 472 分钟 · 不过期 · 现在就按住 ⌘⇧Space 试试
)}
); } Object.assign(window, { LoginPurchaseWindow });