From 6cd1cd09c6b13c071dc085e24f0980cc102b99a2 Mon Sep 17 00:00:00 2001
From: lyh <925863403@qq.com>
Date: 星期六, 02 八月 2025 15:33:31 +0800
Subject: [PATCH] 添加流转节点

---
 src/views/flowable/workflow/secondMaintenance/SecondMaintenanceApprovalModal.vue |  227 ++++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 187 insertions(+), 40 deletions(-)

diff --git a/src/views/flowable/workflow/secondMaintenance/SecondMaintenanceApprovalModal.vue b/src/views/flowable/workflow/secondMaintenance/SecondMaintenanceApprovalModal.vue
index 9db4623..1eadc4c 100644
--- a/src/views/flowable/workflow/secondMaintenance/SecondMaintenanceApprovalModal.vue
+++ b/src/views/flowable/workflow/secondMaintenance/SecondMaintenanceApprovalModal.vue
@@ -66,37 +66,37 @@
           </a-col>
 
           <a-col class="scroll-col"
-                 :span="model.maintenanceStatus&&model.maintenanceStatus!='WAIT_MAINTENANCE'&&model.maintenanceStatus!='UNDER_MAINTENANCE'?10:16">
+                 :span="model.maintenanceStatus&&model.maintenanceStatus!=='WAIT_MAINTENANCE'&&model.maintenanceStatus!=='UNDER_MAINTENANCE'?10:16">
             <a-tabs :active-key="activeTabKey" @change="handleTabChange">
               <a-tab-pane :key="1" tab="鎿嶄綔宸�"
-                          v-if="selectShenpiData.taskDefKey&&selectShenpiData.taskDefKey=='operator_task'||
-                          (model.maintenanceStatus&&model.maintenanceStatus!='UNDER_MAINTENANCE')">
+                          v-if="(selectShenpiData.taskDefKey&&selectShenpiData.taskDefKey==='operator_task')||
+                          (model.maintenanceStatus&&model.maintenanceStatus!=='UNDER_MAINTENANCE')">
                 <j-vxe-table ref="editableDetailTable1" :rowNumber="false" rowSelection bordered
-                             alwaysEdit keep-source :height="300"
+                             alwaysEdit keep-source
                              :dataSource="detail.operatorMaintenanceList" :columns="detail.columns"
                              @selectRowChange="handleTableSelectRowChange($event,'Operator')">
                   <template v-slot:maintenanceResult="props">
                     <j-dict-select-tag v-model="props.row.maintenanceResult" dictCode="maintenance_result"
                                        placeholder="璇烽�夋嫨淇濆吇缁撴灉"
-                                       :disabled="disableSubmit||(model.maintenanceStatus&&model.maintenanceStatus!='UNDER_MAINTENANCE')"
+                                       :disabled="disableSubmit||(model.maintenanceStatus&&model.maintenanceStatus!=='UNDER_MAINTENANCE')"
                                        @change="handleInspectionResultSelectChange($event,props.row)"
                                        style="width: 100%"/>
                   </template>
 
                   <template v-slot:exceptionDescription="props">
                     <a-textarea :rows="1" :autoSize="false" v-model="props.row.exceptionDescription"
-                                :placeholder="props.row.maintenanceResult&&props.row.maintenanceResult!='1'?'璇疯緭鍏ュ紓甯告弿杩�':''"
+                                :placeholder="props.row.maintenanceResult&&props.row.maintenanceResult!=='1'?'璇疯緭鍏ュ紓甯告弿杩�':''"
                                 :disabled="disableSubmit||
-                                (model.maintenanceStatus&&model.maintenanceStatus!='UNDER_MAINTENANCE') ||
+                                (model.maintenanceStatus&&model.maintenanceStatus!=='UNDER_MAINTENANCE') ||
                                  !props.row.maintenanceResult ||
                                   props.row.maintenanceResult === '1'"/>
                   </template>
 
                   <template v-slot:reportFlag="props">
                     <j-dict-select-tag v-model="props.row.reportFlag" dictCode="yn" style="width: 100%"
