zhangherong
2025-07-12 9603fd5d0d0aba2f4c83a0bcfcd4aea39ca644a3
Merge remote-tracking branch 'origin/master'
已修改1个文件
419 ■■■■■ 文件已修改
src/views/flowable/workflow/secondMaintenance/SecondMaintenanceApprovalModal.vue 419 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/flowable/workflow/secondMaintenance/SecondMaintenanceApprovalModal.vue
@@ -1,171 +1,178 @@
<template>
  <j-modal
    :title="title"
    :width="1200"
    :visible="visible"
    :confirmLoading="confirmLoading"
    :okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
    switchFullscreen
    @ok="handleOk"
    @cancel="handleCancel"
    centered
    cancelText="关闭">
  <j-modal :title="title" :width="1200" :visible="visible" :confirmLoading="confirmLoading"
           :okButtonProps="{ class:{'jee-hidden': disableSubmit} }" fullscreen @ok="handleOk"
           @cancel="handleCancel" centered cancelText="关闭">
    <a-spin :spinning="spinning">
      <a-form-model ref="form" :model="model" :rules="validatorRules">
        <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 保养基础信息
        </a-divider>
      <a-form-model ref="form" :model="model" :rules="validatorRules" :labelCol="labelCol" :wrapperCol="wrapperCol">
        <a-row :gutter="24">
          <a-col :span="8">
            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="orderNum" label="工单号">
              <a-input placeholder="工单号系统自动生成" v-model="model.orderNum" disabled/>
            </a-form-model-item>
          </a-col>
          <a-col :span="8">
            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="equipmentId" label="设备编码">
              <maintenance-equipment-select placeholder="请输入设备编号或名称搜索" v-model="model.equipmentId"
                                            :maintenanceCategory="maintenanceCategory"
                                            @autocompleteForm="autocompleteForm"
                                            disabled></maintenance-equipment-select>
            </a-form-model-item>
          </a-col>
          <a-col :span="8">
            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="standardName" label="标准名称">
              <a-input placeholder="选择设备后自动带出" v-model="model.standardName" disabled/>
            </a-form-model-item>
          </a-col>
        </a-row>
        <a-row :gutter="24">
          <a-col :span="8">
            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="maintenanceDate" label="保养日期">
              <a-date-picker placeholder="请选择计划保养日期" v-model="model.maintenanceDate" format="YYYY-MM-DD"
                             disabled
                             style="width: 100%"/>
            </a-form-model-item>
          </a-col>
          <a-col :span="8">
            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="operator" label="保养人">
              <j-search-select-tag v-model="model.operator" placeholder="请选择保养人" disabled
                                   :dictOptions="maintenanceOperatorOptions"/>
            </a-form-model-item>
          </a-col>
          <a-col :span="8">
            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="maintenancePeriod" label="保养周期">
              <a-input placeholder="选择设备后自动带出" v-model="model.maintenancePeriod" disabled/>
            </a-form-model-item>
          </a-col>
        </a-row>
        <a-row :gutter="24">
          <a-form-model-item :labelCol="labelColLong" :wrapperCol="wrapperColLong" prop="remark" label="备注">
            <a-textarea placeholder="请输入备注" v-model="model.remark" disabled/>
          </a-form-model-item>
        </a-row>
        <a-row :gutter="24">
          <a-form-model-item :labelCol="labelColLong" :wrapperCol="wrapperColLong" label="保养图片">
            <lx-upload :returnUrl="false"
                       :isMultiple="true"
                       file-type="image"
                       :disabled="confirmDisable"
                       :number="3"
                       v-model="model.imageFilesResult"/>
          </a-form-model-item>
        </a-row>
        <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 保养项信息
        </a-divider>
        <a-row :gutter="24">
          <a-tabs v-model="activeTabKey">
            <a-tab-pane key="1" tab="保养项明细">
              <j-vxe-table
                ref="editableDetailTable"
                :rowNumber="false"
                :rowSelection="true"
                :bordered="true"
                :alwaysEdit="true"
                :toolbar="false"
                keep-source
                :height="300"
                :loading="detail.loading"
                :dataSource="detail.dataSource"
                :columns="detail.columns"
                @selectRowChange="handleTableSelectRowChange"
              >
                <template v-slot:maintenanceResult="props">
                  <j-dict-select-tag v-model="props.row.maintenanceResult" dictCode="eam_inspection_result"
                                     placeholder="请选择保养结果"
                                     :disabled="disableSubmit || confirmDisable"
                                     @change="handleInspectionResultSelectChange($event,props.row)"
                                     style="width: 100%"/>
                </template>
            <a-tabs>
              <a-tab-pane tab="基础信息">
                <a-row>
                  <a-col :span="12">
                    <a-form-model-item label="工单号">
                      <a-input v-model="model.orderNum" readOnly/>
                    </a-form-model-item>
                  </a-col>
                  <a-col :span="12">
                    <a-form-model-item label="设备编码">
                      <maintenance-equipment-select v-model="model.equipmentId" maintenanceCategory="SECOND_MAINTENANCE"
                                                    @autocompleteForm="autocompleteForm" disabled/>
                    </a-form-model-item>
                  </a-col>
                </a-row>
                <template v-slot:exceptionDescription="props">
                  <a-textarea style="height: 32px" v-model="props.row.exceptionDescription"
                              :disabled="disableSubmit || confirmDisable || !props.row.maintenanceResult || props.row.maintenanceResult === '1'"/>
                </template>
                <a-row>
                  <a-col :span="12">
                    <a-form-model-item label="规范名称">
                      <a-input v-model="model.standardName" readOnly/>
                    </a-form-model-item>
                  </a-col>
                  <a-col :span="12">
                    <a-form-model-item label="保养日期">
                      <a-input v-model="model.maintenanceDate" readOnly/>
                    </a-form-model-item>
                  </a-col>
                </a-row>
                <template v-slot:reportFlag="props">
                  <j-dict-select-tag v-model="props.row.reportFlag"
                                     :disabled="disableSubmit || confirmDisable || !props.row.maintenanceResult || props.row.maintenanceResult === '1'"
                                     dictCode="yn"
                                     style="width: 100%"/>
                </template>
              </j-vxe-table>
            </a-tab-pane>
            <template v-if="selectShenpiData.procInstId">
              <a-tab-pane key='2' tab='流程节点'>
                <a-card :bordered="false">
                  <a-timeline>
                    <a-timeline-item v-for="(item,index) in taskData" :key="index">
                      <div>
                        <h3 style="font-weight: bold;">{{item.taskName}}</h3>
                        <div>处理人:{{item.assignee_dictText}}</div>
                        <div v-if="index !==0">处理时长:{{item.duration}}</div>
                        <div v-if="item.name !== '提交申请'">处理类型:{{item.sequenceFlowName}}</div>
                        <div v-if="item.description">处理意见:{{item.description}}</div>
                      </div>
                    </a-timeline-item>
                  </a-timeline>
                </a-card>
                <a-row>
                  <a-col :span="12">
                    <a-form-model-item label="操作工">
                      <a-input v-model="model.operator_dicText" readOnly/>
                    </a-form-model-item>
                  </a-col>
                  <a-col :span="12">
                    <a-form-model-item label="维修工">
                      <a-input v-model="model.repairer_dicText" readOnly/>
                    </a-form-model-item>
                  </a-col>
                </a-row>
                <a-row>
                  <a-col :span="12">
                    <a-form-model-item prop="maintenancePeriod" label="保养周期">
                      <a-input v-model="model.maintenancePeriod" readOnly/>
                    </a-form-model-item>
                  </a-col>
                </a-row>
                <a-row>
                  <a-form-model-item :labelCol="labelColLong" :wrapperCol="wrapperColLong" label="备注">
                    <a-textarea v-model="model.remark" readOnly/>
                  </a-form-model-item>
                </a-row>
              </a-tab-pane>
              <a-tab-pane key='3' tab='流程图'>
                <img :src="imageSrc" alt="Fetched Image"/>
            </a-tabs>
          </a-col>
          <a-col
            :span="model.maintenanceStatus!='WAIT_MAINTENANCE'&&model.maintenanceStatus!='UNDER_MAINTENANCE'?10:16">
            <a-tabs v-model="activeTabKey">
              <a-tab-pane key="1" tab="操作工">
                <j-vxe-table ref="editableDetailTable1" :rowNumber="false" rowSelection bordered
                             alwaysEdit keep-source :height="300"
                             :dataSource="detail.operatorMaintenanceList" :columns="detail.columns"
                             @selectRowChange="handleTableSelectRowChange">
                  <template v-slot:maintenanceResult="props">
                    <j-dict-select-tag v-model="props.row.maintenanceResult" dictCode="eam_inspection_result"
                                       placeholder="请选择保养结果" :disabled="disableSubmit || confirmDisable"
                                       @change="handleInspectionResultSelectChange($event,props.row)"
                                       style="width: 100%"/>
                  </template>
                  <template v-slot:exceptionDescription="props">
                    <a-textarea style="height: 32px" v-model="props.row.exceptionDescription"
                                :disabled="disableSubmit || confirmDisable || !props.row.maintenanceResult || props.row.maintenanceResult === '1'"/>
                  </template>
                  <template v-slot:reportFlag="props">
                    <j-dict-select-tag v-model="props.row.reportFlag"
                                       :disabled="disableSubmit || confirmDisable || !props.row.maintenanceResult || props.row.maintenanceResult === '1'"
                                       dictCode="yn"
                                       style="width: 100%"/>
                  </template>
                </j-vxe-table>
              </a-tab-pane>
            </template>
            <a-button v-if="!disableSubmit &&!confirmDisable&& selectedRowKeys.length > 0" slot="tabBarExtraContent"
                      type="primary" @click="handleSelectAllInspectionResult">保养正常
            </a-button>
          </a-tabs>
              <a-tab-pane key="2" tab="维修工">
                <j-vxe-table ref="editableDetailTable2" :rowNumber="false" rowSelection bordered
                             alwaysEdit kee-source :height="300"
                             :dataSource="detail.repairerMaintenanceList" :columns="detail.columns"
                             @selectRowChange="handleTableSelectRowChange">
                  <template v-slot:maintenanceResult="props">
                    <j-dict-select-tag v-model="props.row.maintenanceResult" dictCode="eam_inspection_result"
                                       placeholder="请选择保养结果" :disabled="disableSubmit || confirmDisable"
                                       @change="handleInspectionResultSelectChange($event,props.row)"
                                       style="width: 100%"/>
                  </template>
                  <template v-slot:exceptionDescription="props">
                    <a-textarea style="height: 32px" v-model="props.row.exceptionDescription"
                                :disabled="disableSubmit || confirmDisable || !props.row.maintenanceResult || props.row.maintenanceResult === '1'"/>
                  </template>
                  <template v-slot:reportFlag="props">
                    <j-dict-select-tag v-model="props.row.reportFlag"
                                       :disabled="disableSubmit || confirmDisable || !props.row.maintenanceResult || props.row.maintenanceResult === '1'"
                                       dictCode="yn"
                                       style="width: 100%"/>
                  </template>
                </j-vxe-table>
              </a-tab-pane>
              <template v-if="selectShenpiData.procInstId">
                <a-tab-pane key='3' tab='流程图'>
                  <img :src="imageSrc" alt="Fetched Image"/>
                </a-tab-pane>
              </template>
              <a-button :disabled="disableSubmit ||confirmDisable||selectedRowKeys.length > 0" slot="tabBarExtraContent"
                        type="primary" @click="handleSelectAllInspectionResult">批量保养正常
              </a-button>
            </a-tabs>
          </a-col>
          <a-col :span="6"
                 v-if="model.maintenanceStatus!='WAIT_MAINTENANCE'&&model.maintenanceStatus!='UNDER_MAINTENANCE'">
            <a-tabs>
              <a-tab-pane tab="管理员确认" v-if="confirmDisable">
                <a-row>
                  <a-col :span="24">
                    <a-form-model-item prop="confirmDealType" label="确认类型">
                      <j-dict-select-tag type='radio' v-model='model.confirmDealType' dictCode='approve_reject'
                                         placeholder="请选择确认类型" :disabled="disableSubmit || inspectorConfirmDisable"/>
                    </a-form-model-item>
                  </a-col>
                  <a-col :span="24">
                    <a-form-model-item prop="confirmComment" label="确认意见">
                      <a-textarea placeholder="请输入意见" v-model="model.confirmComment"
                                  :disabled="disableSubmit || inspectorConfirmDisable"/>
                    </a-form-model-item>
                  </a-col>
                </a-row>
              </a-tab-pane>
            </a-tabs>
            <a-tabs>
              <a-tab-pane tab="检查人确认" v-if="inspectorConfirmDisable">
                <a-row>
                  <a-col :span="24">
                    <a-form-model-item prop="confirmDealType" label="确认类型">
                      <j-dict-select-tag type='radio' v-model='model.confirmDealType' dictCode='approve_reject'
                                         placeholder="请选择确认类型" :disabled="disableSubmit || inspectorConfirmDisable"/>
                    </a-form-model-item>
                  </a-col>
                  <a-col :span="24">
                    <a-form-model-item prop="leaderConfirmComment" label="确认意见">
                      <a-textarea placeholder="请输入意见" v-model="model.leaderConfirmComment"
                                  :disabled="disableSubmit || completionDisable"/>
                    </a-form-model-item>
                  </a-col>
                </a-row>
              </a-tab-pane>
            </a-tabs>
          </a-col>
        </a-row>
        <div v-if="confirmDisable">
          <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 管理员确认信息
          </a-divider>
          <a-row :gutter="24">
            <a-col :span="12">
              <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="confirmDealType" label="确认类型">
                <j-dict-select-tag type='radio' v-model='model.confirmDealType' dictCode='approved_rejected'
                                   placeholder="请选择处理类型" :disabled="disableSubmit || leaderConfirmDisable"/>
              </a-form-model-item>
            </a-col>
            <a-col :span="12">
              <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="confirmComment" label="确认意见">
                <a-textarea placeholder="请输入意见" v-model="model.confirmComment"
                            :disabled="disableSubmit || leaderConfirmDisable"/>
              </a-form-model-item>
            </a-col>
          </a-row>
        </div>
        <div v-if="leaderConfirmDisable">
          <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 领导确认信息
          </a-divider>
          <a-row :gutter="24">
            <a-col :span="24">
              <a-form-model-item :labelCol="labelColLong" :wrapperCol="wrapperColLong" prop="leaderConfirmComment"
                                 label="领导意见">
                <a-textarea placeholder="请输入意见" v-model="model.leaderConfirmComment"
                            :disabled="disableSubmit || completionDisable"/>
              </a-form-model-item>
            </a-col>
          </a-row>
        </div>
      </a-form-model>
    </a-spin>
  </j-modal>
