Browse Source

版本合并0418

xy 1 ngày trước cách đây
mục cha
commit
d785a781f3

+ 5 - 3
yudao-ui-admin-vue3/src/components/DynamicReport/SpreadEditor.vue

@@ -79,7 +79,7 @@ import SpreadDesigner from '@/components/SpreadDesigner/index.vue'
 import {useTagsViewStore} from '@/store/modules/tagsView'
 import {
   createStandardTemplateV2,
-  getStandardTemplateInfo,
+  getStandardTemplateInfoV2,
   updateStandardTemplate
 } from '@/api/pressure2/standard/template'
 import {useRoute, useRouter} from 'vue-router'
@@ -209,7 +209,7 @@ let isNewTemplate = false;
 // 获取模版详情
 const fetchTemplateData = async () => {
   loading.value = true
-  const templateRes = await getStandardTemplateInfo({ id: props.formData.id })
+  const templateRes = await getStandardTemplateInfoV2({ id: props.formData.id })
   const spread = designer.getWorkbook()
 
   if (templateRes && templateRes.id) {
@@ -391,6 +391,7 @@ const handleConfig = async () => {
   console.log(data.copyConfig)
   if (data.copyConfig){
     const config = JSON.parse(data.copyConfig)
+    isContinuePage.value = config.isContinuePage
     continuePageSheetName.value = config.sheetName
     copyRangeTopLeft.value = config.copyRange.topLeft
     copyRangeTopRight.value = config.copyRange.topRight
@@ -432,7 +433,8 @@ const saveConfig = () => {
         bottomRight: copyRangeBottomRight.value
       },
       sheetName: continuePageSheetName.value,
-      hidden: isHiddenContinuePage.value
+      hidden: isHiddenContinuePage.value,
+      isContinuePage: true
     })
   }).then(() => {
     ElMessage.success('保存成功');

+ 1 - 0
yudao-ui-admin-vue3/src/components/DynamicReport/SpreadInterface.ts

@@ -9,4 +9,5 @@ export interface InitParams{
   reportType?:number; //1:记录, 2:报告, 3:结论报告
   opType:number; // 0:excel输入,1:pdf查看
   dataSource?:string; // 默认数据源
+  manualUrl?:string; //需要拼接的附件路径
 }

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

@@ -77,6 +77,7 @@ import BatchUploadFile from "./BatchUploadFile.vue";
 import {editReport, handleCopy} from "@/utils/reportUtil";
 import Designer from '@grapecity-software/spread-sheets-designer-vue'
 import { ElLoading } from "element-plus"
+import {getPDF2, getPDFByInspection} from "@/api/pressure2/standard/template";
 
 defineOptions({ name: 'SpreadViewer' });
 
@@ -118,6 +119,7 @@ const showSpread=ref(true)
 const previewContainer = ref(null)
 let sheetData = {};
 const designerKey = import.meta.env.VITE_SPREADJS_DESIGNER_KEY
+const nodeEnv = import.meta.env.VITE_NODE_ENV
 const licenseKey = import.meta.env.VITE_SPREADJS_LICENSE_KEY
 GC.Spread.Sheets.Designer.LicenseKey = designerKey
 //同时对SpreadJS与ExcelIO进行授权
@@ -170,7 +172,7 @@ const initPreview = async () => {
     let blob = await fetchTemplateData();
     if (!blob) return;
 
-    await previewSpread.open(blob, async () => {
+    previewSpread.open(blob, async () => {
       console.log('预览加载完成');
       let sheets = previewSpread.sheets;
       //DynamicTbValApi.getDynamicTbValByIns(props.instanceId)
@@ -210,6 +212,7 @@ const initPreview = async () => {
           pdfLoading.value = true;
           await openPdf();
         } else {
+          showPdf.value = false;
           loading.value = false;
         }
       })
@@ -247,7 +250,22 @@ const openPdf = async () => {
   });
  await previewSpread.save(async function (blob) {
     formData.append('file', blob)
-    const response = await getPDF(formData)
+   let response = null
+   if (nodeEnv == 'uat') {
+     if (props.initData.manualUrl){
+       formData.append('manualUrl', props.initData.manualUrl)
+       response = await getPDFByInspection(formData)
+     }else{
+       response = await getPDF2(formData)
+     }
+   } else {
+     if (props.initData.manualUrl){
+       formData.append('manualUrl', props.initData.manualUrl)
+       response = await getPDFByInspection(formData)
+     }else{
+       response = await getPDF(formData)
+     }
+   }
     if (response) {
       const flow = new Blob([response], { type: 'application/pdf' })
       recordSource.value = window.URL.createObjectURL(flow);
@@ -355,12 +373,16 @@ let sheetNum = ref(2)
  * 生成续页
  * @param {boolean} isSetTimeout 是否设置定时器
  */
-const handleGenerate = (isSetTimeout) => {
+const handleGenerate = async (isSetTimeout) => {
   if (!generateData || !generateData.sheetName){
     ElMessage.error('请配置模板续页名称')
     return
   }
-  const generate = async () => {
+  /**
+   * 生成续页
+   * @param isAdd 是否继续生成
+   */
+  const generate = async (isAdd) => {
 
     const sheet = previewSpread.getSheetFromName(generateData.sheetName)
     if (sheet.visible()) {
@@ -387,7 +409,7 @@ const handleGenerate = (isSetTimeout) => {
       for (let j = 0; j <= rowCount; j++) {
         const bindingPath = sheet.getBindingPath(row + j, col + i)
         if (bindingPath) {
-          let newPath = bindingPath.split('_')[0] + "_" + (parseInt(bindingPath.split('_')[1]) + rowCount + 1) * (sheetNum.value - 1)
+          let newPath = bindingPath.split('_')[0] + "_" + (parseInt(bindingPath.split('_')[1]) + (rowCount + 1) * (sheetNum.value - 1))
           sheet2.setBindingPath(row + j, col + i, newPath)
           if (!dynamicTbColRespVOListCode.includes(newPath)){
             colPathList.push(newPath)
@@ -396,20 +418,59 @@ const handleGenerate = (isSetTimeout) => {
       }
     }
     sheetNum.value = sheetNum.value + 1
-    await DynamicTbColApi.createBatchByCodes(colPathList,props.initData.templateId)
+    if (colPathList.length != 0){
+      await DynamicTbColApi.createBatchByCodes(colPathList,props.initData.templateId)
+    }
+    if (isAdd){
+      let col = parseInt(generateData.copyRange.topLeft.split(',')[0])
+      let row = parseInt(generateData.copyRange.topLeft.split(',')[1])
+      let colCount = parseInt(generateData.copyRange.topRight.split(',')[0]) - col
+      let rowCount = parseInt(generateData.copyRange.bottomLeft.split(',')[1]) - row
+      if (!sheet2) {
+        return;
+      }
+      if (generateData.hidden) {
+        // 判断第一行,如果全部为空,则隐藏
+        let isEmpty = true;
+        for (let i = 0; i < colCount; i++) {
+          const range = sheet2.getCell(row, col + i)
+          if (range.value()) {
+            isEmpty = false;
+            break;
+          }
+        }
+        if (isEmpty) {
+          sheet2.visible(false)
+        }
+      }
+      // 判断最后一行,如果不为空,自动续页
+      let isNotEmpty = false;
+      for (let i = 0; i < colCount; i++) {
+        const range = sheet2.getCell(row + rowCount, col + i)
+        if (range.value()) {
+          isNotEmpty = true;
+          break;
+        }
+      }
+      if (isNotEmpty) {
+        await generate(true)
+      }
+    }
   }
 
   if (isSetTimeout) {
     const loading = ElLoading.service({text: '正在生成中'})
-    setTimeout(() => {
+    setTimeout(async () => {
       try {
-        generate()
+        await generate(false)
       } finally {
         loading.close()
       }
     }, 20)
   } else {
-    generate()
+    const loading = ElLoading.service({text: '生成续页中,数据量较大'})
+    await generate(true)
+    loading.close()
   }
 }
 /**

+ 24 - 2
yudao-ui-admin-vue3/src/views/pressure2/equipboilerscheduling/components/BoilerPlanScheduleDialog.vue

@@ -1151,13 +1151,34 @@ const handleQueryCheckItemList = async () => {
     PressureBoilerCheckType.OUT,
     PressureBoilerCheckType.PRESSURE
   ];
+  // 校验所有选中的任务列表中的设备类型是否一致
+  const allTasks = [
+    ...formData.value.inTaskList,
+    ...formData.value.outTaskList,
+    ...formData.value.pressureTaskList
+  ]
+
+  if (allTasks.length > 0) {
+    const firstType = allTasks[0].type
+    const hasDifferentType = allTasks.some(task => task.type !== firstType)
+
+    if (hasDifferentType) {
+      ElMessage.error('请选择同一类型设备')
+      dialogVisible.value = false
+      return
+    }
+  }
+
+  // 获取统一的设备类型,如果列表为空则设为 undefined
+  const equipType = allTasks.length > 0 ? allTasks[0].type : undefined
 
   for (const type of checkTypes) {
     const params = {
       orderId: "0",
       itemIds: equipList.value.map(item => item.id),
       equipmentCategory: 300,
-      inspectionNature: [type]
+      inspectionNature: [type],
+      equipType:equipType
     };
     const queryResult = await querySchedulingCheckItemList(params);
     const inspectionNatureType = await InspectionNatureTypeApi.getInspectionNatureTypePage({
@@ -1203,7 +1224,7 @@ const handleQueryCheckItemList = async () => {
 const open = async (selectedInList, selectedOutList, selectedPreList, type?: string) => {
   //console.log('open', props.selectedRows)
   dialogVisible.value = true
-  handleQueryCheckItemList()
+
 
   // 重置所有检验员选择
   inSelectedCheckers.value = []
@@ -1253,6 +1274,7 @@ const open = async (selectedInList, selectedOutList, selectedPreList, type?: str
   formData.value.outTaskList = selectedOutList
   formData.value.pressureTaskList = selectedPreList
 
+  handleQueryCheckItemList()
 
   // 加载检验员列表(默认当前登录人的部门)
   const deptId = userStore.getUser.deptId?.toString()