-                                       :placeholder="props.row.maintenanceResult&&props.row.maintenanceResult!='1'?'璇烽�夋嫨寮傚父鏄惁鎶ヤ慨':''"
+                                       :placeholder="props.row.maintenanceResult&&props.row.maintenanceResult!=='1'?'璇烽�夋嫨寮傚父鏄惁鎶ヤ慨':''"
                                        :disabled="disableSubmit ||
-                                       (model.maintenanceStatus&&model.maintenanceStatus!='UNDER_MAINTENANCE') ||
+                                       (model.maintenanceStatus&&model.maintenanceStatus!=='UNDER_MAINTENANCE') ||
                                         !props.row.maintenanceResult ||
                                          props.row.maintenanceResult === '1'"/>
                   </template>
@@ -104,53 +104,69 @@
               </a-tab-pane>
 
               <a-tab-pane :key="2" tab="缁翠慨宸�"
-                          v-if="selectShenpiData.taskDefKey&&selectShenpiData.taskDefKey=='maintenance_task'||
-                          (model.maintenanceStatus&&model.maintenanceStatus!='UNDER_MAINTENANCE')">
+                          v-if="(selectShenpiData.taskDefKey&&selectShenpiData.taskDefKey==='maintenance_task')||
+                          (model.maintenanceStatus&&model.maintenanceStatus!=='UNDER_MAINTENANCE')">
                 <j-vxe-table ref="editableDetailTable2" :rowNumber="false" rowSelection bordered
-                             alwaysEdit kee-source :height="300"
+                             alwaysEdit kee-source
                              :dataSource="detail.repairerMaintenanceList" :columns="detail.columns"
                              @selectRowChange="handleTableSelectRowChange($event,'Repairer')">
                   <template v-slot:maintenanceResult="props">
                     <j-dict-select-tag v-model="props.row.maintenanceResult" dictCode="maintenance_result"
                                        placeholder="璇烽�夋嫨淇濆吇缁撴灉"
-                                       :disabled="disableSubmit||(model.maintenanceStatus&&model.maintenanceStatus!='UNDER_MAINTENANCE')"
+                                       :disabled="disableSubmit||(model.maintenanceStatus&&model.maintenanceStatus!=='UNDER_MAINTENANCE')"
                                        @change="handleInspectionResultSelectChange($event,props.row)"
                                        style="width: 100%"/>
                   </template>
 
                   <template v-slot:exceptionDescription="props">
                     <a-textarea :rows="1" :autoSize="false" v-model="props.row.exceptionDescription"
-                                :placeholder="props.row.maintenanceResult&&props.row.maintenanceResult!='1'?'璇疯緭鍏ュ紓甯告弿杩�':''"
+                                :placeholder="props.row.maintenanceResult&&props.row.maintenanceResult!=='1'?'璇疯緭鍏ュ紓甯告弿杩�':''"
                                 :disabled="disableSubmit ||
-                                (model.maintenanceStatus&&model.maintenanceStatus!='UNDER_MAINTENANCE') ||
+                                (model.maintenanceStatus&&model.maintenanceStatus!=='UNDER_MAINTENANCE') ||
                                 !props.row.maintenanceResult ||
                                  props.row.maintenanceResult === '1'"/>
                   </template>
 
                   <template v-slot:reportFlag="props">
                     <j-dict-select-tag v-model="props.row.reportFlag"
-                                       :placeholder="props.row.maintenanceResult&&props.row.maintenanceResult!='1'?'璇烽�夋嫨寮傚父鏄惁鎶ヤ慨':''"
+                                       :placeholder="props.row.maintenanceResult&&props.row.maintenanceResult!=='1'?'璇烽�夋嫨寮傚父鏄惁鎶ヤ慨':''"
                                        dictCode="yn" style="width: 100%"
                                        :disabled="disableSubmit||
