xzc vor 1 Woche
Ursprung
Commit
0a5a1f0c39

+ 4 - 0
yudao-ui-admin-vue3/src/api/pressure2/boilertaskorder/index.ts

@@ -292,6 +292,10 @@ export const BoilerTaskOrderApi = {
   getTaskOrderOrderItemRecheckPage: async (params: any) => {
     return await request.get({ url: `/pressure2/boiler-task-order/order-item/recheck/page`, params })
   },
+  // 获取同一orderItemId+当前校核人的所有待校核项(跨报告合并)
+  getRecheckRelatedItems: async (orderItemId: string) => {
+    return await request.get({ url: `/pressure2/boiler-task-order/order-item/recheck/related/${orderItemId}` })
+  },
   // 报告流转记录
   getTaskOrderItemReportRecordPage: async (params: any) => {
     return await request.get({ url: `/pressure2/boiler-task-order-item-report-record/page`, params })

+ 4 - 0
yudao-ui-admin-vue3/src/api/pressure2/pipetaskorder/index.ts

@@ -286,6 +286,10 @@ export const PipeTaskOrderApi = {
   getTaskOrderOrderItemRecheckPage: async (params: any) => {
     return await request.get({ url: `/pressure2/pipe-task-order/order-item/recheck/page`, params })
   },
+  // 获取同一orderItemId+当前校核人的所有待校核项(跨报告合并)
+  getRecheckRelatedItems: async (orderItemId: string) => {
+    return await request.get({ url: `/pressure2/pipe-task-order/order-item/recheck/related/${orderItemId}` })
+  },
   // 报告流转记录
   getTaskOrderItemReportRecordPage: async (params: any) => {
     return await request.get({ url: `/pressure2/pipe-task-order-item-report-record/page`, params })

+ 56 - 2
yudao-ui-admin-vue3/src/views/pressure2/boilerchecker/AuditCheckRecord.vue

@@ -139,6 +139,22 @@
           <el-button @click="handleAuditSelectCancel">取 消</el-button>
         </template>
       </Dialog>
+      <!-- 选择通过报告弹窗 -->
+      <Dialog v-model="showPassDialog" width="450" title="选择通过报告">
+        <el-select
+          v-model="selectedPassIds"
+          placeholder="请选择通过报告"
+          style="width: 100%"
+          multiple
+          clearable
+        >
+          <el-option v-for="item in getRecheckList" :key="item.reportId" :value="item.reportId" :label="item.reportName"/>
+        </el-select>
+        <template #footer>
+          <el-button type="primary" @click="handlePassConfirm">确 定</el-button>
+          <el-button @click="showPassDialog = false">取 消</el-button>
+        </template>
+      </Dialog>
     </div>
   </div>
   <!-- 设备档案弹窗 -->
@@ -197,7 +213,7 @@ import ReportListUploadModal from '@/views/pressure2/boilerchecker/components/re
   import EquipBoilerForm from '@/components/EquipBoilerForm/index.vue'
   import * as GC from "@grapecity-software/spread-sheets";
   import {DynamicTbValApi} from "@/api/pressure2/dynamictbval";
-  import {ref, watch} from "vue";
+  import {ref, watch, nextTick} from "vue";
   import {getPDF, getStandardTemplateInfo} from "@/api/laboratory/standard/template";
   import {buildFileUrl} from "@/utils";
   import axios from "axios";
@@ -431,6 +447,20 @@ import ReportListUploadModal from '@/views/pressure2/boilerchecker/components/re
     currentSelectedReport.value = report
   }
 
+  // 切换报告时重新加载 SpreadViewer
+  watch(currentSelectedReport, async (report) => {
+    if (!report?.reportId) return
+    try {
+      const res = await BoilerTaskOrderApi.getTaskOrderItemReportRecord(report.reportId)
+      initData.value.templateId = res.templateId
+      initData.value.refId = report.reportId
+      await nextTick()
+      spreadRef.value?.reloadView()
+    } catch (e) {
+      console.error('切换报告失败:', e)
+    }
+  })
+
  /* watch(() => currentSelectedReport.value, async (currentSelectedReport) => {
     if(!Object.keys(currentSelectedReport).length) return
     const data = {
@@ -522,8 +552,10 @@ import ReportListUploadModal from '@/views/pressure2/boilerchecker/components/re
       // TODO: 批量通过
       let params = {}
       if(getRecheckList.value && getRecheckList.value?.length) {
+        // 多于1个时用 selectedPassIds,只有1个时自动选中
+        const passIds = getRecheckList.value.length > 1 ? selectedPassIds.value : [getRecheckList.value[0].reportId]
         params = {
-          ids: getRecheckList.value.map(item => item.reportId)
+          ids: passIds
         }
       } else {
         params = props.apiParams
@@ -595,10 +627,26 @@ import ReportListUploadModal from '@/views/pressure2/boilerchecker/components/re
       return;
     }
 
+    // 批量校核 >1 时弹窗选择通过报告
+    if (isBatch.value && getRecheckList.value?.length > 1) {
+      selectedPassIds.value = []
+      showPassDialog.value = true
+      return
+    }
+
     handlePassFn()
     
   }
 
+  // 通过报告弹窗确认
+  const handlePassConfirm = () => {
+    if (selectedPassIds.value.length === 0) {
+      return ElMessage.error('请选择通过报告')
+    }
+    showPassDialog.value = false
+    handlePassFn()
+  }
+
   // 主报告提交至报告审核环节
   const handleSubmitToApproval = (title) => {
     ElMessageBox.confirm(title, '提示', {
@@ -711,6 +759,8 @@ const canSubmitMainReportType = ()=>{
   // 回退
   const selectedRollbackStatus = ref(500)
   const selectedRollBackIds = ref([])
+  const selectedPassIds = ref([])
+  const showPassDialog = ref(false)
   const returnForm = ref({
     reason: ''
   })
@@ -720,6 +770,10 @@ const canSubmitMainReportType = ()=>{
   const returnFormRef = ref()
 
   const handleRevert = () => {
+    // 批量退回时,必须选择退回报告
+    if (isBatch.value && getRecheckList.value?.length > 1 && selectedRollBackIds.value.length === 0) {
+      return ElMessage.error('请选择退回报告')
+    }
     returnFormRef.value.validate(async (valid) => {
       if(!valid) return ElMessage.error('请填写回退原因')
       const params = {

+ 7 - 2
yudao-ui-admin-vue3/src/views/pressure2/boilerchecker/recordCheck.vue

@@ -471,7 +471,7 @@ const auditApiParams = ref({})
 const reportType = ref(0)
 const pageType = ref('check')
 const recheckInfo = ref({})
-const handleCheck = (row: any) => {
+const handleCheck = async (row: any) => {
   //测试先注释
   //if (!row.reportUrl) return ElMessage.warning('缺少记录文件地址,请联系管理员!')
   pageType.value = 'check'
@@ -483,7 +483,12 @@ const handleCheck = (row: any) => {
   auditApiParams.value = {
     id: row.reportId
   }
-  recheckInfo.value = row
+  // 从后端获取同一 orderItemId + 当前校核人 的所有待校核项(跨报告合并),不受分页影响
+  const relatedItems = await BoilerTaskOrderApi.getRecheckRelatedItems(row.id)
+  recheckInfo.value = {
+    ...row,
+    recheckList: relatedItems || []
+  }
   //console.log(row.reportType, !row.reportType ? 0 : Number(row.reportType))
   reportType.value = !row.reportType ? 0 : Number(row.reportType)
   console.log(equipId.value);

+ 7 - 2
yudao-ui-admin-vue3/src/views/pressure2/pipechecker/recordCheck.vue

@@ -481,7 +481,7 @@ const auditApiParams = ref({})
 const reportType = ref(0)
 const pageType = ref('check')
 const recheckInfo = ref({})
-const handleCheck = (row: any) => {
+const handleCheck = async (row: any) => {
   //测试先注释
   //if (!row.reportUrl) return ElMessage.warning('缺少记录文件地址,请联系管理员!')
   pageType.value = 'check'
@@ -493,7 +493,12 @@ const handleCheck = (row: any) => {
   auditApiParams.value = {
     id: row.reportId
   }
-  recheckInfo.value = row
+  // 从后端获取同一 orderItemId + 当前校核人 的所有待校核项(跨报告合并),不受分页影响
+  const relatedItems = await PipeTaskOrderApi.getRecheckRelatedItems(row.id)
+  recheckInfo.value = {
+    ...row,
+    recheckList: relatedItems || []
+  }
   //console.log(row.reportType, !row.reportType ? 0 : Number(row.reportType))
   reportType.value = !row.reportType ? 0 : Number(row.reportType)
   console.log(equipId.value);