lyh
2 天以前 1392d8f3def2c21e7a6fc15cf3f68fc1056ec0b6
三不原则
已添加1个文件
已修改5个文件
729 ■■■■ 文件已修改
src/views/eam/repair/EamReportThreeNoSpareList.vue 307 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/eam/repair/modules/EamReportProductHazardsModal.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/eam/repair/modules/EamReportThreeNoSpareModal.vue 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/flowable/workflow/FlowCompleted.vue 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/flowable/workflow/FlowTodo.vue 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/flowable/workflow/repairOrder/ReportThreeNoSpareApprovalModal.vue 320 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/eam/repair/EamReportThreeNoSpareList.vue
@@ -5,21 +5,20 @@
    <div class="table-page-search-wrapper">
      <a-form layout="inline" @keyup.enter.native="searchQuery">
        <a-row :gutter="24">
          <a-col :xl="6" :lg="7" :md="8" :sm="24">
            <a-form-item label="删除标记">
              <a-input placeholder="请输入删除标记" v-model="queryParam.delFlag"></a-input>
          <a-col :xl="6" :lg="7" :md="8" :sm="12">
            <a-form-item label="统一编码">
              <lx-search-equipment-select placeholder="请输入统一编码或名称搜索" v-model="queryParam.equipmentId"/>
            </a-form-item>
          </a-col>
          <a-col :xl="6" :lg="7" :md="8" :sm="24">
            <a-form-item label="原因分析">
              <a-input placeholder="请输入原因分析" v-model="queryParam.causeAnalysis"></a-input>
            <a-form-item label="状态">
              <j-dict-select-tag dict-code="report_three_no_spare_submit_status"  placeholder="请选择状态" v-model="queryParam.submitStatus"/>
            </a-form-item>
          </a-col>
        <template v-if="toggleSearchStatus">
          <a-col :xl="6" :lg="7" :md="8" :sm="24">
            <a-form-item label="培训教育;是 å¦">
              <a-input placeholder="请输入培训教育;是 å¦" v-model="queryParam.isTrainingEducation"></a-input>
            <a-form-item label="原因分析">
              <a-input placeholder="请输入原因分析" v-model="queryParam.causeAnalysis"></a-input>
            </a-form-item>
          </a-col>
          <a-col :xl="6" :lg="7" :md="8" :sm="24">
@@ -50,25 +49,10 @@
    <!-- æ“ä½œæŒ‰é’®åŒºåŸŸ -->
    <div class="table-operator">
      <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
      <a-button type="primary" icon="download" @click="handleExportXls('“三不放过的原则”分析表')">导出</a-button>
      <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
        <a-button type="primary" icon="import">导入</a-button>
      </a-upload>
      <a-dropdown v-if="selectedRowKeys.length > 0">
        <a-menu slot="overlay">
          <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
        </a-menu>
        <a-button style="margin-left: 8px"> æ‰¹é‡æ“ä½œ <a-icon type="down" /></a-button>
      </a-dropdown>
    </div>
    <!-- table区域-begin -->
    <div>
      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
        <i class="anticon anticon-info-circle ant-alert-icon"></i> å·²é€‰æ‹© <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
        <a style="margin-left: 24px" @click="onClearSelected">清空</a>
      </div>
      <a-table
        ref="table"
