Jelajahi Sumber

检验方案修改审批人

xy 3 minggu lalu
induk
melakukan
1ab762d0f8

+ 88 - 6
yudao-ui-admin-vue3/src/views/pressure2/boilerchecker/AuditCheckRecord.vue

@@ -145,6 +145,32 @@
      <EquipBoilerForm ref="EquipBoilerFormRef" />
 
   <ReportListUploadModal ref="reportListUploadModalRef" :selectedItem="currentReport" :reportList="allReportList" />
+
+  <CustomDialog
+    ref="customUnitDialogRef"
+    title="选择审核人"
+    v-model="approvalUserVisible"
+    width="650px"
+    :dialogAttrs="{ zIndex: 10006 }"
+  >
+    <el-form ref="approveFormRef" :model="approveFormData" :rules="approveFormRules" label-width="135px">
+      <el-form-item label="检验方案批准人" prop="inspectionApproveId">
+        <el-select v-model="approveFormData.inspectionApproveId" clearable placeholder="请选择">
+          <el-option
+            v-for="item in optionList.schemeApproveList.list"
+            :key="item.id"
+            :label="item.nickname"
+            :value="item.id"
+          />
+        </el-select>
+      </el-form-item>
+    </el-form>
+    <template #footer>
+      <el-button @click="approvalUserVisible = false">取消</el-button>
+      <el-button type="primary" @click="handleSubmitUser">确定</el-button>
+    </template>
+  </CustomDialog>
+
 </template>
 <script setup lang="tsx">
   // const RejectDialog = defineAsyncComponent(() => import('@/views/pressure/components/RejectDialog.vue'))
@@ -190,6 +216,19 @@ import ReportListUploadModal from '@/views/pressure2/boilerchecker/components/re
   const getRouteName = computed(() => route.name)
   // 校核人选择对话框状态
   const isShowAuditDialog = ref(false)
+
+  const approveFormRef = ref()
+  const approveFormData = ref<Recordable>({})
+  const approveFormRules = reactive({
+    inspectionApproveId: [{ required: true, message: '请选择批准人', trigger: 'change' }]
+  })
+  const approvalUserVisible = ref(false)
+  const optionList = reactive<{
+    schemeApproveList: Recordable[]
+  }>({
+    schemeApproveList: []
+  })
+
   const form = ref<Record<string, any>>({
     recheckUser: {}
   })
@@ -265,6 +304,11 @@ import ReportListUploadModal from '@/views/pressure2/boilerchecker/components/re
       type: String,
       default: ''
     },
+    rowInfo:{
+      required: true,
+      type: Object,
+      default: () => ({})
+    }
   })
   const emits = defineEmits(['update:visible', 'close', 'update', 'update:recheckInfo'])
   const loading = ref(true)
@@ -468,12 +512,8 @@ import ReportListUploadModal from '@/views/pressure2/boilerchecker/components/re
     console.log('initPreview', initData.value)
   }
 
+  const handlePassFn = ()=>{
 
-  // 通过
-  const handlePass = () => {
-    const canSubmit = canSubmitMainReportType()
-    if(!canSubmit) return
-    // 
     ElMessageBox.confirm(isBatch.value ? '确定批量通过吗?' : '确定通过吗?', '提示', {
       confirmButtonText: '确定',
       cancelButtonText: '取消',
@@ -489,6 +529,13 @@ import ReportListUploadModal from '@/views/pressure2/boilerchecker/components/re
         params = props.apiParams
       }
 
+      if(props.reportType === PressureReportType.INSPECTIONPLAN && props.rowInfo?.currentNode?.includes("审核")) {
+        params = {
+          ...params,
+          ratifyId: approveFormData.value.inspectionApproveId,
+        }
+      }
+
       const passResult = await props.passFn(params)
       // 校核通过后,判断当前报告是否为主报告
       // 如果是,查询主报告是否有子报告: 1、有子报告的条件下,是否所有子报告都办结;2、没有子报告 这两种条件下都可以直接提交审核
@@ -513,7 +560,7 @@ import ReportListUploadModal from '@/views/pressure2/boilerchecker/components/re
           handleClose()
 
         } else {
-          
+
           // 查询未办结的报告列表
           const unFinishList = getSubReportList.filter(report => report.taskStatus !== PressureCheckerMyTaskStatus.CANCELLATION && report.taskStatus !== PressureCheckerMyTaskStatus.REPORT_END)
 
@@ -534,6 +581,21 @@ import ReportListUploadModal from '@/views/pressure2/boilerchecker/components/re
     }).catch(() => {
       console.log('用户取消操作!')
     })
+
+  }
+
+  // 通过
+  const handlePass = () => {
+    const canSubmit = canSubmitMainReportType()
+    if(!canSubmit) return
+
+    //检验方案审批需要选择校核人
+    if (props.reportType === PressureReportType['INSPECTIONPLAN'] && props.rowInfo?.currentNode?.includes("审核")){
+      getSchemeReviewerList()
+      return;
+    }
+
+    handlePassFn()
     
   }
 
