lyh
2025-07-24 b1c4b9509b3b84594bbc9a541f308101d3a17140
src/views/flowable/workflow/TechnicalStatusEvaluation/TechnicalStatusEvaluationApplicationApprovalModal.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,353 @@
<template>
  <j-modal :title="title" :width="1300" :fullscreen="fullScreen" :visible="visible" :confirmLoading="confirmLoading"
           :okButtonProps="{ class:{'jee-hidden': disableSubmit} }" @ok="handleOk"
           @cancel="handleCancel" cancelText="关闭">
    <a-spin :spinning="spinning">
      <a-form-model ref="form" :model="model" :rules="validatorRules" :labelCol="labelCol" :wrapperCol="wrapperCol">
        <a-row id="outer-row" :gutter="24">
          <!--左侧基础信息列-->
          <a-col :span="!disableSubmit?8:14" class="scroll-col">
            <a-tabs>
              <a-tab-pane tab="基础信息">
                <a-row>
                  <a-col :span="12">
                    <a-form-model-item label="申请单号">
                      <a-input v-model="model.applicationOrderNum" readOnly/>
                    </a-form-model-item>
                  </a-col>
                  <a-col :span="12">
                    <a-form-model-item label="统一编码">
                      <technical-status-equipment-select v-model="model.equipmentId"
                                                         @autocompleteForm="autocompleteForm" disabled/>
                    </a-form-model-item>
                  </a-col>
                </a-row>
                <a-row>
                </a-row>
                <a-row>
                  <a-col :span="12">
                    <a-form-model-item label="申请部门">
                      <a-input v-model="model.factoryOrgCode_dictText" readOnly/>
                    </a-form-model-item>
                  </a-col>
                  <a-col :span="12">
                    <a-form-model-item label="申请人">
                      <a-input v-model="model.applicant_dictText" readOnly/>
                    </a-form-model-item>
                  </a-col>
                </a-row>
                <a-row>
                  <a-col :span="12">
                    <a-form-model-item label="技术状态鉴定日期">
                      <a-input v-model="model.evaluationDate" 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-tabs>
          </a-col>
          <!-- ä¸­é—´æ˜Žç»†é¡¹åˆ—-->
          <a-col v-if="selectShenpiData.procInstId" :span="10" class="scroll-col">
            <a-tabs>
              <a-tab-pane key='1' tab='流程图'>
                <img :src="imageSrc" alt="Fetched Image" style="width: 100%" v-if="imageSrc"/>
              </a-tab-pane>
            </a-tabs>
          </a-col>
          <!--右侧审批列-->
          <a-col :span="!disableSubmit?6:10" class="scroll-col">
            <a-tabs v-if="displayDepartHeaderFlag">
              <a-tab-pane tab="使用单位室级领导确认">
                <a-row>
                  <a-col :span="24">
                    <a-form-model-item prop="departHeaderSignatureResult" label="确认类型" :labelCol="rightColLabelCol"
                                       :wrapperCol="rightColWrapperCol">
                      <j-dict-select-tag type='radio' v-model='model.departHeaderSignatureResult'
                                         dictCode='approve_reject'
                                         :disabled="disableSubmit||(model.applicationStatus&&model.applicationStatus!=='DEPART_HEADER_SIGNING')"/>
                    </a-form-model-item>
                  </a-col>
                  <a-col :span="24">
                    <a-form-model-item label="确认意见" :labelCol="rightColLabelCol" :wrapperCol="rightColWrapperCol">
                      <a-textarea placeholder="请输入意见" v-model="model.departHeaderComment"
                                  :disabled="disableSubmit||(model.applicationStatus&&model.applicationStatus!=='DEPART_HEADER_SIGNING')"/>
                    </a-form-model-item>
                  </a-col>
                </a-row>
              </a-tab-pane>
            </a-tabs>
            <a-tabs v-if="displayProductionHeaderFlag">
              <a-tab-pane tab="生产设备管理主管确认">
                <a-row>
                  <a-col :span="24">
                    <a-form-model-item prop="productionHeaderSignatureResult" label="确认类型" :labelCol="rightColLabelCol"
                                       :wrapperCol="rightColWrapperCol">
                      <j-dict-select-tag type='radio' v-model='model.productionHeaderSignatureResult'
                                         dictCode='approve_reject'
                                         :disabled="disableSubmit||(model.applicationStatus&&model.applicationStatus!=='PRODUCTION_HEADER_SIGNING')"/>
                    </a-form-model-item>
                  </a-col>
                  <a-col :span="24">
                    <a-form-model-item label="确认意见" :labelCol="rightColLabelCol" :wrapperCol="rightColWrapperCol">
                      <a-textarea placeholder="请输入意见" v-model="model.productionHeaderComment"
                                  :disabled="disableSubmit||(model.applicationStatus&&model.applicationStatus!=='PRODUCTION_HEADER_SIGNING')"/>
                    </a-form-model-item>
                  </a-col>
                </a-row>
              </a-tab-pane>
            </a-tabs>
            <a-tabs v-if="displayProductionSupportFlag">
              <a-tab-pane tab="生产保障部领导确认">
                <a-row>
                  <a-col :span="24">
                    <a-form-model-item prop="productionSupportSignatureResult" label="确认类型"
                                       :labelCol="rightColLabelCol" :wrapperCol="rightColWrapperCol">
                      <j-dict-select-tag type='radio' v-model='model.productionSupportSignatureResult'
                                         dictCode='approve_reject'
                                         :disabled="disableSubmit||(model.applicationStatus&&model.applicationStatus!=='PRODUCTION_SUPPORT_SIGNING')"/>
                    </a-form-model-item>
                  </a-col>
                  <a-col :span="24">
                    <a-form-model-item label="确认意见" :labelCol="rightColLabelCol" :wrapperCol="rightColWrapperCol">
                      <a-textarea placeholder="请输入意见" v-model="model.productionSupportComment"
                                  :disabled="disableSubmit||(model.applicationStatus&&model.applicationStatus!=='PRODUCTION_SUPPORT_SIGNING')"/>
                    </a-form-model-item>
                  </a-col>
                </a-row>
              </a-tab-pane>
            </a-tabs>
          </a-col>
        </a-row>
      </a-form-model>
    </a-spin>
  </j-modal>