-                                       (model.maintenanceStatus&&model.maintenanceStatus!='UNDER_MAINTENANCE') ||
+                                       (model.maintenanceStatus&&model.maintenanceStatus!=='UNDER_MAINTENANCE') ||
                                        !props.row.maintenanceResult ||
                                         props.row.maintenanceResult === '1'"/>
                   </template>
                 </j-vxe-table>
               </a-tab-pane>
 
-              <template v-if="selectShenpiData.procInstId">
+              <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-button
                 v-if="activeTabKey!=='3'"
                 :disabled="disableSubmit ||
-                (model.maintenanceStatus&&model.maintenanceStatus!='UNDER_MAINTENANCE') ||
-                (activeTabKey=='1'&&selectedOperatorMaintenanceRowKeys.length == 0)||
-                (activeTabKey=='2'&&selectedRepairerMaintenanceRowKeys.length == 0)"
+                (model.maintenanceStatus&&model.maintenanceStatus!=='UNDER_MAINTENANCE') ||
+                (activeTabKey==='1'&&selectedOperatorMaintenanceRowKeys.length === 0)||
+                (activeTabKey==='2'&&selectedRepairerMaintenanceRowKeys.length === 0)"
                 slot="tabBarExtraContent"
                 type="primary" @click="handleSelectAllInspectionResult">鎵归噺淇濆吇姝e父
               </a-button>
@@ -159,7 +175,7 @@
 
           <!--鍙充晶瀹℃壒鍒�-->
           <a-col :span="6" class="scroll-col"
-                 v-if="model.maintenanceStatus&&model.maintenanceStatus!='WAIT_MAINTENANCE'&&model.maintenanceStatus!='UNDER_MAINTENANCE'">
+                 v-if="model.maintenanceStatus&&model.maintenanceStatus!=='WAIT_MAINTENANCE'&&model.maintenanceStatus!=='UNDER_MAINTENANCE'">
             <a-tabs v-if="displayAdminConfirmFlag">
               <a-tab-pane tab="绠$悊鍛樼‘璁�">
                 <a-row>
@@ -167,19 +183,19 @@
                     <a-form-model-item prop="manageUserResult" label="纭绫诲瀷">
                       <j-dict-select-tag type='radio' v-model='model.manageUserResult' dictCode='approve_reject'
                                          placeholder="璇烽�夋嫨纭绫诲瀷"
-                                         :disabled="disableSubmit || model.maintenanceStatus!='WAIT_ADMIN_CONFIRM'"/>
+                                         :disabled="disableSubmit || model.maintenanceStatus!=='WAIT_ADMIN_CONFIRM'"/>
                     </a-form-model-item>
                   </a-col>
                   <a-col :span="24">
                     <a-form-model-item label="闂鎻忚堪">
                       <a-textarea placeholder="璇锋弿杩伴棶棰�" v-model='model.problemDescription'
-                                  :disabled="disableSubmit || model.maintenanceStatus!='WAIT_ADMIN_CONFIRM'"/>
+                                  :disabled="disableSubmit || model.maintenanceStatus!=='WAIT_ADMIN_CONFIRM'"/>
                     </a-form-model-item>
                   </a-col>
                   <a-col :span="24">
                     <a-form-model-item label="澶勭悊鎺柦鎻忚堪">
                       <a-textarea placeholder="璇锋弿杩板鐞嗘帾鏂�" v-model="model.dealDescription"
-                                  :disabled="disableSubmit || model.maintenanceStatus!='WAIT_ADMIN_CONFIRM'"/>
+                                  :disabled="disableSubmit || model.maintenanceStatus!=='WAIT_ADMIN_CONFIRM'"/>
                     </a-form-model-item>
                   </a-col>
                 </a-row>
