From 53605d638044f3129cb622d44bd6c2026b7978cd Mon Sep 17 00:00:00 2001
From: zhanghua <314079846@qq.com>
Date: 星期四, 16 一月 2025 22:41:31 +0800
Subject: [PATCH] Merge branch 'master' of http://42.193.1.25:9521/r/project_management-vue

---
 src/views/flowable/task/myProcess/send/index.vue |  249 ++++++++++++++++++++++++++++++++++---------------
 1 files changed, 172 insertions(+), 77 deletions(-)

diff --git a/src/views/flowable/task/myProcess/send/index.vue b/src/views/flowable/task/myProcess/send/index.vue
index 4dfb7be..52bda98 100644
--- a/src/views/flowable/task/myProcess/send/index.vue
+++ b/src/views/flowable/task/myProcess/send/index.vue
@@ -10,39 +10,40 @@
         <!--琛ㄥ崟淇℃伅-->
         <el-tab-pane label="琛ㄥ崟淇℃伅" name="1">
           <!--鍒濆鍖栨祦绋嬪姞杞借〃鍗曚俊鎭�-->
-          <el-col :span="16" :offset="4">
+          <el-col :span="16" :offset="4" v-loading="formLoading"  class="tab-min-height">
             <div v-if="formDataList && formDataList.length > 0">
               <div v-for="(formDataObj, index) in formDataList" :key="index" class="form-warp" style="position: relative">
                 <div v-if="formDataObj.current">
                   <!--     褰撳墠鑺傜偣鍙崗鍚屻�佽浆鍔炵瓑鎿嶄綔         -->
-                  <div style="position: absolute; top: 4px; right: 4px; display: flex;justify-content: center; align-items: center;">
-                    <el-button size="small" type="primary" @click="submitForm">纭骞舵彁浜�</el-button>
+                  <div class="op-list">
+                    <el-button size="small" type="primary" :disabled="submitLoading" v-loading="submitLoading" @click="submitForm">纭骞舵彁浜�</el-button>
                     <el-button size="small" type="primary" disabled @click="submitForm">鍗忓悓鍔炵悊(鍔熻兘寮�鍙戜腑)</el-button>
                     <el-button size="small" type="primary" @click="openDelegation(formDataList[0].beforeNodeName)">杞姙</el-button>
                   </div>
-                  <div style="margin-bottom: 15px;color: #E6A23C">褰撳墠闃舵锛�<span style="color: #409EFF">{{formDataObj.beforeNodeName}}</span></div>
+                  <div class="current">褰撳墠闃舵锛�<span>{{formDataObj.beforeNodeName}}</span></div>
                 </div>
                 <div v-else-if="formDataList.length > 1">
                   <!--     鍓嶇疆鑺傜偣鍙┏鍥�         -->
-                  <div style="position: absolute; top: 4px; right: 4px">
-                    <el-button type="danger" size="small" @click="openRejectTask(formDataObj.beforeNodeDefId)">椹� 鍥�</el-button>
+                  <div class="reject-but">
+                    <el-button type="danger" size="small" @click="openRejectTask(formDataObj.beforeNodeName)">椹� 鍥�</el-button>
                   </div>
-                  <div style="margin-bottom: 15px;color: #E6A23C">鍓嶇疆闃舵锛�<span style="color: #F56C6C">{{formDataObj.beforeNodeName}}</span></div>
+                  <div class="before">鍓嶇疆闃舵锛�<span>{{formDataObj.beforeNodeName}}</span></div>
                 </div>
-                <div v-if="formDataObj.formJson !== null && formDataObj.formJson !== ''">
-                  <v-form-render  :form-data="formDataObj.formJson" :ref="'form' + index"/>
+                <div v-if="formDataObj != null && formDataObj.formJsonObj != null">
+                  <v-form-render  :form-data="formDataObj.formJsonObj.formJson" :ref="'form' + index"/>
                 </div>
                 <div v-else>
                   <el-alert
-                    title="鑺傜偣鏈粦瀹氳〃鍗�"
+                    title="鏈粦瀹氳〃鍗�"
                     type="warning"
                     :closable="false"
                   >
                   </el-alert>
                 </div>
                 <div v-if="formDataList.length <= 1">
+                  <div class="before_none">鍓嶇疆闃舵锛�<span>涓嶅瓨鍦ㄥ墠缃樁娈�</span></div>
                   <el-alert
-                    title="涓嶅瓨鍦ㄥ墠缃妭鐐�"
+                    title="涓嶅瓨鍦ㄥ墠缃樁娈�"
                     type="warning"
                     :closable="false"
                   >
@@ -54,7 +55,9 @@
         </el-tab-pane>
         <!--娴佺▼鍥�-->
         <el-tab-pane label="娴佺▼鍥�" name="2">
