From ec763e1cb7dca873caf4afbc0dfde047b51753d3 Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期五, 17 十月 2025 17:26:54 +0800
Subject: [PATCH] 2025.10.17
---
src/components/monitor/DataTable.vue | 134 +++++++++++++++++++++++++++++++++++++-------
1 files changed, 113 insertions(+), 21 deletions(-)
diff --git a/src/components/monitor/DataTable.vue b/src/components/monitor/DataTable.vue
index 217aeb9..e7ad20d 100644
--- a/src/components/monitor/DataTable.vue
+++ b/src/components/monitor/DataTable.vue
@@ -1,3 +1,4 @@
+<!-- eslint-disable no-unused-vars -->
<template>
<BaseCard size="medium" direction="right">
<template #content>
@@ -34,6 +35,7 @@
v-if="selectFactorType.includes(item.value)"
:prop="item.name"
:label="item.label"
+ :formatter="factorFormatter"
align="center"
width="79"
sortable="custom"
@@ -54,7 +56,18 @@
</template>
<template #footer>
- <el-row justify="end">
+ <el-row justify="space-between" class="p-b-2 one-row">
+ <el-button
+ :loading="downloadLoading"
+ type="primary"
+ class="el-button-custom"
+ size="small"
+ @click="handleDownload"
+ :disabled="downloadLoading"
+ :icon="downloadLoading ? '' : 'download'"
+ >
+ 瀵煎嚭鏁版嵁
+ </el-button>
<el-text size="small" type="warning"
>鍏� {{ tableData.length }} 鏉★紝{{ pageSize }}鏉�/椤�</el-text
>
@@ -69,6 +82,7 @@
import { checkboxOptions } from '@/constant/checkbox-options';
import { TYPE0 } from '@/constant/device-type';
import { windDir } from '@/constant/wind-dir';
+import fileUtil from '@/utils/file';
export default {
props: {
@@ -79,6 +93,7 @@
// type0: 杞﹁浇鎴栨棤浜烘満; type1:鏃犱汉鑸�
default: TYPE0
},
+ deviceCode: String,
selectFactorType: {
type: Array,
default: () => []
@@ -92,21 +107,39 @@
total: 0,
currentPage: 1,
pageSize: 200,
- rowHeight: undefined
+ rowHeight: undefined,
+ // tableData:[],
+ showData: [],
+ downloadLoading: false
};
},
emits: ['tableClick'],
watch: {
locateIndex(nV, oV) {
if (nV == oV) return;
- this.$refs.tableRef.setCurrentRow(this.tableData[nV]);
+ const _index = this.tableData.findIndex((v) => v.index == nV);
+ this.$refs.tableRef.setCurrentRow(this.tableData[_index]);
// 璁$畻鍒嗛〉
- this.currentPage = parseInt(nV / this.pageSize) + 1;
+ this.currentPage = parseInt(_index / this.pageSize) + 1;
// 璁$畻瀵瑰簲鍒嗛〉涓殑绱㈠紩
- const index = nV % this.pageSize;
+ const index = _index % this.pageSize;
const h = this.getRowHeight();
- this.$refs.tableRef.setScrollTop(h * index - 350);
+ setTimeout(() => {
+ this.$refs.tableRef.setScrollTop(h * index - 350);
+ }, 200);
+ },
+ currentPage(nV, oV) {
+ if (nV == oV) return;
+ this.getShowData();
+ },
+ pageSize(nV, oV) {
+ if (nV == oV) return;
+ this.getShowData();
+ },
+ tableData(nV, oV) {
+ if (nV == oV) return;
+ this.getShowData();
}
},
computed: {
@@ -118,9 +151,6 @@
f.datas.forEach((v, i) => {
const name = f.factorName;
let value = v.factorData;
- if (name == 'WIND_DIRECTION') {
- value = windDir(value);
- }
if (list.length <= i) {
list.push({
index: i,
@@ -134,16 +164,28 @@
}
return list;
},
- showData() {
- const sIndex = (this.currentPage - 1) * this.pageSize;
- const eIndex = sIndex + this.pageSize;
- return this.tableData.slice(sIndex, eIndex);
- },
+ // showData: {
+ // get() {
+ // // const sIndex = (this.currentPage - 1) * this.pageSize;
+ // // const eIndex = sIndex + this.pageSize;
+ // // return this.tableData.slice(sIndex, eIndex);
+ // this.pageData = this.getShowData();
+ // return this.pageData
+ // },
+ // set(newValue) {
+ // this.pageData = newValue
+ // }
+ // },
tableColumn() {
- return checkboxOptions(this.deviceType);
+ return checkboxOptions(this.deviceType, true);
}
},
methods: {
+ getShowData() {
+ const sIndex = (this.currentPage - 1) * this.pageSize;
+ const eIndex = sIndex + this.pageSize;
+ this.showData = this.tableData.slice(sIndex, eIndex);
+ },
// 鑾峰彇琛ㄦ牸绗竴琛岄珮搴�
getRowHeight() {
if (!this.rowHeight) {
@@ -160,6 +202,13 @@
timeFormatter(row, col, cellValue, index) {
return moment(cellValue).format('HH:mm:ss');
},
+ factorFormatter(row, col, cellValue, index) {
+ if (col.property == 'WIND_DIRECTION') {
+ return windDir(cellValue);
+ } else {
+ return cellValue;
+ }
+ },
handleRowClick(row, col, event) {
this.$emit('tableClick', row.index);
// console.log(row);
@@ -167,18 +216,61 @@
// console.log(event.target.getBoundingClientRect().height);
},
handleSort({ column, prop, order }) {
- console.log(column);
- console.log(prop);
- console.log(order);
+ // console.log(column);
+ // console.log(prop);
+ // console.log(order);
+ this.tableData.sort((a, b) => {
+ if (order == 'ascending') {
+ if (a[prop] != b[prop]) {
+ return a[prop] - b[prop];
+ } else {
+ return a.TIME - b.TIME;
+ }
+ } else if (order == 'descending') {
+ if (a[prop] != b[prop]) {
+ return b[prop] - a[prop];
+ } else {
+ return a.TIME - b.TIME;
+ }
+ } else {
+ return a.TIME - b.TIME;
+ }
+ });
+ this.getShowData();
+ },
+ handleDownload() {
+ this.downloadLoading = true;
+ setTimeout(() => {
+ this.downloadLoading = false;
+ }, 2000);
+ const excelData = this.tableData.map((v) => {
+ const res = {
+ 缂栧彿: ++v.index,
+ 鏃堕棿: moment(v.TIME).format('YYYY-MM-DD HH:mm:ss')
+ };
+ this.tableColumn.forEach((c) => {
+ res[c.label] = v[c.name];
+ });
+ return res;
+ });
+ fileUtil.exportToExcel(excelData, this.deviceCode, '璧拌埅鐩戞祴鏁版嵁.xlsx');
+ this.downloadLoading = false;
}
}
};
</script>
+<style scoped>
+.one-row {
+ /* background-color: red; */
+ flex-wrap: nowrap;
+}
+</style>
<style>
.el-table {
--el-table-bg-color: transparent;
- --el-table-row-hover-bg-color: #23dad0a2;
- --el-table-current-row-bg-color: #23dad0a2;
+ --el-table-row-hover-bg-color: #bffff454;
+ /* --el-table-row-hover-bg-color: transparent; */
+ --el-table-current-row-bg-color: var(--select_color);
/* --el-table-current-row-bg-color: #7dff5d96; */
--el-table-text-color: var(--font-color);
}
@@ -199,7 +291,7 @@
.t-header-cell {
background-color: var(--bg-color-2) !important;
- text-align: center !important;
+ /* text-align: center !important; */
color: white !important;
}
.el-pagination {
--
Gitblit v1.9.3