3 files added
3 files modified
New file |
| | |
| | | <template>
|
| | | <!-- <el-date-picker
|
| | | v-model="value1"
|
| | | type="date"
|
| | | placeholder="选择日期"
|
| | | value-format="yyyy-MM-dd"
|
| | | /> -->
|
| | | <el-date-picker
|
| | | v-model="value1"
|
| | | type="daterange"
|
| | | range-separator="至"
|
| | | start-placeholder="开始日期"
|
| | | value-format="yyyy-MM-dd"
|
| | | end-placeholder="结束日期"
|
| | | :picker-options="pickerOptions"
|
| | | >
|
| | | </el-date-picker>
|
| | | </template>
|
| | |
|
| | | <script>
|
| | | // 这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
|
| | | // 例如:import《组件名称》from'《组件路径》';
|
| | |
|
| | | export default {
|
| | | // import 引入的组件需要注入到对象中才能使用
|
| | | components: {},
|
| | | props: {
|
| | | // value1: String
|
| | | },
|
| | | data() {
|
| | | // 这里存放数据
|
| | | return {
|
| | | // newValue1: ''
|
| | | value1: '',
|
| | | pickerOptions: {
|
| | | disabledDate: (time) => {
|
| | | return time.getTime() > new Date()
|
| | | },
|
| | | },
|
| | | }
|
| | | },
|
| | | // 计算属性 类似于data概念
|
| | | computed: {},
|
| | | // 监控data中的数据变化
|
| | | watch: {
|
| | | value1(nv, ov) {
|
| | | // this.newValue1 = nv
|
| | | this.sendPicker()
|
| | | },
|
| | | },
|
| | | // 生命周期 - 创建完成(可以访问当前 this 实例)
|
| | | created() {},
|
| | | // 生命周期 - 挂载完成(可以访问 DOM 元素)
|
| | | mounted() {},
|
| | |
|
| | | beforeCreate() {}, // 生命周期 - 创建之前
|
| | | beforeMount() {}, // 生命周期 - 挂载之前
|
| | | beforeUpdate() {}, // 生命周期 - 更新之前
|
| | | updated() {}, // 生命周期 - 更新之后
|
| | | beforeDestroy() {}, // 生命周期 - 销毁之前
|
| | | destroyed() {}, // 生命周期 - 销毁完成
|
| | | activated() {},
|
| | | // 方法集合
|
| | | methods: {
|
| | | sendPicker() {
|
| | | this.$emit('sendPickerChild', this.value1)
|
| | | },
|
| | | }, // 如果页面有keep-alive缓存功能,这个函数会触发
|
| | | }
|
| | | </script>
|
| | | <style scoped>
|
| | | </style>
|
| | |
| | | endTime: '', |
| | | dataDate: '', |
| | | sensorTime: [], |
| | | uvasize: 50, |
| | | uvasize: 20, |
| | | timeValue: [ |
| | | new Date(2020, 1, 1, 0, 0, 0), |
| | | new Date(2022, 12, 31, 23, 59, 59), |
| | |
| | | .BMap_cpyCtrl { |
| | | display: none; |
| | | } |
| | | |
| | | .anchorBL { |
| | | display: none; |
| | | } |
| | |
| | | getData() { |
| | | this.monitorPointIds = [] |
| | | this.$request({ |
| | | url: '/monitorPoint/queryMonitorPoints', |
| | | url: '/monitorPoint/queryMonitorPointsState', |
| | | method: 'get', |
| | | params: { |
| | | organizationId: this.organizationId, |
| | |
| | | <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="排名" /> |
| | | <el-table-column prop="deviceName" label="设备" width="180" /> |
| | | <el-table-column prop="responsibleUnit" label="责任单位" width="180" /> |
| | | <el-table-column prop="time" label="时间" width="180" /> |
| | | <el-table-column prop="aqi" label="AQI" sortable /> |
| | | <el-table-column |
| | | prop="comIndex" |
| | | label="综合指数" |
| | | width="130" |
| | | sortable |
| | | /> |
| | | <el-table-column prop="a34004" label="PM2.5" sortable /> |
| | | <el-table-column prop="a34002" label="PM10" sortable /> |
| | | <el-table-column prop="a21026" label="SO2" sortable /> |
| | | <el-table-column prop="a21004" label="NO2" sortable /> |
| | | <el-table-column prop="a21005" label="CO" sortable /> |
| | | <el-table-column prop="a05024" label="O3_8H" sortable /> |
| | | <el-table-column prop="a99054" label="TVOC" sortable /> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | <el-tabs |
| | | v-model="activeName" |
| | | type="card" |
| | | @tab-click="handleClick" |
| | | style="height: 100%" |
| | | > |
| | | <el-tab-pane name="first" label="基于因子展示"> |
| | | <keep-alive> |
| | | <sensor /> |
| | | </keep-alive> |
| | | </el-tab-pane> |
| | | <el-tab-pane label="监测站数据展示" name="second"> |
| | | <keep-alive> |
| | | <sensorday /> |
| | | </keep-alive> |
| | | </el-tab-pane> |
| | | </el-tabs> |
| | | </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' |
| | | |
| | | import sensor from '@/views/reportForm/sensor' |
| | | import sensorday from '@/views/reportForm/sensorday' |
| | | export default { |
| | | // import 引入的组件需要注入到对象中才能使用 |
| | | components: { |
| | | DatePicker, |
| | | MouthPicker, |
| | | HourPicker, |
| | | CustomPicker, |
| | | CustomPicker1, |
| | | TimePicker1, |
| | | HourPicker1, |
| | | weekPicker, |
| | | sensor, |
| | | sensorday, |
| | | }, |
| | | 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 表示一天,明天之前包括明天不可选,只可选七天 |
| | | // } |
| | | // } |
| | | activeName: 'first', |
| | | } |
| | | }, |
| | | // 计算属性 类似于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() {}, |
| | | // 方法集合 |
| | | created() {}, |
| | | methods: { |
| | | showPickerChild(data) { |
| | | this.newData = data |
| | | handleClick(tab, event) { |
| | | // console.log(tab, event) |
| | | }, |
| | | // 重新添加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 scoped> |
| | | </style> |
New file |
| | |
| | | <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>
|
New file |
| | |
| | | <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-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
|
| | | :data="tableData"
|
| | | id="exportTabs"
|
| | | max-height="730"
|
| | | @sort-change="changeTableSort"
|
| | | style="width: 100%"
|
| | | >
|
| | | <el-table-column
|
| | | prop="name"
|
| | | label="站点名称"
|
| | | width="240"
|
| | | align="center"
|
| | | >
|
| | | </el-table-column>
|
| | | <el-table-column label="综合指数" align="center">
|
| | | <el-table-column
|
| | | prop="composite"
|
| | | label="指数"
|
| | | width="180"
|
| | | align="center"
|
| | | >
|
| | | </el-table-column>
|
| | | <el-table-column
|
| | | label="排名"
|
| | | width="180"
|
| | | align="center"
|
| | | prop="compositeNum"
|
| | | sortable
|
| | | >
|
| | | </el-table-column>
|
| | | </el-table-column>
|
| | | <el-table-column label="PM2.5" align="center">
|
| | | <el-table-column prop="pm25" label="浓度" width="180" align="center">
|
| | | </el-table-column>
|
| | | <el-table-column
|
| | | label="排名"
|
| | | width="180"
|
| | | align="center"
|
| | | prop="pm25Num"
|
| | | sortable
|
| | | >
|
| | | </el-table-column>
|
| | | </el-table-column>
|
| | | <el-table-column label="臭氧" align="center">
|
| | | <el-table-column prop="o3" label="浓度" width="180" align="center">
|
| | | </el-table-column>
|
| | | <el-table-column
|
| | | label="排名"
|
| | | width="180"
|
| | | align="center"
|
| | | prop="o3Num"
|
| | | sortable
|
| | | >
|
| | | </el-table-column>
|
| | | </el-table-column>
|
| | | <el-table-column label="TVOC" align="center">
|
| | | <el-table-column prop="tovc" label="浓度" width="180" align="center">
|
| | | </el-table-column>
|
| | | <el-table-column
|
| | | label="排名"
|
| | | width="180"
|
| | | align="center"
|
| | | prop="tovcnum"
|
| | | sortable
|
| | | >
|
| | | </el-table-column>
|
| | | </el-table-column>
|
| | | </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/HourPicker3'
|
| | | 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: 'HourPicker',
|
| | | unit: '1',
|
| | | 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
|
| | | }
|
| | | if (nv === '自定义') {
|
| | | this.newData = []
|
| | | this.dateDisplay = true
|
| | | this.unit = 4
|
| | | 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('#exportTabs'),
|
| | | 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() {
|
| | | console.log(this.newData)
|
| | | this.$request({
|
| | | // url: '/monitorPoint/listMonitoring',
|
| | | url: '/monitorPoint/listMonitoring',
|
| | | method: 'post',
|
| | | data: {
|
| | | mac: 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 ? this.newData : this.newData[1],
|
| | | // times: this.newData instanceof Array ? this.newData : [this.newData],
|
| | | },
|
| | | })
|
| | | .then((res) => {
|
| | | console.log(res)
|
| | | this.tableData = res.data
|
| | | // 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;
|
| | | }
|
| | | /deep/.el-table thead.is-group th {
|
| | | background-color: white;
|
| | | }
|
| | | </style>
|