@@ -79,24 +63,48 @@
        :dataSource="dataSource"
        :pagination="ipagination"
        :loading="loading"
        class="j-table-force-nowrap"
        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
        :scroll="{x:'max-content'}"
        @change="handleTableChange">
        <span slot="action" slot-scope="text, record">
          <a @click="handleEdit(record)">编辑</a>
          <template>
             <a v-if="record.submitStatus=='PENDING_SUBMIT'||record.submitStatus=='REJECTED'" @click="handleFillIn(record)">填报</a>
             <a-divider  v-if="record.submitStatus=='PENDING_SUBMIT'||record.submitStatus=='REJECTED'" type="vertical"/>
             <a-popconfirm  v-if="record.submitStatus=='PENDING_SUBMIT'||record.submitStatus=='REJECTED'" title="确定提交吗?" @confirm="() => handleSubmit(record.id)">
               <a>提交</a>
             </a-popconfirm>
          </template>
             <a-divider v-if="record.submitStatus=='PENDING_SUBMIT'||record.submitStatus=='REJECTED'" type="vertical"/>
           <a @click="handleDetail(record)">详情</a>
        </span>
          <a-divider type="vertical" />
          <a-dropdown>
            <a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
            <a-menu slot="overlay">
              <a-menu-item>
                <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
                  <a>删除</a>
                </a-popconfirm>
              </a-menu-item>
            </a-menu>
          </a-dropdown>
        <!--字符串超长截取省略号显示-->
        <span slot="accidentPhenomenon" slot-scope="text">
          <j-ellipsis :value="text" :length="8"/>
        </span>
        <!--字符串超长截取省略号显示-->
        <span slot="measure" slot-scope="text">
          <j-ellipsis :value="text" :length="8"/>
        </span>
        <!--字符串超长截取省略号显示-->
        <span slot="causingResults" slot-scope="text">
          <j-ellipsis :value="text" :length="8"/>
        </span>
        <!--字符串超长截取省略号显示-->
        <span slot="causeAnalysis" slot-scope="text">
          <j-ellipsis :value="text" :length="8"/>
        </span>
        <!--字符串超长截取省略号显示-->
        <span slot="preventionMeasures" slot-scope="text">
          <j-ellipsis :value="text" :length="8"/>
        </span>
        <!--字符串超长截取省略号显示-->
        <span slot="trainingFormat" slot-scope="text">
          <j-ellipsis :value="text" :length="8"/>
        </span>
        <!--字符串超长截取省略号显示-->
        <span slot="trainingContent" slot-scope="text">
          <j-ellipsis :value="text" :length="8"/>
        </span>
      </a-table>
@@ -105,6 +113,11 @@
    <!-- è¡¨å•区域 -->
    <eamReportThreeNoSpare-modal ref="modalForm" @ok="modalFormOk"></eamReportThreeNoSpare-modal>
    <!--审批窗口-->
    <report-threeNo-spare-approval-modal ref="reportThreeNoSpareApprovalModal"
                                     :selectShenpiData="selectedRowData"/>
  </a-card>