@@ -192,15 +199,7 @@
      return {
        title: '操作',
        visible: false,
        //状态控制
        //保养中 不可编辑
        // confirmDisable: false,
        // initialAcceptanceDisable: false,
        // finalAcceptanceDisable: false,
        editable: false,
        model: {},
        maintenanceCategory: 'SECOND_MAINTENANCE',
        maintenanceOperatorOptions: [],
        labelCol: {
          xs: { span: 24 },
          sm: { span: 6 }
@@ -211,11 +210,11 @@
        },
        labelColLong: {
          xs: { span: 24 },
          sm: { span: 2 }
          sm: { span: 3 }
        },
        wrapperColLong: {
          xs: { span: 24 },
          sm: { span: 21 }
          sm: { span: 20 }
        },
        confirmLoading: false,
        spinning: false,
@@ -230,7 +229,7 @@
          ],
          leaderConfirmComment: [
            { required: true, message: '请输入初验收意见!' }
          ],
          ]
        },
        url: {
          queryById: '/eam/secondMaintenanceOrder/queryById',
@@ -242,12 +241,10 @@
        },
        disableSubmit: false,
        taskData: [],
        isDisplayBmp: false,
        showBmpButtonLoading: false,
        selectedRowKeys: [],
        detail: {
          loading: false,
          dataSource: [],
          operatorMaintenanceList: [],
          repairerMaintenanceList: [],
          columns: [
            {
              title: 'ID',
@@ -263,28 +260,19 @@
              title: '序号',
              key: 'itemCode',
              type: JVXETypes.normal,
              width: '5%',
              width: 60,
              align: 'center'
            },
            {
              title: '保养项',
              key: 'itemName',
              type: JVXETypes.normal,
              width: '10%',
              align: 'center'
            },
            {
              title: '保养要求',
              key: 'itemDemand',
              type: JVXETypes.normal,
              width: '20%',
              align: 'center'
            },
            {
              title: '保养结果',
              key: 'maintenanceResult',
              type: JVXETypes.slot,
              width: '10%',
              align: 'center',
              slotName: 'maintenanceResult',
              validateRules: [
@@ -295,7 +283,6 @@
              title: '异常描述',
              key: 'exceptionDescription',
              type: JVXETypes.slot,
              width: '20%',
              align: 'center',
              slotName: 'exceptionDescription',
              validateRules: [
@@ -306,34 +293,25 @@
              title: '是否报修',
              key: 'reportFlag',
              type: JVXETypes.slot,
              width: '10%',
              align: 'center',
              slotName: 'reportFlag',
              validateRules: [
                { handler: this.customValidator }
              ]
            }
          ],
          toolbarConfig: {
            // prefix 前缀;suffix 后缀
            slot: ['prefix', 'suffix'],
            // add 新增按钮;remove 删除按钮;clearSelection 清空选择按钮
            btn: ['clearSelection']
          }
          ]
        }
      }
    },
    created() {
    },
    computed: {
      confirmDisable: function() {
        return ['WAIT_CONFIRM', 'WAIT_LEADER_CONFIRM', 'COMPLETE'].includes(this.model.maintenanceStatus)
        return ['WAIT_ADMIN_CONFIRM', 'WAIT_INSPECTOR_CONFIRM', 'COMPLETE'].includes(this.model.maintenanceStatus)
      },
      leaderConfirmDisable: function() {
        return ['WAIT_LEADER_CONFIRM', 'COMPLETE'].includes(this.model.maintenanceStatus)
      inspectorConfirmDisable: function() {
        return ['WAIT_INSPECTOR_CONFIRM', 'COMPLETE'].includes(this.model.maintenanceStatus)
      },
      completionDisable: function() {
        return ['COMPLETE', 'ABOLISH'].includes(this.model.maintenanceStatus)
        return ['COMPLETE'].includes(this.model.maintenanceStatus)
      }
    },
    methods: {
@@ -341,10 +319,7 @@
        this.initParams()
        this.model = {}
        if (item.procInstId) {
          const { processDefinitionId, processInstanceId, processDefinitionKey, procInstId } = item
          let taskDataList = await getAction(this.url.queryHisTaskList, { procInstId })
          this.taskData = [...taskDataList.result]
          const { processDefinitionId, processInstanceId, processDefinitionKey } = item
          downFile(this.url.diagramView, {
            processDefinitionId,
@@ -364,10 +339,6 @@
        }
        let res = await getAction(this.url.queryById, { id: item.dataId })
        this.model = Object.assign({}, res.result)
        if (this.model.imageFiles) {
          let obj = JSON.parse(this.model.imageFiles)
          this.model.imageFilesResult = [...obj]
        }
        this.model.dataId = item.dataId
        this.model.taskId = item.id
        this.model.userId = item.assignee
@@ -380,10 +351,6 @@
        console.log('record', record)
        this.initParams()
        this.model = Object.assign({}, record)
        if (this.model.imageFiles) {
          let obj = JSON.parse(this.model.imageFiles)
          this.model.imageFilesResult = [...obj]
        }
        this.loadDetail(record.id)
      },
@@ -432,43 +399,23 @@
        this.$set(this.model, 'maintenancePeriod', selectObj.maintenancePeriod)
        this.$set(this.model, 'standardId', selectObj.id)
        this.$set(this.model, 'equipmentId', selectObj.equipmentId)
        // console.log('model', this.model)
        if (!this.model.id) {
          this.loadStandardDetail(selectObj.id)
        }
        this.loadMaintenanceOperatorList(this.model.equipmentId)
        if (!this.model.id) this.loadStandardDetail(selectObj.id)
      },
      //标准选择变化
      //规范选择变化
      loadDetail(orderId) {
        if (orderId) {
          getAction(this.url.detail, { orderId: orderId })
          getAction(this.url.detail, { orderId })
            .then(res => {
              if (res.success) {
                this.detail.dataSource = [...res.result]
                this.detail.operatorMaintenanceList = res.result.filter(item => item.itemCategory == 'OPERATOR_MAINTENANCE')
                this.detail.repairerMaintenanceList = res.result.filter(item => item.itemCategory == 'REPAIRER_MAINTENANCE')
              }
            })
            .finally(() => {
              this.spinning = false
            })
        }
      },
      loadMaintenanceOperatorList(equipmentId) {
        this.maintenanceOperatorOptions = []
        let params = { positionCode: 'PCR0001' }
        if (equipmentId) {
          params.equipmentId = equipmentId
        }
        getAction(this.url.userSelect, params).then(res => {
          if (res.success) {
            this.maintenanceOperatorOptions = res.result.map(item => ({
              key: item.id,
              value: item.username,
              text: item.realname
            }))
          }
        })
      },
      handleInspectionResultSelectChange(value, record) {