@@ -193,13 +209,13 @@
                     <a-form-model-item prop="inspectorResult" label="纭绫诲瀷">
                       <j-dict-select-tag type='radio' v-model='model.inspectorResult' dictCode='approve_reject'
                                          placeholder="璇烽�夋嫨纭绫诲瀷"
-                                         :disabled="disableSubmit || model.maintenanceStatus!='WAIT_INSPECTOR_CONFIRM'"/>
+                                         :disabled="disableSubmit || model.maintenanceStatus!=='WAIT_INSPECTOR_CONFIRM'"/>
                     </a-form-model-item>
                   </a-col>
                   <a-col :span="24">
                     <a-form-model-item label="纭鎰忚">
                       <a-textarea placeholder="璇疯緭鍏ユ剰瑙�" v-model="model.inspectConfirmComment"
-                                  :disabled="disableSubmit || model.maintenanceStatus!='WAIT_INSPECTOR_CONFIRM'"/>
+                                  :disabled="disableSubmit || model.maintenanceStatus!=='WAIT_INSPECTOR_CONFIRM'"/>
                     </a-form-model-item>
                   </a-col>
                 </a-row>
@@ -262,11 +278,13 @@
           queryById: '/eam/secondMaintenanceOrder/list',
           detail: '/eam/secondMaintenanceOrderDetail/queryList',
           approval: '/eam/secondMaintenanceOrder/approval',
-          diagramView: '/assign/flow/diagramView'
+          diagramView: '/assign/flow/diagramView',
+          queryHisTaskList:'/assign/flow/queryHisTaskList',
         },
         disableSubmit: false,
         selectedOperatorMaintenanceRowKeys: [],
         selectedRepairerMaintenanceRowKeys: [],
+        hitaskDataSource:[],
         detail: {
           operatorMaintenanceList: [],
           repairerMaintenanceList: [],
@@ -330,10 +348,10 @@
     },
     computed: {
       displayAdminConfirmFlag() {
-        return ['WAIT_ADMIN_CONFIRM', 'WAIT_INSPECTOR_CONFIRM', 'COMPLETE'].includes(this.model.maintenanceStatus)
+        return ['WAIT_ADMIN_CONFIRM', 'WAIT_INSPECTOR_CONFIRM', 'COMPLETE', 'REJECTED'].includes(this.model.maintenanceStatus)
       },
       displayInspectorConfirmFlag() {
-        return ['WAIT_INSPECTOR_CONFIRM', 'COMPLETE'].includes(this.model.maintenanceStatus)
+        return ['WAIT_INSPECTOR_CONFIRM', 'COMPLETE', 'REJECTED'].includes(this.model.maintenanceStatus) && this.model.manageUserResult === '1'
       }
     },
     methods: {
@@ -341,13 +359,14 @@
        * 涓婚〉闈㈢偣鍑绘墽琛屽鎵规椂瑙﹀彂
        * @param record 涓婚〉闈㈠垪琛ㄨ璁板綍
        */
-      async handleDetail(record) {
+      async handleApprove(record) {
         this.spinning = true
         this.model = {}
         this.detail.operatorMaintenanceList = this.detail.repairerMaintenanceList = []
         this.handleTabToFirstTable()
         this.getBasicInformationByApi(record)
         this.getFlowChartImageByApi(record)
+        this.getFlowTaskListByApi(record)
         this.loadDetail(record.dataId)
       },
 
@@ -355,11 +374,12 @@
        * 涓婚〉闈㈢偣鍑昏鎯呮椂瑙﹀彂
        * @param record 涓婚〉闈㈠垪琛ㄨ璁板綍
        */
-      recordDetail(record) {
+      handleDetail(record) {
         this.spinning = true
         this.activeTabKey = 1
         this.detail.operatorMaintenanceList = this.detail.repairerMaintenanceList = []
         this.model = Object.assign({}, record)
+        this.getFlowTaskListByApi(record)
         this.loadDetail(record.id)
       },
 
@@ -385,6 +405,23 @@
               })
             }
           })
