From 2dbba9e708a70aebd115e9fe851002cf790e4c10 Mon Sep 17 00:00:00 2001 From: xianyi Date: Thu, 8 Jan 2026 16:53:42 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E5=AF=BC=E6=A3=80=E5=8D=95?= =?UTF-8?q?=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/exam/ExamPrintPanel.tsx | 40 +++++++++++++++++++--- src/components/exam/ExamSignPanel.tsx | 46 ++++++++++++++++++++++++-- 2 files changed, 78 insertions(+), 8 deletions(-) diff --git a/src/components/exam/ExamPrintPanel.tsx b/src/components/exam/ExamPrintPanel.tsx index 837d635..ecbbbfe 100644 --- a/src/components/exam/ExamPrintPanel.tsx +++ b/src/components/exam/ExamPrintPanel.tsx @@ -87,10 +87,36 @@ export const ExamPrintPanel = ({ client }: { client: ExamClient }) => { } }; - // 组件加载时检查localStorage,如果有则直接展示 + // 组件加载时自动获取导检单(未签名版本也可以查看) useEffect(() => { const examId = Number(client.id); if (!examId) return; + + // 自动加载未签名的导检单用于查看 + const fetchPdf = async () => { + setFetchLoading(true); + setError(null); + + try { + const res = await getDaojiandanPdfApi({ exam_id: examId }); + if (res.Status === 200 && res.Data?.pdf_url) { + const pdfUrlValue = res.Data.pdf_url; + console.log('获取到导检单PDF URL:', pdfUrlValue); + setPdfUrl(pdfUrlValue); + setShowPreview(true); + } else { + console.error('获取导检单失败,响应:', res); + setError(res.Message || '获取导检单失败'); + } + } catch (err) { + console.error('获取导检单失败', err); + setError('获取导检单失败,请稍后重试'); + } finally { + setFetchLoading(false); + } + }; + + fetchPdf(); }, [client.id]); // 获取导检单PDF(优先使用localStorage,没有则调用接口) @@ -389,10 +415,6 @@ export const ExamPrintPanel = ({ client }: { client: ExamClient }) => {
正在加载导检单...
- ) : loading ? ( -
-
正在加载PDF...
-
) : error ? (
{error}
@@ -421,6 +443,10 @@ export const ExamPrintPanel = ({ client }: { client: ExamClient }) => { )}
+ ) : loading ? ( +
+
正在加载PDF...
+
) : pdfUrl ? (
@@ -429,6 +455,10 @@ export const ExamPrintPanel = ({ client }: { client: ExamClient }) => {
+ ) : showPreview ? ( +
+
正在准备导检单...
+
) : null} diff --git a/src/components/exam/ExamSignPanel.tsx b/src/components/exam/ExamSignPanel.tsx index 1948d1f..93c0bb8 100644 --- a/src/components/exam/ExamSignPanel.tsx +++ b/src/components/exam/ExamSignPanel.tsx @@ -3,7 +3,7 @@ import * as pdfjsLib from 'pdfjs-dist'; import pdfjsWorker from 'pdfjs-dist/build/pdf.worker.min.mjs?url'; import type { OutputTongyishuFileInfo, OutputTijianPdfFileInfo } from '../../api'; -import { signInMedicalExamCenter, submitTongyishuSign, submitDaojiandanSign, editDaojiandanPrintStatus, submitAddItemBillSign, getTijianPdfFile } from '../../api'; +import { signInMedicalExamCenter, submitTongyishuSign, submitDaojiandanSign, editDaojiandanPrintStatus, submitAddItemBillSign, getTijianPdfFile, getTongyishuPdf, getDaojiandanPdf } from '../../api'; import type { SignaturePadHandle } from '../ui'; import { Button, SignaturePad } from '../ui'; @@ -129,7 +129,9 @@ export const ExamSignPanel = ({ examId, onBusyChange }: ExamSignPanelProps) => { setDaojiandanUrl(url); setIsDaojiandanSigned(daojiandan.is_sign === 1); } else { - setDaojiandanUrl(null); + // 如果 getTijianPdfFile 没有返回导检单,保留之前通过 getDaojiandanPdf 获取的URL(如果存在) + // 不设置为 null,这样未签名的导检单也能显示"查看"按钮 + setDaojiandanUrl((prev) => (prev !== null ? prev : null)); setIsDaojiandanSigned(false); } @@ -169,7 +171,45 @@ export const ExamSignPanel = ({ examId, onBusyChange }: ExamSignPanelProps) => { setIsDaojiandanSigned(false); return; } - refreshTijianPdfs(examId); + + // 初始化时加载知情同意书和导检单 + const loadTongyishu = async () => { + try { + const res = await getTongyishuPdf({ exam_id: examId }); + if (res.Status === 200 && res.Data?.list_pdf_url) { + const list = res.Data.list_pdf_url; + const mappedConsent: OutputTongyishuFileInfo[] = list.map((item) => ({ + pdf_name: item.pdf_name || '', + pdf_url: item.pdf_url || '', + combination_code: item.combination_code ?? null, + })); + setConsentList(mappedConsent); + if (mappedConsent.length === 0) { + setConsentMessage(res.Message || '暂无知情同意书'); + } + } + } catch (err) { + console.error('获取知情同意书失败', err); + } + }; + + // 初始化时加载导检单(未签名版本也可以查看) + const loadDaojiandan = async () => { + try { + const res = await getDaojiandanPdf({ exam_id: examId }); + if (res.Status === 200 && res.Data?.pdf_url) { + // 如果 refreshTijianPdfs 没有设置导检单URL,则使用这里获取的未签名版本 + setDaojiandanUrl((prev) => prev || res.Data?.pdf_url || null); + } + } catch (err) { + console.error('获取导检单失败', err); + } + }; + + // 先加载知情同意书和导检单,然后刷新所有PDF状态(包括签名状态) + Promise.all([loadTongyishu(), loadDaojiandan()]).then(() => { + refreshTijianPdfs(examId); + }); }, [examId]); const handlePickFile = () => {