@@ -899,6 +961,26 @@ const canSubmitMainReportType = ()=>{
     reportListUploadModalRef.value?.openModal(false)
   }
 
+  // 获取审核人信息
+  const getSchemeReviewerList = async () => {
+    try {
+      optionList.schemeApproveList = await BoilerTaskOrderApi.getAuditList({
+        roleCode: 'Boiler_Department_Head'
+      })
+
+      approvalUserVisible.value = true
+    } catch (error) {}
+  }
+
+  const handleSubmitUser = () => {
+    approveFormRef.value?.validate(async (valid) => {
+      if (valid) {
+        approvalUserVisible.value = false
+        handlePassFn()
+      }
+    })
+  }
+
 </script>
 <style lang="scss" scoped>
 .btn-group {

+ 21 - 34
yudao-ui-admin-vue3/src/views/pressure2/boilerchecker/BoilerAuditInspectionCommentsNotice.vue

@@ -46,6 +46,7 @@
     :id="operationItem.id"
     :templateId="templateId"
     :manualUrl="manualUrl"
+    :rowInfo="rowInfo"
     :useType="useType"
     @close="handleCloseAuditDetail"
     @update="() => getAuditListByReportType()"
@@ -261,6 +262,21 @@ const columns = ref<SmartTableColumn[]>([
       return !val ? '-' : val?.nickname
     }
   },
+  {
+    label: '审批人',
+    prop: 'ratifyUser',
+    fieldProps: {
+      showOverflowTooltip: true,
+      align: 'center'
+    },
+    search: {
+      type: 'selectUserModal',
+      prop: 'bpmUserId'
+    },
+    render: (row, val) => {
+      return !val ? '-' : val?.nickname
+    }
+  },
   {
     label: '提交人',
     prop: 'submitUser',
@@ -323,12 +339,14 @@ const getColumnsByReportType = computed(() => {
     case PressureReportType['SUGGUESTION']:
       return columns.value.filter((col) => col.prop !== 'bpmUserId') as SmartTableColumn[]
     case PressureReportType['WORKINSTRUCTION']:
-    case PressureReportType['INSPECTIONPLAN']:
     case PressureReportType['MAINQUESTION']:
       // const columnsTitle = [ '任务单号', '检验时间', '状态', '当前流程', '退回原因', '提交人', '审核人', '提交时间', '操作' ]
       // return columns.value.filter((col) => columnsTitle.includes(col.label)) as SmartTableColumn[]
       const columnsProp = ['orderNo', 'checkDate', 'status', 'currentNode', 'returnReason', 'submitUser', 'currentAuditor', 'submitTime', 'operation']
       return columns.value.filter((col) => columnsProp.includes(col.prop as string)) as SmartTableColumn[]
+    case PressureReportType['INSPECTIONPLAN']:
+      const columnsPropIns = ['orderNo', 'checkDate', 'status', 'currentNode', 'returnReason', 'submitUser', 'currentAuditor','ratifyUser', 'submitTime', 'operation']
+      return columns.value.filter((col) => columnsPropIns.includes(col.prop as string)) as SmartTableColumn[]
     default:
       return [] as SmartTableColumn[]
   }
@@ -405,11 +423,13 @@ const getAuditListByReportType = () => {
 const showAuditCheckRecord = ref(false)
 const auditApiParams = ref({})
 const operationItem = ref<any>({})
+const rowInfo = ref<any>({})
 const pageType = ref('check')
 const templateId = ref('')
 const manualUrl = ref('')
 const handleOpenAuditDetailOrInfo = async (row, type) => {
   operationItem.value = row
+  rowInfo.value = row
   pageType.value = type
   templateId.value = row.templateId
   manualUrl.value = row.manualUrl
@@ -418,39 +438,6 @@ const handleOpenAuditDetailOrInfo = async (row, type) => {
     reportIds: [row.reportId],
     reportType: getReportType.value
   }
-  /*switch (getReportType.value) {
-    case PressureReportType['SUGGUESTION']:
-      auditApiParams.value = {
-        ids: [row.reportId]
-      }
-      break
-    case PressureReportType['WORKINSTRUCTION']:
-    case PressureReportType['INSPECTIONPLAN']:
-    case PressureReportType['MAINQUESTION']:
-      auditApiParams.value = {
-        ids: [row.id],
-        reportType: getReportType.value
-      }
-      let reportUrl = ''
-      if(PressureReportType['MAINQUESTION'] == getReportType.value && row.signFilePdf){
-        reportUrl = buildFileUrl(row.signFilePdf)
-      } else {
-        // 获取pdf文件流
-        const response = await TaskOrderApi.getReportPreview({
-          reportId: row.id,
-          fileType: 200
-        })
-        // 文件流转成url
-        if (response) {
-          const flow = new Blob([response], { type: 'application/pdf' })
-          reportUrl = window.URL.createObjectURL(flow)
-        }
-      }
-      operationItem.value = { ...row, reportId: row.id, reportUrl }
-      break
-    default:
-      return false
-  }*/
   // 打开弹窗
   showAuditCheckRecord.value = true
 }

+ 1 - 1
yudao-ui-admin-vue3/src/views/pressure2/boilertaskorder/components/AddInspectionplan.vue

@@ -173,7 +173,7 @@ const getInspectionPlanData = async (params: Record<string, any>) => {
     options: filteredOptions.map(item => ({
       ...item,
       label: item.tbName,
-      reportName: equipType + checkType + "-" + item.tbName,
+      reportName: item.tbName,
       value: item.id
     })),
     formData: {

+ 20 - 12
yudao-ui-admin-vue3/src/views/pressure2/boilertaskorder/components/AddInspectionplanDetail.vue

@@ -13,10 +13,13 @@
     class="check-record-wrapper"
     v-loading="pdfLoading"
   >
-    <div class="designer-inner" ref="wrapperContainerRef">
+    <div class="designer-inner" ref="wrapperContainerRef" v-if="['add', 'edit'].includes(isEdit)">
 <!--      <SpreadViewer :initData="initData" ref="spreadRef" />-->
       <SpreadViewer :initData="editData" ref="editSpreadRecordRef" @saveSuccess="saveSuccessRecord"/>
     </div>
+    <div class="designer-inner" ref="wrapperContainerRef" v-else>
+       <SpreadViewer :initData="initData" ref="spreadRef" />
+    </div>
     <div class="operation-inner relative">
       <div class="btn-list">
         <template v-if="['add', 'edit'].includes(isEdit)">
@@ -91,16 +94,16 @@
         </el-select>
       </el-form-item>
 
-      <el-form-item label="检验方案批准人" prop="inspectionApproveId">
-        <el-select v-model="formData.inspectionApproveId" clearable placeholder="请选择">
-          <el-option
-            v-for="item in optionList.schemeApproveList.list"
-            :key="item.id"
-            :label="item.nickname"
-            :value="item.id"
-          />
-        </el-select>
-      </el-form-item>
+<!--      <el-form-item label="检验方案批准人" prop="inspectionApproveId">-->
+<!--        <el-select v-model="formData.inspectionApproveId" clearable placeholder="请选择">-->
+<!--          <el-option-->
+<!--            v-for="item in optionList.schemeApproveList.list"-->
+<!--            :key="item.id"-->
+<!--            :label="item.nickname"-->
+<!--            :value="item.id"-->
+<!--          />-->
+<!--        </el-select>-->
+<!--      </el-form-item>-->
     </el-form>
     <template #footer>
       <el-button @click="approvalUserVisible = false">取消</el-button>
@@ -417,7 +420,12 @@ onMounted(()=>{
   // console.log('wrapperContainerHeight.value ', wrapperContainerHeight.value)
   window.addEventListener('resize', handleWindowResize)
   // initPreview()
-  editPreview()
+  if (['add', 'edit'].includes(props.isEdit)){
+    editPreview()
+  }else{
+    initPreview()
+  }
+
 })
 onUnmounted(() => {
   window.removeEventListener('resize', handleWindowResize)

+ 89 - 6
yudao-ui-admin-vue3/src/views/pressure2/pipechecker/AuditCheckRecord.vue

@@ -145,6 +145,32 @@
      <EquipPipeForm ref="EquipPipeFormRef" />
 
   <ReportListUploadModal ref="reportListUploadModalRef" :selectedItem="currentReport" :reportList="allReportList" />
+
+  <CustomDialog
+    ref="customUnitDialogRef"
+    title="选择审核人"
+    v-model="approvalUserVisible"
+    width="650px"
+    :dialogAttrs="{ zIndex: 10006 }"
+  >
+    <el-form ref="approveFormRef" :model="approveFormData" :rules="approveFormRules" label-width="135px">
+      <el-form-item label="检验方案批准人" prop="inspectionApproveId">
+        <el-select v-model="approveFormData.inspectionApproveId" clearable placeholder="请选择">
+          <el-option
+            v-for="item in optionList.schemeApproveList.list"
+            :key="item.id"
+            :label="item.nickname"
+            :value="item.id"
+          />
+        </el-select>
+      </el-form-item>
+    </el-form>
+    <template #footer>
+      <el-button @click="approvalUserVisible = false">取消</el-button>
+      <el-button type="primary" @click="handleSubmitUser">确定</el-button>
+    </template>
+  </CustomDialog>
+
 </template>
 <script setup lang="tsx">
   // const RejectDialog = defineAsyncComponent(() => import('@/views/pressure/components/RejectDialog.vue'))
@@ -189,6 +215,19 @@ import ReportListUploadModal from '@/views/pressure2/pipechecker/components/repo
   const getRouteName = computed(() => route.name)
   // 校核人选择对话框状态
   const isShowAuditDialog = ref(false)
+
+  const approveFormRef = ref()
+  const approveFormData = ref<Recordable>({})
+  const approveFormRules = reactive({
+    inspectionApproveId: [{ required: true, message: '请选择批准人', trigger: 'change' }]
+  })
+  const approvalUserVisible = ref(false)
+  const optionList = reactive<{
+    schemeApproveList: Recordable[]
+  }>({
+    schemeApproveList: []
+  })
+
   const form = ref<Record<string, any>>({
     recheckUser: {}
   })
@@ -264,6 +303,11 @@ import ReportListUploadModal from '@/views/pressure2/pipechecker/components/repo
       type: String,
       default: ''
     },
+    rowInfo:{
+      required: true,
+      type: Object,
+    default: () => ({})
+    }
   })
   const emits = defineEmits(['update:visible', 'close', 'update', 'update:recheckInfo'])
   const loading = ref(true)
@@ -429,11 +473,8 @@ import ReportListUploadModal from '@/views/pressure2/pipechecker/components/repo
     console.log('initPreview', initData.value)
   }
 
-  // 通过
-  const handlePass = () => {
-    const canSubmit = canSubmitMainReportType()
-    if(!canSubmit) return
-    // 
+  const handlePassFn = ()=>{
+
     ElMessageBox.confirm(isBatch.value ? '确定批量通过吗?' : '确定通过吗?', '提示', {
       confirmButtonText: '确定',
       cancelButtonText: '取消',
@@ -449,6 +490,13 @@ import ReportListUploadModal from '@/views/pressure2/pipechecker/components/repo
         params = props.apiParams
       }
 
+      if(props.reportType === PressureReportType.INSPECTIONPLAN && props.rowInfo?.currentNode?.includes("审核")) {
+        params = {
+          ...params,
+          ratifyId: approveFormData.value.inspectionApproveId,
+        }
+      }
+
       const passResult = await props.passFn(params)
       // 校核通过后,判断当前报告是否为主报告
       // 如果是,查询主报告是否有子报告: 1、有子报告的条件下,是否所有子报告都办结;2、没有子报告 这两种条件下都可以直接提交审核
@@ -473,7 +521,7 @@ import ReportListUploadModal from '@/views/pressure2/pipechecker/components/repo
           handleClose()
 
         } else {
-          
+
           // 查询未办结的报告列表
           const unFinishList = getSubReportList.filter(report => report.taskStatus !== PressureCheckerMyTaskStatus.CANCELLATION && report.taskStatus !== PressureCheckerMyTaskStatus.REPORT_END)
 
@@ -494,6 +542,21 @@ import ReportListUploadModal from '@/views/pressure2/pipechecker/components/repo
     }).catch(() => {
       console.log('用户取消操作!')
     })
+
+  }
+
+  // 通过
+  const handlePass = () => {
+    const canSubmit = canSubmitMainReportType()
+    if(!canSubmit) return
+
+    //检验方案审核时需要选择审批人
+    if (props.reportType === PressureReportType['INSPECTIONPLAN'] && props.rowInfo?.currentNode?.includes("审核")){
+      getSchemeReviewerList()
+      return;
+    }
+
+    handlePassFn()
     
   }
 
@@ -858,6 +921,26 @@ const canSubmitMainReportType = ()=>{
     reportListUploadModalRef.value?.openModal(false)
   }
 
+  // 获取审核人信息
+  const getSchemeReviewerList = async () => {
+    try {
+      optionList.schemeApproveList = await PipeTaskOrderApi.getAuditList({
+        roleCode: 'Minister_Pipelines'
+      })
+
+      approvalUserVisible.value = true
+    } catch (error) {}
+  }
+
+  const handleSubmitUser = () => {
+    approveFormRef.value?.validate(async (valid) => {
+      if (valid) {
+        approvalUserVisible.value = false
+        handlePassFn()
+      }
+    })
+  }
+
 </script>
 <style lang="scss" scoped>
 .btn-group {

+ 22 - 2
yudao-ui-admin-vue3/src/views/pressure2/pipechecker/PipeAuditInspectionCommentsNotice.vue

@@ -47,6 +47,7 @@
     :templateId="templateId"
     :manualUrl="manualUrl"
     :useType="useType"
+    :rowInfo="rowInfo"
     @close="handleCloseAuditDetail"
     @update="() => getAuditListByReportType()"
   />
@@ -261,6 +262,21 @@ const columns = ref<SmartTableColumn[]>([
       return !val ? '-' : val?.nickname
     }
   },
+  {
+    label: '审批人',
+    prop: 'ratifyUser',
+    fieldProps: {
+      showOverflowTooltip: true,
+      align: 'center'
+    },
+    search: {
+      type: 'selectUserModal',
+      prop: 'bpmUserId'
+    },
+    render: (row, val) => {
+      return !val ? '-' : val?.nickname
+    }
+  },
   {
     label: '提交人',
     prop: 'submitUser',
@@ -323,12 +339,14 @@ const getColumnsByReportType = computed(() => {
     case PressureReportType['SUGGUESTION']:
       return columns.value.filter((col) => col.prop !== 'bpmUserId') as SmartTableColumn[]
     case PressureReportType['WORKINSTRUCTION']:
-    case PressureReportType['INSPECTIONPLAN']:
     case PressureReportType['MAINQUESTION']:
       // const columnsTitle = [ '任务单号', '检验时间', '状态', '当前流程', '退回原因', '提交人', '审核人', '提交时间', '操作' ]
       // return columns.value.filter((col) => columnsTitle.includes(col.label)) as SmartTableColumn[]
-      const columnsProp = ['orderNo', 'checkDate', 'status', 'currentNode', 'returnReason', 'submitUser', 'currentAuditor', 'submitTime', 'operation']
+      const columnsProp = ['orderNo', 'checkDate', 'status', 'currentNode', 'returnReason', 'submitUser', 'currentAuditor','submitTime', 'operation']
       return columns.value.filter((col) => columnsProp.includes(col.prop as string)) as SmartTableColumn[]
+    case PressureReportType['INSPECTIONPLAN']:
+      const columnsPropIns = ['orderNo', 'checkDate', 'status', 'currentNode', 'returnReason', 'submitUser', 'currentAuditor','ratifyUser', 'submitTime', 'operation']
+      return columns.value.filter((col) => columnsPropIns.includes(col.prop as string)) as SmartTableColumn[]
     default:
       return [] as SmartTableColumn[]
   }
@@ -405,11 +423,13 @@ const getAuditListByReportType = () => {
 const showAuditCheckRecord = ref(false)
 const auditApiParams = ref({})
 const operationItem = ref<any>({})
+const rowInfo = ref<any>({})
 const pageType = ref('check')
 const templateId = ref('')
 const manualUrl = ref('')
 const handleOpenAuditDetailOrInfo = async (row, type) => {
   operationItem.value = row
+  rowInfo.value = row
   pageType.value = type
   templateId.value = row.templateId
   manualUrl.value = row.manualUrl

+ 1 - 1
yudao-ui-admin-vue3/src/views/pressure2/pipetaskorder/components/AddInspectionplan.vue

@@ -173,7 +173,7 @@ const getInspectionPlanData = async (params: Record<string, any>) => {
     options: filteredOptions.map(item => ({
       ...item,
       label: item.tbName,
-      reportName: equipType + checkType + "-" + item.tbName,
+      reportName: item.tbName,
       value: item.id
     })),
     formData: {

+ 22 - 13
yudao-ui-admin-vue3/src/views/pressure2/pipetaskorder/components/AddInspectionplanDetail.vue

@@ -13,10 +13,13 @@
     class="check-record-wrapper"
     v-loading="pdfLoading"
   >
-    <div class="designer-inner" ref="wrapperContainerRef">
-<!--      <SpreadViewer :initData="initData" ref="spreadRef" />-->
+    <div class="designer-inner" ref="wrapperContainerRef" v-if="['add', 'edit'].includes(isEdit)">
+      <!--      <SpreadViewer :initData="initData" ref="spreadRef" />-->
       <SpreadViewer :initData="editData" ref="editSpreadRecordRef" @saveSuccess="saveSuccessRecord"/>
     </div>
+    <div class="designer-inner" ref="wrapperContainerRef" v-else>
+      <SpreadViewer :initData="initData" ref="spreadRef" />
+    </div>
     <div class="operation-inner relative">
       <div class="btn-list">
         <template v-if="['add', 'edit'].includes(isEdit)">
@@ -93,16 +96,16 @@
         </el-select>
       </el-form-item>
 
-      <el-form-item label="检验方案批准人" prop="inspectionApproveId">
-        <el-select v-model="formData.inspectionApproveId" clearable placeholder="请选择">
-          <el-option
-            v-for="item in optionList.schemeApproveList.list"
-            :key="item.id"
-            :label="item.nickname"
-            :value="item.id"
-          />
-        </el-select>
-      </el-form-item>
+<!--      <el-form-item label="检验方案批准人" prop="inspectionApproveId">-->
+<!--        <el-select v-model="formData.inspectionApproveId" clearable placeholder="请选择">-->
+<!--          <el-option-->
+<!--            v-for="item in optionList.schemeApproveList.list"-->
+<!--            :key="item.id"-->
+<!--            :label="item.nickname"-->
+<!--            :value="item.id"-->
+<!--          />-->
+<!--        </el-select>-->
+<!--      </el-form-item>-->
     </el-form>
     <template #footer>
       <el-button @click="approvalUserVisible = false">取消</el-button>
@@ -413,6 +416,8 @@ const initPreview=()=>{
   initData.value.refId = props.editInspectionplanParams.reportId;
   initData.value.opType = 1;
 
+  initData.value.manualUrl = props.inspectionplanDetail?.manualUrl;
+
   setTimeout(()=>{
     spreadRef.value?.reloadView();
   },50)
@@ -425,7 +430,11 @@ onMounted(()=>{
   // console.log('wrapperContainerHeight.value ', wrapperContainerHeight.value)
   window.addEventListener('resize', handleWindowResize)
   // initPreview()
-  editPreview()
+  if (['add', 'edit'].includes(props.isEdit)){
+    editPreview()
+  }else{
+    initPreview()
+  }
 })
 onUnmounted(() => {
   window.removeEventListener('resize', handleWindowResize)