lyh
2025-06-27 82b238214db913000a12fc037c5e0f101a7b9d73
src/views/flowable/workflow/assignFileStream/AssignFileStreamHandle.vue
@@ -13,7 +13,7 @@
  >
    <a-card :bordered="false">
      <div>
        <b>{{ selectShenpiData.title }}</b>
        <b>{{ selectShenpiData.description }}</b>
        <br>
        <br>
        <a-tag color="blue">
@@ -76,12 +76,12 @@
                  </a-row>
                  <a-row>
                    <a-col :span='span'>
                      <a-form-model-item label='设备类名称' :labelCol='labelCol' :wrapperCol='wrapperCol' prop='deviceManagementCode'>
                      <a-form-model-item label='数控系统类别' :labelCol='labelCol' :wrapperCol='wrapperCol' prop='deviceManagementCode'>
                        <a-input :disabled='coldisabled' v-model='tableRowRecord.deviceManagementCode'></a-input>
                      </a-form-model-item>
                    </a-col>
                    <a-col :span='span'>
                      <a-form-model-item label='设备类名称' :labelCol='labelCol' :wrapperCol='wrapperCol' prop='deviceManagementName'>
                      <a-form-model-item label='数控系统类别' :labelCol='labelCol' :wrapperCol='wrapperCol' prop='deviceManagementName'>
                        <a-input :disabled='coldisabled' v-model='tableRowRecord.deviceManagementName'></a-input>
                      </a-form-model-item>
                    </a-col>
@@ -105,13 +105,11 @@
                  <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.startTime}}</p>
                        <p>结束时间:{{item.endTime}}</p>
                        <p>处理人:{{item.assignee}}</p>
                        <p>办理类型:{{item.bllx_dictText}}</p>
                        <p v-if="item.name == '提交申请'">指派原因:{{item.cause}}</p>
                        <p v-else >处理意见:{{item.cause}}</p>
                        <div  class="left_qiu"><span>{{item.name}}</span></div>
                        <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>
@@ -143,11 +141,11 @@
                <a-input :disabled='coldisabled' v-model='tableRowRecord.applyTime'></a-input>
              </a-form-model-item >
            </a-col>
            <a-col :span="24">
              <a-form-item label="密级为" :labelCol="labelCol" :wrapperCol="wrapperCol">
                <j-dict-select-tag  type='list' v-model='assignFileStream.secretLevel' dictCode='dnc_secret_level' placeholder="请选择密级"  />
              </a-form-item>
            </a-col>
<!--            <a-col :span="24">-->
<!--              <a-form-item label="密级为" :labelCol="labelCol" :wrapperCol="wrapperCol">-->
<!--                <j-dict-select-tag  type='list' v-model='assignFileStream.secretLevel' dictCode='dnc_secret_level' placeholder="请选择密级"  />-->
<!--              </a-form-item>-->
<!--            </a-col>-->
            <a-col :span="24" class="btxx">
              <a-form-item label="审批状态" :labelCol="labelCol" :wrapperCol="wrapperCol">
                <j-dict-select-tag  type='list' v-model='assignFileStream.status' dictCode='dnc_assign_stream_status' placeholder="请选择审批状态"  />
@@ -160,8 +158,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>
@@ -246,12 +256,13 @@
      url: {
        queryBomDataById: '/nc/activit/selectVoById',
        diagramView: '/assign/flow/diagramView',
        queryHisTaskList:'/assign/flow/queryHisTaskList',
        approve:"/activit/assign/file/approve",
        queryHisTaskList:'/dncFlow/dispatchFile/queryHisTaskList',
        approve:"/nc/activit/assign/file/approve",
      },
      dictOptions: {},
      superFieldList: [],
      workflowSource: []
      workflowSource: [],
      isSubmitting: false,
    }
  },
  created() {
@@ -285,12 +296,28 @@
        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');
      };
      if (!that.assignFileStream.status==null || that.assignFileStream.status===undefined){
        this.$message.warning('请选择审批状态!')
        return false;
@@ -301,6 +328,10 @@
      }
      // 触发表单验证
      this.form.validateFields((err, values) => {
        if (err) {
          resetState(); // 验证失败,恢复状态
          return;
        }
        if (!err) {
          that.confirmLoading = true;
          let url=this.url.approve
@@ -322,15 +353,21 @@
          httpAction(url,flowTaskVo,method).then((res)=>{
            if(res.success){
              that.$message.success(res.message);
              that.$emit('ok');
              that.visible = false
              //刷新表格
              that.$emit('searchReset')
            }else{
              that.$message.warning(res.message);
            }
          }).finally(() => {
            that.confirmLoading = false;
          }).catch((error) => {
            console.error(error);
            that.$message.error('提交失败');
          })
            .finally(() => {
              that.confirmLoading = false;
              resetState(); // 请求结束,恢复状态
            });
        }
      })
    },
    getAllApproveData(item) {
@@ -340,7 +377,7 @@
        'id': item.dataId
      }
      let parmhis={
        'procInstId': item.dataId
        'procInstId': item.procInstId
      }
      getAction(this.url.queryHisTaskList,parmhis).then(res=>{
        this.hitaskDataSource=res.result
@@ -359,6 +396,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; /* 分界线的高度 */