| | |
| | | import {ref, onMounted} from "vue"; |
| | | import {getTemperaturePointList} from "@/api/screen/index.js"; |
| | | import {getTemptureReportList, exportTemptureReportList} from "@/api/screen/report/index.js"; |
| | | import Table from '@/components/Table/index.vue' |
| | | import { exportBlobFile } from '@/utils/index.js' |
| | | import { deepTableConfig } from '@/config/index.js' |
| | | |
| | | const cascaderOption = { label: 'pointName', value: 'id', children: 'childrenList', checkStrictly: true, expandTrigger: 'hover', emitPath: false }; //级联选择器配置 |
| | | const typeOption = ref([]) |
| | | const timeOption = ref([ |
| | | { label: '小时', value: 1 }, |
| | | { label: '日', value: 2 }, |
| | | { label: '月', value: 3 }, |
| | | { label: '季度', value: 4 }, |
| | | { label: '年', value: 5 }, |
| | | ]) |
| | | const timeVal = ref([]) |
| | | const searchData = reactive({ |
| | | pointId: '', |
| | | dateType: 2, |
| | | createTimeRange: '' |
| | | }) |
| | | const tableRef = ref(null); //表格实例 |
| | | const state = { |
| | | total: 0, |
| | | page: 1, |
| | | pageSize: 10, |
| | | } |
| | | let tableHead = [ |
| | | { prop: 'waterTemperature', label: '水温(℃)' }, |
| | | { prop: 'waterLevel', label: '水位(m)', }, |
| | | { prop: 'pointName', label: '采集点' }, |
| | | { prop: 'createTimeView', label: '采集时间' }, |
| | | ] |
| | | const tableData = ref([]) |
| | | |
| | | // 获取监测点 |
| | | const getPoint = () => { |
| | |
| | | }) |
| | | } |
| | | |
| | | const getTableData = () => { |
| | | let data = { |
| | | limit: state.pageSize, |
| | | page: state.page, |
| | | ...searchData |
| | | } |
| | | getTemptureReportList(data).then(res => { |
| | | tableData.value = res.data.list.map(item => { |
| | | let obj = {} |
| | | item.dataList.forEach(dl => { |
| | | obj[dl.code] = dl.value |
| | | }) |
| | | return { |
| | | ...item, |
| | | ...obj |
| | | } |
| | | }) |
| | | console.log(tableData.value) |
| | | state.total = res.data.total |
| | | }) |
| | | } |
| | | |
| | | // 分页按钮 |
| | | const paginationFun = (data) => { |
| | | state.page = data.page |
| | | getTableData() |
| | | } |
| | | |
| | | // 导出报表 |
| | | const exportData = () => { |
| | | let data = { |
| | | limit: tableRef.value.state.limit, |
| | | page: tableRef.value.state.page, |
| | | limit: state.pageSize, |
| | | page: state.page, |
| | | ...searchData |
| | | } |
| | | if(timeVal.value && timeVal.value.length > 0) { |
| | |
| | | } else { |
| | | searchData.createTimeRange = '' |
| | | } |
| | | tableRef.value.getData() |
| | | getTableData() |
| | | } |
| | | |
| | | onMounted(() => { |
| | | const newArr = deepTableConfig.map(item => { |
| | | return { |
| | | prop: `${item}`, |
| | | label: `${item}m` |
| | | } |
| | | }) |
| | | tableHead.splice(1, 0, ...newArr) |
| | | getPoint() |
| | | getTableData() |
| | | }) |
| | | </script> |
| | | |
| | |
| | | <div class="report"> |
| | | <div class="report-tool"> |
| | | <el-cascader size="large" v-model="searchData.pointId" :options="typeOption" :show-all-levels="false" :props="cascaderOption" clearable /> |
| | | <el-select |
| | | v-model="searchData.dateType" |
| | | class="tool-select" |
| | | size="large" |
| | | placeholder="请选择" |
| | | clearable |
| | | style="width: 15rem" |
| | | > |
| | | <el-option |
| | | v-for="item in timeOption" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | <el-date-picker |
| | | v-model="timeVal" |
| | | type="datetimerange" |
| | |
| | | <el-button type="success" size="large" style="width: 6rem" @click="exportData">一键导出</el-button> |
| | | </div> |
| | | <div class="report-table"> |
| | | <Table ref="tableRef" :getList="getTemptureReportList" :headList="tableHead" :searchData="searchData"></Table> |
| | | <el-table |
| | | :data="tableData" |
| | | style="width: 100%; height: 85%" |
| | | > |
| | | <el-table-column |
| | | type="index" |
| | | label="序号" |
| | | align="center" |
| | | width="80px" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | v-for="(item, index) in tableHead" |
| | | :key="index" |
| | | :prop="item.prop" |
| | | :label="item.label" |
| | | > |
| | | </el-table-column> |
| | | </el-table> |
| | | <div class="pagination" v-show="state.total > 0"> |
| | | <div class="pagination-total">共{{state.total}}条</div> |
| | | <pagination |
| | | layout="prev, pager, next, jumper" |
| | | :total="state.total" |
| | | :page="state.page" |
| | | :limit="state.pageSize" |
| | | @pagination="paginationFun" |
| | | /> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | |
| | | border-radius: 8px; |
| | | padding: 20px; |
| | | } |
| | | .pagination{ |
| | | width: 100%; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: flex-end; |
| | | .pagination-total{ |
| | | color: #fff; |
| | | } |
| | | .pagination-container{ |
| | | background: transparent; |
| | | } |
| | | } |
| | | } |
| | | </style> |