+      },
+
+      /**
+       * 鑾峰彇娴佽浆鑺傜偣
+       * @param record
+       */
+      getFlowTaskListByApi(record) {
+        console.log("sss",record)
+        let parmhis={
+          'procInstId': record.procInstId
+        }
+        getAction(this.url.queryHisTaskList,parmhis).then(res=>{
+          this.hitaskDataSource=res.result
+        }).finally(
+          this.visible = true,
+          console.log('this.approveData---->', this.approveData)
+        )
       },
 
       /**
@@ -443,7 +480,7 @@
             that.confirmLoading = that.spinning = true
 
             // 浠呭湪淇濆吇涓姸鎬佷紶閫掕〃鏍煎垪琛�
-            if (this.model.maintenanceStatus == 'UNDER_MAINTENANCE') {
+            if (this.model.maintenanceStatus === 'UNDER_MAINTENANCE') {
               for (let index = 1; index <= 2; index++) {
                 if (that.$refs['editableDetailTable' + index]) {
                   this.model.tableDetailList = that.$refs['editableDetailTable' + index].getTableData()
@@ -499,8 +536,8 @@
       handleTabToFirstTable() {
         this.$nextTick(() => {
           console.log('taskDefKey', this.selectShenpiData.taskDefKey)
-          if ((this.selectShenpiData.taskDefKey && this.selectShenpiData.taskDefKey == 'operator_task') || !this.selectShenpiData.taskDefKey) this.activeTabKey = 1
-          else if (this.selectShenpiData.taskDefKey && this.selectShenpiData.taskDefKey == 'maintenance_task') this.activeTabKey = 2
+          if ((this.selectShenpiData.taskDefKey && this.selectShenpiData.taskDefKey === 'operator_task') || !this.selectShenpiData.taskDefKey || (this.model.maintenanceStatus !== 'UNDER_MAINTENANCE')) this.activeTabKey = 1
+          else if (this.selectShenpiData.taskDefKey && this.selectShenpiData.taskDefKey === 'maintenance_task') this.activeTabKey = 2
         })
       },
 
@@ -509,8 +546,8 @@
         getAction(this.url.detail, { orderId })
           .then(res => {
             if (res.success) {
-              this.detail.operatorMaintenanceList = res.result.filter(item => item.itemCategory == 'OPERATOR_MAINTENANCE')
-              this.detail.repairerMaintenanceList = res.result.filter(item => item.itemCategory == 'REPAIRER_MAINTENANCE')
+              this.detail.operatorMaintenanceList = res.result.filter(item => item.itemCategory === 'OPERATOR_MAINTENANCE')
+              this.detail.repairerMaintenanceList = res.result.filter(item => item.itemCategory === 'REPAIRER_MAINTENANCE')
             }
           })
       },
@@ -523,16 +560,16 @@
       // 鎵归噺閫夋嫨鎵�鏈夌偣妫�缁撴灉
       handleSelectAllInspectionResult() {
         let selectedRowKeys, prefix
-        if (this.activeTabKey == 1) {
+        if (this.activeTabKey === 1) {
           selectedRowKeys = this.selectedOperatorMaintenanceRowKeys
           prefix = 'operator'
         }
-        else if (this.activeTabKey == 2) {
+        else if (this.activeTabKey === 2) {
           selectedRowKeys = this.selectedRepairerMaintenanceRowKeys
           prefix = 'repairer'
         }
         else selectedRowKeys = []
-        if (selectedRowKeys.length == 0) return
+        if (selectedRowKeys.length === 0) return
 
         selectedRowKeys.forEach(key => {
           const dataItem = this.detail[prefix + 'MaintenanceList'].find(item => item.id === key)
@@ -611,4 +648,114 @@
       }
     }
   }
+  /* 鍏ㄥ眬绂侀�夋牱寮� - 浣滅敤浜庢暣涓〉闈� */
+  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