src/views/mdc/base/modules/efficiencyReport/EfficiencyList.vue
@@ -6,12 +6,34 @@
        <div class="table-page-search-wrapper">
          <a-form layout="inline" @keyup.enter.native="searchQuery">
            <a-row :gutter="24">
              <a-col :md="4" :sm="4">
              <a-col :md="5" :sm="5">
                <a-form-item label="设备类型">
                  <a-select placeholder="请选择设备类型" :triggerChange="true" v-model="queryParam.equipmentType"
                            :allowClear="true">
                    <a-select-option v-for='item in selectList' :key='item.id' :value='item.equipmentTypeName'>
                      {{item.equipmentTypeName}}
                  <a-select
                    :value="queryParams.equipmentType"
                    mode="multiple"
                    placeholder="请选择设备类型"
                    allow-clear
                    :maxTagCount="1"
                    @change="selectChange($event,'equipmentType')"
                  >
                    <a-select-option v-for="(item,index) in equipmentTypeList" :value="item.value" :key="index">
                      {{item.label}}
                    </a-select-option>
                  </a-select>
                </a-form-item>
              </a-col>
              <a-col :md="6" :sm="6">
                <a-form-item label="驱动类型">
                  <a-select
                    :value="queryParams.driveType"
                    mode="multiple"
                    placeholder="请选择驱动类型"
                    allow-clear
                    :maxTagCount="1"
                    @change="selectChange($event,'driveType')"
                  >
                    <a-select-option v-for="(item,index) in driveTypeList" :value="item.value" :key="index">
                      {{item.label}}
                    </a-select-option>
                  </a-select>
                </a-form-item>
@@ -19,52 +41,104 @@
              <a-col :md="6" :sm="6">
                <a-form-item label="时间">
                  <a-range-picker @change="dateParamChange" :disabledDate="disabledDate" format="YYYYMMDD"
                                  v-model="dates"/>
                                  v-model="dates" :allowClear="false"/>
                </a-form-item>
              </a-col>
              <a-col :md="14" :sm="14" style="display: flex;align-items: flex-start;-webkit-align-items: flex-start;justify-content: space-between;">
                <a-space>
                  <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
                  <a-button type="primary" @click="searchReset" icon="reload">重置</a-button>
                  <a-button type="primary" @click="exportExcel" icon="download">导出</a-button>
                  <a-button type="primary" icon="printer" v-print="'#Efficiency'" v-has="'efficiency:print'">打印</a-button>
                </a-space>
                <table cellpadding="5" cellspacing="1" style="border: 1px solid darkgray;margin-left: 24px">
              <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
                    :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.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" type="flex" align="middle">
              <a-col :md="24" :sm="24" :xs="24"
                     style="display: flex;justify-content: space-between;align-items: flex-start">
                <div>
                  <a-space style="margin-right: 20px">
                    <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
                    <a-button type="primary" @click="searchReset" icon="reload">重置</a-button>
                    <a-button type="primary" @click="exportExcel" icon="download">导出</a-button>
                    <a-button type="primary" icon="printer" v-print="'#Efficiency'"
                              v-has="'efficiency:print'">打印
                    </a-button>
                  </a-space>
                  <a-checkbox-group :value="checkedList" :default-value="['lyl']" :options="efficiencyOptions"
                                    @change="efficiencyOptionsOnChange"/>
                </div>
                <table cellpadding="5" cellspacing="1" style="border: 1px solid darkgray;">
                  <tr>
                    <td v-for="(item, index) in identifying">{{item.title}}</td>
                    <td v-for="(item, index) in identifying"
                        style="overflow: hidden;text-overflow: ellipsis;white-space: nowrap">{{item.title}}
                    </td>
                  </tr>
                  <tr>
                    <td style="text-align:center;" v-for="(item, index) in identifying">
                      <div class="identifyingclass" :style="{background: item.color}"></div>
                    </td>
                    <!--<td style="text-align:center;"><div style="width: 55px;height: 15px;background-color: #e8ff37;display:inline-block"></div></td>-->
                    <!--<td style="text-align:center;"><div style="width: 55px;height: 15px;background-color: #99ff4e;display:inline-block"></div></td>-->
                  </tr>
                </table>
              </a-col>
            </a-row>
            <a-row :gutter="24">
              <a-col :md="15" :sm="15">
                <a-checkbox-group :value="checkedList" :default-value="['lyl']" :options="efficiencyOptions"
                                  @change="efficiencyOptionsOnChange"/>
              </a-col>
            </a-row>
          </a-form>
        </div>
        <!--<div style="width: 530px;position: absolute;top: 0; right: 1.5%;">-->
          <!--<table cellpadding="5" cellspacing="1" style="border: 1px solid darkgray;">-->
            <!--<tr>-->
              <!--<td v-for="(item, index) in identifying">{{item.title}}</td>-->
            <!--</tr>-->
            <!--<tr>-->
              <!--<td style="text-align:center;" v-for="(item, index) in identifying">-->
                <!--<div class="identifyingclass" :style="{background: item.color}"></div>-->
              <!--</td>-->
              <!--&lt;!&ndash;<td style="text-align:center;"><div style="width: 55px;height: 15px;background-color: #e8ff37;display:inline-block"></div></td>&ndash;&gt;-->
              <!--&lt;!&ndash;<td style="text-align:center;"><div style="width: 55px;height: 15px;background-color: #99ff4e;display:inline-block"></div></td>&ndash;&gt;-->
            <!--</tr>-->
          <!--</table>-->
        <!--</div>-->
      </div>
      <a-spin :spinning="spinning">
