From 4385883dbddc36c5391cccc64021a45530839a6f Mon Sep 17 00:00:00 2001
From: lyh <925863403@qq.com>
Date: 星期六, 26 七月 2025 16:26:46 +0800
Subject: [PATCH] 产品安全隐患流程与基础

---
 src/views/eam/repair/EamReportProductHazardsList.vue                          |  147 +++++++++----
 src/views/flowable/workflow/repairOrder/ReportProductHazardsApprovalModal.vue |  332 ++++++++++++++++++++++++++++++
 src/views/eam/repair/modules/EamReportProductHazardsModal.vue                 |  102 ++++----
 src/views/flowable/workflow/FlowTodo.vue                                      |   21 +
 4 files changed, 504 insertions(+), 98 deletions(-)

diff --git a/src/views/eam/repair/EamReportProductHazardsList.vue b/src/views/eam/repair/EamReportProductHazardsList.vue
index 2bbfd70..4d0d66d 100644
--- a/src/views/eam/repair/EamReportProductHazardsList.vue
+++ b/src/views/eam/repair/EamReportProductHazardsList.vue
@@ -5,42 +5,27 @@
     <div class="table-page-search-wrapper">
       <a-form layout="inline" @keyup.enter.native="searchQuery">
         <a-row :gutter="24">
-
-          <a-col :xl="6" :lg="7" :md="8" :sm="24">
-            <a-form-item label="鎶ヤ慨ID">
-              <a-input placeholder="璇疯緭鍏ユ姤淇甀D" v-model="queryParam.reportId"></a-input>
+          <a-col :xl="6" :lg="7" :md="8" :sm="12">
+            <a-form-item label="缁熶竴缂栫爜">
+              <lx-search-equipment-select placeholder="璇疯緭鍏ョ粺涓�缂栫爜鎴栧悕绉版悳绱�" v-model="queryParam.equipmentId"/>
+            </a-form-item>
+          </a-col>
+          <a-col :xl="6" :lg="7" :md="8" :sm="12">
+            <a-form-item label="纭鐘舵��">
+              <j-dict-select-tag placeholder="璇烽�夋嫨纭鐘舵��" v-model="queryParam.confirmStatus"
+                                 dict-code="confirm_status"/>
             </a-form-item>
           </a-col>
           <a-col :xl="6" :lg="7" :md="8" :sm="24">
-            <a-form-item label="璁惧ID">
-              <a-input placeholder="璇疯緭鍏ヨ澶嘔D" v-model="queryParam.equipmentId"></a-input>
+            <a-form-item label="浜у搧鎹熷け鎯呭喌">
+              <j-dict-select-tag placeholder="璇烽�夋嫨浜у搧鎹熷け鎯呭喌" v-model="queryParam.productLoss"
+                                 dict-code="yn"/>
             </a-form-item>
           </a-col>
-        <template v-if="toggleSearchStatus">
-          <a-col :xl="6" :lg="7" :md="8" :sm="24">
-            <a-form-item label="鎿嶄綔宸�">
-              <a-input placeholder="璇疯緭鍏ユ搷浣滃伐" v-model="queryParam.confirmer"></a-input>
-            </a-form-item>
-          </a-col>
-          <a-col :xl="6" :lg="7" :md="8" :sm="24">
-            <a-form-item label="鎿嶄綔宸ョ‘璁ゆ椂闂�">
-              <a-input placeholder="璇疯緭鍏ユ搷浣滃伐纭鏃堕棿" v-model="queryParam.confirmTime"></a-input>
-            </a-form-item>
-          </a-col>
-          <a-col :xl="6" :lg="7" :md="8" :sm="24">
-            <a-form-item label="浜у搧鎹熷け鎯呭喌;鏄� 鍚�">
-              <a-input placeholder="璇疯緭鍏ヤ骇鍝佹崯澶辨儏鍐�;鏄� 鍚�" v-model="queryParam.productLoss"></a-input>
-            </a-form-item>
-          </a-col>
-          </template>
           <a-col :xl="6" :lg="7" :md="8" :sm="24">
             <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
               <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
               <a-button type="info" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button>