</template>
@@ -112,96 +125,212 @@
  import '@/assets/less/TableExpand.less'
  import EamReportThreeNoSpareModal from './modules/EamReportThreeNoSpareModal'
  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
  import {getAction} from "@api/manage";
  import LxSearchEquipmentSelect from "@views/eam/equipment/modules/LxSearchEquipmentSelect.vue";
  import ReportThreeNoSpareApprovalModal
    from '../../flowable/workflow/repairOrder/ReportThreeNoSpareApprovalModal'
  export default {
    name: "EamReportThreeNoSpareList",
    mixins:[JeecgListMixin],
    components: {
      ReportThreeNoSpareApprovalModal,
      LxSearchEquipmentSelect,
      EamReportThreeNoSpareModal
    },
    props: {
      isDisplayOperation: {
        type: Boolean,
        default: true
      },
      propsQueryParam: {
        type: Object
      }
    },
    data () {
      return {
        description: '“三不放过的原则”分析表管理页面',
        disableMixinCreated: true,
        // è¡¨å¤´
        columns: [
          {
            title: '#',
            dataIndex: '',
            key:'rowIndex',
            width:60,
            align:"center",
            customRender:function (t,r,index) {
              return parseInt(index)+1;
            }
           },
           {
            title: '删除标记',
            align:"center",
            dataIndex: 'delFlag'
           },
           {
            key: 'rowIndex',
            width: 60,
            align: 'center',
            customRender: function(t, r, index) {
              return parseInt(index) + 1
            },
            fixed: 'left'
          },
          {
            title: '统一编码',
            align: 'center',
            dataIndex: 'equipmentCode',
            fixed: 'left',
            scopedSlots: { customRender: 'equipmentCode' }
          },
          {
            title: '设备名称',
            align: 'center',
            dataIndex: 'equipmentName',
            fixed: 'left'
          },
          {
            title: '设备型号',
            align: 'center',
            dataIndex: 'equipmentModel',
            fixed: 'left'
          },
          {
            title: '状态',
            align: 'center',
            dataIndex: 'submitStatus_dictText',
          },
          {
            title: '事故现象',
            align: 'center',
            dataIndex: 'accidentPhenomenon',
            scopedSlots: {customRender: 'accidentPhenomenon'},
          },
          {
            title: '采取措施',
            align: 'center',
            dataIndex: 'measure',
            scopedSlots: {customRender: 'measure'},
          },
          {
            title: '造成结果',
            align: 'center',
            dataIndex: 'causingResults',
            scopedSlots: {customRender: 'causingResults'},
          },
              {
            title: '原因分析',
            align:"center",
            dataIndex: 'causeAnalysis'
           },
           {
            title: '培训教育;是 å¦',
            dataIndex: 'causeAnalysis',
            scopedSlots: {customRender: 'causeAnalysis'},
          },
          {
            title: '预防措施',
            align: 'center',
            dataIndex: 'preventionMeasures',
            scopedSlots: {customRender: 'preventionMeasures'},
          },
          {
            title: '培训教育',
            align:"center",
            dataIndex: 'isTrainingEducation'
           },
           {
            dataIndex: 'isTrainingEducation_dictText',
          },
          {
            title: '培训形式',
            align:"center",
            dataIndex: 'trainingFormat'
           },
           {
            dataIndex: 'trainingFormat',
            scopedSlots: {customRender: 'trainingFormat'},
          },
          {
            title: '培训内容',
            align:"center",
            dataIndex: 'trainingContent'
           },
           {
            dataIndex: 'trainingContent',
            scopedSlots: {customRender: 'trainingContent'},
          },
              {
            title: '培训人',
            align:"center",
            dataIndex: 'trainingUser'
           },
           {
            dataIndex: 'trainingUser_dictText'
          },
              {
            title: '培训时间',
            align:"center",
            dataIndex: 'trainingUserTime'
           },
           {
            title: '报修ID',
          },
              {
            title: '单位领导',
            align:"center",
            dataIndex: 'reportId'
           },
           {
            title: '设备ID',
            dataIndex: 'unitLeader_dictText'
          },
              {
            title: '领导意见',
            align:"center",
            dataIndex: 'equipmentId'
           },
          {
            title: '操作',
            dataIndex: 'action',
            dataIndex: 'leaderOpinion'
          },
              {
            title: '领导确认时间',
            align:"center",
            scopedSlots: { customRender: 'action' },
          }
            dataIndex: 'leaderConfirmTime'
          },
        ],
        url: {
        selectedRowData: {},
        url: {
          list: "/eam/eamReportThreeNoSpare/list",
          delete: "/eam/eamReportThreeNoSpare/delete",
          deleteBatch: "/eam/eamReportThreeNoSpare/deleteBatch",
          exportXlsUrl: "eam/eamReportThreeNoSpare/exportXls",
          importExcelUrl: "eam/eamReportThreeNoSpare/importExcel",
       },
          submit:"eam/eamReportThreeNoSpare/submit"
        },
    }
  },
  computed: {
    importExcelUrl: function(){
      return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
    }
  },
    created() {
      if (!this.isDisplayOperation) this.queryParam = Object.assign({}, this.propsQueryParam)
      else {
        const operationColumn = {
          title: '操作',
          dataIndex: 'action',
          align: 'center',
          scopedSlots: { customRender: 'action' },
          width: 200,
          fixed: 'right'
        }
        this.columns = [...this.columns, operationColumn]
      }
      this.loadData(1)
    },
    methods: {
      /**
       * ç‚¹å‡»å¡«æŠ¥æ—¶è§¦å‘
       * @param record
       */
      handleFillIn(record) {
        this.$refs.modalForm.title = '填报'
        this.$refs.modalForm.handleFillIn(record)
      },
      /**
       * ç‚¹å‡»æäº¤æ—¶è§¦å‘
       * @param id
       */
      handleSubmit(id) {
        this.loading = true
        getAction(this.url.submit, { 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
            }
          })
      },
      /**
       * ç‚¹å‡»è¯¦æƒ…触发
       * @param record è¡¨æ ¼è¡Œä¿¡æ¯
       */
      handleDetail(record) {
        this.selectRepairOrderData = Object.assign({}, record)
        this.$refs.reportThreeNoSpareApprovalModal.visible = true
        this.$refs.reportThreeNoSpareApprovalModal.title = '详情'
        this.$refs.reportThreeNoSpareApprovalModal.disableSubmit = true
        this.$refs.reportThreeNoSpareApprovalModal.handleDetail(record)
      }
    }
  }
