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 { isHttpImageUrl, previewSaveableImage } from '../lib/wechat-save-image'; 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 [loading, setLoading] = useState(true); useEffect(() => { request('PARTNER_H5', '/partner/assoc') .then(setSummary) .catch((e) => toastError(e instanceof Error ? e.message : '加载失败')) .finally(() => setLoading(false)); }, []); async function downloadQr() { const publicUrl = summary?.qrcodeUrl; if (isWechatEnv() && isHttpImageUrl(publicUrl)) { await previewSaveableImage(publicUrl); return; } 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); 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 (isWechatEnv() && isHttpImageUrl(publicUrl)) { await previewSaveableImage(publicUrl); return; } toastError(e instanceof Error ? e.message : '下载失败'); } } return (
navigate(-1)} /> {loading &&
加载中…
} {!loading && (

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

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

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

)}

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

{isWechatEnv() && summary?.qrcodeUrl ? (

微信内请点「下载二维码」后长按保存

) : null}
)}
); }