-              <a @click="handleToggleSearch" style="margin-left: 8px">
-                {{ toggleSearchStatus ? '鏀惰捣' : '灞曞紑' }}
-                <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
-              </a>
             </span>
           </a-col>
 
@@ -83,21 +68,22 @@
         :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
         @change="handleTableChange">
 
-        <span slot="action" slot-scope="text, record">
-          <a @click="handleEdit(record)">缂栬緫</a>
+      <span slot="action" slot-scope="text, record">
+          <template v-if="record.confirmStatus==='PENDING_SUBMIT'">
+             <a @click="handleEdit(record)">缂栬緫</a>
+             <a-divider type="vertical"/>
+             <a-popconfirm title="纭畾鎻愪氦鍚�?" @confirm="() => handleSubmit(record.id)">
+               <a>鎻愪氦</a>
+             </a-popconfirm>
+          </template>
 
-          <a-divider type="vertical" />
-          <a-dropdown>
-            <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a>
-            <a-menu slot="overlay">
-              <a-menu-item>
-                <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)">
-                  <a>鍒犻櫎</a>
-                </a-popconfirm>
-              </a-menu-item>
-            </a-menu>
-          </a-dropdown>
+          <a v-else @click="handleDetail(record)">璇︽儏</a>
         </span>
+
+        <!--瀛楃涓茶秴闀挎埅鍙栫渷鐣ュ彿鏄剧ず-->
+        <span slot="qualityAnalysis" slot-scope="text">
+          <j-ellipsis :value="text" :length="8"/>
+      </span>
 
       </a-table>
     </div>
@@ -105,6 +91,10 @@
 
     <!-- 琛ㄥ崟鍖哄煙 -->
     <eamReportProductHazards-modal ref="modalForm" @ok="modalFormOk"></eamReportProductHazards-modal>
+
+    <!--瀹℃壒绐楀彛-->
+    <report-product-hazards-approval-modal ref="reportProductHazardsApprovalModal"
+                                              :selectShenpiData="selectedRowData"/>
   </a-card>
 </template>
 
@@ -112,11 +102,17 @@
   import '@/assets/less/TableExpand.less'
   import EamReportProductHazardsModal from './modules/EamReportProductHazardsModal'
   import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+  import {getAction} from "@api/manage";
+  import ReportProductHazardsApprovalModal
+    from "@views/flowable/workflow/repairOrder/ReportProductHazardsApprovalModal.vue";
+  import LxSearchEquipmentSelect from "@views/eam/equipment/modules/LxSearchEquipmentSelect.vue";
 
   export default {
     name: "EamReportProductHazardsList",
     mixins:[JeecgListMixin],
     components: {
+      LxSearchEquipmentSelect,
+      ReportProductHazardsApprovalModal,
       EamReportProductHazardsModal
     },
     props: {
@@ -164,10 +160,31 @@
             dataIndex: 'equipmentModel',
             fixed: 'left'
           },
+          {
+            title: '纭鐘舵��',
+            align: 'center',
+            dataIndex: 'confirmStatus_dictText',
+            fixed: 'left'
+          },
+          {
+            title: '鎵规鍙�',
+            align: 'center',
+            dataIndex: 'batchNumber'
+          },
+          {
+            title: '鍔犲伐闆朵欢鍙�',
+            align: 'center',
+            dataIndex: 'processingPart'
+          },
+          {
+            title: '浠舵暟',
+            align: 'center',
+            dataIndex: 'quantity'
+          },
 		       {
             title: '鎿嶄綔宸�',
             align:"center",
-            dataIndex: 'confirmer'
+            dataIndex: 'confirmer_dictText'
            },
 		       {
             title: '鎿嶄綔宸ョ‘璁ゆ椂闂�',
@@ -175,19 +192,20 @@
             dataIndex: 'confirmTime'
            },
 		       {
-            title: '浜у搧鎹熷け鎯呭喌;鏄� 鍚�',
+            title: '浜у搧鎹熷け鎯呭喌',
             align:"center",
-            dataIndex: 'productLoss'
+            dataIndex: 'productLoss_dictText'
            },
 		       {
             title: '浜у搧鎹熷け璐ㄩ噺褰卞搷鍒嗘瀽',
             align:"center",
-            dataIndex: 'qualityAnalysis'
+            dataIndex: 'qualityAnalysis',
+            scopedSlots: { customRender: 'qualityAnalysis' }
            },
 		       {
             title: '涓荤宸ヨ壓',
             align:"center",
-            dataIndex: 'technologist'
+            dataIndex: 'technologist_dictText'
            },
 		       {
             title: '涓荤宸ヨ壓纭鏃堕棿',
@@ -202,7 +220,7 @@
 		       {
             title: '閮ㄧ骇棰嗗',
             align:"center",
-            dataIndex: 'deputyDepartment'
+            dataIndex: 'deputyDepartment_dictText'
            },
 		       {
             title: '閮ㄧ骇棰嗗纭鏃堕棿',
@@ -215,13 +233,14 @@
             dataIndex: 'deputyDepartmentComment'
            },
         ],
-        selectRepairOrderData: {},
+        selectedRowData: {},
 		    url: {
           list: "/eam/eamReportProductHazards/list",
           delete: "/eam/eamReportProductHazards/delete",
           deleteBatch: "/eam/eamReportProductHazards/deleteBatch",
           exportXlsUrl: "eam/eamReportProductHazards/exportXls",
           importExcelUrl: "eam/eamReportProductHazards/importExcel",
+          submit:"/eam/eamReportProductHazards/submit",
        },
     }
   },
