import { useEffect, useState } from 'react'; import { useNavigate } from 'react-router-dom'; import PageHeader from '@dukang/shared-ui/PageHeader'; import type { PartnerMe, UpdatePartnerBankRequest } from '@dukang/shared-types'; import { request } from '../lib/api'; import { usePartnerSession } from '../contexts/PartnerSessionContext'; import { toastError, toastSuccess } from '../lib/toast'; type FieldErrors = { bankAccountName?: string; bankAccountNo?: string; bankBranch?: string; }; export default function BankAccountPage() { const navigate = useNavigate(); const { account, refresh } = usePartnerSession(); const [bankAccountName, setBankAccountName] = useState(account?.bankAccount?.bankAccountName ?? ''); const [bankAccountNo, setBankAccountNo] = useState(account?.bankAccount?.bankAccountNo ?? ''); const [bankBranch, setBankBranch] = useState(account?.bankAccount?.bankBranch ?? ''); const [submitting, setSubmitting] = useState(false); const [fieldErrors, setFieldErrors] = useState({}); useEffect(() => { document.title = '收款账户'; }, []); useEffect(() => { setBankAccountName(account?.bankAccount?.bankAccountName ?? ''); setBankAccountNo(account?.bankAccount?.bankAccountNo ?? ''); setBankBranch(account?.bankAccount?.bankBranch ?? ''); }, [account?.bankAccount]); async function submit() { const name = bankAccountName.trim(); const no = bankAccountNo.replace(/\s+/g, ''); const branch = bankBranch.trim(); const next: FieldErrors = {}; if (!name) next.bankAccountName = '请填写收款人'; if (!/^\d{8,32}$/.test(no)) next.bankAccountNo = '请填写 8~32 位数字账号'; if (!branch) next.bankBranch = '请填写开户行名称'; setFieldErrors(next); if (Object.keys(next).length) return; setSubmitting(true); try { const body: UpdatePartnerBankRequest = { bankAccountName: name, bankAccountNo: no, bankBranch: branch, }; await request('PARTNER_H5', '/partner/me/bank', { method: 'PUT', body: JSON.stringify(body), }); await refresh(); toastSuccess('收款账户已保存'); navigate('/center'); } catch (e) { toastError(e instanceof Error ? e.message : '保存失败'); } finally { setSubmitting(false); } } return (
navigate('/center')} />

银行账号

用于总部打款。请填写与合同一致的对公或对私账户。

person setBankAccountName(e.target.value)} />
{fieldErrors.bankAccountName && (

{fieldErrors.bankAccountName}

)}
credit_card setBankAccountNo(e.target.value.replace(/[^\d]/g, ''))} />
{fieldErrors.bankAccountNo && (

{fieldErrors.bankAccountNo}

)}
account_balance setBankBranch(e.target.value)} />
{fieldErrors.bankBranch && (

{fieldErrors.bankBranch}

)}
); }