lyh
2025-06-27 f2ce587e752798a2a454e0f029069b4e82a41bc8
src/views/flowable/workflow/standardizedProcess/StandardizedProcessHandle.vue
@@ -119,8 +119,20 @@
            </a-col>
          </a-row>
          <div class="table-operator" style="text-align: right;">
            <a-button  @click="handleQueXiaoTask" type="primary" icon="close">取消</a-button>
            <a-button @click="submitForm">提 交</a-button>
            <a-button
              @click="handleQueXiaoTask"
              icon="close"
              :disabled="isSubmitting"
              :class="{'disabled-btn': isSubmitting}"
            >取消</a-button>
            <a-button
              @click="submitForm"
              type="primary"
              :disabled="isSubmitting"
              :loading="isSubmitting"
            >
              提 交
            </a-button>
          </div>
        </a-form-model>
      </div>
@@ -191,7 +203,8 @@
      },
      dictOptions: {},
      superFieldList: [],
      workflowSource: []
      workflowSource: [],
      isSubmitting: false,
    }
  },
  created() {
@@ -225,17 +238,35 @@
        alert('无法加载图片,请稍后再试。')
      }
    },
    handleQueXiaoTask(){
      this.visible = false
      this.routeReload()
    handleQueXiaoTask() {
      // 如果正在提交,阻止取消操作
      if (this.isSubmitting) return;
      this.visible = false;
      this.routeReload();
    },
    submitForm () {
      // 如果正在提交,阻止重复点击
      if (this.isSubmitting) return;
      // 开启全局禁选
      this.isSubmitting = true;
      document.body.classList.add('submitting');
      const that = this;
      // 定义一个恢复状态的函数
      const resetState = () => {
        that.isSubmitting = false;
        document.body.classList.remove('submitting');
      };
      console.log('selectShenpiData---->',that.selectShenpiData)
      if (that.selectShenpiData.taskDefKey ==='task_prepare'){
        // 触发表单验证-重新启动
        this.form.validateFields((err, values) => {
          if (!err) {
          if (err) {
            resetState(); // 验证失败,恢复状态
            return;
          }else {
            that.confirmLoading = true;
            let url=this.url.saveDispatchFile;
            let method = 'post';
@@ -254,9 +285,14 @@
              }else{
                that.$message.warning(res.message);
              }
            }).finally(() => {
              that.confirmLoading = false;
            }).catch((error) => {
              console.error(error);
              that.$message.error('提交失败');
            })
              .finally(() => {
                that.confirmLoading = false;
                resetState(); // 请求结束,恢复状态
              });
          }
        })
        //跳出方法
@@ -264,15 +300,21 @@
      }else {
        if (!that.assignFileStream.status==null || that.assignFileStream.status===undefined){
          this.$message.warning('请选择处理类型!')
          resetState();
          return false;
        }
      }
      if (!that.assignFileStream.approveContent==null || that.assignFileStream.approveContent===undefined) {
        this.$message.warning('请输入处理意见!')
        resetState();
        return false;
      }
      // 触发表单验证
      this.form.validateFields((err, values) => {
        if (err) {
          resetState();
          return;
        }
        if (!err) {
          that.confirmLoading = true;
          let url=this.url.approve
@@ -311,6 +353,7 @@
            }
          }).finally(() => {
            that.confirmLoading = false;
            resetState();
          })
        }
      })
@@ -338,6 +381,45 @@
}
</script>
<style scoped>
/* 全局禁选样式 - 作用于整个页面 */
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; /* 分界线的高度 */