-          <bpmn-viewer :flowData="flowData"/>
+          <div v-loading="imgLoading" class="tab-min-height">
+            <bpmn-viewer :flowData="flowData" :procInsId="procInsId"/>
+          </div>
         </el-tab-pane>
       </el-tabs>
       <!--閫夋嫨娴佺▼鎺ユ敹浜�-->
@@ -70,7 +73,7 @@
 
 
     <el-dialog
-      :title="`椹冲洖锛歚 + rejectForm.projectName"
+      :title="`椹冲洖锛歚 + rejectForm.taskName"
       :visible.sync="rejectShow"
       width="950px"
       :destroy-on-close="true"
@@ -85,7 +88,7 @@
         </el-input>
       </div>
       <div class="opBut">
-        <el-button type="danger" size="small" @click="rejectTask">椹冲洖</el-button>
+        <el-button type="danger" size="small" :disabled="rejectLoading" v-loading="rejectLoading" @click="rejectTask">椹冲洖</el-button>
       </div>
     </el-dialog>
 
@@ -152,7 +155,7 @@
         </el-form>
       </div>
       <div class="opBut">
-        <el-button type="danger" size="small" @click="delegation">杞� 鍔�</el-button>
+        <el-button type="danger" size="small" :disabled="delegationButLoading" v-loading="delegationButLoading" @click="delegation">杞� 鍔�</el-button>
       </div>
     </el-dialog>
 
@@ -184,6 +187,11 @@
   props: {},
   data() {
     return {
+      rejectLoading: false, // 椹冲洖鎸夐挳鍔犺浇
+      submitLoading: false, // 鎻愪氦鎸夐挳鍔犺浇
+      delegationButLoading: false, // 杞姙鎸夐挳鍔犺浇
+      formLoading: false,  // 鍔犺浇褰撳墠鍠濆墠缃妭鐐规暟鎹�
+      imgLoading: false,  // 鍔犺浇娴佺▼鍥�
       roleKey: 'role',
       deptKey: 'dept',
       multUserKey: 0,
@@ -228,6 +236,7 @@
       loading: true,
       deployId: "",  // 娴佺▼瀹氫箟缂栧彿
       procDefId: "",  // 娴佺▼瀹炰緥缂栧彿
+      procInsId: "",  // 娴佺▼瀹炰緥缂栧彿
       formRenderData: {},
       formRenderDataList: [],
       variables: [], // 娴佺▼鍙橀噺鏁版嵁
@@ -243,7 +252,7 @@
       rejectForm: {
         comment: '', // 瀹℃牳鎰忚
         taskId: '',
-        // rejectedTaskDefKey: ''  // 琚┏鍥炵殑浠诲姟key
+        taskName: ''  // 琚┏鍥炵殑浠诲姟k
       }
     };
   },
@@ -255,6 +264,7 @@
     this.flowName = this.$route.query && this.$route.query.flowName;
     // 鍒濆鍖栬〃鍗�
     this.procDefId  = this.$route.query && this.$route.query.procDefId;
+    this.procInsId  = this.$route.query && this.$route.query.procInsId;
     this.goBackParams  = this.$route.query && this.$route.query.goBackParams;
     // this.getNextFlowNodeByStart(this.deployId);
     this.getFlowFormData(this.taskId);
@@ -303,8 +313,11 @@
             cancelButtonText: '鍙栨秷',
             type: 'warning'
           }).then(() => {
+            this.delegationButLoading = true
             taskDelegation(this.delegationForm).then(res => {
               this.$message.success("宸插彂璧疯浆鍔炵敵璇�")
+              this.delegationButLoading = false
+              this.delegationShow = false
               this.goBack()
             })
           }).catch(() => {
@@ -432,19 +445,36 @@
       this.delegationShow = true
     },
     rejectTask() {
-      rejectTask(this.rejectForm).then(res => {
-        this.rejectShow = false
-        this.$message.success("椹冲洖鎴愬姛")
-      })
+      this.$confirm(`纭畾瑕侀┏鍥炰换鍔°��${this.rejectForm.taskName}銆戝悧?`, '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        this.rejectLoading = true
+        rejectTask(this.rejectForm).then(res => {
+          this.rejectShow = false
+          this.$message.success("椹冲洖鎴愬姛")
+          this.goBack()
+        })
+      }).catch((err) => {
+        console.log(err)
+        this.$message({
+          type: 'info',
+          message: '宸插彇椹冲洖浜ゆ搷浣�'
+        });
+      });
+
     },