@@ -241,7 +260,41 @@
       this.loadData(1)
     },
     methods: {
+      /**
+       * 鐐瑰嚮鎻愪氦鏃惰Е鍙�
+       * @param id
+       */
+      handleSubmit(id) {
+        this.loading = true
+        getAction(this.url.submit, { id })
+          .then(res => {
+            if (res.success) {
+              this.$notification.success({
+                message: '娑堟伅',
+                description: res.message
+              })
+              this.loadData()
+            } else {
+              this.$notification.warning({
+                message: '娑堟伅',
+                description: res.message
+              })
+              this.loading = false
+            }
+          })
+      },
 
+      /**
+       * 鐐瑰嚮璇︽儏鏃惰Е鍙戞椂瑙﹀彂
+       * @param record
+       */
+      handleDetail(record) {
+        this.selectedRowData = Object.assign({}, record)
+        this.$refs.reportProductHazardsApprovalModal.title = '璇︽儏'
+        this.$refs.reportProductHazardsApprovalModal.disableSubmit = true
+        this.$refs.reportProductHazardsApprovalModal.visible = true
+        this.$refs.reportProductHazardsApprovalModal.handleDetail(record)
+      }
     }
   }
 </script>
diff --git a/src/views/eam/repair/modules/EamReportProductHazardsModal.vue b/src/views/eam/repair/modules/EamReportProductHazardsModal.vue
index f7c2948..308d7c1 100644
--- a/src/views/eam/repair/modules/EamReportProductHazardsModal.vue
+++ b/src/views/eam/repair/modules/EamReportProductHazardsModal.vue
@@ -1,54 +1,40 @@
 <template>
-  <j-modal
-    :title="title"
-    :width="800"
-    :visible="visible"
-    :confirmLoading="confirmLoading"
-    switchFullscreen
-    @ok="handleOk"
-    @cancel="handleCancel"
-    cancelText="鍏抽棴">
-    
+  <j-modal :title="title" :width="1200" :visible="visible" :confirmLoading="confirmLoading" switchFullscreen
+           @ok="handleOk" @cancel="handleCancel" cancelText="鍏抽棴">
     <a-spin :spinning="confirmLoading">