</script>
src/views/eam/repair/modules/EamReportProductHazardsModal.vue
@@ -62,11 +62,11 @@
        },
        labelColLong: {
          xs: { span: 24 },
          sm: { span: 3 }
          sm: { span: 6 }
        },
        wrapperColLong: {
          xs: { span: 24 },
          sm: { span: 20 }
          sm: { span: 17 }
        },
        confirmLoading: false,
src/views/eam/repair/modules/EamReportThreeNoSpareModal.vue
@@ -8,38 +8,25 @@
    @ok="handleOk"
    @cancel="handleCancel"
    cancelText="关闭">
    <a-spin :spinning="confirmLoading">
      <a-form-model ref="form" :model="model" :rules="validatorRules">
        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="delFlag" label="删除标记">
          <a-input-number v-model="model.delFlag"/>
        </a-form-model-item>
        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="causeAnalysis" label="原因分析">
          <a-input placeholder="请输入原因分析" v-model="model.causeAnalysis" />
          <a-textarea :rows="3" placeholder="请输入原因分析" v-model="model.causeAnalysis"/>
        </a-form-model-item>
        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="isTrainingEducation" label="培训教育;是 å¦">
          <a-input placeholder="请输入培训教育;是 å¦" v-model="model.isTrainingEducation" />
        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="causeAnalysis" label="预防措施">
          <a-textarea :rows="3" placeholder="请输入预防措施" v-model="model.preventionMeasures"/>
        </a-form-model-item>
        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="isTrainingEducation" label="培训教育">
          <j-dict-select-tag dict-code="yn"  placeholder="请选择培训教育" v-model="model.isTrainingEducation"/>
        </a-form-model-item>
        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="trainingFormat" label="培训形式">
          <a-input placeholder="请输入培训形式" v-model="model.trainingFormat" />
          <a-textarea :rows="3" placeholder="请输入培训形式" v-model="model.trainingFormat"/>
        </a-form-model-item>
        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="trainingContent" label="培训内容">
          <a-input placeholder="请输入培训内容" v-model="model.trainingContent" />
          <a-textarea :rows="3" placeholder="请输入培训内容" v-model="model.trainingContent"/>
        </a-form-model-item>
        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="trainingUser" label="培训人">
          <a-input placeholder="请输入培训人" v-model="model.trainingUser" />
        </a-form-model-item>
        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="trainingUserTime" label="培训时间">
          <a-input placeholder="请输入培训时间" v-model="model.trainingUserTime" />
        </a-form-model-item>
        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="reportId" label="报修ID">
          <a-input placeholder="请输入报修ID" v-model="model.reportId" />
        </a-form-model-item>
        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="equipmentId" label="设备ID">
          <a-input placeholder="请输入设备ID" v-model="model.equipmentId" />
        </a-form-model-item>
      </a-form-model>
    </a-spin>
  </j-modal>
