加流程节点  维修工单添加 领取按钮 领取后 生成维修开始时间  提交后 生成维修结束时间 计算 维修时长  故障时长
已修改4个文件
224 ■■■■■ 文件已修改
src/views/eam/repair/EamRepairOrderList.vue 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/eam/repair/modules/EamRepairOrderList/EamRepairOrderModal.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/flowable/workflow/TechnicalStatus/TechnicalStatusChangeApprovalModal.vue 153 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/flowable/workflow/repairOrder/RepairOrderApprovalModal.vue 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/eam/repair/EamRepairOrderList.vue
@@ -35,6 +35,7 @@
    <!-- 操作按钮区域 -->
    <div class="table-operator" v-if="isDisplayOperation">
      <a-button type="primary" icon="download" @click="handleExportXls('维修工单台账')">导出</a-button>
      <a-dropdown :disabled="selectedRowKeys.length == 0">
        <a-menu slot="overlay">
          <a-menu-item key="1" @click="handleBatchSubmit">
@@ -62,9 +63,12 @@
               :scroll="{x:'max-content'}">
        <span slot="action" slot-scope="text, record">
          <template v-if="record.repairStatus=='PENDING_REPAIR'||record.repairStatus=='UNDER_MAINTENANCE' ||record.repairStatus=='REJECTED'">
             <a @click="handleFillIn(record)">填报</a>
             <a-divider type="vertical"/>
             <a-popconfirm title="确定提交吗?" @confirm="() => handleSubmit(record.id)">
            <a-popconfirm v-if="record.claimStatus=='0' || record.claimStatus==null " title="确定提交吗?" @confirm="() => handleClaim(record.id)">
               <a>领取</a>
             </a-popconfirm>
             <a v-if="record.claimStatus=='1'"  @click="handleFillIn(record)">维修</a>
             <a-divider v-if="record.claimStatus=='1'"  type="vertical"/>
             <a-popconfirm v-if="record.claimStatus=='1'" title="确定提交吗?" @confirm="() => handleSubmit(record.id)">
               <a>提交</a>
             </a-popconfirm>
          </template>
@@ -163,6 +167,12 @@
            fixed: 'left'
          },
          {
            title: '领取状态',
            align: 'center',
            dataIndex: 'claimStatus_dictText',
            fixed: 'left'
          },
          {
            title: '工单号',
            align: 'center',
            dataIndex: 'repairCode',
@@ -187,6 +197,18 @@
            title: '维修结束时间',
            align: 'center',
            dataIndex: 'actualEndTime',
            width: 200
          },
          {
            title: '维修时长',
            align: 'center',
            dataIndex: 'repairDuration',
            width: 200
          },
          {
            title: '故障时长',
            align: 'center',
            dataIndex: 'faultDuration',
            width: 200
          },
          {
@@ -246,8 +268,10 @@
        url: {
          list: '/eam/eamRepairOrder/list',
          submit: '/eam/eamRepairOrder/submit',
          claim: '/eam/eamRepairOrder/claim',
          delete: '/eam/eamRepairOrder/delete',
          deleteBatch: '/eam/eamRepairOrder/deleteBatch'
          deleteBatch: '/eam/eamRepairOrder/deleteBatch',
          exportXlsUrl: "eam/eamRepairOrder/exportXls",
        }
      }
    },
@@ -300,6 +324,29 @@
          })
      },
      /**
       * 点击领取时触发
       * @param id
       */
      handleClaim(id){
        this.loading = true
        getAction(this.url.claim, { id })
          .then(res => {
            if (res.success) {
              this.$notification.success({
                message: '消息',
                description: res.message
              })
              this.loadData()
            } else {
              this.$notification.warning({
                message: '消息',
                description: res.message
              })
              this.loading = false
            }
          })
      },
      // 批量提交时触发
      handleBatchSubmit() {
src/views/eam/repair/modules/EamRepairOrderList/EamRepairOrderModal.vue
@@ -28,14 +28,14 @@
            <a-form-model-item label="维修开始时间" prop="actualStartTime">
              <a-date-picker show-time v-model="model.actualStartTime" :allowClear="false"
                             value-format="YYYY-MM-DD HH:mm:ss"
                             style="width:100%"/>
                             style="width:100%" disabled/>
            </a-form-model-item>
          </a-col>
          <a-col :span="customSpan">
            <a-form-model-item label="维修结束时间" prop="actualEndTime">
              <a-date-picker show-time v-model="model.actualEndTime" :allowClear="false"
                             value-format="YYYY-MM-DD HH:mm:ss"
                             style="width:100%"/>
                             style="width:100%" disabled/>
            </a-form-model-item>
          </a-col>
          <a-col :span="customSpan">
@@ -100,8 +100,6 @@
        confirmLoading: false,
        spinning: false,
        validatorRules: {
          actualStartTime: [{ required: true, message: '请选择维修开始时间', trigger: 'change' }],
          actualEndTime: [{ required: true, message: '请选择维修结束时间', trigger: 'change' }],
          faultType: [{ required: true, message: '请选择故障类型' }]
        },
        detail: {
src/views/flowable/workflow/TechnicalStatus/TechnicalStatusChangeApprovalModal.vue
@@ -56,6 +56,21 @@
              <a-tab-pane key='2' tab='流程图' v-if="selectShenpiData.procInstId">
                <img :src="imageSrc" alt="Fetched Image" style="width: 100%" v-if="imageSrc"/>
              </a-tab-pane>
              <a-tab-pane key='3' 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>
@@ -168,6 +183,7 @@
        },
        disableSubmit: false,
        selectedRowKeys: [],
        hitaskDataSource:[],
        detail: {
          dataSource: [],
          columns: [
@@ -246,6 +262,7 @@
        this.model = {}
        this.getBasicInformationByApi(record)
        this.getFlowChartImageByApi(record)
        this.getFlowTaskListByApi(record)
      },
      /**
@@ -255,6 +272,7 @@
      handleDetail(record) {
        this.model = Object.assign({}, record)
        this.loadDetail(record.id)
        this.getFlowTaskListByApi(record)
      },
      /**
@@ -306,6 +324,23 @@
              description: err.message
            })
          })
      },
      /**
       * 获取流转节点
       * @param record
       */
      getFlowTaskListByApi(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)
        )
      },
      /**
@@ -391,4 +426,122 @@
      }
    }
  }
  /* 全局禁选样式 - 作用于整个页面 */
  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;
  }
  /* 添加禁用样式 */
  .disabled-link {
    color: #999;
    cursor: not-allowed;
    pointer-events: none;
    text-decoration: none;
  }
</style>
src/views/flowable/workflow/repairOrder/RepairOrderApprovalModal.vue
@@ -39,6 +39,16 @@
                      <a-input v-model="model.actualEndTime" readOnly/>
                    </a-form-model-item>
                  </a-col>
                  <a-col :span="12">
                    <a-form-model-item label="维修时长" :labelCol="labelCol" :wrapperCol="wrapperCol">
                      <a-input v-model="model.repairDuration" readOnly/>
                    </a-form-model-item>
                  </a-col>
                  <a-col :span="12">
                    <a-form-model-item label="故障时长" :labelCol="labelCol" :wrapperCol="wrapperCol">
                      <a-input v-model="model.faultDuration" readOnly/>
                    </a-form-model-item>
                  </a-col>
                  <a-col :span="24">
                    <a-form-model-item label="故障现象">
                      <a-textarea :rows="5" v-model="model.faultPhenomenon" readOnly/>