-      <a-form-model ref="form" :model="model" :rules="validatorRules">
-      
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="reportId" label="鎶ヤ慨ID">
-          <a-input placeholder="璇疯緭鍏ユ姤淇甀D" v-model="model.reportId" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="equipmentId" label="璁惧ID">
-          <a-input placeholder="璇疯緭鍏ヨ澶嘔D" v-model="model.equipmentId" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="confirmer" label="鎿嶄綔宸�">
-          <a-input placeholder="璇疯緭鍏ユ搷浣滃伐" v-model="model.confirmer" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="confirmTime" label="鎿嶄綔宸ョ‘璁ゆ椂闂�">
-          <a-input placeholder="璇疯緭鍏ユ搷浣滃伐纭鏃堕棿" v-model="model.confirmTime" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="productLoss" label="浜у搧鎹熷け鎯呭喌;鏄� 鍚�">
-          <a-input placeholder="璇疯緭鍏ヤ骇鍝佹崯澶辨儏鍐�;鏄� 鍚�" v-model="model.productLoss" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="qualityAnalysis" label="浜у搧鎹熷け璐ㄩ噺褰卞搷鍒嗘瀽">
-          <a-input placeholder="璇疯緭鍏ヤ骇鍝佹崯澶辫川閲忓奖鍝嶅垎鏋�" v-model="model.qualityAnalysis" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="technologist" label="涓荤宸ヨ壓">
-          <a-input placeholder="璇疯緭鍏ヤ富绠″伐鑹�" v-model="model.technologist" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="technologistTime" label="涓荤宸ヨ壓纭鏃堕棿">
-          <a-input placeholder="璇疯緭鍏ヤ富绠″伐鑹虹‘璁ゆ椂闂�" v-model="model.technologistTime" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="technologistComment" label="涓荤宸ヨ壓纭鎰忚">
-          <a-input placeholder="璇疯緭鍏ヤ富绠″伐鑹虹‘璁ゆ剰瑙�" v-model="model.technologistComment" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="deputyDepartment" label="閮ㄧ骇棰嗗">
-          <a-input placeholder="璇疯緭鍏ラ儴绾ч瀵�" v-model="model.deputyDepartment" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="deputyDepartmentTime" label="閮ㄧ骇棰嗗纭鏃堕棿">
-          <a-input placeholder="璇疯緭鍏ラ儴绾ч瀵肩‘璁ゆ椂闂�" v-model="model.deputyDepartmentTime" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="deputyDepartmentComment" label="閮ㄧ骇棰嗗纭鎰忚">
-          <a-input placeholder="璇疯緭鍏ラ儴绾ч瀵肩‘璁ゆ剰瑙�" v-model="model.deputyDepartmentComment" />
-        </a-form-model-item>
-		
+      <a-form-model ref="form" :model="model" :rules="validatorRules" :labelCol="labelCol" :wrapperCol="wrapperCol">
+        <a-row>
+          <a-col :span="customSpan">
+            <a-form-model-item label="鎵规鍙�" prop="batchNumber">
+              <a-input placeholder="璇疯緭鍏ユ壒娆″彿" v-model="model.batchNumber"/>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="customSpan">
+            <a-form-model-item label="鍔犲伐闆朵欢鍙�" prop="processingPart">
+              <a-input placeholder="璇疯緭鍏ュ姞宸ラ浂浠跺彿"
+                       v-model="model.processingPart"/>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="customSpan">
+            <a-form-model-item label="浠舵暟" prop="quantity">
+              <a-input-number  placeholder="璇疯緭鍏ヤ欢鏁�" v-model="model.quantity"
+                              :min="0" style="width: 100%"/>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="customSpan">
+            <a-form-model-item prop="productLoss" label="浜у搧鎹熷け鎯呭喌">
+            <j-dict-select-tag dict-code="yn" type="radio"
+                               placeholder="璇疯緭鍏ヤ骇鍝佹崯澶辨儏鍐�"
+                               v-model="model.productLoss"/>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item :labelCol="labelColLong"
+                               :wrapperCol="wrapperColLong" prop="qualityAnalysis" label="浜у搧鎹熷け璐ㄩ噺褰卞搷鍒嗘瀽">
+              <a-textarea placeholder="璇疯緭鍏ヤ骇鍝佹崯澶辫川閲忓奖鍝嶅垎鏋�" v-model="model.qualityAnalysis"/>
+            </a-form-model-item>
+          </a-col>
+        </a-row>
       </a-form-model>
     </a-spin>
   </j-modal>