@@ -77,6 +64,11 @@
    created () {
    },
    methods: {
      handleFillIn(record) {
        this.visible = true
        this.model = Object.assign({}, record)
        this.getRepairDetailByApi(record.id)
      },
      add () {
        //初始化默认值
        this.edit({});
src/views/flowable/workflow/FlowCompleted.vue
@@ -84,6 +84,13 @@
    <!--设备事故登记-->
    <report-accidents-register-approval-modal ref="reportAccidentsRegisterApprovalModal"
                                              :selectShenpiData="selectedRowData"/>
    <!--产品安全确认-->
    <eam-report-product-hazards-modal ref="reportProductHazardsApprovalModal"
                                      :selectShenpiData="selectedRowData"/>
    <!--三不原则-->
    <eam-report-three-no-spare-modal ref="reportThreeNoSpareApprovalModal"
                                     :selectShenpiData="selectedRowData"/>
  </a-card>
</template>
@@ -105,11 +112,14 @@
  import ThirdMaintenanceOrderChangeApprovalModal from './thirdMaintenance/ThirdMaintenanceOrderChangeApprovalModal'
  import ThirdMaintenanceFurnaceApprovalModal from './thirdMaintenance/ThirdMaintenanceFurnaceApprovalModal'
  import ReportAccidentsRegisterApprovalModal from './repairOrder/ReportAccidentsRegisterApprovalModal'
  import EamReportProductHazardsModal from "@views/flowable/workflow/repairOrder/ReportProductHazardsApprovalModal.vue";
  import EamReportThreeNoSpareModal from "@views/flowable/workflow/repairOrder/ReportThreeNoSpareApprovalModal.vue";
  export default {
    name: 'FlowCompleted',
    mixins: [JeecgListMixin],
    components: {
      EamReportThreeNoSpareModal, EamReportProductHazardsModal,
      ReportAccidentsRegisterApprovalModal,
      ThirdMaintenanceFurnaceApprovalModal,
      ThirdMaintenanceOrderChangeApprovalModal,
@@ -228,6 +238,12 @@
            break
          case 'eam_report_accidents_register':
            this.handleAccidentsRegister(record)
            break
          case 'eam_report_product_hazards':
            this.handleProductHazard(record)
            break
          case 'eam_report_three_no_spare_process':
            this.handleThreeNoSpare(record)
            break
          default:
            alert('没找到该流程')
@@ -390,6 +406,30 @@
        this.$refs.reportAccidentsRegisterApprovalModal.handleApprove(record)
      },
      /**
       * ç‚¹å‡»äº§å“å®‰å…¨é𐿂£ç¡®è®¤æµç¨‹å®¡æ‰¹æ—¶è§¦å‘
       * @param record
       */
      handleProductHazard(record){
        this.selectedRowData = Object.assign({}, record)
        this.$refs.reportProductHazardsApprovalModal.visible = true
        this.$refs.reportProductHazardsApprovalModal.title = record.name
        this.$refs.reportProductHazardsApprovalModal.disableSubmit = true
        this.$refs.reportProductHazardsApprovalModal.handleApprove(record)
      },
      /**
       * ä¸‰ä¸åŽŸåˆ™åˆ†æžæµç¨‹å®¡æ‰¹è§¦å‘
       * @param record
       */
      handleThreeNoSpare(record){
        this.selectedRowData = Object.assign({}, record)
        this.$refs.reportThreeNoSpareApprovalModal.visible = true
        this.$refs.reportThreeNoSpareApprovalModal.title = record.name
        this.$refs.reportThreeNoSpareApprovalModal.disableSubmit = true
        this.$refs.reportThreeNoSpareApprovalModal.handleApprove(record)
      },
      splitProcessType(title) {
        let parts = title.split(':') // æ³¨æ„å†’号是全角字符,使用对应的字进行分割
        let result = parts[0]
src/views/flowable/workflow/FlowTodo.vue
@@ -140,6 +140,10 @@
    <eam-report-product-hazards-modal ref="reportProductHazardsApprovalModal"
                                                :selectShenpiData="selectedRowData"
                                                @modalFormOk="modalFormOk"/>
    <!--三不原则-->
    <eam-report-three-no-spare-modal ref="reportThreeNoSpareApprovalModal"
                                                :selectShenpiData="selectedRowData"
                                                @modalFormOk="modalFormOk"/>
  </a-card>
</template>
@@ -163,11 +167,13 @@
  import ThirdMaintenanceFurnaceApprovalModal from './thirdMaintenance/ThirdMaintenanceFurnaceApprovalModal'
  import ReportAccidentsRegisterApprovalModal from './repairOrder/ReportAccidentsRegisterApprovalModal'
  import EamReportProductHazardsModal from "./repairOrder/ReportProductHazardsApprovalModal.vue";
  import EamReportThreeNoSpareModal from "./repairOrder/ReportThreeNoSpareApprovalModal.vue";
  export default {
    name: 'FlowTodo',
    mixins: [JeecgListMixin],
    components: {
      EamReportThreeNoSpareModal,
      EamReportProductHazardsModal,
      ReportAccidentsRegisterApprovalModal,
      ThirdMaintenanceFurnaceApprovalModal,
@@ -305,6 +311,9 @@
            break
          case 'eam_report_product_hazards':
            this.handleProductHazard(record)
            break
          case 'eam_report_three_no_spare_process':
            this.handleThreeNoSpare(record)
            break
          default:
            alert('没找到该流程')
@@ -465,6 +474,17 @@
        this.$refs.reportProductHazardsApprovalModal.handleApprove(record)
      },
      /**
       * ä¸‰ä¸åŽŸåˆ™åˆ†æžæµç¨‹å®¡æ‰¹è§¦å‘
       * @param record
       */
      handleThreeNoSpare(record){
        this.selectedRowData = Object.assign({}, record)
        this.$refs.reportThreeNoSpareApprovalModal.visible = true
        this.$refs.reportThreeNoSpareApprovalModal.title = record.name
        this.$refs.reportThreeNoSpareApprovalModal.handleApprove(record)
      },
      batchHandle() {
        const categorySet = new Set(this.selectionRows.map(item => item.category))
        const nameSet = new Set(this.selectionRows.map(item => item.name))
src/views/flowable/workflow/repairOrder/ReportThreeNoSpareApprovalModal.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,320 @@
<template>
  <j-modal :title="title" :visible="visible" :confirmLoading="confirmLoading" :width="1300"
           :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" :labelCol="labelCol" :wrapperCol="wrapperCol">
        <a-row id="outer-row" :gutter="24">
          <!--左侧基础信息列-->
          <a-col :span="selectShenpiData.procInstId?8:12" class="scroll-col">
            <a-tabs>
              <a-tab-pane tab="基础信息">
                <a-row>
                  <a-col :span="12">
                    <a-form-model-item label="统一编码">
                      <lx-search-equipment-select v-model="model.equipmentId" disabled/>
                    </a-form-model-item>
                  </a-col>
                  <a-col :span="12">
                    <a-form-model-item label="培训教育">
                      <j-dict-select-tag dict-code="yn" v-model="model.isTrainingEducation" disabled/>
                    </a-form-model-item>
                  </a-col>
                </a-row>
                <a-row>
                  <a-col :span="12">
                    <a-form-model-item label="培训人">
                      <a-input v-model="model.trainingUser_dictText" disabled/>
                    </a-form-model-item>
                  </a-col>
                  <a-col :span="12">
                    <a-form-model-item label="培训时间">
                      <a-date-picker v-model="model.trainingUserTime" value-format="YYYY-MM-DD"
                                     style="width: 100%" disabled/>
                    </a-form-model-item>
                  </a-col>
                </a-row>
                <a-row>
                  <a-col :span="24">
                    <a-form-model-item :labelCol="labelColLong" :wrapperCol="wrapperColLong" label="原因分析">
                      <a-textarea v-model="model.causeAnalysis" readOnly/>
                    </a-form-model-item>
                  </a-col>
                </a-row>
                <a-row>
                  <a-col :span="24">
、                  <a-form-model-item :labelCol="labelColLong" :wrapperCol="wrapperColLong" label="预防措施">
                    <a-textarea v-model="model.preventionMeasures" readOnly/>
                  </a-form-model-item>
                  </a-col>
                </a-row>
                <a-row>
                  <a-col :span="24">
                    <a-form-model-item :labelCol="labelColLong" :wrapperCol="wrapperColLong" label="培训形式">
                      <a-textarea v-model="model.trainingFormat" readOnly/>
                    </a-form-model-item>
                  </a-col>
                </a-row>
                <a-row>
                  <a-col :span="24">
                    <a-form-model-item :labelCol="labelColLong" :wrapperCol="wrapperColLong" label="培训内容">
                      <a-textarea v-model="model.trainingContent" readOnly/>
                    </a-form-model-item>
                  </a-col>
                </a-row>
              </a-tab-pane>
            </a-tabs>
          </a-col>
          <!-- ä¸­é—´æ˜Žç»†é¡¹åˆ—-->
          <a-col v-if="selectShenpiData.procInstId" :span="10" class="scroll-col">
            <a-tabs default-active-key="1">
              <a-tab-pane key='1' tab='流程图'>
                <img :src="imageSrc" v-if="imageSrc" style="width: 100%"/>
              </a-tab-pane>
            </a-tabs>
          </a-col>
          <!--右侧审批列-->
          <a-col :span="selectShenpiData.procInstId?6:12" class="scroll-col">
            <a-tabs>
              <a-tab-pane tab="领导审批">
                <a-row>
                  <a-col :span="24">
                    <a-form-model-item prop="technologistResult" label="确认类型"
                                       :labelCol="rightColLabelCol" :wrapperCol="rightColWrapperCol">
                      <j-dict-select-tag type='radio' v-model='model.leaderConfirmResult'
                                         dictCode='approve_reject'
                                         :disabled="disableSubmit||(model.confirmStatus&&model.confirmStatus!=='PENDING_SUPERIOR_TECHNICAL_CONFIRMATION')"/>
                    </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.leaderOpinion"
                                  :disabled="disableSubmit||(model.confirmStatus&&model.confirmStatus!=='PENDING_SUPERIOR_TECHNICAL_CONFIRMATION')"/>
                    </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, httpAction } from '@/api/manage'
  import TechnicalStatusEquipmentSelect from '../../../eam/equipment/modules/TechnicalStatusEquipmentSelect'
  import LxSearchEquipmentSelect from '../../../eam/equipment/modules/LxSearchEquipmentSelect'
  export default {
    name: 'reportProductHazardsApprovalModal',
    components: {
      LxSearchEquipmentSelect,
      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: 8 }
        },
        rightColWrapperCol: {
          xs: { span: 24 },
          sm: { span: 15 }
        },
        confirmLoading: false,
        spinning: false,
        imageSrc: null,
        validatorRules: {
          technicalDirectorLeaderResult: [{ required: true, message: '请选择确认类型' }],
          technicalDirectorPartResult: [{ required: true, message: '请选择确认类型' }]
        },
        url: {
          queryById: '/eam/eamReportThreeNoSpare/queryById',
          approval: '/eam/eamReportThreeNoSpare/perform',
          diagramView: '/assign/flow/diagramView'
        },
        disableSubmit: false
      }
    },
    computed: {
    },
    methods: {
      /**
       * ä¸»é¡µé¢ç‚¹å‡»æ‰§è¡Œå®¡æ‰¹æ—¶è§¦å‘
       * @param record ä¸»é¡µé¢åˆ—表行记录
       */
      async handleApprove(record) {
        this.model = {}
        this.getBasicInformationByApi(record)
        this.getFlowChartImageByApi(record)
      },
      /**
       * ä¸»é¡µé¢ç‚¹å‡»è¯¦æƒ…时触发
       * @param record ä¸»é¡µé¢åˆ—表行记录
       */
      handleDetail(record) {
        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, { repairConfirmResult: '1' })
              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
              })
            }
          })
          .finally(() => {
            that.spinning = false
          })
      },
      /**
       * èŽ·å–æµç¨‹å›¾
       * @param record ä¸»é¡µé¢åˆ—表行记录
       */
      getFlowChartImageByApi(record) {
        const { processDefinitionId, processInstanceId, processDefinitionKey } = record
        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
            httpAction(that.url.approval, that.model, 'post')
              .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
          }
        })
      },
      /**
       * åŽŸå› åˆ†æžæ ¸å¯¹å€¼å‘ç”Ÿæ”¹å˜æ—¶è§¦å‘
       * @param value
       */
      handleCheckAgreeChange(value) {
        if (value === '1') delete this.model.disagreeReason
      },
      handleCancel() {
        this.close()
      },
      close() {
        this.$emit('close')
        this.visible = false
        if (this.$refs.form) 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>