From 7859c063db5effe91f2418056e70b848177a3628 Mon Sep 17 00:00:00 2001
From: zhaowei <zhaowei>
Date: 星期四, 14 八月 2025 10:51:29 +0800
Subject: [PATCH] 1、保养规范审批流程根据规范分类区分展示保养项明细 2、调整二保批量新增功能

---
 src/views/flowable/workflow/MaintenanceStandard/MaintenanceStandardApprovalModal.vue |  288 +++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 249 insertions(+), 39 deletions(-)

diff --git a/src/views/flowable/workflow/MaintenanceStandard/MaintenanceStandardApprovalModal.vue b/src/views/flowable/workflow/MaintenanceStandard/MaintenanceStandardApprovalModal.vue
index f3e18a9..dc08948 100644
--- a/src/views/flowable/workflow/MaintenanceStandard/MaintenanceStandardApprovalModal.vue
+++ b/src/views/flowable/workflow/MaintenanceStandard/MaintenanceStandardApprovalModal.vue
@@ -74,21 +74,79 @@
           </a-col>
 
           <a-col :span="10" class="scroll-col">
-            <a-tabs default-active-key="1">
-              <a-tab-pane key="1" tab="淇濆吇椤规槑缁�">
-                <j-vxe-table ref="editableDetailTable" bordered alwaysEdit keep-source :dataSource="detail.dataSource"
-                             :columns="detail.columns">
-                  <template v-slot:itemCategory="props">
-                    <j-dict-select-tag v-model="props.row.itemCategory" :dict-code="encodedDictCode" disabled/>
-                  </template>
-                </j-vxe-table>
-              </a-tab-pane>
+            <a-tabs v-model="activeTabKey">
+              <template v-if="model.maintenanceCategory==='POINT_INSPECTION'">
+                <a-tab-pane key="1" tab="鏃ョ偣妫�">
+                  <j-vxe-table bordered alwaysEdit keep-source :dataSource="detail.dataSource1"
+                               :columns="detail.columns">
+                    <template v-slot:itemCategory="props">
+                      <j-dict-select-tag v-model="props.row.itemCategory" :dict-code="encodedDictCode" disabled/>
+                    </template>
+                  </j-vxe-table>
+                </a-tab-pane>
 
-              <template v-if="selectShenpiData.procInstId">
-                <a-tab-pane tab='娴佺▼鍥�' forceRender>
-                  <img :src="imageSrc" width="100%" v-if="imageSrc"/>
+                <a-tab-pane key="2" tab="鍛ㄧ偣妫�">
+                  <j-vxe-table bordered alwaysEdit keep-source :dataSource="detail.dataSource2"
+                               :columns="detail.columns">
+                    <template v-slot:itemCategory="props">
+                      <j-dict-select-tag v-model="props.row.itemCategory" :dict-code="encodedDictCode" disabled/>
+                    </template>
+                  </j-vxe-table>
                 </a-tab-pane>
               </template>
