From f2dd1259bc155bf2322eb0239a3b051c6789ff95 Mon Sep 17 00:00:00 2001 From: xianyi Date: Mon, 5 Jan 2026 11:38:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E5=AF=BC=E6=A3=80=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/exam/ExamSignPanel.tsx | 58 ++++++++++++++++++++++++--- 1 file changed, 52 insertions(+), 6 deletions(-) diff --git a/src/components/exam/ExamSignPanel.tsx b/src/components/exam/ExamSignPanel.tsx index bce6eee..6df3117 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 } from '../../api'; -import { getTongyishuPdf, signInMedicalExamCenter, submitTongyishuSign, submitDaojiandanSign, editDaojiandanPrintStatus } from '../../api'; +import { getTongyishuPdf, signInMedicalExamCenter, submitTongyishuSign, submitDaojiandanSign, editDaojiandanPrintStatus, getDaojiandanPdf as getDaojiandanPdfApi } from '../../api'; import { setExamActionRecord, setTongyishuPdfList, @@ -61,6 +61,7 @@ export const ExamSignPanel = ({ examId, onBusyChange }: ExamSignPanelProps) => { // 导检单相关状态 const [daojiandanUrl, setDaojiandanUrl] = useState(null); + const [isDaojiandanSigned, setIsDaojiandanSigned] = useState(false); // 导检单是否已签名 const [showDaojiandanSignature, setShowDaojiandanSignature] = useState(false); const daojiandanSignaturePadRef = useRef(null); const [daojiandanSubmitLoading, setDaojiandanSubmitLoading] = useState(false); @@ -298,13 +299,31 @@ export const ExamSignPanel = ({ examId, onBusyChange }: ExamSignPanelProps) => { .finally(() => setConsentLoading(false)); }, [examId]); - // 组件加载时检查导检单localStorage + // 组件加载时检查导检单localStorage,如果没有则调用接口获取未签名的导检单 useEffect(() => { if (!examId) return; + // 先检查 localStorage 中的导检单(已签名的) const storedPdf = getDaojiandanPdfFromStorage(examId); if (storedPdf && storedPdf.pdf_url) { setDaojiandanUrl(storedPdf.pdf_url); + setIsDaojiandanSigned(true); // localStorage 中的是已签名的 + } else { + // 如果 localStorage 中没有导检单,调用接口获取未签名的导检单用于查看和签名 + const fetchDaojiandan = async () => { + try { + const res = await getDaojiandanPdfApi({ exam_id: examId }); + if (res.Status === 200 && res.Data?.pdf_url) { + const pdfUrlValue = res.Data.pdf_url; + // 不保存到 localStorage,只用于显示和签名 + setDaojiandanUrl(pdfUrlValue); + setIsDaojiandanSigned(false); // 接口获取的是未签名的 + } + } catch (err) { + console.error('获取导检单失败', err); + } + }; + fetchDaojiandan(); } // 检查加项单PDF @@ -599,6 +618,7 @@ export const ExamSignPanel = ({ examId, onBusyChange }: ExamSignPanelProps) => { const pdfUrlValue = res.Data.pdf_url; const pdfNameValue = res.Data.pdf_name || '导检单'; setDaojiandanUrl(pdfUrlValue); + setIsDaojiandanSigned(true); // 签名成功后标记为已签名 // 保存导检单PDF信息到localStorage setDaojiandanPdf(examId, { @@ -839,8 +859,8 @@ export const ExamSignPanel = ({ examId, onBusyChange }: ExamSignPanelProps) => { return signedCombinationCodes.includes(Number(item.combination_code)); }); - // 检查导检单是否已签名 - const daojiandanSigned = !!daojiandanUrl; + // 检查导检单是否已签名(只有 localStorage 中的或签名后的才是已签名的) + const daojiandanSigned = isDaojiandanSigned; return allConsentsSigned && consentList.length > 0 && daojiandanSigned; }; @@ -1167,7 +1187,7 @@ export const ExamSignPanel = ({ examId, onBusyChange }: ExamSignPanelProps) => {
导检单 - {daojiandanUrl && ( + {isDaojiandanSigned && ( 已签名 { )}
- {daojiandanUrl ? ( + {isDaojiandanSigned ? ( + // 已签名:显示打印和查看按钮 <> + ) : daojiandanUrl ? ( + // 未签名但有导检单:显示查看和签名按钮 + <> + + + ) : ( + // 没有导检单:只显示签名按钮