| <template>  | 
|   <div style="width: 100%">  | 
|     <div>  | 
|       <div class="topSelect">  | 
|         <el-cascader  | 
|           v-model="newMac"  | 
|           :options="options"  | 
|           :props="props"  | 
|           collapse-tags  | 
|           clearable  | 
|           placeholder="选择设备"  | 
|           style="width: 21rem"  | 
|         />  | 
|         <div>  | 
|           <el-radio-group v-model="select1" style="margin-left: 20px">  | 
|             <el-radio-button label="小时报" />  | 
|             <el-radio-button label="日报" />  | 
|             <el-radio-button label="周报" />  | 
|             <el-radio-button label="月报" />  | 
|             <el-radio-button label="自定义" />  | 
|           </el-radio-group>  | 
|         </div>  | 
|         <component  | 
|           :is="dataType"  | 
|           style="padding-left: 0; margin-left: 30px"  | 
|           @sendPickerChild="showPickerChild"  | 
|           class="select11"  | 
|         />  | 
|         <el-date-picker  | 
|           v-if="dateDisplay"  | 
|           v-model="newData"  | 
|           style="width: 400px; margin-left: 10px"  | 
|           type="daterange"  | 
|           range-separator="至"  | 
|           start-placeholder="开始日期"  | 
|           end-placeholder="结束日期"  | 
|           value-format="yyyy-MM-dd HH"  | 
|         />  | 
|         <el-button  | 
|           type="primary"  | 
|           @click="getReportForm()"  | 
|           style="margin-left: 10px"  | 
|           >查询</el-button  | 
|         >  | 
|         <el-button type="primary" @click="exportExcel()">报表导出</el-button>  | 
|       </div>  | 
|     </div>  | 
|     <div class="topTitle">  | 
|       <el-table  | 
|         id="exportTab"  | 
|         :default-sort="{ prop: 'rank', order: 'ascending' }"  | 
|         :data="tableData"  | 
|         border  | 
|         style="width: 100%"  | 
|         max-height="800"  | 
|         :stripe="true"  | 
|         @sort-change="changeTableSort"  | 
|       >  | 
|         <el-table-column prop="rank" label="排名" align="center" />  | 
|         <el-table-column  | 
|           prop="deviceName"  | 
|           label="设备"  | 
|           width="180"  | 
|           align="center"  | 
|         />  | 
|         <el-table-column  | 
|           prop="responsibleUnit"  | 
|           label="责任单位"  | 
|           width="180"  | 
|           align="center"  | 
|         />  | 
|         <el-table-column prop="time" label="时间" width="180" align="center" />  | 
|         <el-table-column prop="aqi" label="AQI" sortable align="center" />  | 
|         <el-table-column  | 
|           prop="comIndex"  | 
|           label="综合指数"  | 
|           width="130"  | 
|           sortable  | 
|           align="center"  | 
|         />  | 
|         <el-table-column prop="a34004" label="PM2.5" sortable align="center" />  | 
|         <el-table-column prop="a34002" label="PM10" sortable align="center" />  | 
|         <el-table-column prop="a21026" label="SO2" sortable align="center" />  | 
|         <el-table-column prop="a21004" label="NO2" sortable align="center" />  | 
|         <el-table-column prop="a21005" label="CO" sortable align="center" />  | 
|         <el-table-column prop="a05024" label="O3_8H" sortable align="center" />  | 
|         <el-table-column prop="a99054" label="TVOC" sortable align="center" />  | 
|       </el-table>  | 
|     </div>  | 
|   </div>  | 
| </template>  | 
|   | 
| <script>  | 
| // 这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)  | 
| // 例如:import《组件名称》from'《组件路径》';  | 
| import FileSaver from 'file-saver'  | 
| 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'  | 
| import weekPicker from '@/components/Form/weekPicker'  | 
|   | 
| export default {  | 
|   // import 引入的组件需要注入到对象中才能使用  | 
|   components: {  | 
|     DatePicker,  | 
|     MouthPicker,  | 
|     HourPicker,  | 
|     CustomPicker,  | 
|     CustomPicker1,  | 
|     TimePicker1,  | 
|     HourPicker1,  | 
|     weekPicker,  | 
|   },  | 
|   props: {},  | 
|   data() {  | 
|     // 这里存放数据  | 
|     return {  | 
|       newData: [],  | 
|       props: { multiple: true },  | 
|       newMac: '',  | 
|       newMac1: [],  | 
|       options: [],  | 
|       select1: '小时报',  | 
|       dataType: 'HourPicker1',  | 
|       unit: '0',  | 
|       radio1: '',  | 
|       value: '',  | 
|       value1: '',  | 
|       reportType: 0,  | 
|       monitorPointId: 0,  | 
|       tableData: [],  | 
|       dateDisplay: false,  | 
|       newKey: 0,  | 
|       timearr: null,  | 
|       // pickerOptions1: {  | 
|       //   disabledDate(time) {  | 
|       //     console.log(time)  | 
|       //     const curDate = this.value1[0] ? this.value1[0] : (new Date()).getTime()//  获取当前时间点  | 
|       //     const seven = 7 * 24 * 60 * 60 * 1000 // 设定7天日期  7天 * 24小时 * 60分钟 * 60秒 * 1000 = 7天的时间戳  | 
|       //     const sevenDays = curDate + seven//  当前时间点后的七天所处的日期  | 
|       //     return time.getTime() < Date.now() + 8.64e7 || time.getTime() > sevenDays + 8.64e7// 8.64e7 表示一天,明天之前包括明天不可选,只可选七天  | 
|       //   }  | 
|       // }  | 
|     }  | 
|   },  | 
|   // 计算属性 类似于data概念  | 
|   computed: {},  | 
|   // 监控data中的数据变化  | 
|   watch: {  | 
|     select1(nv, ov) {  | 
|       if (nv === '日报') {  | 
|         this.dataType = 'HourPicker'  | 
|         this.unit = 1  | 
|       } else if (nv === '月报') {  | 
|         this.dataType = 'DatePicker'  | 
|         this.unit = 3  | 
|       } else if (nv === '周报') {  | 
|         this.dataType = 'weekPicker'  | 
|         this.unit = 2  | 
|       } else if (nv === '小时报') {  | 
|         this.dataType = 'HourPicker1'  | 
|         this.unit = 0  | 
|       }  | 
|       if (nv === '自定义') {  | 
|         this.newData = []  | 
|         this.dateDisplay = true  | 
|         this.unit = null  | 
|         this.dataType = ''  | 
|       } else {  | 
|         this.dateDisplay = false  | 
|       }  | 
|     },  | 
|     newMac(newVal, oldval) {  | 
|       this.newMac1 = []  | 
|       for (let i = 0; i < newVal.length; i++) {  | 
|         // console.log(newVal[i], 111)  | 
|         this.newMac1.push(newVal[i][1][1])  | 
|       }  | 
|       // 设备更新后,重新获取因子数据  | 
|     },  | 
|   },  | 
|   | 
|   // 生命周期 - 创建完成(可以访问当前 this 实例)  | 
|   created() {  | 
|     this.getData()  | 
|   },  | 
|   // 生命周期 - 挂载完成(可以访问 DOM 元素)  | 
|   mounted() {},  | 
|   beforeCreate() {}, // 生命周期 - 创建之前  | 
|   beforeMount() {}, // 生命周期 - 挂载之前  | 
|   beforeUpdate() {}, // 生命周期 - 更新之前  | 
|   updated() {}, // 生命周期 - 更新之后  | 
|   beforeDestroy() {}, // 生命周期 - 销毁之前  | 
|   destroyed() {}, // 生命周期 - 销毁完成  | 
|   activated() {},  | 
|   // 方法集合  | 
|   methods: {  | 
|     showPickerChild(data) {  | 
|       this.newData = data  | 
|     },  | 
|     // 重新添加rank排名(当表格的排序条件发生变化的时候会触发该事件)  | 
|     changeTableSort() {  | 
|       var sortTableData = this.$refs.mytable.tableData  | 
|       // console.log(this.$refs.mytable.tableData, 111)  | 
|       for (let i = 0; i < sortTableData.length; i++) {  | 
|         sortTableData[i].rank = i + 1  | 
|       }  | 
|     },  | 
|   | 
|     // 导出报表  | 
|     exportExcel() {  | 
|       /* generate workbook object from table */  | 
|       var xlsxParam = { raw: true } // 导出的内容只做解析,不进行格式转换  | 
|       var wb = XLSX.utils.table_to_book(  | 
|         document.querySelector('#exportTab'),  | 
|         xlsxParam  | 
|       )  | 
|   | 
|       /* get binary string as output */  | 
|       var wbout = XLSX.write(wb, {  | 
|         bookType: 'xlsx',  | 
|         bookSST: true,  | 
|         type: 'array',  | 
|       })  | 
|       try {  | 
|         FileSaver.saveAs(  | 
|           new Blob([wbout], { type: 'application/octet-stream' }),  | 
|           '站点数据表.xlsx'  | 
|         )  | 
|       } catch (e) {  | 
|         if (typeof console !== 'undefined') {  | 
|           console.log(e, wbout)  | 
|         }  | 
|       }  | 
|       return wbout  | 
|     },  | 
|     // 请求站点信息  | 
|     getData() {  | 
|       this.$request({  | 
|         url: '/monitorPoint/queryMonitorPoints',  | 
|         method: 'get',  | 
|         params: {  | 
|           organizationId: this.$store.state.orgId,  | 
|         },  | 
|       })  | 
|         .then((res) => {  | 
|           // console.log('这是index页面左侧设备数据')  | 
|           // console.log(res)  | 
|           this.defaultData = res.data.monitorPoints  | 
|           for (let i = 0; i < this.defaultData.length; i++) {  | 
|             this.options.push({  | 
|               value: this.defaultData[i].name,  | 
|               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,  | 
|               })  | 
|             }  | 
|           }  | 
|         })  | 
|         .catch((error) => {  | 
|           console.log(error)  | 
|         })  | 
|     },  | 
|     // 请求报表数据  | 
|     getReportForm() {  | 
|       this.$request({  | 
|         url: '/dataDisplay/monitorPointDataDisplay',  | 
|         method: 'post',  | 
|         data: {  | 
|           macs: this.newMac1,  | 
|           reportType: this.unit,  | 
|           // monitorPointId: this.monitorPointId,  | 
|           // reportType: key === 4 ? null : key,  | 
|           startTime: this.unit === 2 ? this.newData : this.newData[0],  | 
|           endTime: this.unit === 2 ? null : this.newData[1],  | 
|           // times: this.newData instanceof Array ? this.newData : [this.newData],  | 
|         },  | 
|       })  | 
|         .then((res) => {  | 
|           console.log(res)  | 
|           if (res.code !== 0) {  | 
|             return  | 
|           }  | 
|           var tempData = res.data  | 
|           for (let i = 0; i < tempData.length; i++) {  | 
|             tempData[i].rank = i + 1  | 
|           }  | 
|           this.tableData = tempData  | 
|           // for (let i = 0; i < res.data.data.length; i++) {  | 
|           //   this.tableData.push({ ranking: this.defaultData[i].rank, name: this.defaultData[i].name, responsibleUnit: this.defaultData[i].responsibleUnit, time: this.defaultData[i].time, AQI: this.defaultData[i].AQI, compositeIndex: this.defaultData[i].compositeIndex, PM2_5: this.defaultData[i].PM2_5, PM10: this.defaultData[i].PM10, SO2: this.defaultData[i].SO2, NO2: this.defaultData[i].NO2, CO: this.defaultData[i].CO, O3: this.defaultData[i].O3 })  | 
|           // }  | 
|         })  | 
|         .catch((err) => {  | 
|           console.log(err)  | 
|         })  | 
|     },  | 
|   }, // 如果页面有keep-alive缓存功能,这个函数会触发  | 
| }  | 
| </script>  | 
| <style scoped lang="scss">  | 
| .topSelect {  | 
|   display: flex;  | 
|   margin-bottom: 20px;  | 
|   padding: 20px 15px 0 15px;  | 
|   // display: flex;  | 
|   // justify-content: space-between;  | 
|   // span:first-child {  | 
|   //   flex: 1;  | 
|   // }  | 
|   // div:last-child{  | 
|   //     width: 300px;  | 
|   //     line-height: 40px;  | 
|   //     padding-left: 6px;  | 
|   // }  | 
| }  | 
| .topTitle {  | 
|   display: flex;  | 
|   justify-content: space-between;  | 
|   margin-bottom: 20px;  | 
|   padding: 0 15px;  | 
| }  | 
| .select11 {  | 
|   width: 20% !important;  | 
| }  | 
| </style>  |