@@ -74,7 +148,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;">公司</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;">设备编号
@@ -83,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>
@@ -90,7 +168,7 @@
              </tr>
              <tr class="thead notfixed gudingth">
                <template v-for="(tableHead, index) in tableHeads">
                  <th>利用率(%)</th>
                  <th v-if="checkedList.indexOf('lyl') > -1">利用率(%)</th>
                  <th v-if="checkedList.indexOf('kjl') > -1">开机率(%)</th>
                  <th v-if="checkedList.indexOf('kjsj') > -1">开机时间(小时)</th>
                  <th v-if="checkedList.indexOf('jgsj') > -1">加工时间(小时)</th>
@@ -123,19 +201,24 @@
                    </div>
                  </td>
                  <td class="tdgu3  kaitou">{{item.equipmentId}}</td>
                  <td class="tdgu4 kaitou" style="min-width: 162px; max-width: 162px;width: 162px;">{{item.equipmentName}}</td>
                  <td class="tdgu4 kaitou" style="min-width: 162px; max-width: 162px;width: 162px;">
                    {{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">
                  <td :style="{background:tableHead.color }">{{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('kjl') > -1">
                    {{tableHead.openRate | numFilter}}
                    {{tableHead.openRate | n umFilter}}
                  </td>
                  <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('kjsj') > -1">
                    {{tableHead.openLong | getFormattedTime}}
@@ -169,6 +252,7 @@
  import $ from 'jquery'
  import '@/components/table2excel/table2excel'
  import { ajaxGetDictItems, getDictItemsFromCache, duplicateCheck } from '@/api/api'
  import api from '@/api/mdc'
  export default {
    name: 'EfficiencyList',
@@ -182,10 +266,19 @@
        TreeIDTwo: 2,
        deviceTypeDict: '',
        dates: [],
        selectList: [],
        equipmentTypeList: [],
        driveTypeList: [],
        device_level_list: [],
        device_category_list: [],
        identifying: [],
        queryParam: {},
        queryParams: {},
        queryParams: {
          equipmentType: [],
          driveType: [],
          deviceLevel: [],
          deviceCategory: [],
          deviceImportanceLevel: []
        },
        queryParamEquip: {},
        queryParamPeople: {},
        efficiencyOptions: [
@@ -211,7 +304,8 @@
        processLongRowAverage: '',
        waitLongRowAverage: '',
        closeLongRowAverage: '',
        spinning: false
        spinning: false,
        toggleSearchStatus: false
      }
    },
    props: { nodeTree: '', Type: '', nodePeople: '' },
@@ -223,6 +317,14 @@
      this.queryParam.typeTree = '1'
      this.loadData()
      this.queryGroup()
      this.getDriveTypeByApi()
      this.initDictData('device_level')
      this.initDictData('device_category')
      this.initDictData('device_importance_level')
    },
    mounted() {
      window.addEventListener('resize', this.handleWindowResize)
      this.handleWindowResize()
    },
    watch: {
      Type(valmath) {
@@ -278,6 +380,23 @@
    },
    computed: {},
    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的下标
@@ -421,69 +540,50 @@
        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
        }
        // 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.TreeIDTwo = ""
      //     this.queryParam.parentId =  this.queryParamEquip.parentId
      //     this.queryParam.equipmentId = this.queryParamEquip.equipmentId
      //   }else{
      //     // this.queryParam.TreeIDOne = ""
      //     this.queryParam.parentId = this.queryParamPeople.parentId
      //     this.queryParam.equipmentId = ""
      //   }
      //   this.loadData()
      //   // this.onClearSelected()
      // },
      // searchReset() {
      //   this.typeTree = this.queryParam.typeTree
      //   this.typeParent =  this.queryParams.parentId
      //   this.queryParam = {}
      //   this.dates = []
      //   this.queryParam.typeTree = this.typeTree
      //   this.queryParam.parentId = this.typeParent
      //   this.loadData()
      //   // this.onClearSelected()
      // },
      searchQuery() {
        console.log('dates', this.dates)
        if (this.dates != '') {
          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 = ''
          }
          this.loadData()
        if (this.queryParam.typeTree == '1') {
          this.queryParam.parentId = this.queryParamEquip.parentId
          this.queryParam.equipmentId = this.queryParamEquip.equipmentId
        } else {
          this.$notification.warning({
            message: '消息',
            description: '请选择时间'
          })
          this.queryParam.parentId = this.queryParamPeople.parentId
          this.queryParam.equipmentId = ''
        }
        // this.onClearSelected()
        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.dates = []
        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.queryParams = {
          equipmentType: [],
          driveType: [],
          deviceLevel: [],
          deviceCategory: []
        }
        // this.ipagination.current = 1
        this.loadData()
        // this.queryParam = {}
@@ -499,6 +599,12 @@
          if (res.success) {
            this.tableHeads = res.result.dates
            this.dataList = res.result.mdcEfficiencyList
            if (res.result.mdcEfficiencyList && !res.result.mdcEfficiencyList.length) {
              this.$notification.info({
                message: '消息',
                description: '暂无该类型数据'
              })
            }
            this.distinguishColorList = res.result.utilizationRateList
            this.checkSameData(this.dataList)
            this.checkSameData1(this.dataList)
@@ -514,21 +620,39 @@
      queryGroup() {
        getAction(this.url.queryEquipmentType).then(res => {
          if (res.success) {
            this.selectList = res.result
            // this.selectList = res.result.map((item, index, arr) => {
            //   return { label: item.id, value: item.equipmentTypeName + '' }
            // })
            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
        })
      },
      /**
       * 调用接口获取控制系统类型
       */
      getDriveTypeByApi() {
        api.getDriveTypeApi().then((res) => {
          if (res.success) this.driveTypeList = res.result
        })
      },
      /**
       * 分辨率改变时同时改变表格高度已保证首页一进入不拖动垂直滚动条时即可拖动表格水平滚动条
       */
      handleWindowResize() {
        const tableContainer = document.getElementById('Efficiency') // 表格容器
        const clientHeight = document.documentElement.clientHeight || document.body.clientHeight // 浏览器可视区域高度
        const containerTopToClientTopHeight = tableContainer.getBoundingClientRect().top // 表格容器顶部到浏览器可视区域顶部的间距
        tableContainer.style.height = (clientHeight - containerTopToClientTopHeight - 32) + 'px'
      }
    }
  }
</script>
@@ -636,38 +760,8 @@
    left: 412px;
  }
  #Efficiency{
  #Efficiency {
    overflow: hidden;
  }
  @media screen and (min-width: 1920px) {
    #Efficiency {
      height: 687px !important;
    }
  }
  @media screen and (min-width: 1680px) and (max-width: 1920px) {
    #Efficiency {
      height: 687px !important;
    }
  }
  @media screen and (min-width: 1400px) and (max-width: 1680px) {
    #Efficiency {
      height: 540px !important;
    }
  }
  @media screen and (min-width: 1280px) and (max-width: 1400px) {
    #Efficiency {
      height: 440px !important;
    }
  }
  @media screen and (max-width: 1280px) {
    #Efficiency {
      height: 440px !important;
    }
  }
  .identifyingclass {