quanyawei
2024-11-15 f752f50a484f63fc3786ab1c7ad563f3b17cce77
src/views/Listdata/index.vue
@@ -12,7 +12,7 @@
        style="width: 21rem"
      />
      <!-- <div> -->
      <el-select
      <!-- <el-select
        v-model="value"
        placeholder="选择因子"
        style="margin-left: 20px"
@@ -23,39 +23,91 @@
          :label="item.label"
          :value="item.value"
        />
      </el-select>
      <el-date-picker
        v-model="timevalue"
        type="datetimerange"
        range-separator="至"
        value-format="yyyy-MM-dd HH"
        start-placeholder="开始日期"
        :picker-options="pickerOptions"
        end-placeholder="结束日期"
        style="margin-left: 1rem"
      >
      </el-date-picker>
      </el-select> -->
      <div style="margin-left: 1.5rem">
        <el-cascader
          v-model="value"
          :options="newSensor"
          :props="props"
          collapse-tags
          clearable
        />
      </div>
      <div>
        <el-select
          v-model="select1"
          placeholder="请选择"
          style="margin-left: 1.5rem; width: 15rem"
        >
          <el-option
            v-for="item in options1"
            :key="item.value"
            :label="item.label"
            :value="item.value"
          />
        </el-select>
      </div>
      <component
        :is="dataType"
        style="padding-left: 0; margin-left: 20px; width: 160px"
        class="select11"
        @sendPickerChild="showPickerChild"
      />
      <el-button type="primary" @click="toExcel()" style="margin-left: 20px"
      <!-- <el-button type="primary" @click="toExcel()" style="margin-left: 20px"
        >导出</el-button
      > -->
      <!-- <el-dropdown @command="handleCommand">
        <el-button type="primary" @click="toExcel()" style="margin-left: 20px"
          >导出<i class="el-icon-arrow-down el-icon--right"></i
        ></el-button>
        <el-dropdown-menu slot="dropdown">
          <el-dropdown-item command="expNew">导出(新)</el-dropdown-item>
        </el-dropdown-menu>
      </el-dropdown> -->
      <el-dropdown
        split-button
        type="primary"
        style="margin-left: 20px"
        @click="toExcel()"
        @command="handleCommand"
      >
      <el-button @click="exportMon">查询</el-button>
        导出
        <el-dropdown-menu slot="dropdown">
          <el-dropdown-item command="expNew">
            导出(新)
          </el-dropdown-item>
        </el-dropdown-menu>
      </el-dropdown>
      <el-button
        style="margin-left: 10px"
        @click="exportMon"
      >
        查询
      </el-button>
    </div>
    <el-table
      :data="dateList"
      id="exportTab"
      :data="dateList"
      style="margin-top: 20px"
      border
      max-height="800"
    >
      <el-table-column
        v-for="item in columnList"
        :key="item"
        :prop="item"
        :label="item"
        width="180px"
        :key="item"
      />
      <!-- <el-table-column
        v-for="item in columnList"
        :prop="item.props"
        :label="item.label"
        width="180px"
        :key="item.label"
      >
      </el-table-column>
      </el-table-column> -->
    </el-table>
  </div>
