src/views/mdc/base/modules/OEEAnalysis/OEEAnalysisList.vue
@@ -16,7 +16,7 @@
                  @change="selectChange($event,'equipmentType')"
                >
                  <a-select-option v-for="(item,index) in equipmentTypeList" :value="item.value" :key="index">
                    {{item.label}}
                    {{ item.label }}
                  </a-select-option>
                </a-select>
              </a-form-item>
@@ -32,7 +32,7 @@
                  @change="selectChange($event,'driveType')"
                >
                  <a-select-option v-for="(item,index) in driveTypeList" :value="item.value" :key="index">
                    {{item.label}}
                    {{ item.label }}
                  </a-select-option>
                </a-select>
              </a-form-item>
@@ -76,7 +76,7 @@
                  @change="selectChange($event,'deviceLevel')"
                >
                  <a-select-option v-for="(item,index) in device_level_list" :value="item.value" :key="index">
                    {{item.label}}
                    {{ item.label }}
                  </a-select-option>
                </a-select>
              </a-form-item>
@@ -114,16 +114,13 @@
            <a-col :md="6" :sm="6" :xs="6">
              <a-form-item label="重要程度">
                <a-select
                  :value="queryParams.deviceImportanceLevel"
                  mode="multiple"
                  v-model="queryParam.deviceImportanceLevel"
                  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}}
                    {{ item.label }}
                  </a-select-option>
                </a-select>
              </a-form-item>
@@ -141,7 +138,7 @@
                >
                  <a-select-option v-for="(item,index) in percentage_level_list" :value="item.value"
                                   :key="index">
                    {{item.label}}
                    {{ item.label }}
                  </a-select-option>
                </a-select>
              </a-form-item>
@@ -174,537 +171,496 @@
        <!--</template>-->
      </a-table>
    </div>
    <!--<div class="pagination">-->
    <!--<a-pagination-->
    <!--:total=dataSource.total-->
    <!--:show-total="(total, range) => `${range[0]}-${range[1]} 共 ${total} 条`"-->
    <!--:page-size="+queryParam.pageSize"-->
    <!--:default-current="1"-->
    <!--:current=+queryParam.pageNo-->
    <!--show-size-changer-->
    <!--:pageSizeOptions="['20','30','40','50']"-->
    <!--@change="handlePageNoChange"-->
    <!--@showSizeChange="handlePageSizeChange"-->
    <!--/>-->
    <!--</div>-->
  </div>
</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 { getAction } from '@/api/manage'
import $ from 'jquery'
import '@/components/table2excel/table2excel'
import { ajaxGetDictItems, getDictItemsFromCache } from '@/api/api'
import api from '@api/mdc'
  // import EditableCell from './EditableCell.vue'
