import { useEffect, useState } from 'react'; import { useNavigate } from 'react-router-dom'; import PageHeader from '@dukang/shared-ui/PageHeader'; import type { PartnerAssocSummary } from '@dukang/shared-types'; import { request } from '../lib/api'; import { toastError, toastSuccess } from '../lib/toast'; import { isWechatEnv } from '../lib/weixin'; import { usePartnerPageView } from '../lib/usePageView'; export default function AssocQrcodePage() { usePartnerPageView('partner_assoc_qrcode_view'); const navigate = useNavigate(); const [summary, setSummary] = useState(null); const [previewUrl, setPreviewUrl] = useState(null); const [loading, setLoading] = useState(true); useEffect(() => { request('PARTNER_H5', '/partner/assoc') .then(setSummary) .catch((e) => toastError(e instanceof Error ? e.message : '加载失败')) .finally(() => setLoading(false)); }, []); useEffect(() => () => { if (previewUrl) URL.revokeObjectURL(previewUrl); }, [previewUrl]); async function downloadQr() { const token = localStorage.getItem('accessToken'); try { const res = await fetch('/api/v1/partner/assoc/qrcode', { headers: { Authorization: token ? `Bearer ${token}` : '', 'X-Client-App': 'PARTNER_H5', }, }); if (!res.ok) throw new Error('下载失败'); const blob = await res.blob(); const url = URL.createObjectURL(blob); if (isWechatEnv()) { setPreviewUrl(url); toastSuccess('请长按图片保存到相册'); return; } const a = document.createElement('a'); a.href = url; a.download = `partner-assoc-${summary?.partnerId || 'qr'}.png`; a.click(); URL.revokeObjectURL(url); toastSuccess('已开始下载'); } catch (e) { if (summary?.qrcodeUrl) { setPreviewUrl(summary.qrcodeUrl); toastSuccess('请长按图片保存到相册'); return; } toastError(e instanceof Error ? e.message : '下载失败'); } } return (
navigate(-1)} /> {loading &&
加载中…
} {!loading && (

用户扫码后首次锁定本合伙人,后续酒单按订单佣金结算

{summary?.qrcodeUrl ? ( 关联码 ) : (

关联码尚未生成,请稍后重试或联系总部补发

)}

已关联 {summary?.userCount ?? 0} 人

{previewUrl && isWechatEnv() && (

微信内请长按上方图片保存

)}
)}
); }