import { useEffect, useState } from 'react'; import { useNavigate, useSearchParams } from 'react-router-dom'; import PageHeader from '@dukang/shared-ui/PageHeader'; import { request } from '../lib/api'; import { clearStoreDraft, defaultStoreForm, loadStoreDraft, saveStoreDraft, type StoreDraftForm, validateStoreStep1, validateStoreStep3, } from '../lib/storeDraft'; const STEPS = ['基本信息', '照片上传', '结算资质'] as const; export default function StoreCreatePage() { const navigate = useNavigate(); const [params, setParams] = useSearchParams(); const saved = loadStoreDraft(); const [form, setForm] = useState(saved?.form ?? defaultStoreForm()); const [error, setError] = useState(''); const stepFromUrl = Number(params.get('step') || 0); const step = stepFromUrl >= 1 && stepFromUrl <= 3 ? stepFromUrl : (saved?.step ?? 1); useEffect(() => { if (!stepFromUrl && saved?.step) { setParams({ step: String(saved.step) }, { replace: true }); } }, [stepFromUrl, saved?.step, setParams]); useEffect(() => { saveStoreDraft({ step, form }); }, [step, form]); function patchForm(patch: Partial) { setForm((prev) => ({ ...prev, ...patch })); setError(''); } function goStep(n: number) { setParams({ step: String(n) }); setError(''); } function handleNext() { if (step === 1) { const msg = validateStoreStep1(form); if (msg) { setError(msg); return; } } goStep(step + 1); } async function submit() { const msg = validateStoreStep3(form); if (msg) { setError(msg); return; } const step1Msg = validateStoreStep1(form); if (step1Msg) { setError(step1Msg); return; } await request('PARTNER_H5', '/partner/stores', { method: 'POST', body: JSON.stringify({ name: form.name.trim(), phone: form.phone.trim(), district: form.district.trim(), address: form.address.trim(), intro: form.intro.trim() || undefined, bankAccountName: form.bankAccountName.trim(), bankAccountNo: form.bankAccountNo.replace(/\s/g, ''), bankBranch: form.bankBranch.trim(), }), }); clearStoreDraft(); navigate('/stores'); } const progress = step === 1 ? 0 : step === 2 ? 50 : 100; return (
navigate('/stores')} /> {error && (

{error}

)} {step === 1 && ( <>

门店基本信息

store patchForm({ name: e.target.value })} />
call patchForm({ phone: e.target.value })} />
location_on patchForm({ district: e.target.value })} />