// import EditableCell from './EditableCell.vue'
  export default {
    name: 'OEEAnalysisList',
    components: {},
    data() {
      return {
        dates: [moment().subtract('month', 1), moment().subtract('month', 1)],
        queryParam: {
          pageSize: 10000,
          pageNo: 1
export default {
  name: 'OEEAnalysisList',
  components: {},
  data() {
    return {
      dates: [moment().subtract('month', 1), moment().subtract('month', 1)],
      queryParam: {
        pageSize: 10000,
        pageNo: 1
      },
      queryParams: {
        equipmentType: [],
        driveType: [],
        deviceLevel: [],
        percentageLevel: []
      },
      queryParamEquip: {},
      queryParamPeople: {},
      url: {
        list: '/mdc/mdcOverallEquipmentEfficiency/list',
        queryEquipmentType: '/mdc/mdcEquipmentType/queryEquipmentType'
      },
      columns: [
        {
          title: '序号',
          dataIndex: '',
          key: 'rowIndex',
          width: 60,
          align: 'center',
          customRender: function(t, r, index) {
            return parseInt(index) + 1
          }
        },
        queryParams: {
          equipmentType: [],
          driveType: [],
          deviceLevel: [],
          deviceCategory: [],
          deviceImportanceLevel: [],
          percentageLevel: []
        {
          title: '车间',
          align: 'center',
          dataIndex: 'productionName',
          width: 110
        },
        queryParamEquip: {},
        queryParamPeople: {},
        url: {
          list: '/mdc/mdcOverallEquipmentEfficiency/list',
          queryEquipmentType: '/mdc/mdcEquipmentType/queryEquipmentType'
        {
          title: '设备编号',
          align: 'center',
          dataIndex: 'equipmentId',
          width: 120
        },
        columns: [
          {
            title: '序号',
            dataIndex: '',
            key: 'rowIndex',
            width: 60,
            align: 'center',
            customRender: function(t, r, index) {
              return parseInt(index) + 1
        {
          title: '设备名称',
          align: 'center',
          width: 120,
          dataIndex: 'equipmentName'
        },
        {
          title: '设备型号',
          align: 'center',
          width: 120,
          dataIndex: 'equipmentModel',
          scopedSlots: { customRender: 'equipmentModel' }
        },
        {
          title: '日期',
          align: 'center',
          width: 100,
          dataIndex: 'validDate'
        },
        {
          title: '班次',
          align: 'center',
          width: 100,
          dataIndex: 'shift'
        },
        {
          title: '每班小时',
          dataIndex: 'shiftTimeCount',
          align: 'center',
          width: 100
        },
        {
          title: '加班时间(分钟)',
          dataIndex: 'overtime',
          align: 'center',
          width: 100
        },
        {
          title: '实际班产天数',
          dataIndex: 'actualWorkDayCount',
          align: 'center',
          width: 100
        },
        {
          title: '月度实际班产总时间(分钟)',
          dataIndex: 'monthActualWorkDayTimeCount',
          align: 'center',
          width: 100
        },
        {
          title: '非计划停机损失(分钟)(一个月)',
          children: [
            {
              title: '故障停机',
              dataIndex: 'breakdownDownDuration',
              align: 'center',
              width: 100
            },
            {
              title: '换型调试',
              dataIndex: 'conversionDebugDuration',
              align: 'center',
              width: 100
            },
            {
              title: '物料短缺',
              dataIndex: 'materialShortageDuration',
              align: 'center',
              width: 100
            },
            {
              title: '计划等任务',
              dataIndex: 'plannedTaskDuration',
              align: 'center',
              width: 100
            },
            {
              title: '检验',
              dataIndex: 'inspectDuration',
              align: 'center',
              width: 100
            },
            {
              title: '其他',
              dataIndex: 'otherDuration',
              align: 'center',
              width: 100
            }
          },
          {
            title: '车间',
            align: 'center',
            dataIndex: 'productionName',
            width: 110
          },
          {
            title: '设备编号',
            align: 'center',
            dataIndex: 'equipmentId',
            width: 120
          },
          {
            title: '设备名称',
            align: 'center',
            width: 120,
            dataIndex: 'equipmentName'
          },
          {
            title: '设备型号',
            align: 'center',
            width: 120,
            dataIndex: 'equipmentModel',
            scopedSlots: { customRender: 'equipmentModel' }
          },
          {
            title: '日期',
            align: 'center',
            width: 100,
            dataIndex: 'validDate'
          },
          {
            title: '班次',
            align: 'center',
            width: 100,
            dataIndex: 'shift'
          },
          {
            title: '每班小时',
            dataIndex: 'shiftTimeCount',
            align: 'center',
            width: 100
          },
          {
            title: '加班时间(分钟)',
            dataIndex: 'overtime',
            align: 'center',
            width: 100
          },
          {
            title: '实际班产天数',
            dataIndex: 'actualWorkDayCount',
            align: 'center',
            width: 100
          },
          {
            title: '月度实际班产总时间(分钟)',
            dataIndex: 'monthActualWorkDayTimeCount',
            align: 'center',
            width: 100
          },
          {
            title: '非计划停机损失(分钟)(一个月)',
            children: [
              {
                title: '故障停机',
                dataIndex: 'breakdownDownDuration',
                align: 'center',
                width: 100
              },
              {
                title: '换型调试',
                dataIndex: 'conversionDebugDuration',
                align: 'center',
                width: 100
              },
              {
                title: '物料短缺',
                dataIndex: 'materialShortageDuration',
                align: 'center',
                width: 100
              },
              {
                title: '计划等任务',
                dataIndex: 'plannedTaskDuration',
                align: 'center',
                width: 100
              },
              {
                title: '检验',
                dataIndex: 'inspectDuration',
                align: 'center',
                width: 100
              },
              {
                title: '其他',
                dataIndex: 'otherDuration',
                align: 'center',
                width: 100
              }
            ]
          },
          {
            title: '计划停机时间(分钟)(一个月)',
            children: [
              {
                title: '计划保养',
                dataIndex: 'plannedMaintenanceDuration',
                align: 'center',
                width: 100
              },
              {
                title: '会议/培训',
                dataIndex: 'conferenceTrainingDuration',
                align: 'center',
                width: 100
              },
              {
                title: '其他休息等',
                dataIndex: 'otherRestDuration',
                align: 'center',
                width: 100
              }]
          },
          {
            title: '负荷时间(小时)',
            dataIndex: 'loadTime',
            align: 'center',
            width: 100
          },
          {
            title: '时间开动率',
            dataIndex: 'timeActuationRate',
            align: 'center',
            width: 100,
            customRender: text => text != 0 ? parseFloat((text * 100).toFixed(2)) + '%' : 0
          },
          // {
          //   title: '加工零件数(件)',
          //   dataIndex: 'processQuantity',
          //   align: 'center',
          //   width: 120
          // },
          // {
          //   title: '标准加工时间(分钟)',
          //   dataIndex: 'standardProcessDuration',
          //   align: 'center',
          //   width: 120
          // },
          {
            title: '性能开动率',
            dataIndex: 'performanceRate',
            align: 'center',
            width: 100,
            customRender: text => text != 0 ? parseFloat((text * 100).toFixed(2)) + '%' : 0
          },
          {
            title: '废品数',
            dataIndex: 'unqualifiedQuantity',
            align: 'center',
            width: 100
          },
          {
            title: '合格率',
            dataIndex: 'passRate',
            align: 'center',
            width: 100,
            customRender: text => text != 0 ? parseFloat((text * 100).toFixed(2)) + '%' : 0
          },
          {
            title: '设备综合效率',
            dataIndex: 'overallEquipmentEfficiency',
            align: 'center',
            width: 100,
            customRender: text => text != 0 ? parseFloat((text * 100).toFixed(2)) + '%' : 0
          }
        ],
        dataSource: [],
        driveTypeList: [],
        equipmentTypeList: [],
        device_level_list: [],
        device_category_list: [],
        percentage_level_list: [],
        scrollY: 465,
        tableLoading: false,
        toggleSearchStatus: false
      }
    },
    props: { nodeTree: '', Type: '', nodePeople: '' },
    created() {
      const { isEquipment, productionId } = this.$route.params
      if (productionId) {
        console.log('productionId', productionId)
        console.log('isEquipment', isEquipment)
        if (!isEquipment) this.queryParam.parentId = productionId
        else this.queryParam.equipmentId = productionId
      }
          ]
        },
        {
          title: '计划停机时间(分钟)(一个月)',
          children: [
            {
              title: '计划保养',
              dataIndex: 'plannedMaintenanceDuration',
              align: 'center',
              width: 100
            },
            {
              title: '会议/培训',
              dataIndex: 'conferenceTrainingDuration',
              align: 'center',
              width: 100
            },
            {
              title: '其他休息等',
              dataIndex: 'otherRestDuration',
              align: 'center',
              width: 100
            }]
        },
        {
          title: '负荷时间(小时)',
          dataIndex: 'loadTime',
          align: 'center',
          width: 100
        },
        {
          title: '时间开动率',
          dataIndex: 'timeActuationRate',
          align: 'center',
          width: 100,
          customRender: text => text != 0 ? parseFloat((text * 100).toFixed(2)) + '%' : 0
        },
        // {
        //   title: '加工零件数(件)',
        //   dataIndex: 'processQuantity',
        //   align: 'center',
        //   width: 120
        // },
        // {
        //   title: '标准加工时间(分钟)',
        //   dataIndex: 'standardProcessDuration',
        //   align: 'center',
        //   width: 120
        // },
        {
          title: '性能开动率',
          dataIndex: 'performanceRate',
          align: 'center',
          width: 100,
          customRender: text => text != 0 ? parseFloat((text * 100).toFixed(2)) + '%' : 0
        },
        {
          title: '废品数',
          dataIndex: 'unqualifiedQuantity',
          align: 'center',
          width: 100
        },
        {
          title: '合格率',
          dataIndex: 'passRate',
          align: 'center',
          width: 100,
          customRender: text => text != 0 ? parseFloat((text * 100).toFixed(2)) + '%' : 0
        },
        {
          title: '设备综合效率',
          dataIndex: 'overallEquipmentEfficiency',
          align: 'center',
          width: 100,
          customRender: text => text != 0 ? parseFloat((text * 100).toFixed(2)) + '%' : 0
        }
      ],
      dataSource: [],
      driveTypeList: [],
      equipmentTypeList: [],
      device_level_list: [],
      device_importance_level_list: [],
      percentage_level_list: [],
      scrollY: 465,
      tableLoading: false,
      toggleSearchStatus: false
    }
  },
  props: { nodeTree: '', Type: '', nodePeople: '' },
  created() {
    const { isEquipment, productionId } = this.$route.params
    if (productionId) {
      console.log('productionId', productionId)
      console.log('isEquipment', isEquipment)
      if (!isEquipment) this.queryParam.parentId = productionId
      else this.queryParam.equipmentId = productionId
    }
      this.queryParam.startTime = moment(this.dates[0]).format('YYYY-MM')
      this.queryParam.endTime = moment(this.dates[1]).format('YYYY-MM')
      this.queryParam.typeTree = '1'
      this.loadData()
      this.getDriveTypeByApi()
      this.queryGroup()
      this.initDictData('device_level')
      this.initDictData('device_category')
      this.initDictData('device_importance_level')
      this.initDictData('percentage_level')
    this.queryParam.startTime = moment(this.dates[0]).format('YYYY-MM')
    this.queryParam.endTime = moment(this.dates[1]).format('YYYY-MM')
    this.queryParam.typeTree = '1'
    this.loadData()
    this.getDriveTypeByApi()
    this.queryGroup()
    this.initDictData('device_level')
    this.initDictData('device_category')
    this.initDictData('device_importance_level')
    this.initDictData('percentage_level')
  },
  mounted() {
    window.addEventListener('resize', this.handleWindowResize)
    // this.handleWindowResize()
  },
  beforeDestroy() {
    window.removeEventListener('resize', this.handleWindowResize)
  },
  watch: {
    Type(valmath) {
      this.dataList = []
      this.queryParam.typeTree = valmath
    },
    mounted() {
      window.addEventListener('resize', this.handleWindowResize)
      // this.handleWindowResize()
    },
    beforeDestroy() {
      window.removeEventListener('resize', this.handleWindowResize)
    },
    watch: {
      Type(valmath) {
        this.dataList = []
        this.queryParam.typeTree = valmath
      },
      nodeTree(val) { //监听currSelected 变化,将变化后的数值传递给 getCurrSelected 事件
        console.log(val)
        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()
    nodeTree(val) { //监听currSelected 变化,将变化后的数值传递给 getCurrSelected 事件
      console.log(val)
      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 = ''
        }
      },
      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()
        }
        this.searchQuery()
      }
    },
    methods: {
      initDictData(dictCode) {
        // //优先从缓存中读取字典配置
        if (getDictItemsFromCache(dictCode)) {
          this[dictCode + '_list'] = getDictItemsFromCache(dictCode)
    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()
      }
    }
  },
  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
        }
        //根据字典Code, 初始化字典数组
        ajaxGetDictItems(dictCode, null).then((res) => {
          if (res.success) {
            this[dictCode + '_list'] = res.result
            return
          }
        })
      },
      selectChange(value, key) {
        this.queryParams[key] = value
      },
      dateParamChange(value) {
        console.log('dateParamChangeValue', value)
        this.dates = value
        this.queryParam.startTime = moment(this.dates[0]).format('YYYY-MM')
        this.queryParam.endTime = moment(this.dates[1]).format('YYYY-MM')
      },
      })
    },
    selectChange(value, key) {
      this.queryParams[key] = value
    },
    dateParamChange(value) {
      console.log('dateParamChangeValue', value)
      this.dates = value
      this.queryParam.startTime = moment(this.dates[0]).format('YYYY-MM')
      this.queryParam.endTime = moment(this.dates[1]).format('YYYY-MM')
    },
      handleDateChange(value) {
        console.log('handleDateChangeValue', value)
        if (!value.length) {
          delete this.queryParam.startTime
          delete this.queryParam.endTime
          this.dates = []
        }
      },
      exportExcel() {
        $('#EfficiencyShift').table2excel({
          exclude: '.noExl',
          name: 'Excel Document Name',
          filename: '设备综合效率分析',
          exclude_img: true,
          fileext: '.xls',
          exclude_links: true,
          exclude_inputs: true
        })
      },
      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 => {
          if (Array.isArray(this.queryParams[item])) {
            // 此处为保证接口参数不多余,可省略
            this.queryParam[item] = this.queryParams[item].join()
            if (this.queryParams[item].length === 0) delete this.queryParam[item]
            console.log('this.queryParam', this.queryParam)
          }
        })
        this.loadData()
      },
      searchReset() {
        this.queryParam = {
          pageSize: 10000,
          pageNo: 1,
          typeTree: 1
        }
        this.queryParams = {
          equipmentType: [],
          driveType: [],
          deviceLevel: [],
          deviceCategory: []
        }
    handleDateChange(value) {
      console.log('handleDateChangeValue', value)
      if (!value.length) {
        delete this.queryParam.startTime
        delete this.queryParam.endTime
        this.dates = []
        this.loadData()
      },
      }
    },
      /**
       * 调用接口获取控制系统类型
       */
      getDriveTypeByApi() {
        api.getDriveTypeApi().then((res) => {
          if (res.success) this.driveTypeList = res.result
        })
      },
    exportExcel() {
      $('#EfficiencyShift').table2excel({
        exclude: '.noExl',
        name: 'Excel Document Name',
        filename: '设备综合效率分析',
        exclude_img: true,
        fileext: '.xls',
        exclude_links: true,
        exclude_inputs: true
      })
    },
      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.$notification.warning({
              message: '消息',
              description: res.message
            })
          }
        })
      },
    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 => {
        if (Array.isArray(this.queryParams[item])) {
          // 此处为保证接口参数不多余,可省略
          this.queryParam[item] = this.queryParams[item].join()
          if (this.queryParams[item].length === 0) delete this.queryParam[item]
        }
      })
      this.loadData()
    },
      loadData() {
        this.tableLoading = true
        getAction(this.url.list, this.queryParam)
          .then(res => {
            if (res.success && res.result) {
              this.dataSource = res.result
              this.tableLoading = false
    searchReset() {
      this.queryParam = {
        pageSize: 10000,
        pageNo: 1,
        typeTree: 1
      }
      this.queryParams = {
        equipmentType: [],
        driveType: [],
        deviceLevel: []
      }
      this.dates = []
      this.loadData()
    },
    /**
     * 调用接口获取控制系统类型
     */
    getDriveTypeByApi() {
      api.getDriveTypeApi().then((res) => {
        if (res.success) this.driveTypeList = res.result
      })
    },
    queryGroup() {
      getAction(this.url.queryEquipmentType).then(res => {
        if (res.success) {
          this.equipmentTypeList = res.result.map(item => {
            return {
              label: item.equipmentTypeName,
              value: item.equipmentTypeName
            }
          })
          .finally(() => {
            this.tableLoading = false
            this.handleWindowResize()
        } else {
          this.$notification.warning({
            message: '消息',
            description: res.message
          })
      },
        }
      })
    },
      /**
       * 分页器页数发生改变时触发
       * @param page 改变后页数
       * @param pageSize 改变后每页展示数据条数
       */
      handlePageNoChange(page, pageSize) {
        this.queryParam.pageNo = page
        this.loadData()
      },
    loadData() {
      this.tableLoading = true
      getAction(this.url.list, this.queryParam)
        .then(res => {
          if (res.success && res.result) {
            this.dataSource = res.result
            this.tableLoading = false
          }
        })
        .finally(() => {
          this.tableLoading = false
          this.handleWindowResize()
        })
    },
      /**
       * 分页器每页展示数据条数发生改变时触发
       * @param current 改变后页数
       * @param size 改变后每页展示数据条数
       */
      handlePageSizeChange(current, size) {
        this.queryParam.pageSize = size
        this.loadData()
      },
      onCellChange(key, dataIndex, value) {
        console.log('触发onCellChange', key, dataIndex, value)
      },
      /**
       * 当浏览器可视窗口尺寸发生改变时触发
       */
      handleWindowResize() {
        const devicePixelRatio = window.devicePixelRatio // 浏览器缩放比
        console.log('devicePixelRatio', devicePixelRatio)
        if (devicePixelRatio < 1) return // 缩放比小于1时不进行高度重新设置,因为scrollY变大后表格超出部分会被隐藏导致滚动条不可见
        const clientHeight = document.body.clientHeight || document.documentElement.clientHeight// 浏览器可视区域高度
        console.log('clientHeight', clientHeight)
        const containerTopToClientTopHeight = document.getElementById('EfficiencyShift').getBoundingClientRect().top // 表格容器顶部到浏览器可视区域顶部的间距
        console.log('containerTopToClientTopHeight', containerTopToClientTopHeight)
        // const tableHeadHeight = +window.getComputedStyle(document.querySelector('.ant-table-thead th')).height.slice(0, -2) // 表格表头高度
        const tableHeadHeight = document.querySelector('.ant-table-thead th').offsetHeight // 表格表头高度
        console.log('tableHeadHeight', tableHeadHeight)
        // this.scrollY = clientHeight - containerTopToClientTopHeight - tableHeadHeight
        const tableSuitableScrollY = clientHeight - containerTopToClientTopHeight - tableHeadHeight // 表格垂直滚动条合适高度(表格水平滚动条刚好在可视区域最下方)
        // const tableSuitableScrollY = 600
        console.log('tableSuitableScrollY', tableSuitableScrollY)
        const tableContainerHeight = document.getElementById('EfficiencyShift').offsetHeight
        console.log('tableContainerHeight', tableContainerHeight)
        const tableMaxScrollY = tableContainerHeight - tableHeadHeight // 表格垂直滚动条最大高度(若超出则水平滚动条被遮挡)
        console.log('tableMaxScrollY', tableMaxScrollY)
        if (tableSuitableScrollY && tableSuitableScrollY < tableMaxScrollY) this.scrollY = tableSuitableScrollY
        else this.scrollY = tableMaxScrollY
        console.log('scrollY', this.scrollY)
      }
    /**
     * 当浏览器可视窗口尺寸发生改变时触发
     */
    handleWindowResize() {
      const devicePixelRatio = window.devicePixelRatio // 浏览器缩放比
      console.log('devicePixelRatio', devicePixelRatio)
      if (devicePixelRatio < 1) return // 缩放比小于1时不进行高度重新设置,因为scrollY变大后表格超出部分会被隐藏导致滚动条不可见
      const clientHeight = document.body.clientHeight || document.documentElement.clientHeight// 浏览器可视区域高度
      console.log('clientHeight', clientHeight)
      const containerTopToClientTopHeight = document.getElementById('EfficiencyShift').getBoundingClientRect().top // 表格容器顶部到浏览器可视区域顶部的间距
      console.log('containerTopToClientTopHeight', containerTopToClientTopHeight)
      // const tableHeadHeight = +window.getComputedStyle(document.querySelector('.ant-table-thead th')).height.slice(0, -2) // 表格表头高度
      const tableHeadHeight = document.querySelector('.ant-table-thead th').offsetHeight // 表格表头高度
      console.log('tableHeadHeight', tableHeadHeight)
      // this.scrollY = clientHeight - containerTopToClientTopHeight - tableHeadHeight
      const tableSuitableScrollY = clientHeight - containerTopToClientTopHeight - tableHeadHeight // 表格垂直滚动条合适高度(表格水平滚动条刚好在可视区域最下方)
      // const tableSuitableScrollY = 600
      console.log('tableSuitableScrollY', tableSuitableScrollY)
      const tableContainerHeight = document.getElementById('EfficiencyShift').offsetHeight
      console.log('tableContainerHeight', tableContainerHeight)
      const tableMaxScrollY = tableContainerHeight - tableHeadHeight // 表格垂直滚动条最大高度(若超出则水平滚动条被遮挡)
      console.log('tableMaxScrollY', tableMaxScrollY)
      if (tableSuitableScrollY && tableSuitableScrollY < tableMaxScrollY) this.scrollY = tableSuitableScrollY
      else this.scrollY = tableMaxScrollY
      console.log('scrollY', this.scrollY)
    }
  }
}
</script>
<style scoped lang="less">
  .pagination {
    display: flex;
    justify-content: end;
    margin: 20px 0;
  }
.pagination {
  display: flex;
  justify-content: end;
  margin: 20px 0;
}
.device_list {
  overflow: hidden;
  display: flex;
  flex-direction: column;
}
@media screen and (min-width: 1920px) {
  .device_list {
    overflow: hidden;
    display: flex;
    flex-direction: column;
    height: 811px !important;
  }
}
  @media screen and (min-width: 1920px) {
    .device_list {
      height: 811px !important;
    }
@media screen and (min-width: 1680px) and (max-width: 1920px) {
  .device_list {
    height: 811px !important;
  }
}
  @media screen and (min-width: 1680px) and (max-width: 1920px) {
    .device_list {
      height: 811px !important;
    }
@media screen and (min-width: 1400px) and (max-width: 1680px) {
  .device_list {
    height: 663px !important;
  }
}
  @media screen and (min-width: 1400px) and (max-width: 1680px) {
    .device_list {
      height: 663px !important;
    }
@media screen and (min-width: 1280px) and (max-width: 1400px) {
  .device_list {
    height: 564px !important;
  }
}
  @media screen and (min-width: 1280px) and (max-width: 1400px) {
    .device_list {
      height: 564px !important;
    }
@media screen and (max-width: 1280px) {
  .device_list {
    height: 564px !important;
  }
}
  @media screen and (max-width: 1280px) {
    .device_list {
      height: 564px !important;
    }
/deep/ .ant-table-body {
  &::-webkit-scrollbar {
    height: 12px;
  }
  /deep/ .ant-table-body {
    &::-webkit-scrollbar {
      height: 12px;
    }
  }
}
</style>