diff --git a/src/pages/AftersalesDetail.tsx b/src/pages/AftersalesDetail.tsx index e4234a9..d66f6f9 100644 --- a/src/pages/AftersalesDetail.tsx +++ b/src/pages/AftersalesDetail.tsx @@ -1,4 +1,5 @@ import { useEffect, useState } from 'react'; +import QRCode from 'qrcode'; import { useParams, useNavigate } from 'react-router-dom'; import { Card, @@ -79,6 +80,10 @@ function formatDateTime(value?: string) { return new Date(value).toLocaleString('zh-CN'); } +function getAftersalesPublicUrl(serialNumber: string) { + return `${window.location.origin}/aftersales/${serialNumber}`; +} + function AftersalesDetailPage() { const { serialNumber = '' } = useParams<{ serialNumber: string }>(); const navigate = useNavigate(); @@ -95,6 +100,7 @@ function AftersalesDetailPage() { const [qrCodeDataUrl, setQrCodeDataUrl] = useState(''); const [qrUrl, setQrUrl] = useState(''); const [electronicFormVisible, setElectronicFormVisible] = useState(false); + const [electronicFormQrCodeDataUrl, setElectronicFormQrCodeDataUrl] = useState(''); const [reassignModalVisible, setReassignModalVisible] = useState(false); const [reassignTechnicianId, setReassignTechnicianId] = useState(); @@ -201,6 +207,20 @@ function AftersalesDetailPage() { link.click(); }; + const openElectronicForm = async () => { + if (!order) return; + try { + const qrCode = await QRCode.toDataURL(getAftersalesPublicUrl(order.serialNumber), { + width: 132, + margin: 1, + }); + setElectronicFormQrCodeDataUrl(qrCode); + setElectronicFormVisible(true); + } catch (err: any) { + message.error(err?.message || '生成电子表单二维码失败'); + } + }; + const handlePrintElectronicForm = () => { const formNode = document.querySelector('.aftersales-electronic-form'); if (!formNode) return; @@ -219,10 +239,15 @@ function AftersalesDetailPage() {