</template>
@@ -66,8 +118,24 @@
import FileSaver from 'file-saver'
import XLSX2 from 'xlsx-style'
import XLSX from 'xlsx'
import DatePicker from '@/components/Form/DatePicker'
import MouthPicker from '@/components/Form/MouthPicker'
import HourPicker from '@/components/Form/HourPicker'
import HourPicker1 from '@/components/Form/HourPicker1'
import CustomPicker from '@/components/Form/CustomPicker'
import CustomPicker1 from '@/components/Form/CustomPicker1'
import TimePicker1 from '@/components/Form/TimePicker1'
export default {
  data() {
  components: {
    DatePicker,
    MouthPicker,
    HourPicker,
    CustomPicker,
    CustomPicker1,
    TimePicker1,
    HourPicker1,
  },
  data () {
    // 这里存放数据
    return {
      props: { multiple: true },
@@ -76,9 +144,26 @@
      newMac: '',
      newMac1: [],
      newSensor: [] /* 因子数组 */,
      columnList: [], //表头的数组
      columnList: [], // 表头的数组
      dateList: [],
      timevalue: [],
      select1: '日报',
      dataType: 'HourPicker',
      unit: 'day',
      options1: [
        {
          label: '小时报',
          value: '小时报',
        },
        {
          label: '日报',
          value: '日报',
        },
        {
          label: '月报',
          value: '月报',
        },
      ],
      pickerOptions: {
        disabledDate: (time) => {
          return time.getTime() > new Date()
@@ -90,8 +175,26 @@
  computed: {},
  // 监控data中的数据变化
  watch: {
    select1 (nv, ov) {
      if (nv === '日报') {
        this.dataType = 'HourPicker'
        this.unit = 'day'
      } else if (nv === '月报') {
        this.dataType = 'DatePicker'
        this.unit = 'month'
      } else if (nv === '年报') {
        this.dataType = 'MouthPicker'
        this.unit = 'month'
      } else if (nv === '小时报') {
        this.dataType = 'HourPicker1'
        this.unit = 'hours'
      } else {
        this.dataType = 'CustomPicker'
        this.unit = 'hours'
      }
    },
    // 监听设备的数据更新
    newMac(newVal, oldval) {
    newMac (newVal, oldval) {
      this.newMac1 = []
      for (let i = 0; i < newVal.length; i++) {
        // console.log(newVal[i], 111)
@@ -103,23 +206,73 @@
    // 监听dataType的数据更新
  },
  // 生命周期 - 创建完成(可以访问当前 this 实例)
  created() {
  created () {
    this.getData()
  },
  // 生命周期 - 挂载完成(可以访问 DOM 元素)
  // mounted() {
  //
  // },
  beforeCreate() {}, // 生命周期 - 创建之前
  beforeMount() {}, // 生命周期 - 挂载之前
  beforeUpdate() {}, // 生命周期 - 更新之前
  updated() {}, // 生命周期 - 更新之后
  beforeDestroy() {}, // 生命周期 - 销毁之前
  destroyed() {}, // 生命周期 - 销毁完成
  activated() {},
  beforeCreate () {}, // 生命周期 - 创建之前
  beforeMount () {}, // 生命周期 - 挂载之前
  beforeUpdate () {}, // 生命周期 - 更新之前
  updated () {}, // 生命周期 - 更新之后
  beforeDestroy () {}, // 生命周期 - 销毁之前
  destroyed () {}, // 生命周期 - 销毁完成
  activated () {},
  // 方法集合
  methods: {
    getData() {
    handleCommand (command) {
      if (this.newMac1 == '') {
        this.$message.warning('请选择站点')
        return
      }
      if (this.value == '') {
        this.$message.warning('请选择因子')
        return
      }
      this.dateList = []
      this.columnList = []
      this.$request({
        url: 'monitorPoint/exlOut',
        method: 'post',
        data: {
          macs: this.newMac1,
          sensors: this.value.toString(),
          // startTime: this.timevalue[0],
          // endTime: this.timevalue[1],
          type: this.unit,
          times: this.newData instanceof Array ? this.newData : [this.newData],
        },
        responseType: 'blob',
      }).then((res) => {
        console.log('导出成功', res)
        this.getOutExcel('列表数据导出.xlsx', res)
      })
    },
    getOutExcel (fileName, res) {
      let blob = new Blob([res], { type: 'application/x-xls' })
      if (window.navigator.msSaveOrOpenBlob) {
        // 兼容 IE & EDGE
        navigator.msSaveBlob(blob, fileName)
      } else {
        var link = document.createElement('a')
        // 兼容不同浏览器的URL对象
        const url = window.URL || window.webkitURL || window.moxURL
        // 创建下载链接
        link.href = url.createObjectURL(blob)
        // 命名下载名称
        link.download = fileName
        // 点击触发下载
        link.click()
        // 下载完成进行释放
        url.revokeObjectURL(link.href)
      }
    },
    showPickerChild (data) {
      this.newData = data
    },
    getData () {
      this.$request({
        url: '/monitorPoint/queryMonitorPoints',
        method: 'get',
@@ -137,14 +290,16 @@
              label: this.defaultData[i].name,
            })
            this.options[i].children = []
            for (let j = 0; j < this.defaultData[i].devices.length; j++) {
              this.options[i].children.push({
                value: [
                  this.defaultData[i].devices[j].name,
                  this.defaultData[i].devices[j].mac,
                ],
                label: this.defaultData[i].devices[j].name,
              })
            if (this.defaultData[i].devices) {
              for (let j = 0; j < this.defaultData[i].devices.length; j++) {
                this.options[i].children.push({
                  value: [
                    this.defaultData[i].devices[j].name,
                    this.defaultData[i].devices[j].mac,
                  ],
                  label: this.defaultData[i].devices[j].name,
                })
              }
            }
          }
        })
@@ -153,7 +308,8 @@
        })
    },
    // 通过设备号获得因子数据
    getSensor() {
    getSensor () {
      this.newSensor = []
      this.$request({
        url: '/deviceInfo/getMacSensors',
        method: 'post',
@@ -173,8 +329,7 @@
          console.log(err)
        })
    },
    exportMon() {
      console.log(this.timevalue)
    exportMon () {
      if (this.newMac1 == '') {
        this.$message.warning('请选择站点')
        return
@@ -183,7 +338,6 @@
        this.$message.warning('请选择因子')
        return
      }
      this.dateList = []
      this.columnList = []
      this.$request({
@@ -192,22 +346,40 @@
        data: {
          macs: this.newMac1,
          sensors: this.value.toString(),
          startTime: this.timevalue[0],
          endTime: this.timevalue[1],
          // startTime: this.timevalue[0],
          // endTime: this.timevalue[1],
          type: this.unit,
          times: this.newData instanceof Array ? this.newData : [this.newData],
        },
      }).then((res) => {
        console.log(res, 11)
        // console.log(res, 11)
        this.tableData = res.data
        console.log(this.tableData, 'this.tableData')
        for (let key in this.tableData[0]) {
          this.columnList.push(key)
        }
        for (let item of this.tableData) {
          this.dateList.push(item)
        }
        // this.tableData = res.data
        // for (let key in this.tableData[0]) {
        //   let prop = key
        //   if (String(key).indexOf('.') > -1) {
        //     prop = key.replace(/\./g, '')
        //   }
        //   this.columnList.push({ label: key, props: prop })
        // }
        // for (let item of this.tableData) {
        //   for (let key in this.tableData[0]) {
        //     if (String(key).indexOf('.') > -1) {
        //       let newKey = key.replace(/\./g, '')
        //       item[newKey] = item[key]
        //     }
        //   }
        //   this.dateList.push(item)
        // }
      })
    },
    toExcel() {
    toExcel () {
      let wb = XLSX.utils.table_to_book(document.querySelector('#exportTab'), {
        sheet: '分组表',
      })
@@ -225,9 +397,9 @@
      }
      return ws
    },
    setExlStyle(data) {
    setExlStyle (data) {
      let borderAll = {
        //单元格外侧框线
        // 单元格外侧框线
        top: {
          style: 'thin',
        },
@@ -247,7 +419,7 @@
          data[key].s = {
            border: borderAll,
            alignment: {
              horizontal: 'center', //水平居中对齐
              horizontal: 'center', // 水平居中对齐
              vertical: 'center',
            },
            font: {