-    openRejectTask(rejectedTaskDefKey) {
-      // this.rejectForm.rejectedTaskDefKey = rejectedTaskDefKey;
+    openRejectTask(taskName) {
+      this.rejectForm.taskName = taskName;
       this.rejectForm.taskId = this.taskId;
       this.rejectShow = true
     },
     handleClick(tab, event) {
       if (tab.name === '2'){
-        flowXmlAndNode({deployId:this.deployId}).then(res => {
+        this.imgLoading = true
+        flowXmlAndNode({procInsId:this.procInsId,deployId:this.deployId}).then(res => {
+          this.imgLoading = false
           this.flowData = res.data;
         })
       }
@@ -452,13 +482,13 @@
     /** 娴佺▼琛ㄥ崟鏁版嵁 */
     getFlowFormData(taskId) {
       const params = {taskId: taskId}
+      this.formLoading = true
       flowTaskForm(params).then(res => {
         this.formDataList = res.data
         if (this.formDataList && this.formDataList.length > 0) {
           this.$nextTick(() => {
             this.formDataList.forEach((formDataObj, index) => {
               let that = this
-              console.log(eval("that.$refs.form" +index))
               if (eval("that.$refs.form" +index) && formDataObj.formJsonObj) {
                 eval("that.$refs.form" +index)[0].setFormJson(formDataObj.formJsonObj.formJson);
                 eval("that.$refs.form" +index)[0].setFormData(formDataObj.formJsonObj);
@@ -468,8 +498,8 @@
               this.formJson = this.formDataList[0].formJsonObj.formJson
             }
           })
-
         }
+        this.formLoading = false
         // if (res.data.formJson) {
         //   // 鍥炴樉琛ㄥ崟
         //   this.$refs.vFormRef.setFormJson(res.data.formJson);
@@ -509,54 +539,86 @@
     },
     /** 鐢宠娴佺▼琛ㄥ崟鏁版嵁鎻愪氦 */
     submitForm() {
-      let that = this
-      eval("that.$refs.form" +0)[0].getFormData().then(formData => {
-        // 鏍规嵁褰撳墠浠诲姟鎴栬�呮祦绋嬭璁¢厤缃殑涓嬩竴姝ヨ妭鐐� todo 鏆傛椂鏈秹鍙婂埌鑰冭檻缃戝叧銆佽〃杈惧紡鍜屽鑺傜偣鎯呭喌
-        getNextFlowNodeByStart({deploymentId: this.deployId, variables: formData}).then(res => {
-          const data = res.data;
-          if (data) {
-            this.formData = formData;
-            if (data.dataType === 'dynamic') {
-              if (data.type === 'assignee') { // 鎸囧畾浜哄憳
-                this.checkSendUser = true;
-                this.checkType = "single";
-              } else if (data.type === 'candidateUsers') {  // 鍊欓�変汉鍛�(澶氫釜)
-                this.checkSendUser = true;
-                this.checkType = "multiple";
-              } else if (data.type === 'candidateGroups') { // 鎸囧畾缁�(鎵�灞炶鑹叉帴鏀朵换鍔�)
-                this.checkSendRole = true;
-              } else { // 浼氱
-                // 娴佺▼璁捐鎸囧畾鐨� elementVariable 浣滀负浼氱浜哄憳鍒楄〃
-                this.multiInstanceVars = data.vars;
-                this.checkSendUser = true;
-                this.checkType = "multiple";
-              }
-              this.taskOpen = true;
-              this.taskTitle = "閫夋嫨浠诲姟鎺ユ敹";
-            } else {
-              if (this.procDefId) {
-                const param = {
-                  formJson:  this.formJson,
-                }
-                // 澶嶅埗瀵硅薄鐨勫睘鎬у�肩粰鏂扮殑瀵硅薄
-                Object.assign(param, formData);
-                // 瀹屾垚浠诲姟
-                completeSubmitFormTask(this.taskId, param).then(res => {
-                  this.$modal.msgSuccess(res.msg);
-                  this.goBack();
-                })
-                // // 鍚姩娴佺▼骞跺皢琛ㄥ崟鏁版嵁鍔犲叆娴佺▼鍙橀噺
-                // definitionStart(this.procDefId, param).then(res => {
-                //   this.$modal.msgSuccess(res.msg);
-                //   this.goBack();
-                // })
-              }
+      this.$confirm(`纭畾瑕佹彁浜や换鍔°��${this.processName}銆戝悧?`, '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        this.submitLoading = true
+        let that = this
+        if (eval("that.$refs.form" +0)) {
+          eval("that.$refs.form" +0)[0].getFormData().then(formData => {
+            this.formData = formData
+            const param = {
+              formJson:  this.formJson,
             }
-          }
-        })
-      }).catch(error => {
-        // this.$modal.msgError(error)
-      })
+            // 澶嶅埗瀵硅薄鐨勫睘鎬у�肩粰鏂扮殑瀵硅薄
+            Object.assign(param, formData);
+            // 瀹屾垚浠诲姟
+            completeSubmitFormTask(this.taskId, param).then(res => {
+              this.$modal.msgSuccess(res.msg);
+              this.submitLoading = false
+              this.goBack();
+            })
+          })
+        } else {
+          // 娌″叧鑱旇〃鍗曠洿鎺ヤ紶绌�
+          completeSubmitFormTask(this.taskId, {}).then(res => {
+            this.$modal.msgSuccess(res.msg);
+            this.submitLoading = false
+            this.goBack();
+          })
+        }
+
+        // let that = this
+        // eval("that.$refs.form" +0)[0].getFormData().then(formData => {
+        //   // 鏍规嵁褰撳墠浠诲姟鎴栬�呮祦绋嬭璁¢厤缃殑涓嬩竴姝ヨ妭鐐� todo 鏆傛椂鏈秹鍙婂埌鑰冭檻缃戝叧銆佽〃杈惧紡鍜屽鑺傜偣鎯呭喌
+        //   getNextFlowNodeByStart({deploymentId: this.deployId, variables: formData}).then(res => {
+        //     const data = res.data;
+        //     if (data) {
+        //       this.formData = formData;
+        //       if (data.dataType === 'dynamic') {
+        //         if (data.type === 'assignee') { // 鎸囧畾浜哄憳
+        //           this.checkSendUser = true;
+        //           this.checkType = "single";
+        //         } else if (data.type === 'candidateUsers') {  // 鍊欓�変汉鍛�(澶氫釜)
+        //           this.checkSendUser = true;
+        //           this.checkType = "multiple";
+        //         } else if (data.type === 'candidateGroups') { // 鎸囧畾缁�(鎵�灞炶鑹叉帴鏀朵换鍔�)
+        //           this.checkSendRole = true;
+        //         } else { // 浼氱
+        //           // 娴佺▼璁捐鎸囧畾鐨� elementVariable 浣滀负浼氱浜哄憳鍒楄〃
+        //           this.multiInstanceVars = data.vars;
+        //           this.checkSendUser = true;
+        //           this.checkType = "multiple";
+        //         }
+        //         this.taskOpen = true;
+        //         this.taskTitle = "閫夋嫨浠诲姟鎺ユ敹";
+        //       } else {
+        //         if (this.procDefId) {
+        //           const param = {
+        //             formJson:  this.formJson,
+        //           }
+        //           // 澶嶅埗瀵硅薄鐨勫睘鎬у�肩粰鏂扮殑瀵硅薄
+        //           Object.assign(param, formData);
+        //           // 瀹屾垚浠诲姟
+        //           completeSubmitFormTask(this.taskId, param).then(res => {
+        //             this.$modal.msgSuccess(res.msg);
+        //             this.goBack();
+        //           })
+        //         }
+        //       }
+        //     }
+        //   })
+        // })
+      }).catch((err) => {
+        console.log(err)
+        this.$message({
+          type: 'info',
+          message: '宸插彇娑堟彁浜ゆ搷浣�'
+        });
+      });
+
     },
     /** 閲嶇疆琛ㄥ崟 */
     resetForm() {
@@ -633,7 +695,6 @@
   width: 800px;
   padding: 15px;
 }
-
 .clearfix:before,
 .clearfix:after {
   display: table;
@@ -642,20 +703,16 @@
 .clearfix:after {
   clear: both
 }
-
 .box-card {
   width: 100%;
   margin-bottom: 20px;
 }
-
 .el-tag + .el-tag {
   margin-left: 10px;
 }
-
 .my-label {
   background: #E1F3D8;
 }
-
 .form-warp {
   min-width: 700px;
   padding: 20px;
@@ -663,4 +720,42 @@
   margin-bottom: 20px;
   box-shadow: rgba(67, 71, 85, 0.27) 0px 0px 0.25em, rgba(90, 125, 188, 0.05) 0px 0.25em 1em;
 }
+.before {
+  span {
+    color: #F56C6C
+  }
+  margin-bottom: 15px;
+  color: #E6A23C
+}
+.before_none {
+  span {
+    color: #F56C6C
+  }
+  margin-bottom: 15px;
+  margin-top: 15px;
+  color: #E6A23C
+}
+.reject-but {
+  position: absolute;
+  top: 4px;
+  right: 4px
+}
+.current {
+  span {
+    color: #409EFF
+  }
+  margin-bottom: 15px;
+  color: #E6A23C
+}
+.op-list {
+  position: absolute;
+  top: 4px;
+  right: 4px;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+}
+.tab-min-height {
+  min-height: 500px;
+}
 </style>

--
Gitblit v1.8.0