@@ -64,18 +50,32 @@
       return {
         title:"鎿嶄綔",
         visible: false,
+        customSpan: 6,
         model: {},
         labelCol: {
           xs: { span: 24 },
-          sm: { span: 5 },
+          sm: { span: 9 }
         },
         wrapperCol: {
           xs: { span: 24 },
-          sm: { span: 16 },
+          sm: { span: 12 }
+        },
+        labelColLong: {
+          xs: { span: 24 },
+          sm: { span: 3 }
+        },
+        wrapperColLong: {
+          xs: { span: 24 },
+          sm: { span: 20 }
         },
 
         confirmLoading: false,
         validatorRules:{
+          batchNumber: [{ required: true, message: '璇疯緭鍏ユ壒娆″彿', trigger: 'change' }],
+          processingPart: [{ required: true, message: '璇疯緭鍏ュ姞宸ラ浂浠跺彿', trigger: 'change' }],
+          quantity: [{ required: true, message: '璇疯緭鍏ヤ欢鏁�', trigger: 'change' }],
+          productLoss: [{ required: true, message: '璇疯緭鍏ヤ骇鍝佹崯澶辨儏鍐�', trigger: 'change' }],
+          qualityAnalysis: [{ required: true, message: '璇疯緭鍏ヤ骇鍝佹崯澶辫川閲忓奖鍝嶅垎鏋�', trigger: 'change' }],
         },
         url: {
           add: "/eam/eamReportProductHazards/add",
diff --git a/src/views/flowable/workflow/FlowTodo.vue b/src/views/flowable/workflow/FlowTodo.vue
index 8b57b8f..5d7d907 100644
--- a/src/views/flowable/workflow/FlowTodo.vue
+++ b/src/views/flowable/workflow/FlowTodo.vue
@@ -135,6 +135,11 @@
     <report-accidents-register-approval-modal ref="reportAccidentsRegisterApprovalModal"
                                               :selectShenpiData="selectedRowData"
                                               @modalFormOk="modalFormOk"/>
+
+    <!--浜у搧瀹夊叏纭-->
+    <eam-report-product-hazards-modal ref="reportProductHazardsApprovalModal"
+                                                :selectShenpiData="selectedRowData"
+                                                @modalFormOk="modalFormOk"/>
   </a-card>
 </template>
 
@@ -157,11 +162,13 @@
   import ThirdMaintenanceOrderChangeApprovalModal from './thirdMaintenance/ThirdMaintenanceOrderChangeApprovalModal'
   import ThirdMaintenanceFurnaceApprovalModal from './thirdMaintenance/ThirdMaintenanceFurnaceApprovalModal'
   import ReportAccidentsRegisterApprovalModal from './repairOrder/ReportAccidentsRegisterApprovalModal'
+  import EamReportProductHazardsModal from "./repairOrder/ReportProductHazardsApprovalModal.vue";
 
   export default {
     name: 'FlowTodo',
     mixins: [JeecgListMixin],
     components: {
+      EamReportProductHazardsModal,
       ReportAccidentsRegisterApprovalModal,
       ThirdMaintenanceFurnaceApprovalModal,
       ThirdMaintenanceOrderChangeApprovalModal,
@@ -295,6 +302,9 @@
             break
           case 'eam_report_accidents_register':
             this.handleAccidentsRegister(record)
+            break
+          case 'eam_report_product_hazards':
+            this.handleProductHazard(record)
             break
           default:
             alert('娌℃壘鍒拌娴佺▼')
@@ -444,6 +454,17 @@
         this.$refs.reportAccidentsRegisterApprovalModal.handleApprove(record)
       },
 
+      /**
+       * 鐐瑰嚮浜у搧瀹夊叏闅愭偅纭娴佺▼瀹℃壒鏃惰Е鍙�
+       * @param record
+       */
+      handleProductHazard(record){
+        this.selectedRowData = Object.assign({}, record)
+        this.$refs.reportProductHazardsApprovalModal.visible = true
+        this.$refs.reportProductHazardsApprovalModal.title = record.name
+        this.$refs.reportProductHazardsApprovalModal.handleApprove(record)
+      },
+
       batchHandle() {
         const categorySet = new Set(this.selectionRows.map(item => item.category))
         const nameSet = new Set(this.selectionRows.map(item => item.name))
diff --git a/src/views/flowable/workflow/repairOrder/ReportProductHazardsApprovalModal.vue b/src/views/flowable/workflow/repairOrder/ReportProductHazardsApprovalModal.vue
new file mode 100644
index 0000000..97b719b
--- /dev/null
+++ b/src/views/flowable/workflow/repairOrder/ReportProductHazardsApprovalModal.vue
@@ -0,0 +1,332 @@
+<template>
+  <j-modal :title="title" :visible="visible" :confirmLoading="confirmLoading" :width="1300"
+           :okButtonProps="{ class:{'jee-hidden': disableSubmit} }" fullscreen @ok="handleOk"
+           @cancel="handleCancel" centered cancelText="鍏抽棴">
+    <a-spin :spinning="spinning">
+      <a-form-model ref="form" :model="model" :rules="validatorRules" :labelCol="labelCol" :wrapperCol="wrapperCol">
+        <a-row id="outer-row" :gutter="24">
+          <!--宸︿晶鍩虹淇℃伅鍒�-->
+          <a-col :span="selectShenpiData.procInstId?8:12" class="scroll-col">
+            <a-tabs>
+              <a-tab-pane tab="鍩虹淇℃伅">
+                <a-row>
+                  <a-col :span="12">
+                    <a-form-model-item label="缁熶竴缂栫爜">
+                      <lx-search-equipment-select v-model="model.equipmentId" disabled/>
+                    </a-form-model-item>
+                  </a-col>
+                  <a-col :span="12">
+                    <a-form-model-item label="鎵规鍙�">
+                      <a-input v-model="model.batchNumber" readOnly/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+
+                <a-row>
+                  <a-col :span="12">
+                    <a-form-model-item label="鍔犲伐闆朵欢鍙�">
+                      <a-input v-model="model.processingPart" readOnly/>
+                    </a-form-model-item>
+                  </a-col>
+                  <a-col :span="12">
+                    <a-form-model-item label="浠舵暟">
+                      <a-input-number v-model="model.quantity" disabled/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+
+                <a-row>
+                  <a-col :span="12">
+                    <a-form-model-item label="浜у搧鎹熷け鎯呭喌">
+                      <j-dict-select-tag dict-code="yn" type="radio" v-model="model.productLoss" disabled/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item label="浜у搧鎹熷け璐ㄩ噺褰卞搷鍒嗘瀽" :labelCol="labelColLong" :wrapperCol="wrapperColLong">
+                      <a-textarea v-model="model.qualityAnalysis" readOnly/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+              </a-tab-pane>
+            </a-tabs>
+          </a-col>
+
+          <!-- 涓棿鏄庣粏椤瑰垪-->
+          <a-col v-if="selectShenpiData.procInstId" :span="10" class="scroll-col">
+            <a-tabs default-active-key="1">
+              <a-tab-pane key='1' tab='娴佺▼鍥�'>
+                <img :src="imageSrc" v-if="imageSrc" style="width: 100%"/>
+              </a-tab-pane>
+            </a-tabs>
+          </a-col>
+
+          <!--鍙充晶瀹℃壒鍒�-->
+          <a-col :span="selectShenpiData.procInstId?6:12" class="scroll-col">
+            <a-tabs v-if="displayRegionalManagerFlag">
+              <a-tab-pane tab="涓荤宸ヨ壓纭">
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="technologistResult" label="纭绫诲瀷"
+                                       :labelCol="rightColLabelCol" :wrapperCol="rightColWrapperCol">
+                      <j-dict-select-tag type='radio' v-model='model.technologistResult'
+                                         dictCode='approve_reject'
+                                         :disabled="disableSubmit||(model.confirmStatus&&model.confirmStatus!=='PENDING_SUPERIOR_TECHNICAL_CONFIRMATION')"/>
+                    </a-form-model-item>
+                  </a-col>
+                  <a-col :span="24">
+                    <a-form-model-item label="纭鎰忚" :labelCol="rightColLabelCol" :wrapperCol="rightColWrapperCol">
+                      <a-textarea placeholder="璇疯緭鍏ユ剰瑙�" v-model="model.technologistComment"
+                                  :disabled="disableSubmit||(model.confirmStatus&&model.confirmStatus!=='PENDING_SUPERIOR_TECHNICAL_CONFIRMATION')"/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+              </a-tab-pane>
+            </a-tabs>
+
+            <a-tabs v-if="displayRepairRegionalManagerFlag">
+              <a-tab-pane tab="鍓儴绾ч瀵肩‘璁�">
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="deputyDepartmentResult" label="纭绫诲瀷"
+                                       :labelCol="rightColLabelCol" :wrapperCol="rightColWrapperCol">
+                      <j-dict-select-tag type='radio' v-model='model.deputyDepartmentResult'
+                                         dictCode='approve_reject'
+                                         :disabled="disableSubmit||(model.confirmStatus&&model.confirmStatus!=='PENDING_DEPARTMENT_LEADER_CONFIRMATION')"/>
+                    </a-form-model-item>
+                  </a-col>
+                  <a-col :span="24">
+                    <a-form-model-item label="纭鎰忚" :labelCol="rightColLabelCol" :wrapperCol="rightColWrapperCol">
+                      <a-textarea placeholder="璇疯緭鍏ユ剰瑙�" v-model="model.deputyDepartmentComment"
+                                  :disabled="disableSubmit||(model.confirmStatus&&model.confirmStatus!=='PENDING_DEPARTMENT_LEADER_CONFIRMATION')"/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+              </a-tab-pane>
+            </a-tabs>
+
+
+
+          </a-col>
+        </a-row>
+      </a-form-model>
+    </a-spin>
+  </j-modal>
+</template>
+
+<script>
+  import { downFile, getAction, httpAction } from '@/api/manage'
+  import TechnicalStatusEquipmentSelect from '../../../eam/equipment/modules/TechnicalStatusEquipmentSelect'
+  import LxSearchEquipmentSelect from '../../../eam/equipment/modules/LxSearchEquipmentSelect'
+
+  export default {
+    name: 'reportProductHazardsApprovalModal',
+    components: {
+      LxSearchEquipmentSelect,
+      TechnicalStatusEquipmentSelect
+    },
+    props: {
+      selectShenpiData: {
+        type: Object
+      }
+    },
+    data() {
+      return {
+        title: '鎿嶄綔',
+        visible: false,
+        model: {},
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 10 }
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 14 }
+        },
+        labelColLong: {
+          xs: { span: 24 },
+          sm: { span: 5 }
+        },
+        wrapperColLong: {
+          xs: { span: 24 },
+          sm: { span: 19 }
+        },
+        rightColLabelCol: {
+          xs: { span: 24 },
+          sm: { span: 8 }
+        },
+        rightColWrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 15 }
+        },
+        confirmLoading: false,
+        spinning: false,
+        imageSrc: null,
+        validatorRules: {
+          technicalDirectorLeaderResult: [{ required: true, message: '璇烽�夋嫨纭绫诲瀷' }],
+          technicalDirectorPartResult: [{ required: true, message: '璇烽�夋嫨纭绫诲瀷' }]
+        },
+        url: {
+          queryById: '/eam/eamReportProductHazards/queryById',
+          approval: '/eam/eamReportProductHazards/perform',
+          diagramView: '/assign/flow/diagramView'
+        },
+        disableSubmit: false
+      }
+    },
+    computed: {
+      displayRegionalManagerFlag() {
+        return this.model.confirmStatus && ['PENDING_SUPERIOR_TECHNICAL_CONFIRMATION', 'PENDING_DEPARTMENT_LEADER_CONFIRMATION','REPAIR_COMPLETED', 'REJECTED'].includes(this.model.confirmStatus)
+      },
+      displayRepairRegionalManagerFlag() {
+        return this.model.confirmStatus && ['PENDING_DEPARTMENT_LEADER_CONFIRMATION','REPAIR_COMPLETED', 'REJECTED'].includes(this.model.confirmStatus)
+      },
+    },
+    methods: {
+      /**
+       * 涓婚〉闈㈢偣鍑绘墽琛屽鎵规椂瑙﹀彂
+       * @param record 涓婚〉闈㈠垪琛ㄨ璁板綍
+       */
+      async handleApprove(record) {
+        this.model = {}
+        this.getBasicInformationByApi(record)
+        this.getFlowChartImageByApi(record)
+      },
+
+      /**
+       * 涓婚〉闈㈢偣鍑昏鎯呮椂瑙﹀彂
+       * @param record 涓婚〉闈㈠垪琛ㄨ璁板綍
+       */
+      handleDetail(record) {
+        this.model = Object.assign({}, record)
+      },
+
+      /**
+       * 鑾峰彇鍩虹淇℃伅
+       * @param record 涓婚〉闈㈠垪琛ㄨ璁板綍
+       */
+      getBasicInformationByApi(record) {
+        this.spinning = true
+        const that = this
+        getAction(this.url.queryById, { id: record.dataId })
+          .then(res => {
+            if (res.success) {
+              that.model = Object.assign({}, res.result, { repairConfirmResult: '1' })
+              that.model.dataId = record.dataId
+              that.model.taskId = record.id
+              that.model.userId = record.assignee
+              that.model.instanceId = record.procInstId
+            }
+            else {
+              that.$notification.warning({
+                message: '娑堟伅',
+                description: res.message
+              })
+            }
+          })
+          .finally(() => {
+            that.spinning = false
+          })
+      },
+
+      /**
+       * 鑾峰彇娴佺▼鍥�
+       * @param record 涓婚〉闈㈠垪琛ㄨ璁板綍
+       */
+      getFlowChartImageByApi(record) {
+        const { processDefinitionId, processInstanceId, processDefinitionKey } = record
+
+        downFile(this.url.diagramView, {
+          processDefinitionId,
+          processInstanceId,
+          TaskDefinitionKey: processDefinitionKey
+        }, 'get')
+          .then((res => {
+            this.imageSrc = window.URL.createObjectURL(new Blob([res]))
+          }))
+          .catch(err => {
+            this.$notification.error({
+              message: '娑堟伅',
+              description: err.message
+            })
+          })
+      },
+
+      async handleOk() {
+        const that = this
+
+        // 瑙﹀彂琛ㄥ崟楠岃瘉
+        this.$refs.form.validate(valid => {
+          if (valid) {
+            that.confirmLoading = that.spinning = true
+
+            httpAction(that.url.approval, that.model, 'post')
+              .then((res) => {
+                if (res.success) {
+                  that.$notification.success({
+                    message: '娑堟伅',
+                    description: res.message
+                  })
+                  that.$emit('modalFormOk')
+                  that.close()
+                } else {
+                  that.$notification.warning({
+                    message: '娑堟伅',
+                    description: res.message
+                  })
+                }
+              })
+              .finally(() => {
+                that.confirmLoading = that.spinning = false
+              })
+          } else {
+            return false
+          }
+        })
+      },
+
+      /**
+       * 鍘熷洜鍒嗘瀽鏍稿鍊煎彂鐢熸敼鍙樻椂瑙﹀彂
+       * @param value
+       */
+      handleCheckAgreeChange(value) {
+        if (value === '1') delete this.model.disagreeReason
+      },
+
+      handleCancel() {
+        this.close()
+      },
+
+      close() {
+        this.$emit('close')
+        this.visible = false
+        if (this.$refs.form) this.$refs.form.clearValidate()
+      }
+    }
+  }
+</script>
+
+<style scoped lang="less">
+  /deep/ .ant-spin-nested-loading {
+    height: 100%;
+
+    .ant-spin-container {
+      height: 100%;
+
+      .ant-form {
+        height: 100%;
+
+        #outer-row {
+          height: 100%;
+
+          .scroll-col {
+            height: 100%;
+            overflow: auto;
+          }
+        }
+      }
+    }
+  }
+</style>
\ No newline at end of file

--
Gitblit v1.9.3