</template>
<script>
  import { downFile, getAction, postAction } from '@/api/manage'
  import TechnicalStatusEquipmentSelect from '../../../eam/equipment/modules/TechnicalStatusEquipmentSelect'
  export default {
    name: 'TechnicalStatusEvaluationApplicationApprovalModal',
    components: {
      TechnicalStatusEquipmentSelect
    },
    props: {
      selectShenpiData: {
        type: Object
      }
    },
    data() {
      return {
        title: '操作',
        visible: false,
        model: {},
        labelCol: {
          xs: { span: 24 },
          sm: { span: 10 }
        },
        wrapperCol: {
          xs: { span: 24 },
          sm: { span: 14 }
        },
        labelColLong: {
          xs: { span: 24 },
          sm: { span: 5 }
        },
        wrapperColLong: {
          xs: { span: 24 },
          sm: { span: 19 }
        },
        rightColLabelCol: {
          xs: { span: 24 },
          sm: { span: 6 }
        },
        rightColWrapperCol: {
          xs: { span: 24 },
          sm: { span: 16 }
        },
        confirmLoading: false,
        spinning: false,
        imageSrc: null,
        fullScreen: true,
        validatorRules: {
          departHeaderSignatureResult: [{ required: true, message: '请选择确认类型' }],
          productionHeaderSignatureResult: [{ required: true, message: '请选择确认类型' }],
          productionSupportSignatureResult: [{ required: true, message: '请选择确认类型' }]
        },
        url: {
          queryById: '/eam/eamTechnicalStatusEvaluationApplication/queryById',
          approval: '/eam/eamTechnicalStatusEvaluationApplication/approval',
          diagramView: '/assign/flow/diagramView'
        },
        disableSubmit: false,
        selectedRowKeys: []
      }
    },
    computed: {
      displayDepartHeaderFlag() {
        return this.model.applicationStatus && ['DEPART_HEADER_SIGNING', 'PRODUCTION_HEADER_SIGNING', 'PRODUCTION_SUPPORT_SIGNING', 'COMPLETED', 'REJECTED'].includes(this.model.applicationStatus)
      },
      displayProductionHeaderFlag() {
        return this.model.applicationStatus && ['PRODUCTION_HEADER_SIGNING', 'PRODUCTION_SUPPORT_SIGNING', 'COMPLETED', 'REJECTED'].includes(this.model.applicationStatus) && this.model.departHeaderSignatureResult === '1'
      },
      displayProductionSupportFlag() {
        return this.model.applicationStatus && ['PRODUCTION_SUPPORT_SIGNING', 'COMPLETED', 'REJECTED'].includes(this.model.applicationStatus) && this.model.productionHeaderSignatureResult === '1'
      }
    },
    methods: {
      /**
       * ä¸»é¡µé¢ç‚¹å‡»æ‰§è¡Œå®¡æ‰¹æ—¶è§¦å‘
       * @param record ä¸»é¡µé¢åˆ—表行记录
       */
      handleApprove(record) {
        this.fullScreen = true
        this.model = {}
        this.getBasicInformationByApi(record)
        this.getFlowChartImageByApi(record)
      },
      /**
       * ä¸»é¡µé¢ç‚¹å‡»è¯¦æƒ…时触发
       * @param record ä¸»é¡µé¢åˆ—表行记录
       */
      handleDetail(record) {
        this.fullScreen = false
        this.model = Object.assign({}, record)
      },
      /**
       * èŽ·å–åŸºç¡€ä¿¡æ¯
       * @param record ä¸»é¡µé¢åˆ—表行记录
       */
      getBasicInformationByApi(record) {
        this.spinning = true
        const that = this
        getAction(this.url.queryById, { id: record.dataId })
          .then(res => {
            if (res.success) {
              that.model = Object.assign({}, res.result)
              that.model.dataId = record.dataId
              that.model.taskId = record.id
              that.model.userId = record.assignee
              that.model.instanceId = record.procInstId
            }
            else {
              that.$notification.warning({
                message: '消息',
                description: res.message
              })
            }
          })
      },
      /**
       * èŽ·å–æµç¨‹å›¾
       * @param record ä¸»é¡µé¢åˆ—表行记录
       */
      getFlowChartImageByApi(record) {
        const { processDefinitionId, processInstanceId, processDefinitionKey } = record
        this.imageSrc = null
        downFile(this.url.diagramView, {
          processDefinitionId,
          processInstanceId,
          TaskDefinitionKey: processDefinitionKey
        }, 'get')
          .then((res => {
            this.imageSrc = window.URL.createObjectURL(new Blob([res]))
          }))
          .catch(err => {
            this.$notification.error({
              message: '消息',
              description: err.message
            })
          })
      },
      async handleOk() {
        const that = this
        // è§¦å‘表单验证
        this.$refs.form.validate(valid => {
          if (valid) {
            that.confirmLoading = that.spinning = true
            postAction(this.url.approval, this.model)
              .then((res) => {
                if (res.success) {
                  that.$notification.success({
                    message: '消息',
                    description: res.message
                  })
                  that.$emit('modalFormOk')
                  that.close()
                } else {
                  that.$notification.warning({
                    message: '消息',
                    description: res.message
                  })
                }
              })
              .finally(() => {
                that.confirmLoading = that.spinning = false
              })
          } else {
            return false
          }
        })
      },
      autocompleteForm(selectObj) {
        this.$set(this.model, 'equipmentId', selectObj.equipmentId)
        this.spinning = false
      },
      handleCancel() {
        this.close()
      },
      close() {
        this.$emit('close')
        this.visible = false
        this.$refs.form.clearValidate()
      }
    }
  }
</script>
<style scoped lang="less">
  /deep/ .ant-spin-nested-loading {
    height: 100%;
    .ant-spin-container {
      height: 100%;
      .ant-form {
        height: 100%;
        #outer-row {
          height: 100%;
          .scroll-col {
            height: 100%;
            overflow: auto;
          }
        }
      }
    }
  }
</style>