+
+              <template v-if="model.maintenanceCategory==='SECOND_MAINTENANCE'">
+                <a-tab-pane key="1" tab="鎿嶄綔宸�">
+                  <j-vxe-table bordered alwaysEdit keep-source :dataSource="detail.dataSource1"
+                               :columns="detail.columns">
+                    <template v-slot:itemCategory="props">
+                      <j-dict-select-tag v-model="props.row.itemCategory" :dict-code="encodedDictCode" disabled/>
+                    </template>
+                  </j-vxe-table>
+                </a-tab-pane>
+
+                <a-tab-pane key="2" tab="缁翠慨宸�">
+                  <j-vxe-table bordered alwaysEdit keep-source :dataSource="detail.dataSource2"
+                               :columns="detail.columns">
+                    <template v-slot:itemCategory="props">
+                      <j-dict-select-tag v-model="props.row.itemCategory" :dict-code="encodedDictCode" disabled/>
+                    </template>
+                  </j-vxe-table>
+                </a-tab-pane>
+              </template>
+
+              <template v-if="model.maintenanceCategory==='THIRD_MAINTENANCE'">
+                <a-tab-pane key="1" tab="涓変繚">
+                  <j-vxe-table bordered alwaysEdit keep-source :dataSource="detail.dataSource1"
+                               :columns="detail.columns">
+                    <template v-slot:itemCategory="props">
+                      <j-dict-select-tag v-model="props.row.itemCategory" :dict-code="encodedDictCode" disabled/>
+                    </template>
+                  </j-vxe-table>
+                </a-tab-pane>
+              </template>
+
+              <template v-if="selectShenpiData.processDefinitionKey">
+                <a-tab-pane key='3' tab='娴佺▼鍥�'>
+                  <img :src="imageSrc" alt="Fetched Image"/>
+                </a-tab-pane>
+              </template>
+
+              <a-tab-pane key='4' tab='娴佽浆鑺傜偣'>
+                <a-card>
+                  <a-timeline style="padding:0 1% 0 12%">
+                    <a-timeline-item color='white' v-for="(item,index1) in hitaskDataSource" :key="index1">
+                      <div class="bottom">
+                        <p>澶勭悊浜猴細{{item.assignee_dictText}}</p>
+                        <p v-if="index1 !==0">澶勭悊鏃堕暱锛歿{item.duration}}</p>
+                        <p v-if="item.name !== '鎻愪氦鐢宠'">澶勭悊绫诲瀷锛歿{item.sequenceFlowName}}</p>
+                        <p v-if="item.description != null">澶勭悊鎰忚锛歿{item.description}}</p>
+                        <div class="left_qiu"><span>{{item.taskName}}</span></div>
+                      </div>
+                    </a-timeline-item>
+                  </a-timeline>
+                </a-card>
+              </a-tab-pane>
             </a-tabs>
           </a-col>
 
@@ -161,6 +219,7 @@
         confirmLoading: false,
         spinning: false,
         model: {},
+        hitaskDataSource: [],
         validatorRules: {
           repairManagerApproveResult: [{ required: true, message: '璇烽�夋嫨纭绫诲瀷' }],
           technicalManagerApproveResult: [{ required: true, message: '璇烽�夋嫨纭绫诲瀷' }]
@@ -175,6 +234,7 @@
           sm: { span: 16 }
         },
         visible: false,
