Browse Source

pdf弹出问题

徐展城 2 weeks ago
parent
commit
d4ade01937

+ 9 - 6
yudao-ui-admin-vue3/src/components/DynamicReport/SpreadViewer.vue

@@ -383,6 +383,9 @@ let dynamicTbColRespVOList;
 
 const openPdf = async () => {
   const formData = new FormData()
+  // 在异步操作开始前捕获 opType,防止切换项目时 props.initData 被覆盖导致竞态
+  const currentOpType = props.initData.opType;
+  const currentManualUrl = props.initData.manualUrl;
   const rules = []
   previewSpread.sheets.forEach((sheet) => {
     sheet.conditionalFormats.getRules().forEach(rule => {
@@ -404,17 +407,17 @@ const openPdf = async () => {
    //uat环境葡萄城pdf接口
    if (nodeEnv == 'uat') {
     // 手动拼接pdf的url,适配检验方案
-     if (props.initData.manualUrl){
-       formData.append('manualUrl', props.initData.manualUrl)
+     if (currentManualUrl){
+       formData.append('manualUrl', currentManualUrl)
        response = await getPDFByInspection(formData)
      }else{
        response = await getPDF2(formData)
      }
    } else {
      //本地测试环境葡萄城pdf接口
-     if (props.initData.manualUrl){
+     if (currentManualUrl){
       // 手动拼接pdf的url,适配检验方案
-       formData.append('manualUrl', props.initData.manualUrl)
+       formData.append('manualUrl', currentManualUrl)
        response = await getPDFByInspectionLocal(formData)
      }else{
        response = await getPDF2(formData)
@@ -423,11 +426,11 @@ const openPdf = async () => {
     if (response) {
       const flow = new Blob([response], { type: 'application/pdf' })
       recordSource.value = window.URL.createObjectURL(flow);
-      if(props.initData.opType==0){
+      if(currentOpType==0){
         loading.value = false;
         window.open(recordSource.value, '_blank');
       }
-      if(props.initData.opType==1){
+      if(currentOpType==1){
         //showSpread.value=false;
         pdfTimestamp.value = Date.now();
         showPdf.value=true;

+ 12 - 1
yudao-ui-admin-vue3/src/views/pressure2/boilerchecker/components/StatusOperationPanel.vue

@@ -2409,7 +2409,13 @@ onMounted(() => {
   })
 })
 
+const initPreviewTimer = ref<ReturnType<typeof setTimeout> | null>(null)
 const initPreview=()=>{
+  // 清除上一次的定时器,防止快速切换项目时重复触发 reloadView
+  if (initPreviewTimer.value) {
+    clearTimeout(initPreviewTimer.value)
+    initPreviewTimer.value = null
+  }
 
   const reportId = props.selectedItem?.id;
   const refId = showReportPdfType.value === 'report' ? "report_" + reportId :
@@ -2428,7 +2434,8 @@ const initPreview=()=>{
   }
 
 
-  setTimeout(()=>{
+  initPreviewTimer.value = setTimeout(()=>{
+    initPreviewTimer.value = null
     spreadRef.value?.reloadView();
   },50)
 
@@ -2585,6 +2592,10 @@ onMounted(() => {
 })
 onUnmounted(() => {
   window.removeEventListener('resize', handleWindowResize)
+  if (initPreviewTimer.value) {
+    clearTimeout(initPreviewTimer.value)
+    initPreviewTimer.value = null
+  }
 })
 
 // 全屏切换时重新计算PDF区域宽度

+ 12 - 1
yudao-ui-admin-vue3/src/views/pressure2/pipechecker/components/StatusOperationPanel.vue

@@ -2297,7 +2297,13 @@ const handleShowAssociationOperationManual = () => {
 //   //initPreview()
 // })
 
+const initPreviewTimer = ref<ReturnType<typeof setTimeout> | null>(null)
 const initPreview=()=>{
+  // 清除上一次的定时器,防止快速切换项目时重复触发 reloadView
+  if (initPreviewTimer.value) {
+    clearTimeout(initPreviewTimer.value)
+    initPreviewTimer.value = null
+  }
 
   const reportId = props.selectedItem?.id;
   const refId = showReportPdfType.value === 'report' ? "report_" + reportId :
@@ -2318,7 +2324,8 @@ const initPreview=()=>{
 
   //spreadRef.value?.reloadView();
 
-  setTimeout(()=>{
+  initPreviewTimer.value = setTimeout(()=>{
+    initPreviewTimer.value = null
     spreadRef.value?.reloadView();
   },50)
 
@@ -2476,6 +2483,10 @@ onMounted(() => {
 })
 onUnmounted(() => {
   window.removeEventListener('resize', handleWindowResize)
+  if (initPreviewTimer.value) {
+    clearTimeout(initPreviewTimer.value)
+    initPreviewTimer.value = null
+  }
 })
 
 // 全屏切换时重新计算PDF区域宽度