bigfixed:报表

This commit is contained in:
geting 2025-01-17 15:16:30 +08:00
parent 4f88a6a793
commit 1d3ffb8715

View File

@ -26,12 +26,17 @@
/> />
<div style="width: 20px"></div> <div style="width: 20px"></div>
<div style="min-width: 30px">{{ t('statAnalysis.interval') }}</div> <div style="min-width: 30px">{{ t('statAnalysis.interval') }}</div>
<el-select v-model="interval" :placeholder="'请选择' + t('statAnalysis.interval')" class="commonSelect"> <el-select v-model="interval" :placeholder="'请选择' + t('statAnalysis.interval')" class="commonSelect" @change="intervalChange">
<el-option v-for="v in intervals" :key="v.value" :label="v.label" :value="v.value"></el-option> <el-option v-for="v in intervals" :key="v.value" :label="v.label" :value="v.value"></el-option>
</el-select> </el-select>
<div style="width: 20px"></div> <div style="width: 20px"></div>
<div style="min-width: 30px">{{ t('statAnalysis.calFunction') }}</div> <div style="min-width: 30px">{{ t('statAnalysis.calFunction') }}</div>
<el-select v-model="calFunction" :placeholder="'请选择' + t('statAnalysis.calFunction')" class="commonSelect"> <el-select
v-model="calFunction"
:placeholder="'请选择' + t('statAnalysis.calFunction')"
class="commonSelect"
:disabled="interval == 'NONE'"
>
<el-option v-for="v in calFunctions" :key="v.value" :label="v.label" :value="v.value"></el-option> <el-option v-for="v in calFunctions" :key="v.value" :label="v.label" :value="v.value"></el-option>
</el-select> </el-select>
</el-space> </el-space>
@ -70,7 +75,7 @@
<el-table <el-table
class="mainReport" class="mainReport"
:columns="reportTableColumn" :columns="reportTableColumn"
:data="reportTableData" :data="pagedData"
:row-key="(row: any) => row.id" :row-key="(row: any) => row.id"
:row-style="tableRowClassName" :row-style="tableRowClassName"
v-loading="reportLoading" v-loading="reportLoading"
@ -103,6 +108,20 @@
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<div class="mainFooter">
<el-pagination
v-model:current-page="currentPage"
v-model:page-size="pageSize"
:page-sizes="pageSizes"
:total="totalRecords"
@current-change="handlePageChange"
@size-change="handlePageSizeChange"
layout="prev, pager, next, jumper,sizes,total"
background
class="pagination"
></el-pagination>
</div>
<el-dialog v-model="showMeasure" title="测点名称" :width="900" :destroy-on-close="true"> <el-dialog v-model="showMeasure" title="测点名称" :width="900" :destroy-on-close="true">
<template #header> <template #header>
<div class="measureSlotHeader"> <div class="measureSlotHeader">
@ -129,7 +148,7 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { reactive, ref, nextTick, onMounted } from 'vue' import { reactive, ref, nextTick, onMounted, computed } from 'vue'
import { ElMessage, TableInstance, TreeInstance, ElMessageBox } from 'element-plus' import { ElMessage, TableInstance, TreeInstance, ElMessageBox } from 'element-plus'
import { Search, Upload, Notebook, Plus, Delete } from '@element-plus/icons-vue' import { Search, Upload, Notebook, Plus, Delete } from '@element-plus/icons-vue'
import { WindBlowerList, RequestData, Devices } from './type' import { WindBlowerList, RequestData, Devices } from './type'
@ -225,6 +244,12 @@ const calFunctions = [
{ label: '最大值', value: 'max' }, { label: '最大值', value: 'max' },
{ label: '最小值', value: 'min' }, { label: '最小值', value: 'min' },
] ]
const intervalChange = (val: any) => {
if (val == 'NONE') {
calFunction.value = 'interpolation'
}
}
// //
const template = ref('') const template = ref('')
const reportTemplateList = ref<{ label: string; value: string; columns: any[]; interval: string; calFunction: string }[]>([]) const reportTemplateList = ref<{ label: string; value: string; columns: any[]; interval: string; calFunction: string }[]>([])
@ -437,6 +462,35 @@ const originReportColumn = [
] ]
const reportTableColumn = ref(JSON.parse(JSON.stringify(originReportColumn))) const reportTableColumn = ref(JSON.parse(JSON.stringify(originReportColumn)))
//
const currentPage = ref(1)
//
const pageSize = ref(20)
const pageSizes = ref([20, 50, 100])
//
const totalRecords = ref(0)
const pageDataCache = ref(new Map())
const pagedData = computed(() => {
if (pageDataCache.value.has(currentPage.value)) {
return pageDataCache.value.get(currentPage.value)
} else {
return []
}
})
const totalPages = computed(() => {
return Math.ceil(totalRecords.value / pageSize.value)
})
//
const handlePageChange = (page: number) => {
currentPage.value = page
loadDataForPage(page) //
}
const handlePageSizeChange = (size: number) => {
pageSize.value = size
currentPage.value = 1 // page-size
loadDataForPage(1) //
}
const reportTableData = ref([]) as any const reportTableData = ref([]) as any
const idCounter = ref(0) const idCounter = ref(0)
const queryHistoryData = () => { const queryHistoryData = () => {
@ -478,7 +532,7 @@ const queryHistoryData = () => {
} }
const handleRes = (res: any, attributeCodes: any) => { const handleRes = (res: any, attributeCodes: any) => {
if (res.code == 200) { if (res.code === 200) {
const result = res.data const result = res.data
if (Object.keys(result)?.length) { if (Object.keys(result)?.length) {
const realResult = result[windBlowerValue.value] const realResult = result[windBlowerValue.value]
@ -493,28 +547,29 @@ const handleRes = (res: any, attributeCodes: any) => {
} }
}) })
const processedData = new Map() const processedData = new Map()
idCounter.value = 0 let idCounter = 0
if (tableData.length) { if (tableData.length) {
tableData.forEach(({ name, times, value }: any) => { tableData.forEach(({ name, times, value }: any) => {
times.forEach((time: number, index: number) => { times.forEach((time: number, index: number) => {
if (!processedData.has(time)) { if (!processedData.has(time)) {
processedData.set(time, { id: idCounter.value++, time: timestampToTime(time) }) processedData.set(time, { id: idCounter++, time: timestampToTime(time) })
} }
const values = value[index] const values = value[index]
processedData.get(time)[name] = enumStore.keys.includes(name) ? enumStore.data?.[name]?.[values] : values processedData.get(time)[name] = enumStore.keys.includes(name) ? enumStore.data?.[name]?.[values] : values
}) })
}) })
} }
totalRecords.value = processedData.size
reportTableData.value = Array.from(processedData.values()) reportTableData.value = Array.from(processedData.values())
if (!reportTableData.value.length) {
ElMessage.warning('查询数据为空!') currentPage.value = 1
reportTableData.value = []
}
reportLoading.value = false reportLoading.value = false
loadDataForPage(currentPage.value)
} else { } else {
ElMessage.warning('查询数据为空!')
reportTableData.value = []
reportLoading.value = false reportLoading.value = false
reportTableData.value = []
totalRecords.value = 0
} }
} else { } else {
reportLoading.value = false reportLoading.value = false
@ -522,6 +577,16 @@ const handleRes = (res: any, attributeCodes: any) => {
} }
} }
//
const loadDataForPage = (page: number) => {
const startIndex = (page - 1) * pageSize.value
const endIndex = page * pageSize.value
const pageData = reportTableData.value.slice(startIndex, endIndex)
// pageDataCache
pageDataCache.value.set(page, pageData)
}
// //
const getFormattedDate = (offset: number) => { const getFormattedDate = (offset: number) => {
const date = new Date() const date = new Date()
@ -588,7 +653,11 @@ onMounted(() => {
width: 100%; width: 100%;
height: calc(100% - 155px); height: calc(100% - 155px);
} }
.mainFooter {
display: flex;
justify-content: right;
background-color: #fff;
}
.commonSelect { .commonSelect {
min-width: 150px; min-width: 150px;
:deep(.el-select__wrapper) { :deep(.el-select__wrapper) {