+        activeTabKey: '1',
         // 琛ㄥご
         url: {
           diagramView: '/assign/flow/diagramView',
@@ -184,7 +244,8 @@
           detailList: '/eam/eamMaintenanceStandardDetail/queryList'
         },
         detail: {
-          dataSource: [],
+          dataSource1: [],
+          dataSource2: [],
           columns: [],
           inspectionColumns: [
             {
@@ -201,16 +262,17 @@
               title: '椤圭洰搴忓彿',
               key: 'itemCode',
               type: JVXETypes.normal,
-              align: 'center'
-            },
-            {
-              title: '淇濆吇椤瑰垎绫�',
-              key: 'itemCategory',
-              type: JVXETypes.slot,
-              slotName: 'itemCategory',
               align: 'center',
-              disabled: true
+              width: 100
             },
+            // {
+            //   title: '淇濆吇椤瑰垎绫�',
+            //   key: 'itemCategory',
+            //   type: JVXETypes.slot,
+            //   slotName: 'itemCategory',
+            //   align: 'center',
+            //   disabled: true
+            // },
             {
               title: '淇濆吇椤圭洰',
               key: 'itemName',
@@ -239,16 +301,17 @@
               title: '椤圭洰搴忓彿',
               key: 'itemCode',
               type: JVXETypes.normal,
-              align: 'center'
-            },
-            {
-              title: '淇濆吇椤瑰垎绫�',
-              key: 'itemCategory',
-              type: JVXETypes.slot,
-              slotName: 'itemCategory',
               align: 'center',
-              disabled: true
+              width: 100
             },
+            // {
+            //   title: '淇濆吇椤瑰垎绫�',
+            //   key: 'itemCategory',
+            //   type: JVXETypes.slot,
+            //   slotName: 'itemCategory',
+            //   align: 'center',
+            //   disabled: true
+            // },
             {
               title: '淇濆吇椤圭洰',
               key: 'itemName',
@@ -315,11 +378,11 @@
     },
     computed: {
       displayRepairLeaderFlag() {
-        return this.model.standardStatus && ['WAIT_REPAIR_DIRECTOR', 'WAIT_TECHNICAL_DIRECTOR', 'REJECTED'].includes(this.model.standardStatus)
+        return this.model.standardStatus && ['WAIT_REPAIR_DIRECTOR', 'WAIT_TECHNICAL_DIRECTOR', 'START', 'REJECTED'].includes(this.model.standardStatus)
       },
 
       displayTechnicalDirectorFlag() {
-        return this.model.standardStatus && ['WAIT_TECHNICAL_DIRECTOR', 'REJECTED'].includes(this.model.standardStatus) && this.model.repairManagerApproveResult === '1'
+        return this.model.standardStatus && ['WAIT_TECHNICAL_DIRECTOR', 'START', 'REJECTED'].includes(this.model.standardStatus) && this.model.repairManagerApproveResult === '1'
       },
 
       encodedDictCode() {
@@ -333,8 +396,25 @@
        * @param record 涓婚〉闈㈠垪琛ㄨ璁板綍
        */
       handleApprove(record) {
+        this.activeTabKey = '1'
         this.getBasicInformationByApi(record)
         this.getFlowChartImageByApi(record)
+        this.getFlowTaskListByApi(record)
+      },
+
+      /**
+       * 鑾峰彇娴佽浆鑺傜偣
+       * @param record
+       */
+      getFlowTaskListByApi(record) {
+        let parmhis = {
+          'procInstId': record.procInstId
+        }
+        getAction(this.url.queryHisTaskList, parmhis).then(res => {
+          this.hitaskDataSource = res.result
+        }).finally(
+          this.visible = true
+        )
       },
 
       /**
@@ -342,8 +422,10 @@
        * @param record 涓婚〉闈㈠垪琛ㄨ璁板綍
        */
       handleDetail(record) {
-        this.detail.dataSource = []
+        this.activeTabKey = '1'
+        this.detail.dataSource1 = this.detail.dataSource2 = []
         this.model = Object.assign({}, record)
+        this.getFlowTaskListByApi(record)
         this.loadDetail(record.id)
       },
 
@@ -354,7 +436,7 @@
       getBasicInformationByApi(record) {
         this.spinning = true
         this.model = {}
-        this.detail.dataSource = []
+        this.detail.dataSource1 = this.detail.dataSource2 = []
         const that = this
         getAction(this.url.queryById, { id: record.dataId })
           .then(res => {
@@ -405,9 +487,26 @@
        * @param dataId 涓氬姟ID
        */
       loadDetail(dataId) {
+        this.spinning = true
         getAction(this.url.detailList, { standardId: dataId })
           .then(res => {
-            if (res.success) this.detail.dataSource = res.result
+            if (res.success) {
+              switch (this.model.maintenanceCategory) {
+                case 'POINT_INSPECTION':
+                  this.detail.dataSource1 = res.result.filter(item => item.itemCategory === 'DAY_INSPECTION')
+                  this.detail.dataSource2 = res.result.filter(item => item.itemCategory === 'WEEK_INSPECTION')
+                  break
+                case 'SECOND_MAINTENANCE':
+                  this.detail.dataSource1 = res.result.filter(item => item.itemCategory === 'OPERATOR_MAINTENANCE')
+                  this.detail.dataSource2 = res.result.filter(item => item.itemCategory === 'REPAIRER_MAINTENANCE')
+                  break
+                case 'THIRD_MAINTENANCE':
+                  this.detail.dataSource1 = res.result
+                  break
+                default:
+                  break
+              }
+            }
           })
           .finally(() => {
             this.spinning = false
@@ -415,11 +514,6 @@
       },
 
       async submitForm() {
-        let errMap = await this.$refs.editableDetailTable.validateTable()
-        if (errMap) {
-          return
-        }
-
         this.$refs.form.validate(valid => {
           if (valid) {
             this.confirmLoading = this.spinning = true
@@ -481,4 +575,120 @@
       }
     }
   }
+
+  /* 鍏ㄥ眬绂侀�夋牱寮� - 浣滅敤浜庢暣涓〉闈� */
+  html.submitting,
+  html.submitting body {
+    pointer-events: none !important;
+    cursor: wait !important;
+  }
+
+  /* 钂欏眰鏁堟灉澧炲己 */
+  html.submitting::before {
+    content: '';
+    position: fixed;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    background: rgba(255, 255, 255, 0.5);
+    z-index: 9998;
+  }
+
+  /* 鍔犺浇鎸囩ず鍣� - 鏇存槑鏄剧殑瑙嗚鍙嶉 */
+  html.submitting::after {
+    content: '鎻愪氦涓�...';
+    position: fixed;
+    top: 50%;
+    left: 50%;
+    transform: translate(-50%, -50%);
+    background: #1890ff;
+    color: white;
+    padding: 10px 20px;
+    border-radius: 4px;
+    z-index: 9999;
+  }
+
+  /* 绂佺敤鐘舵�佹寜閽牱寮� */
+  .disabled-btn {
+    opacity: 0.6;
+    cursor: not-allowed !important;
+  }
+
+  .shallow-hr {
+    border: 0;
+    height: 1px; /* 鍒嗙晫绾跨殑楂樺害 */
+    background-color: rgba(0, 0, 0, 0.1); /* 浣跨敤 RGBA 棰滆壊锛屽苟璁剧疆杈冧綆鐨勯�忔槑搴� */
+    margin: 20px 0; /* 鍒嗙晫绾夸笂涓嬬殑澶栬竟璺� */
+  }
+
+  .btn-custom {
+    background-color: #4CAF50; /* 缁胯壊鑳屾櫙 */
+    color: white; /* 鐧借壊鏂囧瓧 */
+    border: none; /* 鏃犺竟妗� */
+    padding: 5px 15px; /* 鍐呰竟璺� */
+    text-align: center; /* 鏂囧瓧灞呬腑 */
+    text-decoration: none; /* 鏃犱笅鍒掔嚎 */
+    display: inline-block; /* 琛屽唴鍧楀厓绱� */
+    font-size: 12px; /* 瀛椾綋澶у皬 */
+    margin: 4px 2px; /* 澶栬竟璺� */
+    cursor: pointer; /* 榧犳爣鎮仠鏃舵樉绀烘墜鍨� */
+    border-radius: 4px; /* 鍦嗚杈规 */
+  }
+
+  .bold-large-label {
+    font-weight: bold;
+    font-size: 20px; /* 鎴栦綘闇�瑕佺殑浠讳綍澶у皬 */
+  }
+
+  .left_qiu {
+    position: absolute;
+    left: -74px;
+    top: 0;
+    width: 54px;
+    border-radius: 50%;
+    height: 54px;
+    font-size: 13px;
+    margin: auto;
+    display: flex;
+    flex-wrap: wrap;
+    align-items: center;
+    justify-content: center;
+    background: #0099ff;
+    transform: translate(0, 0);
+  }
+
+  /deep/ .ant-timeline-item-tail {
+    left: -29px !important;
+  }
+
+  .left_qiu span {
+    width: 3em;
+    display: block;
+    color: #fff;
+    text-align: center;
+  }
+
+  .img {
+    width: 75%;
+  }
+
+  .wrap {
+    clear: both;
+    width: 100%;
+    display: flex;
+    height: 50px;
+    border: 1px solid #ccc;
+    /* background-color: aqua; */
+  }
+
+  .box {
+    width: 21%;
+    height: 50px;
+    border-right: 1px solid #ccc;
+    line-height: 50px;
+    /* background: red; */
+    text-align: center;
+    margin: auto;
+  }
 </style>
\ No newline at end of file

--
Gitblit v1.9.3