1、设备管理页面设备种类字段改成重要程度字段;新增设备异常状态字段,若表格记录的设备状态不为正常时,则标红此表格记录
2、设备利用率、设备开动率、班次利用率以及设备综合效率分析新增按照重要程度字段查询表格数据;左侧树数据新增参数key,用来过滤异常状态设备
3、设备利用率页面新增设备型号字段
已修改13个文件
2097 ■■■■■ 文件已修改
src/store/modules/Production.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mdc/base/EfficiencyPOReport.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mdc/base/EfficiencyReport.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mdc/base/EfficiencyShiftReport.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mdc/base/EquipmentList.vue 148 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mdc/base/OEEAnalysis.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mdc/base/modules/EquipmentList/UserModal.vue 481 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mdc/base/modules/OEEAnalysis/OEEAnalysisList.vue 106 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mdc/base/modules/efficiencyPOReport/EfficiencyPOList.vue 1092 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mdc/base/modules/efficiencyReport/EfficiencyList.vue 58 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mdc/base/modules/efficiencyShiftReport/EfficiencyShiftList.vue 41 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mdc/common/BaseTree.vue 126 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
vue.config.js 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/store/modules/Production.js
@@ -22,9 +22,9 @@
  actions: {
    // 产线树
      QueryProduction({ commit }) {
      QueryProduction({ commit },key) {
      return new Promise((resolve, reject) => {
        getAction("/mdc/mdcEquipment/queryTreeListByProduction").then(response => {
        getAction("/mdc/mdcEquipment/queryTreeListByProduction",{key}).then(response => {
          if(response.success){
            const result = response.result
            Vue.ls.set(SYS_PRODUCTION, result)
src/views/mdc/base/EfficiencyPOReport.vue
@@ -5,7 +5,7 @@
        <a-col :md="5">
          <a-tabs :activeKey="activeKey"  @change="tabChange">
            <a-tab-pane key="1" tab="车间层级" force-render>
              <base-tree @getCurrSelected="changeSelectionNode"></base-tree>
              <base-tree @getCurrSelected="changeSelectionNode" :filterAbnormalDeviceKey="'1'"></base-tree>
            </a-tab-pane>
            <a-tab-pane v-if="isDepartType == 0" key="2" tab="部门层级">,
              <depart-tree  @getCurrSelectedDD="changeSelectionNodedd"></depart-tree>
src/views/mdc/base/EfficiencyReport.vue
@@ -5,7 +5,7 @@
        <a-col :md="5">
          <a-tabs :activeKey="activeKey"  @change="tabChange">
            <a-tab-pane key="1" tab="车间层级" force-render>
              <base-tree @getCurrSelected="changeSelectionNode"></base-tree>
              <base-tree @getCurrSelected="changeSelectionNode" :filterAbnormalDeviceKey="'1'"></base-tree>
            </a-tab-pane>
            <a-tab-pane v-if="isDepartType == 0" key="2" tab="部门层级">,
              <depart-tree  @getCurrSelectedDD="changeSelectionNodedd"></depart-tree>
src/views/mdc/base/EfficiencyShiftReport.vue
@@ -5,7 +5,7 @@
       <a-col :md="5">
         <a-tabs :activeKey="activeKey"  @change="tabChange">
           <a-tab-pane key="1" tab="车间层级" force-render>
             <base-tree @getCurrSelected="changeSelectionNode"></base-tree>
             <base-tree @getCurrSelected="changeSelectionNode" :filterAbnormalDeviceKey="'1'"></base-tree>
           </a-tab-pane>
           <a-tab-pane v-if="isDepartType == 0" key="2" tab="部门层级">
             <depart-tree  @getCurrSelectedDD="changeSelectionNodedd"></depart-tree>
src/views/mdc/base/EquipmentList.vue
@@ -6,19 +6,19 @@
      <a-form layout="inline" @keyup.enter.native="searchQuery">
        <a-row :gutter="24">
          <a-col :md="4" :sm="4">
          <a-col :md="6" :sm="6">
            <a-form-item label="设备编号">
              <a-input placeholder="请输入设备编号" v-model="queryParam.equipmentId"></a-input>
            </a-form-item>
          </a-col>
          <a-col :md="4" :sm="4">
          <a-col :md="6" :sm="6">
            <a-form-item label="设备名称">
              <a-input placeholder="请输入设备名称" v-model="queryParam.equipmentName"></a-input>
            </a-form-item>
          </a-col>
          <a-col :md="4" :sm="4">
          <a-col :md="6" :sm="6">
            <a-form-item label="车间名称">
              <!--<a-input placeholder="请输入车间名称" v-model="queryParam.productionName"></a-input>-->
              <a-tree-select v-model="queryParam.productionName" :treeData="workshopTreeData" placeholder="请选择车间"
@@ -26,29 +26,45 @@
            </a-form-item>
          </a-col>
          <a-col :md="4" :sm="4">
            <a-form-item label="设备级别">
              <j-dict-select-tag placeholder="请选择设备级别" dictCode="device_level" v-model="queryParam.deviceLevel"
                                 allow-clear/>
            </a-form-item>
          </a-col>
          <template v-if="toggleSearchStatus">
            <a-col :md="6" :sm="6">
              <a-form-item label="设备级别">
                <j-dict-select-tag placeholder="请选择设备级别" dictCode="device_level" v-model="queryParam.deviceLevel"
                                   allow-clear/>
              </a-form-item>
            </a-col>
            <a-col :md="6" :sm="6">
              <a-form-item label="设备种类">
                <j-dict-select-tag placeholder="请选择设备种类" dictCode="device_category" v-model="queryParam.deviceCategory"
                                   allow-clear/>
              </a-form-item>
            </a-col>
          <a-col :md="4" :sm="4">
            <a-form-item label="设备种类">
              <j-dict-select-tag placeholder="请选择设备种类" dictCode="device_category" v-model="queryParam.deviceCategory"
                                 allow-clear/>
            </a-form-item>
          </a-col>
            <a-col :md="6" :sm="6">
              <a-form-item label="异常状态">
                <j-dict-select-tag placeholder="请选择设备异常状态" dictCode="device_abnormal_status"
                                   v-model="queryParam.deviceAbnormalStatus"
                                   allow-clear/>
              </a-form-item>
            </a-col>
          </template>
          <a-col :md="4" :sm="4">
          <a-col :md="6" :sm="6">
            <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
            <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
            <a
              @click="toggleSearchStatus=!toggleSearchStatus"
              style="margin-left: 8px"
            >
              {{ toggleSearchStatus ? '收起' : '展开' }}
              <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
            </a>
          </a-col>
        </a-row>
      </a-form>
    </div>
    <!-- 操作按钮区域 -->
    <!-- 操作按钮区域· -->
    <div class="table-operator" style="border-top: 5px">
      <a-button @click="handleAdd" type="primary" icon="plus">添加设备</a-button>
      <a-button type="primary" icon="download" @click="handleExportXls('设备信息')">导出</a-button>
@@ -86,6 +102,33 @@
        :loading="loading"
        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
        @change="handleTableChange">
        <!--<template slot="equipmentId" slot-scope="text,record">-->
          <!--<div :style="{color:record.deviceAbnormalStatus===1?null:'#f00'}">{{text}}</div>-->
        <!--</template>-->
        <!--<template slot="equipmentName" slot-scope="text,record">-->
          <!--<div :style="{color:record.deviceAbnormalStatus===1?null:'#f00'}">{{text}}</div>-->
        <!--</template>-->
        <!--<template slot="productionName" slot-scope="text,record">-->
          <!--<div :style="{color:record.deviceAbnormalStatus===1?null:'#f00'}">{{text}}</div>-->
        <!--</template>-->
        <!--<template slot="equipmentType" slot-scope="text,record">-->
          <!--<div :style="{color:record.deviceAbnormalStatus===1?null:'#f00'}">{{text}}</div>-->
        <!--</template>-->
        <!--<template slot="driveType" slot-scope="text,record">-->
          <!--<div :style="{color:record.deviceAbnormalStatus===1?null:'#f00'}">{{text}}</div>-->
        <!--</template>-->
        <!--<template slot="equipmentIp" slot-scope="text,record">-->
          <!--<div :style="{color:record.deviceAbnormalStatus===1?null:'#f00'}">{{text}}</div>-->
        <!--</template>-->
        <!--<template slot="devicePower" slot-scope="text,record">-->
          <!--<div :style="{color:record.deviceAbnormalStatus===1?null:'#f00'}">{{text}}</div>-->
        <!--</template>-->
        <!--<template slot="systemVersion" slot-scope="text,record">-->
          <!--<div :style="{color:record.deviceAbnormalStatus===1?null:'#f00'}">{{text}}</div>-->
        <!--</template>-->
        <template slot="deviceAbnormalStatus" slot-scope="text,record">
          <div :style="{color:text&&text!==1?'#f00':null}">{{record.deviceAbnormalStatus_dictText}}</div>
        </template>
        <span slot="action" slot-scope="text, record">
          <a @click="handleEdit(record)">编辑</a>
@@ -108,8 +151,6 @@
            </a-menu>
          </a-dropdown>
        </span>
      </a-table>
    </div>
    <!-- table区域-end -->
@@ -124,11 +165,13 @@
  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
  import { queryProductionTreeList } from '@/api/api'
  import { mapActions } from 'vuex'
  import Template1 from '../../jeecg/JVxeDemo/layout-demo/Template1'
  export default {
    name: 'EquipmentList',
    mixins: [JeecgListMixin],
    components: {
      Template1,
      UserModal
    },
    data() {
@@ -164,6 +207,7 @@
            align: 'center',
            dataIndex: 'equipmentId',
            width: 200
            // sorter: true
          },
          {
            title: '设备名称',
@@ -180,14 +224,16 @@
          {
            title: '设备类型',
            align: 'center',
            width: 200,
            width: 180,
            dataIndex: 'equipmentType'
          },
          {
            title: '驱动类型',
            align: 'center',
            width: 200,
            dataIndex: 'driveType'
            // sorter: true
          },
          {
            title: '机床IP',
@@ -198,21 +244,26 @@
          {
            title: '设备功率',
            align: 'center',
            width: 200,
            width: 150,
            dataIndex: 'devicePower'
          },
          {
            title: '部门',
            align: 'center',
            width: 200,
            dataIndex: 'orgCodeTxt'
          },
          // {
          //   title: '部门',
          //   align: "center",
          //   width: 200,
          //   dataIndex: 'orgCodeTxt'
          // },
          {
            title: '系统版本',
            align: 'center',
            width: 200,
            width: 150,
            dataIndex: 'systemVersion'
          },
          {
            title: '异常状态',
            align: 'center',
            width: 100,
            dataIndex: 'deviceAbnormalStatus'
          },
          {
            title: '操作',
@@ -222,7 +273,6 @@
            width: 150,
            fixed: 'right'
          }
        ],
        url: {
          list: '/mdc/mdcEquipment/list',
@@ -261,46 +311,53 @@
                  title: '设备编号',
                  align: 'center',
                  dataIndex: 'equipmentId',
                  width: 200
                  width: 200,
                  scopedSlots: { customRender: 'equipmentId' }
                  // sorter: true
                },
                {
                  title: '设备名称',
                  align: 'center',
                  width: 200,
                  dataIndex: 'equipmentName'
                  dataIndex: 'equipmentName',
                  scopedSlots: { customRender: 'equipmentName' }
                },
                {
                  title: '车间',
                  align: 'center',
                  width: 200,
                  dataIndex: 'productionName'
                  dataIndex: 'productionName',
                  scopedSlots: { customRender: 'productionName' }
                },
                {
                  title: '设备类型',
                  align: 'center',
                  width: 200,
                  dataIndex: 'equipmentType'
                  width: 180,
                  dataIndex: 'equipmentType',
                  scopedSlots: { customRender: 'equipmentType' }
                },
                {
                  title: '驱动类型',
                  align: 'center',
                  width: 200,
                  dataIndex: 'driveType'
                  dataIndex: 'driveType',
                  scopedSlots: { customRender: 'driveType' }
                  // sorter: true
                },
                {
                  title: '机床IP',
                  align: 'center',
                  width: 200,
                  dataIndex: 'equipmentIp'
                  dataIndex: 'equipmentIp',
                  scopedSlots: { customRender: 'equipmentIp' }
                },
                {
                  title: '设备功率',
                  align: 'center',
                  width: 200,
                  dataIndex: 'devicePower'
                  width: 150,
                  dataIndex: 'devicePower',
                  scopedSlots: { customRender: 'devicePower' }
                },
                // {
                //   title: '部门',
@@ -308,12 +365,19 @@
                //   width: 200,
                //   dataIndex: 'orgCodeTxt'
                // },
                {
                  title: '系统版本',
                  align: 'center',
                  width: 200,
                  dataIndex: 'systemVersion'
                  width: 150,
                  dataIndex: 'systemVersion',
                  scopedSlots: { customRender: 'systemVersion' }
                },
                {
                  title: '异常状态',
                  align: 'center',
                  width: 100,
                  dataIndex: 'deviceAbnormalStatus',
                  scopedSlots: { customRender: 'deviceAbnormalStatus' }
                },
                {
                  title: '操作',
src/views/mdc/base/OEEAnalysis.vue
@@ -5,7 +5,7 @@
        <a-col :md="5">
          <a-tabs :activeKey="activeKey" @change="tabChange">
            <a-tab-pane key="1" tab="车间层级" force-render>
              <base-tree @getCurrSelected="changeSelectionNode"></base-tree>
              <base-tree @getCurrSelected="changeSelectionNode" :filterAbnormalDeviceKey="'1'"></base-tree>
            </a-tab-pane>
            <a-tab-pane v-if="isDepartType == 0" key="2" tab="部门层级">
              <depart-tree @getCurrSelectedDD="changeSelectionNodedd"></depart-tree>
src/views/mdc/base/modules/EquipmentList/UserModal.vue
@@ -25,12 +25,12 @@
            <a-form-model-item label="统一编码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="equipmentId">
              <a-input-search :readOnly="true"
                              v-model="model.equipmentId"
                              :disabled="disSeach"   @search="deviceSearch" enter-button placeholder='请选择统一编码' />
                              :disabled="disSeach" @search="deviceSearch" enter-button placeholder='请选择统一编码'/>
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="设备名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="equipmentName">
              <a-input  allow-clear placeholder="请输入设备名称"
              <a-input allow-clear placeholder="请输入设备名称"
                       v-model="model.equipmentName"/>
            </a-form-model-item>
          </a-col>
@@ -38,8 +38,11 @@
        <a-row :gutter="24">
          <a-col :span="12">
            <a-form-model-item  v-if="isDepartType == 0" label="部门分配" :labelCol="labelCol" :wrapperCol="wrapperCol" v-show="!departDisabled">
              <j-select-equipment-depart :disabled="disableSubmit" v-model="model.selectedDeparts" :multi="false" @back="backDepartInfo" :backDepart="true" :treeOpera="true"></j-select-equipment-depart>
            <a-form-model-item v-if="isDepartType == 0" label="部门分配" :labelCol="labelCol" :wrapperCol="wrapperCol"
                               v-show="!departDisabled">
              <j-select-equipment-depart :disabled="disableSubmit" v-model="model.selectedDeparts" :multi="false"
                                         @back="backDepartInfo" :backDepart="true"
                                         :treeOpera="true"></j-select-equipment-depart>
            </a-form-model-item>
            <a-form-model-item v-if="isDepartType == -1" label="设备类型" :labelCol="labelCol" :wrapperCol="wrapperCol">
@@ -53,9 +56,12 @@
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="车间分配" :labelCol="labelCol" :wrapperCol="wrapperCol"  v-show="!productionDisabled" ref="selectedProduction"  prop="selectedProduction">
            <a-form-model-item label="车间分配" :labelCol="labelCol" :wrapperCol="wrapperCol" v-show="!productionDisabled"
                               ref="selectedProduction" prop="selectedProduction">
              <!--<j-select-equipment-production  v-decorator="['selectedProduction',{rules:[{required:true,message:'请选择车间!'}]}]" :multi="false" @back="backProductionInfo" :backProduction="true" :treeProductOpera="true"></j-select-equipment-production>-->
              <j-select-equipment-production :disabled="disableSubmit"  v-model="model.selectedProduction" :multi="false" @back="backProductionInfo" :backProduction="true" :treeProductOpera="true"></j-select-equipment-production>
              <j-select-equipment-production :disabled="disableSubmit" v-model="model.selectedProduction" :multi="false"
                                             @back="backProductionInfo" :backProduction="true"
                                             :treeProductOpera="true"></j-select-equipment-production>
            </a-form-model-item>
          </a-col>
@@ -67,13 +73,13 @@
                       v-model="model.systemVersion"/>
            </a-form-model-item>
            <a-form-model-item v-if="isDepartType == 0" label="设备类型" :labelCol="labelCol" :wrapperCol="wrapperCol">
            <a-select :disabled="disableSubmit" :readOnly="disableSubmit" placeholder="请选择设备类型"
              :triggerChange="true"
                      v-model="model.equipmentType">
              <a-select-option v-for='item in selectList' :key='item.id' :value='item.equipmentTypeName'>
                {{item.equipmentTypeName}}
              </a-select-option>
            </a-select>
              <a-select :disabled="disableSubmit" :readOnly="disableSubmit" placeholder="请选择设备类型"
                        :triggerChange="true"
                        v-model="model.equipmentType">
                <a-select-option v-for='item in selectList' :key='item.id' :value='item.equipmentTypeName'>
                  {{item.equipmentTypeName}}
                </a-select-option>
              </a-select>
            </a-form-model-item>
          </a-col>
@@ -119,23 +125,48 @@
        <a-row :gutter="24">
          <a-col :span="12">
            <a-form-model-item label="系统类型" :labelCol="labelCol" :wrapperCol="wrapperCol">
              <j-dict-select-tag  placeholder="请选择系统类型" :triggerChange="true" dictCode="system_type" v-model="model.systemType" allow-clear/>
              <j-dict-select-tag placeholder="请选择系统类型" :triggerChange="true" dictCode="system_type"
                                 v-model="model.systemType" allow-clear/>
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="设备级别" :labelCol="labelCol" :wrapperCol="wrapperCol">
              <j-dict-select-tag placeholder="请选择设备级别" dictCode="device_level" v-model="model.deviceLevel" allow-clear/>
            <a-form-model-item label="异常状态" :labelCol="labelCol" :wrapperCol="wrapperCol">
              <j-dict-select-tag placeholder="请选择设备异常状态" dictCode="device_abnormal_status"
                                 v-model="model.deviceAbnormalStatus" allow-clear :defaultValue="1"/>
            </a-form-model-item>
          </a-col>
        </a-row>
        <a-row :gutter="24">
          <!--<a-col :span="12">-->
          <!--<a-form-model-item label="设备种类" :labelCol="labelCol" :wrapperCol="wrapperCol">-->
          <!--<j-dict-select-tag placeholder="请选择设备种类" dictCode="device_category" v-model="model.deviceCategory"-->
          <!--allow-clear/>-->
          <!--</a-form-model-item>-->
          <!--</a-col>-->
          <a-col :span="12">
            <a-form-model-item label="设备种类" :labelCol="labelCol" :wrapperCol="wrapperCol">
              <j-dict-select-tag placeholder="请选择设备种类" dictCode="device_category" v-model="model.deviceCategory" allow-clear/>
            <a-form-model-item label="设备级别" :labelCol="labelCol" :wrapperCol="wrapperCol">
              <j-dict-select-tag @change="handleDeviceLevelChange" placeholder="请选择设备级别"
                                 dictCode="device_level"
                                 v-model="model.deviceLevel" allow-clear/>
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
          <a-col :span="12" v-if="model.deviceLevel==='A'">
            <a-form-model-item label="重要程度" :labelCol="labelCol" :wrapperCol="wrapperCol">
              <j-dict-select-tag placeholder="请选择设备重要程度" dictCode="device_importance_level"
                                 v-model="model.deviceImportanceLevel" allow-clear/>
            </a-form-model-item>
          </a-col>
          <a-col :span="12" v-else>
            <a-form-model-item label="排序" :labelCol="labelCol" :wrapperCol="wrapperCol">
              <a-input :disabled="disableSubmit" :readOnly="disableSubmit" placeholder="请输入排序"
                       v-model="model.sortNo" style="width: 100%"/>
            </a-form-model-item>
          </a-col>
        </a-row>
        <a-row :gutter="24">
          <a-col :span="12" v-if="model.deviceLevel==='A'">
            <a-form-model-item label="排序" :labelCol="labelCol" :wrapperCol="wrapperCol">
              <a-input :disabled="disableSubmit" :readOnly="disableSubmit" placeholder="请输入排序"
                       v-model="model.sortNo" style="width: 100%"/>
@@ -179,128 +210,129 @@
  import pick from 'lodash.pick'
  import moment from 'moment'
  import Vue from 'vue'
  import { ACCESS_TOKEN } from "@/store/mutation-types"
  import { ACCESS_TOKEN } from '@/store/mutation-types'
  import { getAction } from '@/api/manage'
  import { addEquipment,editEquipment,queryUserRole,queryall } from '@/api/api'
  import { disabledAuthFilter } from "@/utils/authFilter"
  import { addEquipment, editEquipment, queryUserRole, queryall } from '@/api/api'
  import { disabledAuthFilter } from '@/utils/authFilter'
  import { duplicateCheck } from '@/api/api'
  import JSelectEquipmentProduction from '../../../../../components/jeecgbiz/JSelectEquipmentProduction'
  import JSelectProduction from '../../../../../components/jeecgbiz/JSelectProduction'
  import DeviceListModel from './DeviceListModal'
  import JSelectEquipmentDepart from '../../../../../components/jeecgbiz/JSelectEquipmentDepart'
  import AFormModelItem from 'ant-design-vue/es/form-model/FormItem'
  import {mapActions} from 'vuex'
  import { mapActions } from 'vuex'
  export default {
    name: "UserModal",
    name: 'UserModal',
    components: {
      AFormModelItem,
      JSelectProduction,
      JSelectEquipmentDepart,
      JSelectEquipmentProduction,
      DeviceListModel
    },
    data () {
    data() {
      return {
        disSeach:false,
        disSeach: false,
        departDisabled: false, //是否是我的部门调用该页面
        productionDisabled: false, //是否是我的车间调用该页面
        roleDisabled: false, //是否是角色维护调用该页面
        modalWidth:800,
        drawerWidth:700,
        modaltoggleFlag:true,
        modalWidth: 800,
        drawerWidth: 700,
        modaltoggleFlag: true,
        confirmDirty: false,
        userId:"", //保存用户id
        userId: '', //保存用户id
        // disableSubmit:false,
        disableSubmit: true,
        dateFormat:"YYYY-MM-DD",
        dateFormat: 'YYYY-MM-DD',
        form: this.$form.createForm(this),
        validatorRules:{
        validatorRules: {
          // equipmentId: [{required: false, message: '请选择设备编号!'}, {validator: this.validatequipmentId}],
          equipmentId:
            [
              {
              required: true, message: '请选择设备编号!'
              },
                required: true, message: '请选择设备编号!'
              }
            ],
          equipmentName:
            [
              {
                required: true, message: '请输入设备名称!'
              },
              }
            ],
          equipmentModel:
            [
              {
                required: true, message: '请输入设备型号!'
              },
              }
            ],
          selectedProduction:
            [
              {
                required:true,message: '请选择车间'
                required: true, message: '请选择车间'
              }
            ]
        },
        departIdShow:false,
        title:"操作",
        departIdShow: false,
        title: '操作',
        visible: false,
        model: {
          equipmentId: "",
          equipmentName: "",
          equipmentModel: "",
          equipmentIp: "",
          dataPort: "",
          driveType: "",
          systemType: "",
          deviceLevel: "",
          deviceCategory: ""
          equipmentId: '',
          equipmentName: '',
          equipmentModel: '',
          equipmentIp: '',
          dataPort: '',
          driveType: '',
          systemType: '',
          deviceLevel: '',
          deviceAbnormalStatus: ''
          // deviceCategory: ''
        },
        labelCol: {
          xs: { span: 24 },
          sm: { span: 8 },
          sm: { span: 8 }
        },
        wrapperCol: {
          xs: { span: 24 },
          sm: { span: 15 },
          sm: { span: 15 }
        },
        uploadLoading:false,
        uploadLoading: false,
        confirmLoading: false,
        headers:{},
        headers: {},
        url: {
          fileUpload: window._CONFIG['domianURL']+"/sys/common/upload",
          userWithDepart: "/mdc/mdcEquipment/equipmentDepartList", // 引入为指定用户查看部门信息需要的url
          fileUpload: window._CONFIG['domianURL'] + '/sys/common/upload',
          userWithDepart: '/mdc/mdcEquipment/equipmentDepartList', // 引入为指定用户查看部门信息需要的url
          //引入为指定用户查看车间信息需要的url
          userProductionList: '/mdc/mdcEquipment/equipmentProductionList',
          userId:"/sys/user/generateUserId", // 引入生成添加用户情况下的url
          syncUserByUserName:"/act/process/extActProcess/doSyncUserByUserName",//同步用户到工作流
          userId: '/sys/user/generateUserId', // 引入生成添加用户情况下的url
          syncUserByUserName: '/act/process/extActProcess/doSyncUserByUserName',//同步用户到工作流
          queryTenantList: '/sys/tenant/queryList',
          check:'/sys/duplicate/check',
          queryEquipmentType:'/mdc/mdcEquipmentType/queryEquipmentType'
          check: '/sys/duplicate/check',
          queryEquipmentType: '/mdc/mdcEquipmentType/queryEquipmentType'
        },
        tenantsOptions: [],
        rolesOptions:[],
        nextDepartOptions:[],
        nextProductionOptions:[],
        selectList:[],
        isDepartType:''
        rolesOptions: [],
        nextDepartOptions: [],
        nextProductionOptions: [],
        selectList: [],
        isDepartType: ''
      }
    },
    created () {
      const token = Vue.ls.get(ACCESS_TOKEN);
      this.headers = {"X-Access-Token":token}
    created() {
      const token = Vue.ls.get(ACCESS_TOKEN)
      this.headers = { 'X-Access-Token': token }
      this.queryGroup()
      this.queryTreeData()
      // this.initRoleList()
      // this.initTenantList()
    },
    computed:{
      uploadAction:function () {
        return this.url.fileUpload;
    computed: {
      uploadAction: function() {
        return this.url.fileUpload
      }
    },
    methods: {
      moment,
      ...mapActions(['QueryDepartTree']),
      queryTreeData() {
        this.QueryDepartTree().then(res => {
@@ -309,11 +341,11 @@
          } else {
            // this.$message.warn(res.message)
            this.$notification.warning({
              message:'消息',
              description:res.message
            });
              message: '消息',
              description: res.message
            })
          }
        }).finally(() =>{
        }).finally(() => {
        })
      },
      queryGroup() {
@@ -326,9 +358,9 @@
          } else {
            // this.$message.warning(res.message)
            this.$notification.warning({
              message:'消息',
              description:res.message
            });
              message: '消息',
              description: res.message
            })
          }
        }).finally(() => {
          this.loading = false
@@ -336,16 +368,16 @@
      },
      getDeviceRows(val) {
        console.log(val)
        if(val.equipmentid ){
        if (val.equipmentid) {
          this.removeValidate()
          this.model.equipmentId = val.equipmentid
          this.model.equipmentName = val.equipmentname
            this.model.equipmentModel = val.equipmentmodel
            this.model.equipmentIp = val.equipmentip
            this.model.dataPort =  val.dataport
            this.model.driveType = val.drivetype
            this.model.controlSystem = val.controlsystem
            this.model.saveTableName = val.savetablename
          this.model.equipmentModel = val.equipmentmodel
          this.model.equipmentIp = val.equipmentip
          this.model.dataPort = val.dataport
          this.model.driveType = val.drivetype
          this.model.controlSystem = val.controlsystem
          this.model.saveTableName = val.savetablename
          // setTimeout(() =>{
          //   this.form.setFieldsValue({
          //     equipmentId: val.equipmentid,
@@ -365,66 +397,79 @@
        this.$refs.deviceListModel.title = '选择设备'
        this.$refs.deviceListModel.disableSubmit = false
      },
      add () {
      add() {
        // this.form.resetFields()
        // this.$refs.formModel.resetFields()
        this.refresh();
        this.refresh()
        this.edit({activitiSync:'1',userIdentity:1,equipmentId:"",equipmentName:"",equipmentModel:"",equipmentIp:'',dataPort:"",driveType:"",controlSystem:"",saveTableName:""});
        this.edit({
          activitiSync: '1',
          userIdentity: 1,
          equipmentId: '',
          equipmentName: '',
          equipmentModel: '',
          equipmentIp: '',
          dataPort: '',
          driveType: '',
          controlSystem: '',
          saveTableName: '',
          deviceImportanceLevel: '',
          deviceAbnormalStatus: 1
        })
      },
      edit (record) {
        let that = this;
        that.visible = true;
      edit(record) {
        let that = this
        that.visible = true
        //根据屏幕宽度自适应抽屉宽度
        this.resetScreenSize();
        this.resetScreenSize()
        // that.userId = record.id;
        // console.log(record)
        that.model = Object.assign({}, record);
        that.model = Object.assign({}, record)
        // that.model = Object.assign({},{selectedroles:'',selectedProduction:''}, record);
        // this.model = Object.assign({}, record)
        this.$nextTick(() => {
          this.form.setFieldsValue(pick(that.model, 'selectedDeparts', 'selectedProduction', 'equipmentId', 'equipmentName', 'equipmentModel', 'equipmentType', 'equipmentIp', 'dataPort',
            'driveType', 'sortNo', 'remark','systemVersion','devicePower','controlSystem','saveTableName'))
            'driveType', 'sortNo', 'remark', 'systemVersion', 'devicePower', 'controlSystem', 'saveTableName'))
        })
        if(record.hasOwnProperty("id")){
        if (record.hasOwnProperty('id')) {
          // that.getUserRoles(record.id);
          that.getUserDeparts(record.id);
          that.getUserDeparts(record.id)
        }
        // console.log('that.model=',that.model)
      },
      isDisabledAuth(code){
        return disabledAuthFilter(code);
      isDisabledAuth(code) {
        return disabledAuthFilter(code)
      },
      //窗口最大化切换
      toggleScreen(){
        if(this.modaltoggleFlag){
          this.modalWidth = window.innerWidth;
        }else{
          this.modalWidth = 800;
      toggleScreen() {
        if (this.modaltoggleFlag) {
          this.modalWidth = window.innerWidth
        } else {
          this.modalWidth = 800
        }
        this.modaltoggleFlag = !this.modaltoggleFlag;
        this.modaltoggleFlag = !this.modaltoggleFlag
      },
      // 根据屏幕变化,设置抽屉尺寸
      resetScreenSize(){
        let screenWidth = document.body.clientWidth;
        if(screenWidth < 500){
          this.drawerWidth = screenWidth;
        }else{
          this.drawerWidth = 700;
      resetScreenSize() {
        let screenWidth = document.body.clientWidth
        if (screenWidth < 500) {
          this.drawerWidth = screenWidth
        } else {
          this.drawerWidth = 700
        }
      },
      getUserDeparts(userid){
        let that = this;
      getUserDeparts(userid) {
        let that = this
        //部门的url
        getAction(that.url.userWithDepart,{equipmentId:userid}).then((res)=>{
          if(res.success){
        getAction(that.url.userWithDepart, { equipmentId: userid }).then((res) => {
          if (res.success) {
            // console.log(res.result)
            let departOptions=[];
            let selectDepartKeys=[]
            let departOptions = []
            let selectDepartKeys = []
            for (let i = 0; i < res.result.length; i++) {
              selectDepartKeys.push(res.result[i].key);
              selectDepartKeys.push(res.result[i].key)
              //新增负责部门选择下拉框
              departOptions.push({
                value: res.result[i].key,
@@ -432,22 +477,22 @@
              })
            }
            that.model.selectedDeparts = selectDepartKeys.join(",")
            that.model.selectedDeparts = selectDepartKeys.join(',')
            // that.model.selectedProduction = selectDepartKeys.join(",")
            that.nextDepartOptions=departOptions;
            that.nextDepartOptions = departOptions
            // console.log('that.nextDepartOptions=',that.nextDepartOptions)
          }
        })
        getAction(that.url.userProductionList,{equipmentId:userid}).then((res)=>{
          if(res.success){
        getAction(that.url.userProductionList, { equipmentId: userid }).then((res) => {
          if (res.success) {
            // console.log(res.result)
            let ProductionOptions=[];
            let selectProductKeys=[]
            let ProductionOptions = []
            let selectProductKeys = []
            // console.log(res.result)
            for (let i = 0; i < res.result.length; i++) {
              selectProductKeys.push(res.result[i].key);
              selectProductKeys.push(res.result[i].key)
              //新增负责部门选择下拉框
              ProductionOptions.push({
                value: res.result[i].key,
@@ -455,9 +500,9 @@
              })
            }
            that.model.selectedProduction = selectProductKeys.join(",")
            that.model.selectedProduction = selectProductKeys.join(',')
            that.nextProductionOptions=ProductionOptions;
            that.nextProductionOptions = ProductionOptions
            // console.log('that.nextProductionOptions=',that.nextProductionOptions)
          }
        })
@@ -465,169 +510,109 @@
      },
      backDepartInfo(info) {
        // console.log(info)
        this.model.departIds = this.model.selectedDeparts;
        this.nextDepartOptions = info.map((item,index,arr)=>{
          let c = {label:item.text, value: item.value+""}
          return c;
        this.model.departIds = this.model.selectedDeparts
        this.nextDepartOptions = info.map((item, index, arr) => {
          let c = { label: item.text, value: item.value + '' }
          return c
        })
      },
      backProductionInfo(info) {
        // console.log(info)
        this.model.productionIds = this.model.selectedProduction;
        this.nextProductionOptions = info.map((item,index,arr)=>{
          let c = {label:item.text, value: item.value+""}
          return c;
        this.model.productionIds = this.model.selectedProduction
        this.nextProductionOptions = info.map((item, index, arr) => {
          let c = { label: item.text, value: item.value + '' }
          return c
        })
      },
      refresh () {
        this.userId=""
        this.nextDepartOptions=[];
        this.nextProductionOptions = [];
        this.departIdShow=false;
      },
      close () {
        this.$emit('close');
        this.visible = false;
        this.disableSubmit = false;
        this.nextDepartOptions=[];
      refresh() {
        this.userId = ''
        this.nextDepartOptions = []
        this.nextProductionOptions = []
        this.departIdShow=false;
        this.departIdShow = false
      },
      close() {
        this.$emit('close')
        this.visible = false
        this.disableSubmit = false
        this.nextDepartOptions = []
        this.nextProductionOptions = []
        this.departIdShow = false
        // this.$refs.form.resetFields();
      },
      moment,
      handleSubmit () {
        const that = this;
      handleDeviceLevelChange() {
        this.model.deviceImportanceLevel = ''
      },
      handleSubmit() {
        const that = this
        // 触发表单验证
        this.$refs.form.validate(valid => {
          if (valid) {
            that.confirmLoading = true;
            that.confirmLoading = true
            //如果是上级择传入departIds,否则为空
            // if(this.model.userIdentity!==2){
            //   this.model.departIds="";
            // }
            let obj;
            if(!this.model.id){
              this.model.id = this.userId;
              obj=addEquipment(this.model);
            }else{
              obj=editEquipment(this.model,{
                        id: this.model.id
                      });
            let obj
            if (!this.model.id) {
              this.model.id = this.userId
              obj = addEquipment(this.model)
            } else {
              obj = editEquipment(this.model, {
                id: this.model.id
              })
            }
            obj.then((res)=>{
              if(res.success){
            obj.then((res) => {
              if (res.success) {
                // that.$message.success(res.message);
                that.$notification.success({
                  message:'消息',
                  description:res.message
                });
                that.$emit('ok');
              }else{
                  message: '消息',
                  description: res.message
                })
                that.$emit('ok')
              } else {
                // that.$message.warning(res.message);
                that.$notification.warning({
                  message:'消息',
                  description:res.message
                });
                  message: '消息',
                  description: res.message
                })
              }
            }).finally(() => {
              that.confirmLoading = false;
              that.close();
              that.confirmLoading = false
              that.close()
            })
          }else{
            return false;
          } else {
            return false
          }
        })
      },
      // handleSubmit () {
      //   const that = this;
      //   // 触发表单验证
      //   this.form.validateFields((err,values) => {
      //     if (!err) {
      //       that.confirmLoading = true;
      //       let formData = Object.assign(this.model, values)
      //       let obj;
      //       if(!this.model.id){
      //         // this.model.id = this.userId;
      //         this.form.resetFields()
      //         obj=addEquipment(formData);
      //       }else{
      //         this.form.resetFields()
      //         obj=editEquipment(formData);
      //         // this.$nextTick(() => {
      //         //   this.form.setFieldsValue(pick(this.model, 'tierType', 'parentName', 'tierNumber', 'tierName', 'equipmentId', 'equipmentName', 'equipmentModel', 'equipmentType', 'equipmentIp', 'dataPort',
      //         //     'driveType', 'controlSystem', 'sortNo', 'remark','systemVersion','devicePower'))
      //         // })
      //         // obj=editEquipment(formData,{
      //         //   id: this.model.id
      //         // });
      //       }
      //       obj.then((res)=>{
      //         if(res.success){
      //           that.$message.success(res.message);
      //           that.$emit('ok');
      //         }else{
      //           that.$message.warning(res.message);
      //         }
      //       }).finally(() => {
      //         that.confirmLoading = false;
      //         that.close();
      //       })
      //     }else{
      //       return false;
      //     }
      //   })
      // },
      // validatequipmentId(rule, value, callback){
      //   if(!value){
      //     callback()
      //   }else{
      //     console.log(1111111111111111)
      //       var params = {
      //         tableName: 'mdc_equipment',
      //         fieldName: 'equipment_id',
      //         fieldVal: value,
      //         // dataId: this.userId
      //       };
      //       duplicateCheck(params).then((res) => {
      //         if (res.success) {
      //           callback()
      //         } else {
      //           callback("设备编号已存在!")
      //         }
      //       })
      //
      //   }
      // },
      handleConfirmBlur(e) {
        const value = e.target.value;
        const value = e.target.value
        this.confirmDirty = this.confirmDirty || !!value
      },
      identityChange(e){
        if(e.target.value===1){
          this.departIdShow=false;
        }else{
          this.departIdShow=true;
      identityChange(e) {
        if (e.target.value === 1) {
          this.departIdShow = false
        } else {
          this.departIdShow = true
        }
      },
      /**
       * 编辑或查看详情数据时清除抽屉表单验证
       */
      removeValidate(){
      removeValidate() {
        this.$refs.form.clearValidate()
      }
    },
    }
  }
</script>
<style scoped>
  .avatar-uploader > .ant-upload {
    width:104px;
    height:104px;
    width: 104px;
    height: 104px;
  }
  .ant-upload-select-picture-card i {
    font-size: 49px;
    color: #999;
@@ -638,9 +623,9 @@
    color: #666;
  }
  .ant-table-tbody .ant-table-row td{
    padding-top:10px;
    padding-bottom:10px;
  .ant-table-tbody .ant-table-row td {
    padding-top: 10px;
    padding-bottom: 10px;
  }
  .drawer-bottom-button {
src/views/mdc/base/modules/OEEAnalysis/OEEAnalysisList.vue
@@ -21,7 +21,7 @@
                </a-select>
              </a-form-item>
            </a-col>
            <a-col :md="5" :sm="5" :xs="5">
            <a-col :md="6" :sm="6" :xs="6">
              <a-form-item label="驱动类型">
                <a-select
                  :value="queryParams.driveType"
@@ -37,20 +37,16 @@
                </a-select>
              </a-form-item>
            </a-col>
            <a-col :md="4" :sm="4" :xs="4">
              <a-form-item label="设备级别">
                <a-select
                  :value="queryParams.deviceLevel"
                  mode="multiple"
                  placeholder="请选择设备级别"
                  allow-clear
                  :maxTagCount="1"
                  @change="selectChange($event,'deviceLevel')"
                >
                  <a-select-option v-for="(item,index) in device_level_list" :value="item.value" :key="index">
                    {{item.label}}
                  </a-select-option>
                </a-select>
            <a-col :md="5" :sm="5" :xs="5">
              <a-form-item label="时间">
                <a-range-picker
                  :placeholder="['开始时间', '结束时间']"
                  format="YYYY-MM"
                  :value="dates"
                  :mode="['month', 'month']"
                  @panelChange="dateParamChange"
                  @change="handleDateChange"
                />
              </a-form-item>
            </a-col>
            <a-col :md="5" :sm="5" :xs="5">
@@ -69,19 +65,68 @@
                </a-select>
              </a-form-item>
            </a-col>
            <a-col :md="2" :sm="2">
              <a
                @click="toggleSearchStatus=!toggleSearchStatus"
                @selectstart="$event.preventDefault()"
                style="display: inline-block;height: 32px;line-height: 32px"
              >
                {{ toggleSearchStatus ? '收起' : '展开' }}
                <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
              </a>
            </a-col>
          </a-row>
          <a-row :gutter="24" v-if="toggleSearchStatus">
            <a-col :md="5" :sm="5" :xs="5">
              <a-form-item label="时间">
                <a-range-picker
                  :placeholder="['开始时间', '结束时间']"
                  format="YYYY-MM"
                  :value="dates"
                  :mode="['month', 'month']"
                  @panelChange="dateParamChange"
                  @change="handleDateChange"
                />
              <a-form-item label="设备级别">
                <a-select
                  :value="queryParams.deviceLevel"
                  mode="multiple"
                  placeholder="请选择设备级别"
                  allow-clear
                  :maxTagCount="1"
                  @change="selectChange($event,'deviceLevel')"
                >
                  <a-select-option v-for="(item,index) in device_level_list" :value="item.value" :key="index">
                    {{item.label}}
                  </a-select-option>
                </a-select>
              </a-form-item>
            </a-col>
            <!--<a-col :md="5" :sm="5" :xs="5">-->
              <!--<a-form-item label="数据分布">-->
                <!--<a-select-->
                  <!--:value="queryParams.deviceLevel"-->
                  <!--mode="multiple"-->
                  <!--placeholder="请选择数据分布"-->
                  <!--allow-clear-->
                  <!--:maxTagCount="1"-->
                  <!--@change="selectChange($event,'deviceLevel')"-->
                <!--&gt;-->
                  <!--<a-select-option v-for="(item,index) in device_level_list" :value="item.value" :key="index">-->
                    <!--{{item.label}}-->
                  <!--</a-select-option>-->
                <!--</a-select>-->
              <!--</a-form-item>-->
            <!--</a-col>-->
            <a-col :md="5" :sm="5" :xs="5">
              <a-form-item label="重要程度">
                <a-select
                  :value="queryParams.deviceImportanceLevel"
                  mode="multiple"
                  placeholder="请选择设备重要程度"
                  allow-clear
                  :maxTagCount="1"
                  @change="selectChange($event,'deviceImportanceLevel')"
                >
                  <a-select-option v-for="(item,index) in device_importance_level_list" :value="item.value"
                                   :key="index">
                    {{item.label}}
                  </a-select-option>
                </a-select>
              </a-form-item>
            </a-col>
          </a-row>
          <a-row :gutter="24" style="margin-bottom: 20px">
@@ -106,7 +151,7 @@
               :loading="tableLoading"
               :pagination="false" :scroll="{x:'max-content',y:scrollY}" bordered>
        <!--<template slot="equipmentModel" slot-scope="text, record">-->
          <!--<editable-cell :text="text" @change="onCellChange(record.id, 'equipmentModel', $event)"/>-->
        <!--<editable-cell :text="text" @change="onCellChange(record.id, 'equipmentModel', $event)"/>-->
        <!--</template>-->
      </a-table>
    </div>
@@ -138,7 +183,7 @@
  export default {
    name: 'OEEAnalysisList',
    components: {  },
    components: {},
    data() {
      return {
        dates: [moment().subtract('month', 1), moment().subtract('month', 1)],
@@ -150,7 +195,8 @@
          equipmentType: [],
          driveType: [],
          deviceLevel: [],
          deviceCategory: []
          deviceCategory: [],
          deviceImportanceLevel: []
        },
        queryParamEquip: {},
        queryParamPeople: {},
@@ -352,7 +398,8 @@
        device_level_list: [],
        device_category_list: [],
        scrollY: 465,
        tableLoading: false
        tableLoading: false,
        toggleSearchStatus: false
      }
    },
    props: { nodeTree: '', Type: '', nodePeople: '' },
@@ -373,6 +420,7 @@
      this.queryGroup()
      this.initDictData('device_level')
      this.initDictData('device_category')
      this.initDictData('device_importance_level')
    },
    mounted() {
      window.addEventListener('resize', this.handleWindowResize)
src/views/mdc/base/modules/efficiencyPOReport/EfficiencyPOList.vue
@@ -21,7 +21,7 @@
                </a-select>
              </a-form-item>
            </a-col>
            <a-col :md="5" :sm="5">
            <a-col :md="6" :sm="6">
              <a-form-item label="驱动类型">
                <a-select
                  :value="queryParams.driveType"
@@ -37,11 +37,41 @@
                </a-select>
              </a-form-item>
            </a-col>
            <a-col :md="4" :sm="4">
            <a-col :md="6" :sm="6">
              <a-form-item label="时间">
                <a-range-picker @change="dateParamChange" :disabledDate="disabledDate" format="YYYYMMDD" v-model="dates" :allowClear="false"/>
                <a-range-picker @change="dateParamChange" :disabledDate="disabledDate" format="YYYYMMDD" v-model="dates"
                                :allowClear="false"/>
              </a-form-item>
            </a-col>
            <a-col :md="5" :sm="5" :xs="5">
              <a-form-item label="设备种类">
                <a-select
                  :value="queryParams.deviceCategory"
                  mode="multiple"
                  placeholder="请选择设备种类"
                  allow-clear
                  :maxTagCount="1"
                  @change="selectChange($event,'deviceCategory')"
                >
                  <a-select-option v-for="(item,index) in device_category_list" :value="item.value" :key="index">
                    {{item.label}}
                  </a-select-option>
                </a-select>
              </a-form-item>
            </a-col>
            <a-col :md="2" :sm="2">
              <a
                @click="toggleSearchStatus=!toggleSearchStatus"
                @selectstart="$event.preventDefault()"
                style="display: inline-block;height: 32px;line-height: 32px"
              >
                {{ toggleSearchStatus ? '收起' : '展开' }}
                <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
              </a>
            </a-col>
          </a-row>
          <a-row :gutter="24" v-if="toggleSearchStatus">
            <a-col :md="5" :sm="5" :xs="5">
              <a-form-item label="设备级别">
                <a-select
@@ -58,23 +88,25 @@
                </a-select>
              </a-form-item>
            </a-col>
            <a-col :md="4" :sm="4" :xs="4">
              <a-form-item label="设备种类">
            <a-col :md="5" :sm="5" :xs="5">
              <a-form-item label="重要程度">
                <a-select
                  :value="queryParams.deviceCategory"
                  :value="queryParams.deviceImportanceLevel"
                  mode="multiple"
                  placeholder="请选择设备种类"
                  placeholder="请选择设备重要程度"
                  allow-clear
                  :maxTagCount="1"
                  @change="selectChange($event,'deviceCategory')"
                  @change="selectChange($event,'deviceImportanceLevel')"
                >
                  <a-select-option v-for="(item,index) in device_category_list" :value="item.value" :key="index">
                  <a-select-option v-for="(item,index) in device_importance_level_list" :value="item.value"
                                   :key="index">
                    {{item.label}}
                  </a-select-option>
                </a-select>
              </a-form-item>
            </a-col>
          </a-row>
          <a-row :gutter="24" type="flex" align="middle">
            <a-col :md="24" :sm="24" :xs="24"
                   style="display: flex;justify-content: space-between;align-items: flex-start">
@@ -104,18 +136,25 @@
          </a-row>
        </a-form>
      </div>
      <a-spin :spinning="spinning">
        <div class="container" id="EfficiencyPO" style="margin-top: 20px;" >
        <div class="container" id="EfficiencyPO" style="margin-top: 20px;">
          <div class="table2">
            <table class="dataContent table" border="1" cellspacing="0" cellpadding="0" style="white-space: nowrap" v-if="dataList.length>0">
            <table class="dataContent table" border="1" cellspacing="0" cellpadding="0" style="white-space: nowrap"
                   v-if="dataList.length>0">
              <thead>
              <tr class="thead fixed equipname">
                <th class="thgu dong1 name" rowspan="2" style="min-width: 50px; max-width: 50px;width: 50px;height: 66px">公司</th>
                <th  class="thgu dong2 name" rowspan="2" style="min-width: 50px; max-width: 50px;width: 50px;">车间</th>
                <th  class="thgu dong3 name" rowspan="2" style="min-width: 50px; max-width: 50px;width: 50px;">工段</th>
                <th class="thgu dong4 name" rowspan="2" style="min-width: 100px; max-width: 100px;width: 100px;">设备编号</th>
                <th class="thgu dong5 name" rowspan="2" style="min-width: 162px; max-width: 162px;width: 162px;">设备名称</th>
                <th class="thgu dong6 name" rowspan="2" style="min-width: 100px; max-width: 100px;width: 100px;">设备类型</th>
                <th class="thgu dong1 name" rowspan="2"
                    style="min-width: 50px; max-width: 50px;width: 50px;height: 66px">公司
                </th>
                <th class="thgu dong2 name" rowspan="2" style="min-width: 50px; max-width: 50px;width: 50px;">车间</th>
                <th class="thgu dong3 name" rowspan="2" style="min-width: 50px; max-width: 50px;width: 50px;">工段</th>
                <th class="thgu dong4 name" rowspan="2" style="min-width: 100px; max-width: 100px;width: 100px;">设备编号
                </th>
                <th class="thgu dong5 name" rowspan="2" style="min-width: 162px; max-width: 162px;width: 162px;">设备名称
                </th>
                <th class="thgu dong6 name" rowspan="2" style="min-width: 100px; max-width: 100px;width: 100px;">设备类型
                </th>
                <!--<th rowspan="2">组别</th>-->
                <template v-for="(tableHead, index) in tableHeads">
                  <th class="timeth" :colspan="checkedList.length">{{tableHead}}</th>
@@ -135,31 +174,38 @@
              <tbody>
              <tr class="mathData" v-for="(item, index) in dataList">
                <template v-if="item.level1!=='合计'&&item.level1!=='平均值'">
                  <td  class="tdgu kaitou" :rowspan="item.level1span" :class="{hidden: item.level1dis,noExl:item.level1dis}"  v-show="!item.level1dis">
                  <td class="tdgu kaitou" :rowspan="item.level1span"
                      :class="{hidden: item.level1dis,noExl:item.level1dis}" v-show="!item.level1dis">
                    <div class="wenzi">
                      {{item.level1}}
                    </div>
                  </td>
                  <td  class="tdgu1 kaitou" :rowspan="item.level2span" :class="{hidden: item.level2dis,noExl:item.level2dis}"  v-show="!item.level2dis">
                  <td class="tdgu1 kaitou" :rowspan="item.level2span"
                      :class="{hidden: item.level2dis,noExl:item.level2dis}" v-show="!item.level2dis">
                    <div class="wenzi">
                      {{item.level2}}
                    </div>
                  </td>
                  <td  class="tdgu2 kaitou" :rowspan="item.level3span" :class="{hidden: item.level3dis,noExl:item.level3dis}"  v-show="!item.level3dis">
                  <td class="tdgu2 kaitou" :rowspan="item.level3span"
                      :class="{hidden: item.level3dis,noExl:item.level3dis}" v-show="!item.level3dis">
                    <div class="wenzi">
                      {{item.level3}}
                    </div>
                  </td>
                  <td  class="tdgu3  kaitou">{{item.equipmentId}}</td>
                  <td style="min-width: 162px; max-width: 162px;width: 162px;"  class="tdgu4 kaitou">{{item.equipmentName}}</td>
                  <td  class="tdgu5 kaitou">{{item.equipmentType}}</td>
                  <td class="tdgu3  kaitou">{{item.equipmentId}}</td>
                  <td style="min-width: 162px; max-width: 162px;width: 162px;" class="tdgu4 kaitou">
                    {{item.equipmentName}}
                  </td>
                  <td class="tdgu5 kaitou">{{item.equipmentType}}</td>
                </template>
                <template v-else>
                  <td colspan="6" class="tdgu kaitou">{{item.level1}}</td>
                </template>
                <template v-for="(tableHead, index) in item.dataList">
                  <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('lyl') > -1">{{tableHead.startRate | numFilter}}</td>
                  <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('lyl') > -1">
                    {{tableHead.startRate | numFilter}}
                  </td>
                  <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('kjl') > -1">
                    {{tableHead.openRate | numFilter}}
                  </td>
@@ -187,541 +233,543 @@
</template>
<script>
import moment from 'moment'
import { putAction, getAction } from '@/api/manage'
import $ from 'jquery'
import '@/components/table2excel/table2excel'
import { ajaxGetDictItems, getDictItemsFromCache, duplicateCheck } from '@/api/api'
import api from '@/api/mdc'
  import moment from 'moment'
  import { putAction, getAction } from '@/api/manage'
  import $ from 'jquery'
  import '@/components/table2excel/table2excel'
  import { ajaxGetDictItems, getDictItemsFromCache, duplicateCheck } from '@/api/api'
  import api from '@/api/mdc'
export default {
  name: 'EfficiencyPOList',
  components: {},
  data() {
    return {
      typeTree:"",
      typeParent:1,
      typeEquipment:1,
      dates: [],
      equipmentTypeList:[],
      driveTypeList:[],
      device_level_list: [],
      device_category_list: [],
      queryParam: {},
      queryParams: {
        equipmentType: [],
        driveType: [],
        deviceLevel: [],
        deviceCategory: []
      },
      queryParamEquip:{},
      queryParamPeople:{},
      identifying: [],
      efficiencyOptions: [
        { label: '开动率', value: 'lyl' },
        { label: '开机率', value: 'kjl' },
        { label: '开机时间', value: 'kjsj' },
        { label: '加工时间', value: 'jgsj' },
        { label: '待机时间', value: 'djsj' },
        { label: '关机时间', value: 'gjsj' }
      ],
      checkedList: ['lyl'],
      dataList: [],
      url: {
        list: '/mdc/efficiencyReport/efficiencyPOList',
        listByType: '/mdc/MdcUtilizationRate/getByType',
        queryEquipmentType: '/mdc/mdcEquipmentType/queryEquipmentType'
      },
      tableHeads: [],
      spinning:false
    }
  },
  props: { nodeTree: '', Type:'',nodePeople: ''},
  created() {
    this.showIdentifying()
    this.dates = [moment().subtract('days', 8), moment().subtract('days', 1)]
    this.queryParam.startTime = moment(this.dates[0]).format('YYYYMMDD')
    this.queryParam.endTime = moment(this.dates[1]).format('YYYYMMDD')
    this.queryParam.typeTree = "1"
    this.loadData()
    this.queryGroup()
    this.getDriveTypeByApi()
    this.initDictData('device_level')
    this.initDictData('device_category')
  },
  mounted() {
    window.addEventListener('resize', this.handleWindowResize)
    this.handleWindowResize()
  },
  watch: {
    Type(valmath){
      this.dataList = [];
      this.queryParam.typeTree = valmath
    },
    nodeTree(val) { //监听currSelected 变化,将变化后的数值传递给 getCurrSelected 事件
      if (JSON.stringify(val) != '{}') {
        if (val.equipmentId != null) {
          this.queryParamEquip.parentId = ''
          this.queryParamEquip.equipmentId = val.equipmentId
        } else {
          this.queryParamEquip.parentId = val.key
          this.queryParamEquip.equipmentId = ''
        }
        this.searchQuery()
  export default {
    name: 'EfficiencyPOList',
    components: {},
    data() {
      return {
        typeTree: '',
        typeParent: 1,
        typeEquipment: 1,
        dates: [],
        equipmentTypeList: [],
        driveTypeList: [],
        device_level_list: [],
        device_category_list: [],
        queryParam: {},
        queryParams: {
          equipmentType: [],
          driveType: [],
          deviceLevel: [],
          deviceCategory: [],
          deviceImportanceLevel: []
        },
        queryParamEquip: {},
        queryParamPeople: {},
        identifying: [],
        efficiencyOptions: [
          { label: '开动率', value: 'lyl' },
          { label: '开机率', value: 'kjl' },
          { label: '开机时间', value: 'kjsj' },
          { label: '加工时间', value: 'jgsj' },
          { label: '待机时间', value: 'djsj' },
          { label: '关机时间', value: 'gjsj' }
        ],
        checkedList: ['lyl'],
        dataList: [],
        url: {
          list: '/mdc/efficiencyReport/efficiencyPOList',
          listByType: '/mdc/MdcUtilizationRate/getByType',
          queryEquipmentType: '/mdc/mdcEquipmentType/queryEquipmentType'
        },
        tableHeads: [],
        spinning: false,
        toggleSearchStatus: false
      }
    },
    nodePeople(val){
      if (JSON.stringify(val) != '{}') {
        if (val.equipmentId != null) {
          this.queryParamPeople.parentId = val.equipmentId
          this.queryParamPeople.equipmentId = ''
        } else {
          this.queryParamPeople.parentId = val.key
          this.queryParamPeople.equipmentId = ''
        }
        this.searchQuery()
      }
    }
  },
  filters: {
    numFilter(value) {
      if (value) {
        return parseFloat((value * 100).toFixed(2))
      } else {
        return '0'
      }
    },
    /**
     * 格式化时间
     * @param seconds 秒数
     * @returns '' 格式化后时间字符串
     */
    getFormattedTime(seconds) {
      if (seconds) {
        return parseFloat((seconds / 3600).toFixed(2))
      } else {
        return '0'
      }
    },
  },
  methods: {
    initDictData(dictCode) {
      // //优先从缓存中读取字典配置
      if (getDictItemsFromCache(dictCode)) {
        this[dictCode + '_list'] = getDictItemsFromCache(dictCode)
        return
      }
      //根据字典Code, 初始化字典数组
      ajaxGetDictItems(dictCode, null).then((res) => {
        if (res.success) {
          this[dictCode + '_list'] = res.result
          return
        }
      })
    },
    selectChange(value, key) {
      this.queryParams[key] = value
    },
    checkSameData(dataList){
      let cache = {};  //存储的是键是kclx 的值,值是kclx 在indeces中数组的下标
      let indices = [];  //数组中每一个值是一个数组,数组中的每一个元素是原数组中相同kclx的下标
      dataList.map((item,index)=>{
        let level1 = item.level1;
        let _index = cache[level1];
        if(_index!==undefined){
          indices[_index].push(index)
        }else{
          cache[level1] = indices.length
          indices.push([index])
        }
      })
      let result = [];
      indices.map((item)=>{
        item.map((index)=>{
          result.push(dataList[index])
        })
      })
      this.dataList = result
    },
    checkSameData1(dataList){
      let cache = {};  //存储的是键是kclx 的值,值是kclx 在indeces中数组的下标
      let indices = [];  //数组中每一个值是一个数组,数组中的每一个元素是原数组中相同kclx的下标
      dataList.map((item,index)=>{
        let level2 = item.level2;
        let _index = cache[level2];
        if(_index!==undefined){
          indices[_index].push(index)
        }else{
          cache[level2] = indices.length
          indices.push([index])
        }
      })
      let result = [];
      indices.map((item)=>{
        item.map((index)=>{
          result.push(dataList[index])
        })
      })
      this.dataList = result
    },
    checkSameData2(dataList){
      let cache = {};  //存储的是键是kclx 的值,值是kclx 在indeces中数组的下标
      let indices = [];  //数组中每一个值是一个数组,数组中的每一个元素是原数组中相同kclx的下标
      dataList.map((item,index)=>{
        let level3 = item.level3;
        let _index = cache[level3];
        if(_index!==undefined){
          indices[_index].push(index)
        }else{
          cache[level3] = indices.length
          indices.push([index])
        }
      })
      let result = [];
      indices.map((item)=>{
        item.map((index)=>{
          result.push(dataList[index])
        })
      })
      this.dataList = result
    },
    // 合并
    combineCell() {
      console.log(this.dataList)
      let list =this.dataList;
      for (let field in list[0]) {
        var k = 0;
        while (k < list.length) {
          list[k][field + 'span'] = 1;
          list[k][field + 'dis'] = false;
          for (var i = k + 1; i <= list.length - 1; i++) {
            if (list[k][field] == list[i][field] && list[k][field] != '') {
              list[k][field + 'span']++;
              list[k][field + 'dis'] = false;
              list[i][field + 'span'] = 1;
              list[i][field + 'dis'] = true;
            } else {
              break;
            }
          }
          k = i;
        }
      }
      return list;
    },
    disabledDate(current){
      //Can not slect days before today and today
      return current && current > moment().subtract('days', 1);
    },
    initDeviceType(deviceList) {
      let dictCode = 'mdc_equipmentType'
      let items = []
      items = getDictItemsFromCache(dictCode)
      if (deviceList && items.length > 0) {
        for (let a = 0; a < deviceList.length; a++) {
          if (items && items.length > 0) {
            for (let i = 0; i < items.length; i++) {
              if (deviceList[a].equipmentType == items[i].value) {
                deviceList[a].equipmentType = items[i].title
              }
            }
          } else {
            ajaxGetDictItems(dictCode, null).then((res) => {
              if (res.success) {
                let items = res.result
                for (let i = 0; i < items.length; i++) {
                  if (deviceList[a].equipmentType == items[i].value) {
                    deviceList[a].equipmentType = items[i].title
                  }
                }
              }
            })
          }
        }
      }
    },
    exportExcel() {
      $("#EfficiencyPO").table2excel({
        exclude: ".noExl",
        name: "Excel Document Name",
        filename: "设备开动率",
        exclude_img: true,
        fileext: ".xls",
        exclude_links: true,
        exclude_inputs: true
      });
    },
    showIdentifying() {
      getAction(this.url.listByType, { type: 'kdl' }).then(res => {
        if (res.success) {
          this.identifying = res.result
        }
      })
    },
    dateParamChange(v1, v2) {
      this.queryParam.startTime = v2[0]
      this.queryParam.endTime = v2[1]
      // 点击时间选择器的清空按钮时会触发此判断(点击重置按钮不会触发),实现重置列表功能,切实改变列表显示效果
      if(!this.queryParam.startTime&&!this.queryParam.endTime)this.searchReset()
    },
    efficiencyOptionsOnChange(checkedList) {
      // let index = checkedList.indexOf('lyl')
      // if (index < 0) {
      //   // this.$message.warn('不能取消查询利用率')
      //   this.$notification.warning({
      //     message:'消息',
      //     description:"不能取消查询利用率"
      //   })
      //   return false
      // }
      this.checkedList = checkedList
    },
    searchQuery() {
      if(this.queryParam.typeTree == "1"){
        this.queryParam.parentId =  this.queryParamEquip.parentId
        this.queryParam.equipmentId = this.queryParamEquip.equipmentId
      }else{
        this.queryParam.parentId = this.queryParamPeople.parentId
        this.queryParam.equipmentId = ""
      }
      Object.keys(this.queryParams).forEach(item => {
        this.queryParam[item] = this.queryParams[item].join()
        // 此处为保证接口参数不多余,可省略
        if (this.queryParams[item].length === 0) delete this.queryParam[item]
      })
      this.loadData()
    },
    searchReset() {
      this.typeTree = this.queryParam.typeTree
      this.typeParent =  this.queryParam.parentId
      this.typeEquipment = this.queryParam.equipmentId
      this.queryParam = {}
      this.queryParam.typeTree = this.typeTree
      this.queryParam.parentId = this.typeParent
      this.queryParam.equipmentId =  this.typeEquipment
    props: { nodeTree: '', Type: '', nodePeople: '' },
    created() {
      this.showIdentifying()
      this.dates = [moment().subtract('days', 8), moment().subtract('days', 1)]
      this.queryParam.startTime = moment(this.dates[0]).format('YYYYMMDD')
      this.queryParam.endTime = moment(this.dates[1]).format('YYYYMMDD')
      // this.ipagination.current = 1
      this.queryParams = {
        equipmentType: [],
        driveType: [],
        deviceLevel: [],
        deviceCategory: []
      }
      this.loadData();
      this.queryParam.typeTree = '1'
      this.loadData()
      this.queryGroup()
      this.getDriveTypeByApi()
      this.initDictData('device_level')
      this.initDictData('device_category')
      this.initDictData('device_importance_level')
    },
    loadData() {
      this.spinning=true
      this.tableHeads = []
      this.dataList = []
      getAction(this.url.list, this.queryParam).then(res => {
        if (res.success) {
          // console.log(res.result)
          this.tableHeads = res.result.dates
          this.dataList = res.result.mdcEfficiencyList
          if (res.result.mdcEfficiencyList && !res.result.mdcEfficiencyList.length) {
            this.$notification.info({
    mounted() {
      window.addEventListener('resize', this.handleWindowResize)
      this.handleWindowResize()
    },
    watch: {
      Type(valmath) {
        this.dataList = []
        this.queryParam.typeTree = valmath
      },
      nodeTree(val) { //监听currSelected 变化,将变化后的数值传递给 getCurrSelected 事件
        if (JSON.stringify(val) != '{}') {
          if (val.equipmentId != null) {
            this.queryParamEquip.parentId = ''
            this.queryParamEquip.equipmentId = val.equipmentId
          } else {
            this.queryParamEquip.parentId = val.key
            this.queryParamEquip.equipmentId = ''
          }
          this.searchQuery()
        }
      },
      nodePeople(val) {
        if (JSON.stringify(val) != '{}') {
          if (val.equipmentId != null) {
            this.queryParamPeople.parentId = val.equipmentId
            this.queryParamPeople.equipmentId = ''
          } else {
            this.queryParamPeople.parentId = val.key
            this.queryParamPeople.equipmentId = ''
          }
          this.searchQuery()
        }
      }
    },
    filters: {
      numFilter(value) {
        if (value) {
          return parseFloat((value * 100).toFixed(2))
        } else {
          return '0'
        }
      },
      /**
       * 格式化时间
       * @param seconds 秒数
       * @returns '' 格式化后时间字符串
       */
      getFormattedTime(seconds) {
        if (seconds) {
          return parseFloat((seconds / 3600).toFixed(2))
        } else {
          return '0'
        }
      }
    },
    methods: {
      initDictData(dictCode) {
        // //优先从缓存中读取字典配置
        if (getDictItemsFromCache(dictCode)) {
          this[dictCode + '_list'] = getDictItemsFromCache(dictCode)
          return
        }
        //根据字典Code, 初始化字典数组
        ajaxGetDictItems(dictCode, null).then((res) => {
          if (res.success) {
            this[dictCode + '_list'] = res.result
            return
          }
        })
      },
      selectChange(value, key) {
        this.queryParams[key] = value
      },
      checkSameData(dataList) {
        let cache = {}  //存储的是键是kclx 的值,值是kclx 在indeces中数组的下标
        let indices = []  //数组中每一个值是一个数组,数组中的每一个元素是原数组中相同kclx的下标
        dataList.map((item, index) => {
          let level1 = item.level1
          let _index = cache[level1]
          if (_index !== undefined) {
            indices[_index].push(index)
          } else {
            cache[level1] = indices.length
            indices.push([index])
          }
        })
        let result = []
        indices.map((item) => {
          item.map((index) => {
            result.push(dataList[index])
          })
        })
        this.dataList = result
      },
      checkSameData1(dataList) {
        let cache = {}  //存储的是键是kclx 的值,值是kclx 在indeces中数组的下标
        let indices = []  //数组中每一个值是一个数组,数组中的每一个元素是原数组中相同kclx的下标
        dataList.map((item, index) => {
          let level2 = item.level2
          let _index = cache[level2]
          if (_index !== undefined) {
            indices[_index].push(index)
          } else {
            cache[level2] = indices.length
            indices.push([index])
          }
        })
        let result = []
        indices.map((item) => {
          item.map((index) => {
            result.push(dataList[index])
          })
        })
        this.dataList = result
      },
      checkSameData2(dataList) {
        let cache = {}  //存储的是键是kclx 的值,值是kclx 在indeces中数组的下标
        let indices = []  //数组中每一个值是一个数组,数组中的每一个元素是原数组中相同kclx的下标
        dataList.map((item, index) => {
          let level3 = item.level3
          let _index = cache[level3]
          if (_index !== undefined) {
            indices[_index].push(index)
          } else {
            cache[level3] = indices.length
            indices.push([index])
          }
        })
        let result = []
        indices.map((item) => {
          item.map((index) => {
            result.push(dataList[index])
          })
        })
        this.dataList = result
      },
      // 合并
      combineCell() {
        console.log(this.dataList)
        let list = this.dataList
        for (let field in list[0]) {
          var k = 0
          while (k < list.length) {
            list[k][field + 'span'] = 1
            list[k][field + 'dis'] = false
            for (var i = k + 1; i <= list.length - 1; i++) {
              if (list[k][field] == list[i][field] && list[k][field] != '') {
                list[k][field + 'span']++
                list[k][field + 'dis'] = false
                list[i][field + 'span'] = 1
                list[i][field + 'dis'] = true
              } else {
                break
              }
            }
            k = i
          }
        }
        return list
      },
      disabledDate(current) {
        //Can not slect days before today and today
        return current && current > moment().subtract('days', 1)
      },
      initDeviceType(deviceList) {
        let dictCode = 'mdc_equipmentType'
        let items = []
        items = getDictItemsFromCache(dictCode)
        if (deviceList && items.length > 0) {
          for (let a = 0; a < deviceList.length; a++) {
            if (items && items.length > 0) {
              for (let i = 0; i < items.length; i++) {
                if (deviceList[a].equipmentType == items[i].value) {
                  deviceList[a].equipmentType = items[i].title
                }
              }
            } else {
              ajaxGetDictItems(dictCode, null).then((res) => {
                if (res.success) {
                  let items = res.result
                  for (let i = 0; i < items.length; i++) {
                    if (deviceList[a].equipmentType == items[i].value) {
                      deviceList[a].equipmentType = items[i].title
                    }
                  }
                }
              })
            }
          }
        }
      },
      exportExcel() {
        $('#EfficiencyPO').table2excel({
          exclude: '.noExl',
          name: 'Excel Document Name',
          filename: '设备开动率',
          exclude_img: true,
          fileext: '.xls',
          exclude_links: true,
          exclude_inputs: true
        })
      },
      showIdentifying() {
        getAction(this.url.listByType, { type: 'kdl' }).then(res => {
          if (res.success) {
            this.identifying = res.result
          }
        })
      },
      dateParamChange(v1, v2) {
        this.queryParam.startTime = v2[0]
        this.queryParam.endTime = v2[1]
        // 点击时间选择器的清空按钮时会触发此判断(点击重置按钮不会触发),实现重置列表功能,切实改变列表显示效果
        if (!this.queryParam.startTime && !this.queryParam.endTime) this.searchReset()
      },
      efficiencyOptionsOnChange(checkedList) {
        // let index = checkedList.indexOf('lyl')
        // if (index < 0) {
        //   // this.$message.warn('不能取消查询利用率')
        //   this.$notification.warning({
        //     message:'消息',
        //     description:"不能取消查询利用率"
        //   })
        //   return false
        // }
        this.checkedList = checkedList
      },
      searchQuery() {
        if (this.queryParam.typeTree == '1') {
          this.queryParam.parentId = this.queryParamEquip.parentId
          this.queryParam.equipmentId = this.queryParamEquip.equipmentId
        } else {
          this.queryParam.parentId = this.queryParamPeople.parentId
          this.queryParam.equipmentId = ''
        }
        Object.keys(this.queryParams).forEach(item => {
          this.queryParam[item] = this.queryParams[item].join()
          // 此处为保证接口参数不多余,可省略
          if (this.queryParams[item].length === 0) delete this.queryParam[item]
        })
        this.loadData()
      },
      searchReset() {
        this.typeTree = this.queryParam.typeTree
        this.typeParent = this.queryParam.parentId
        this.typeEquipment = this.queryParam.equipmentId
        this.queryParam = {}
        this.queryParam.typeTree = this.typeTree
        this.queryParam.parentId = this.typeParent
        this.queryParam.equipmentId = this.typeEquipment
        this.dates = [moment().subtract('days', 8), moment().subtract('days', 1)]
        this.queryParam.startTime = moment(this.dates[0]).format('YYYYMMDD')
        this.queryParam.endTime = moment(this.dates[1]).format('YYYYMMDD')
        // this.ipagination.current = 1
        this.queryParams = {
          equipmentType: [],
          driveType: [],
          deviceLevel: [],
          deviceCategory: []
        }
        this.loadData()
      },
      loadData() {
        this.spinning = true
        this.tableHeads = []
        this.dataList = []
        getAction(this.url.list, this.queryParam).then(res => {
          if (res.success) {
            // console.log(res.result)
            this.tableHeads = res.result.dates
            this.dataList = res.result.mdcEfficiencyList
            if (res.result.mdcEfficiencyList && !res.result.mdcEfficiencyList.length) {
              this.$notification.info({
                message: '消息',
                description: '暂无该设备类型数据'
              })
            }
            this.checkSameData(this.dataList)
            this.checkSameData1(this.dataList)
            this.checkSameData2(this.dataList)
            this.combineCell()
            // this.initDeviceType(this.dataList)
          }
        }).finally(() => {
          this.spinning = false
        })
      },
      queryGroup() {
        getAction(this.url.queryEquipmentType).then(res => {
          if (res.success) {
            this.equipmentTypeList = res.result.map(item => {
              return {
                label: item.equipmentTypeName,
                value: item.equipmentTypeName
              }
            })
          } else {
            // this.$message.warning(res.message)
            this.$notification.warning({
              message: '消息',
              description: '暂无该设备类型数据'
              description: res.message
            })
          }
          this.checkSameData(this.dataList)
          this.checkSameData1(this.dataList)
          this.checkSameData2(this.dataList)
          this.combineCell();
          // this.initDeviceType(this.dataList)
        }
      }).finally(()=>{
        this.spinning=false
      })
    },
    queryGroup() {
      getAction(this.url.queryEquipmentType).then(res => {
        if (res.success) {
          this.equipmentTypeList = res.result.map(item => {
            return {
              label: item.equipmentTypeName,
              value: item.equipmentTypeName
            }
          })
        } else {
          // this.$message.warning(res.message)
          this.$notification.warning({
            message: '消息',
            description: res.message
          })
        }
      }).finally(() => {
        this.loading = false
      })
    },
        }).finally(() => {
          this.loading = false
        })
      },
    /**
     * 调用接口获取控制系统类型
     */
    getDriveTypeByApi(){
      api.getDriveTypeApi().then((res)=>{
        if (res.success) this.driveTypeList = res.result
      })
    },
      /**
       * 调用接口获取控制系统类型
       */
      getDriveTypeByApi() {
        api.getDriveTypeApi().then((res) => {
          if (res.success) this.driveTypeList = res.result
        })
      },
    /**
     * 分辨率改变时同时改变表格高度已保证首页一进入不拖动垂直滚动条时即可拖动表格水平滚动条
     */
    handleWindowResize() {
      const tableContainer = document.getElementById('EfficiencyPO') // 表格容器
      const clientHeight = document.documentElement.clientHeight || document.body.clientHeight // 浏览器可视区域高度
      const containerTopToClientTopHeight = tableContainer.getBoundingClientRect().top // 表格容器顶部到浏览器可视区域顶部的间距
      tableContainer.style.height = (clientHeight - containerTopToClientTopHeight - 32) + 'px'
      /**
       * 分辨率改变时同时改变表格高度已保证首页一进入不拖动垂直滚动条时即可拖动表格水平滚动条
       */
      handleWindowResize() {
        const tableContainer = document.getElementById('EfficiencyPO') // 表格容器
        const clientHeight = document.documentElement.clientHeight || document.body.clientHeight // 浏览器可视区域高度
        const containerTopToClientTopHeight = tableContainer.getBoundingClientRect().top // 表格容器顶部到浏览器可视区域顶部的间距
        tableContainer.style.height = (clientHeight - containerTopToClientTopHeight - 32) + 'px'
      }
    }
  }
}
</script>
<style scoped>
/*table样式*/
.table2{
  width: 100%;
  height: 100%;
  overflow: auto;
}
  /*table样式*/
  .table2 {
    width: 100%;
    height: 100%;
    overflow: auto;
  }
.table2 thead tr th:first-child,
.table tbody tr .tdgu{
  position: sticky;
  left: 0;
  z-index: 1;
}
  .table2 thead tr th:first-child,
  .table tbody tr .tdgu {
    position: sticky;
    left: 0;
    z-index: 1;
  }
.table tbody tr .wenzi{
  /*writing-mode: vertical-lr;*/
  /*text-orientation: upright;*/
  transform: rotate(360deg);
  writing-mode: vertical-lr;
  letter-spacing: 2px;
}
  .table tbody tr .wenzi {
    /*writing-mode: vertical-lr;*/
    /*text-orientation: upright;*/
    transform: rotate(360deg);
    writing-mode: vertical-lr;
    letter-spacing: 2px;
  }
.table tbody tr .kaitou{
  z-index: 1;
  background-color: white;
}
  .table tbody tr .kaitou {
    z-index: 1;
    background-color: white;
  }
.table tbody tr .tdgu1{
  position: sticky;
  left: 50px;
  z-index: 2;
}
  .table tbody tr .tdgu1 {
    position: sticky;
    left: 50px;
    z-index: 2;
  }
.table tbody tr .tdgu2{
  position: sticky;
  left: 100px;
  z-index: 2;
}
  .table tbody tr .tdgu2 {
    position: sticky;
    left: 100px;
    z-index: 2;
  }
.table tbody tr .tdgu3{
  position: sticky;
  left: 150px;
  z-index: 2;
}
  .table tbody tr .tdgu3 {
    position: sticky;
    left: 150px;
    z-index: 2;
  }
.table tbody tr .tdgu4{
  position: sticky;
  left: 250px;
  z-index: 2;
}
  .table tbody tr .tdgu4 {
    position: sticky;
    left: 250px;
    z-index: 2;
  }
.table tbody tr .tdgu5{
  position: sticky;
  left: 412px;
  z-index: 2;
}
  .table tbody tr .tdgu5 {
    position: sticky;
    left: 412px;
    z-index: 2;
  }
.table2 thead tr .timeth,
.table2 thead tr  .thgu {
  position: sticky;
  top:0;
  z-index: 3;
}
  .table2 thead tr .timeth,
  .table2 thead tr .thgu {
    position: sticky;
    top: 0;
    z-index: 3;
  }
.table2 thead .gudingth th{
  position: sticky;
  top: 32px;
  z-index: 2;
}
  .table2 thead .gudingth th {
    position: sticky;
    top: 32px;
    z-index: 2;
  }
.table2 thead .equipname .name{
  z-index: 3;
}
  .table2 thead .equipname .name {
    z-index: 3;
  }
.table2 thead .equipname .dong1{
  z-index: 4;
  left: 0;
}
  .table2 thead .equipname .dong1 {
    z-index: 4;
    left: 0;
  }
.table2 thead .equipname .dong2{
  z-index: 5;
  left: 50px;
}
  .table2 thead .equipname .dong2 {
    z-index: 5;
    left: 50px;
  }
  .table2 thead .equipname .dong3 {
    z-index: 5;
    left: 100px;
  }
.table2 thead .equipname .dong3{
  z-index: 5;
  left: 100px;
}
  .table2 thead .equipname .dong4 {
    z-index: 5;
    left: 150px;
  }
.table2 thead .equipname .dong4{
  z-index: 5;
  left: 150px;
}
  .table2 thead .equipname .dong5 {
    z-index: 5;
    left: 250px;
  }
.table2 thead .equipname .dong5{
  z-index: 5;
  left: 250px;
}
  .table2 thead .equipname .dong6 {
    z-index: 5;
    left: 412px;
  }
.table2 thead .equipname .dong6{
  z-index: 5;
  left: 412px;
}
  #EfficiencyPO {
    overflow: hidden;
  }
#EfficiencyPO{
  overflow: hidden;
}
  .identifyingclass {
    width: 55px;
    height: 15px;
    display: inline-block
  }
.identifyingclass {
  width: 55px;
  height: 15px;
  display: inline-block
}
  .dataContent {
    white-space: nowrap;
    /*margin: 0;*/
    border-collapse: separate;
    border-spacing: 0;
    /*table-layout: fixed;*/
    border: 1px solid #ccc;
    /*border: 1px solid #ccc;*/
    width: 100%;
    /*height: 100%;*/
    /*overflow: hidden;*/
    /*overflow-y: auto;*/
    text-align: center;
  }
.dataContent {
  white-space: nowrap;
  /*margin: 0;*/
  border-collapse: separate;
  border-spacing: 0;
  /*table-layout: fixed;*/
  border: 1px solid #ccc;
  /*border: 1px solid #ccc;*/
  width: 100%;
  /*height: 100%;*/
  /*overflow: hidden;*/
  /*overflow-y: auto;*/
  text-align: center;
}
  .dataContent .thead th {
    background-color: #fafafa;
    text-align: center;
    height: 30px;
    padding: 5px;
  }
.dataContent .thead th {
  background-color: #fafafa;
  text-align: center;
  height: 30px;
  padding: 5px;
}
  .dataContent .notfixed th {
    width: auto;
  }
.dataContent .notfixed th {
  width: auto;
}
.dataContent .mathData td {
  padding: 10px;
}
  .dataContent .mathData td {
    padding: 10px;
  }
</style>
src/views/mdc/base/modules/efficiencyReport/EfficiencyList.vue
@@ -22,7 +22,7 @@
                  </a-select>
                </a-form-item>
              </a-col>
              <a-col :md="5" :sm="5">
              <a-col :md="6" :sm="6">
                <a-form-item label="驱动类型">
                  <a-select
                    :value="queryParams.driveType"
@@ -38,12 +38,41 @@
                  </a-select>
                </a-form-item>
              </a-col>
              <a-col :md="4" :sm="4">
              <a-col :md="6" :sm="6">
                <a-form-item label="时间">
                  <a-range-picker @change="dateParamChange" :disabledDate="disabledDate" format="YYYYMMDD"
                                  v-model="dates" :allowClear="false"/>
                </a-form-item>
              </a-col>
              <a-col :md="5" :sm="5" :xs="5">
                <a-form-item label="设备种类">
                  <a-select
                    :value="queryParams.deviceCategory"
                    mode="multiple"
                    placeholder="请选择设备种类"
                    allow-clear
                    :maxTagCount="1"
                    @change="selectChange($event,'deviceCategory')"
                  >
                    <a-select-option v-for="(item,index) in device_category_list" :value="item.value" :key="index">
                      {{item.label}}
                    </a-select-option>
                  </a-select>
                </a-form-item>
              </a-col>
              <a-col :md="2" :sm="2">
                <a
                  @click="toggleSearchStatus=!toggleSearchStatus"
                  @selectstart="$event.preventDefault()"
                  style="display: inline-block;height: 32px;line-height: 32px"
                >
                  {{ toggleSearchStatus ? '收起' : '展开' }}
                  <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
                </a>
              </a-col>
            </a-row>
            <a-row :gutter="24" v-if="toggleSearchStatus">
              <a-col :md="5" :sm="5" :xs="5">
                <a-form-item label="设备级别">
                  <a-select
@@ -61,16 +90,17 @@
                </a-form-item>
              </a-col>
              <a-col :md="5" :sm="5" :xs="5">
                <a-form-item label="设备种类">
                <a-form-item label="重要程度">
                  <a-select
                    :value="queryParams.deviceCategory"
                    :value="queryParams.deviceImportanceLevel"
                    mode="multiple"
                    placeholder="请选择设备种类"
                    placeholder="请选择设备重要程度"
                    allow-clear
                    :maxTagCount="1"
                    @change="selectChange($event,'deviceCategory')"
                    @change="selectChange($event,'deviceImportanceLevel')"
                  >
                    <a-select-option v-for="(item,index) in device_category_list" :value="item.value" :key="index">
                    <a-select-option v-for="(item,index) in device_importance_level_list" :value="item.value"
                                     :key="index">
                      {{item.label}}
                    </a-select-option>
                  </a-select>
@@ -129,6 +159,8 @@
                </th>
                <th class="thgu dong6 name" rowspan="2" style="min-width: 100px; max-width: 100px;width: 100px;">设备类型
                </th>
                <th class="thgu dong6 name" rowspan="2" style="min-width: 100px; max-width: 100px;width: 100px;">设备型号
                </th>
                <!--<th rowspan="2">组别</th>-->
                <template v-for="(tableHead, index) in tableHeads">
                  <th class="timeth" :colspan="checkedList.length">{{tableHead}}</th>
@@ -173,11 +205,12 @@
                    {{item.equipmentName}}
                  </td>
                  <td class="tdgu5 kaitou">{{item.equipmentType}}</td>
                  <td class="tdgu5 kaitou">{{item.equipmentModel}}</td>
                </template>
                <!--合计与平均值区域-->
                <template v-else>
                  <td colspan="6" class="tdgu kaitou">{{item.level1}}</td>
                  <td colspan="7" class="tdgu kaitou">{{item.level1}}</td>
                </template>
                <template v-for="(tableHead, index) in item.dataList">
@@ -185,7 +218,7 @@
                    {{tableHead.utilizationRate | numFilter}}
                  </td>
                  <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('kjl') > -1">
                    {{tableHead.openRate | numFilter}}
                    {{tableHead.openRate | n umFilter}}
                  </td>
                  <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('kjsj') > -1">
                    {{tableHead.openLong | getFormattedTime}}
@@ -243,7 +276,8 @@
          equipmentType: [],
          driveType: [],
          deviceLevel: [],
          deviceCategory: []
          deviceCategory: [],
          deviceImportanceLevel: []
        },
        queryParamEquip: {},
        queryParamPeople: {},
@@ -270,7 +304,8 @@
        processLongRowAverage: '',
        waitLongRowAverage: '',
        closeLongRowAverage: '',
        spinning: false
        spinning: false,
        toggleSearchStatus: false
      }
    },
    props: { nodeTree: '', Type: '', nodePeople: '' },
@@ -285,6 +320,7 @@
      this.getDriveTypeByApi()
      this.initDictData('device_level')
      this.initDictData('device_category')
      this.initDictData('device_importance_level')
    },
    mounted() {
      window.addEventListener('resize', this.handleWindowResize)
src/views/mdc/base/modules/efficiencyShiftReport/EfficiencyShiftList.vue
@@ -78,6 +78,22 @@
            <a-row :gutter="24" v-if="toggleSearchStatus">
              <a-col :md="5" :sm="5" :xs="5">
                <a-form-item label="设备种类">
                  <a-select
                    :value="queryParams.deviceCategory"
                    mode="multiple"
                    placeholder="请选择设备种类"
                    allow-clear
                    :maxTagCount="1"
                    @change="selectChange($event,'deviceCategory')"
                  >
                    <a-select-option v-for="(item,index) in device_category_list" :value="item.value" :key="index">
                      {{item.label}}
                    </a-select-option>
                  </a-select>
                </a-form-item>
              </a-col>
              <a-col :md="5" :sm="5" :xs="5">
                <a-form-item label="设备级别">
                  <a-select
                    :value="queryParams.deviceLevel"
@@ -94,16 +110,17 @@
                </a-form-item>
              </a-col>
              <a-col :md="5" :sm="5" :xs="5">
                <a-form-item label="设备种类">
                <a-form-item label="重要程度">
                  <a-select
                    :value="queryParams.deviceCategory"
                    :value="queryParams.deviceImportanceLevel"
                    mode="multiple"
                    placeholder="请选择设备种类"
                    placeholder="请选择设备重要程度"
                    allow-clear
                    :maxTagCount="1"
                    @change="selectChange($event,'deviceCategory')"
                    @change="selectChange($event,'deviceImportanceLevel')"
                  >
                    <a-select-option v-for="(item,index) in device_category_list" :value="item.value" :key="index">
                    <a-select-option v-for="(item,index) in device_importance_level_list" :value="item.value"
                                     :key="index">
                      {{item.label}}
                    </a-select-option>
                  </a-select>
@@ -141,6 +158,7 @@
          </a-form>
        </div>
      </div>
      <a-spin :spinning="spinning">
        <div class="container" id="EfficiencyShift" style="margin-top: 20px;">
          <div class="table2">
@@ -148,7 +166,9 @@
                   v-if="dataList.length>0">
              <thead>
              <tr class="thead fixed equipname">
                <th class="thgu dong1 name" rowspan="2" style="min-width: 50px; max-width: 50px;width: 50px;height: 66px">公司</th>
                <th class="thgu dong1 name" rowspan="2"
                    style="min-width: 50px; max-width: 50px;width: 50px;height: 66px">公司
                </th>
                <th class="thgu dong2 name" rowspan="2" style="min-width: 50px; max-width: 50px;width: 50px;">车间</th>
                <th class="thgu dong3 name" rowspan="2" style="min-width: 50px; max-width: 50px;width: 50px;">工段</th>
                <th class="thgu dong4 name" rowspan="2" style="min-width: 100px; max-width: 100px;width: 100px;">设备编号
@@ -207,7 +227,9 @@
                </template>
                <!--<td>{{item.tierType}}</td>-->
                <template v-for="(tableHead, index) in item.dataList">
                  <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('lyl') > -1">{{tableHead.utilizationRate | numFilter}}</td>
                  <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('lyl') > -1">
                    {{tableHead.utilizationRate | numFilter}}
                  </td>
                  <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('kjsj') > -1">
                    {{tableHead.openLong | getFormattedTime}}
                  </td>
@@ -254,13 +276,15 @@
        driveTypeList: [],
        device_level_list: [],
        device_category_list: [],
        device_importance_level_list: [],
        identifying: [],
        queryParam: {},
        queryParams: {
          equipmentType: [],
          driveType: [],
          deviceLevel: [],
          deviceCategory: []
          deviceCategory: [],
          deviceImportanceLevel: []
        },
        queryParamEquip: {},
        queryParamPeople: {},
@@ -305,6 +329,7 @@
      this.getDriveTypeByApi()
      this.initDictData('device_level')
      this.initDictData('device_category')
      this.initDictData('device_importance_level')
    },
    mounted() {
      window.addEventListener('resize', this.handleWindowResize)
src/views/mdc/common/BaseTree.vue
@@ -1,28 +1,28 @@
<template>
  <a-card class="tree_con" :loading="cardLoading" :bordered="false" >
  <a-card class="tree_con" :loading="cardLoading" :bordered="false">
    <a-spin :spinning="loading">
      <div style="display: flex;flex-direction: column;height: 100%">
          <div>
            <a-alert type="info" :showIcon="false" style="margin-right: 54px;padding-left: 5px">
              <div slot="message">
                <span v-if="this.currSelected.title">{{ getCurrSelectedTitle() }}</span>
                <a v-if="this.currSelected.title" style="margin-left: 10px" @click="onClearSelected">取消</a>
                <span v-else>无</span>
              </div>
            </a-alert>
            <div class="drawer-bottom-button">
              <a-dropdown :trigger="['click']" placement="bottomCenter">
                <a-menu slot="overlay">
                  <a-menu-item key="1" @click="expandAll">展开所有</a-menu-item>
                  <a-menu-item key="2" @click="closeAll">合并所有</a-menu-item>
                  <a-menu-item key="3" @click="refreshTree">刷新</a-menu-item>
                </a-menu>
                <a-button>
                  <a-icon type="bars"/>
                </a-button>
              </a-dropdown>
        <div>
          <a-alert type="info" :showIcon="false" style="margin-right: 54px;padding-left: 5px">
            <div slot="message">
              <span v-if="this.currSelected.title">{{ getCurrSelectedTitle() }}</span>
              <a v-if="this.currSelected.title" style="margin-left: 10px" @click="onClearSelected">取消</a>
              <span v-else>无</span>
            </div>
          </a-alert>
          <div class="drawer-bottom-button">
            <a-dropdown :trigger="['click']" placement="bottomCenter">
              <a-menu slot="overlay">
                <a-menu-item key="1" @click="expandAll">展开所有</a-menu-item>
                <a-menu-item key="2" @click="closeAll">合并所有</a-menu-item>
                <a-menu-item key="3" @click="refreshTree">刷新</a-menu-item>
              </a-menu>
              <a-button>
                <a-icon type="bars"/>
              </a-button>
            </a-dropdown>
          </div>
        </div>
        <a-input-search @search="handleSearch" style="width:100%;margin-top: 10px" placeholder="检索 类别编码/名称" allowClear
                        v-model="searchInput" @change="handleChange"/>
        <!-- showLine -->
@@ -58,7 +58,7 @@
        </div>
      </div>
    </a-spin>
    <tier-model ref="tierModalForm"  @ok="modalFormOk"></tier-model>
    <tier-model ref="tierModalForm" @ok="modalFormOk"></tier-model>
  </a-card>
</template>
@@ -70,7 +70,7 @@
  } from '@/api/manage'
  import Tooltip from 'ant-design-vue/es/tooltip'
  import TierModel from './modules/baseTree/TierModel'
  import {mapActions} from 'vuex'
  import { mapActions } from 'vuex'
  export default {
    name: 'BaseTree',
@@ -80,6 +80,10 @@
        default() {
          return true
        }
      },
      filterAbnormalDeviceKey: {
        type: String,
        default: ''
      }
    },
    components: {
@@ -105,7 +109,7 @@
        allTreeKeys: [],
        currSelected: {},
        hiding: false,
        mathChange:''
        mathChange: ''
      }
    }
    ,
@@ -149,17 +153,17 @@
      queryTreeData() {
        this.loading = true
        this.cardLoading = true
        this.QueryProduction().then(res => {
        this.QueryProduction(this.filterAbnormalDeviceKey).then(res => {
          if (res.success) {
            this.dataList = []
            this.allTreeKeys = []
            this.treeDataSource = res.result
            this.generateList(res.result)
            this.expandedKeys=this.allTreeKeys
            this.expandedKeys = this.allTreeKeys
          } else {
            this.$message.warn(res.message)
          }
        }).finally(() =>{
        }).finally(() => {
          this.loading = false
          this.cardLoading = false
        })
@@ -181,7 +185,7 @@
        let search = this.searchInput
        let expandedKeys = this.dataList
          .map(item => {
            if(item.title !=null){
            if (item.title != null) {
              if (item.title.indexOf(search) > -1) {
                return this.getParentKey(item.key, this.treeDataSource)
              }
@@ -200,7 +204,7 @@
        let expandedKeys = this.dataList
          .map(item => {
            if(item.title !=null){
            if (item.title != null) {
              if (item.title.indexOf(search) > -1) {
                return this.getParentKey(item.key, this.treeDataSource)
              }
@@ -262,9 +266,9 @@
        if (!ids) {
          // this.$message.warning('请选择一条记录!')
          this.$notification.warning({
            message:'消息',
            description:"请选择一条记录"
          });
            message: '消息',
            description: '请选择一条记录'
          })
          return
        } else {
          var that = this
@@ -276,7 +280,7 @@
              deleteAction(that.url.deleteBatch, { ids: ids }).then((res) => {
                if (res.success) {
                  that.$message.success(res.message)
                  that.queryTreeData();
                  that.queryTreeData()
                } else {
                  that.$message.warning(res.message)
                }
@@ -288,7 +292,7 @@
        }
      },
      modalFormOk(val) {
        console.log("mmm")
        console.log('mmm')
        // 新增/修改 成功时,重载列表
        this.queryTreeData()
        // 新增/修改 成功时,重载列表
@@ -298,7 +302,7 @@
    watch: {
      currSelected(val) { //监听currSelected 变化,将变化后的数值传递给 getCurrSelected 事件
        this.$emit('getCurrSelected', val)
      },
      }
    }
  }
</script>
@@ -368,37 +372,41 @@
    border-radius: 0 0 2px 2px;
  }
  .tree_con{
  .tree_con {
    overflow: hidden;
  }
  @media screen and (min-width: 1920px){
    .tree_con{
      height: 748px!important;
    }
  }
  @media screen and (min-width: 1680px) and (max-width: 1920px){
    .tree_con{
      height: 748px!important;
    }
  }
  @media screen and (min-width: 1400px) and (max-width: 1680px){
    .tree_con{
      height: 600px!important;
    }
  }
  @media screen and (min-width: 1280px) and (max-width: 1400px){
    .tree_con{
      height: 501px!important;
    }
  }
  @media screen and (max-width: 1280px){
    .tree_con{
      height: 501px!important;
  @media screen and (min-width: 1920px) {
    .tree_con {
      height: 748px !important;
    }
  }
  /deep/ .ant-card-body,/deep/ .ant-spin-nested-loading,/deep/ .ant-spin-container{
  @media screen and (min-width: 1680px) and (max-width: 1920px) {
    .tree_con {
      height: 748px !important;
    }
  }
  @media screen and (min-width: 1400px) and (max-width: 1680px) {
    .tree_con {
      height: 600px !important;
    }
  }
  @media screen and (min-width: 1280px) and (max-width: 1400px) {
    .tree_con {
      height: 501px !important;
    }
  }
  @media screen and (max-width: 1280px) {
    .tree_con {
      height: 501px !important;
    }
  }
  /deep/ .ant-card-body, /deep/ .ant-spin-nested-loading, /deep/ .ant-spin-container {
    height: 100%;
  }
</style>
vue.config.js
@@ -40,11 +40,11 @@
    // 生产环境,开启js\css压缩
    if (process.env.NODE_ENV === 'production') {
        config.plugin('compressionPlugin').use(new CompressionPlugin({
          test: /\.(js|css|less)$/, // 匹配文件名
          threshold: 10240, // 对超过10k的数据压缩
          deleteOriginalAssets: false // 不删除源文件
        }))
      config.plugin('compressionPlugin').use(new CompressionPlugin({
        test: /\.(js|css|less)$/, // 匹配文件名
        threshold: 10240, // 对超过10k的数据压缩
        deleteOriginalAssets: false // 不删除源文件
      }))
    }
    // 配置 webpack 识别 markdown 为普通的文件
@@ -60,9 +60,9 @@
      .rule('vxe')
      .test(/\.js$/)
      .include
        .add(resolve('node_modules/vxe-table'))
        .add(resolve('node_modules/vxe-table-plugin-antd'))
        .end()
      .add(resolve('node_modules/vxe-table'))
      .add(resolve('node_modules/vxe-table-plugin-antd'))
      .end()
      .use()
      .loader('babel-loader')
      .end()
@@ -84,15 +84,16 @@
  devServer: {
    port: 3000,
    open: true,
    proxy: {
     /* '/api': {
        target: 'https://mock.ihx.me/mock/5baf3052f7da7e07e04a5116/antd-pro', //mock API接口系统
        ws: false,
        changeOrigin: true,
        pathRewrite: {
          '/jeecg-boot': ''  //默认所有请求都加了jeecg-boot前缀,需要去掉
        }
      }, */
      /* '/api': {
         target: 'https://mock.ihx.me/mock/5baf3052f7da7e07e04a5116/antd-pro', //mock API接口系统
         ws: false,
         changeOrigin: true,
         pathRewrite: {
           '/jeecg-boot': ''  //默认所有请求都加了jeecg-boot前缀,需要去掉
         }
       }, */
      '/jeecg-boot': {
        target: 'http://localhost:8080', // 请求本地 需要jeecg-boot后台项目
        ws: false,