1.修改 监控中心 - 环境监测 - 配置监测点位 表格字段显示样式
2.新增 监控中心 - 环境监测 - 历史数据 导出功能
This commit is contained in:
220
hx-ai-intelligent/src/util/Export2Excel.js
Normal file
220
hx-ai-intelligent/src/util/Export2Excel.js
Normal file
@@ -0,0 +1,220 @@
|
|||||||
|
/* eslint-disable */
|
||||||
|
import { saveAs } from 'file-saver'
|
||||||
|
import XLSX from 'xlsx'
|
||||||
|
|
||||||
|
function generateArray(table) {
|
||||||
|
var out = [];
|
||||||
|
var rows = table.querySelectorAll('tr');
|
||||||
|
var ranges = [];
|
||||||
|
for (var R = 0; R < rows.length; ++R) {
|
||||||
|
var outRow = [];
|
||||||
|
var row = rows[R];
|
||||||
|
var columns = row.querySelectorAll('td');
|
||||||
|
for (var C = 0; C < columns.length; ++C) {
|
||||||
|
var cell = columns[C];
|
||||||
|
var colspan = cell.getAttribute('colspan');
|
||||||
|
var rowspan = cell.getAttribute('rowspan');
|
||||||
|
var cellValue = cell.innerText;
|
||||||
|
if (cellValue !== "" && cellValue == +cellValue) cellValue = +cellValue;
|
||||||
|
|
||||||
|
//Skip ranges
|
||||||
|
ranges.forEach(function (range) {
|
||||||
|
if (R >= range.s.r && R <= range.e.r && outRow.length >= range.s.c && outRow.length <= range.e.c) {
|
||||||
|
for (var i = 0; i <= range.e.c - range.s.c; ++i) outRow.push(null);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
//Handle Row Span
|
||||||
|
if (rowspan || colspan) {
|
||||||
|
rowspan = rowspan || 1;
|
||||||
|
colspan = colspan || 1;
|
||||||
|
ranges.push({
|
||||||
|
s: {
|
||||||
|
r: R,
|
||||||
|
c: outRow.length
|
||||||
|
},
|
||||||
|
e: {
|
||||||
|
r: R + rowspan - 1,
|
||||||
|
c: outRow.length + colspan - 1
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
//Handle Value
|
||||||
|
outRow.push(cellValue !== "" ? cellValue : null);
|
||||||
|
|
||||||
|
//Handle Colspan
|
||||||
|
if (colspan)
|
||||||
|
for (var k = 0; k < colspan - 1; ++k) outRow.push(null);
|
||||||
|
}
|
||||||
|
out.push(outRow);
|
||||||
|
}
|
||||||
|
return [out, ranges];
|
||||||
|
};
|
||||||
|
|
||||||
|
function datenum(v, date1904) {
|
||||||
|
if (date1904) v += 1462;
|
||||||
|
var epoch = Date.parse(v);
|
||||||
|
return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
function sheet_from_array_of_arrays(data, opts) {
|
||||||
|
var ws = {};
|
||||||
|
var range = {
|
||||||
|
s: {
|
||||||
|
c: 10000000,
|
||||||
|
r: 10000000
|
||||||
|
},
|
||||||
|
e: {
|
||||||
|
c: 0,
|
||||||
|
r: 0
|
||||||
|
}
|
||||||
|
};
|
||||||
|
for (var R = 0; R != data.length; ++R) {
|
||||||
|
for (var C = 0; C != data[R].length; ++C) {
|
||||||
|
if (range.s.r > R) range.s.r = R;
|
||||||
|
if (range.s.c > C) range.s.c = C;
|
||||||
|
if (range.e.r < R) range.e.r = R;
|
||||||
|
if (range.e.c < C) range.e.c = C;
|
||||||
|
var cell = {
|
||||||
|
v: data[R][C]
|
||||||
|
};
|
||||||
|
if (cell.v == null) continue;
|
||||||
|
var cell_ref = XLSX.utils.encode_cell({
|
||||||
|
c: C,
|
||||||
|
r: R
|
||||||
|
});
|
||||||
|
|
||||||
|
if (typeof cell.v === 'number') cell.t = 'n';
|
||||||
|
else if (typeof cell.v === 'boolean') cell.t = 'b';
|
||||||
|
else if (cell.v instanceof Date) {
|
||||||
|
cell.t = 'n';
|
||||||
|
cell.z = XLSX.SSF._table[14];
|
||||||
|
cell.v = datenum(cell.v);
|
||||||
|
} else cell.t = 's';
|
||||||
|
|
||||||
|
ws[cell_ref] = cell;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range);
|
||||||
|
return ws;
|
||||||
|
}
|
||||||
|
|
||||||
|
function Workbook() {
|
||||||
|
if (!(this instanceof Workbook)) return new Workbook();
|
||||||
|
this.SheetNames = [];
|
||||||
|
this.Sheets = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
function s2ab(s) {
|
||||||
|
var buf = new ArrayBuffer(s.length);
|
||||||
|
var view = new Uint8Array(buf);
|
||||||
|
for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function export_table_to_excel(id) {
|
||||||
|
var theTable = document.getElementById(id);
|
||||||
|
var oo = generateArray(theTable);
|
||||||
|
var ranges = oo[1];
|
||||||
|
|
||||||
|
/* original data */
|
||||||
|
var data = oo[0];
|
||||||
|
var ws_name = "SheetJS";
|
||||||
|
|
||||||
|
var wb = new Workbook(),
|
||||||
|
ws = sheet_from_array_of_arrays(data);
|
||||||
|
|
||||||
|
/* add ranges to worksheet */
|
||||||
|
// ws['!cols'] = ['apple', 'banan'];
|
||||||
|
ws['!merges'] = ranges;
|
||||||
|
|
||||||
|
/* add worksheet to workbook */
|
||||||
|
wb.SheetNames.push(ws_name);
|
||||||
|
wb.Sheets[ws_name] = ws;
|
||||||
|
|
||||||
|
var wbout = XLSX.write(wb, {
|
||||||
|
bookType: 'xlsx',
|
||||||
|
bookSST: false,
|
||||||
|
type: 'binary'
|
||||||
|
});
|
||||||
|
|
||||||
|
saveAs(new Blob([s2ab(wbout)], {
|
||||||
|
type: "application/octet-stream"
|
||||||
|
}), "test.xlsx")
|
||||||
|
}
|
||||||
|
|
||||||
|
export function export_json_to_excel({
|
||||||
|
multiHeader = [],
|
||||||
|
header,
|
||||||
|
data,
|
||||||
|
filename,
|
||||||
|
merges = [],
|
||||||
|
autoWidth = true,
|
||||||
|
bookType = 'xlsx'
|
||||||
|
} = {}) {
|
||||||
|
/* original data */
|
||||||
|
filename = filename || 'excel-list'
|
||||||
|
data = [...data]
|
||||||
|
data.unshift(header);
|
||||||
|
|
||||||
|
for (let i = multiHeader.length - 1; i > -1; i--) {
|
||||||
|
data.unshift(multiHeader[i])
|
||||||
|
}
|
||||||
|
|
||||||
|
var ws_name = "SheetJS";
|
||||||
|
var wb = new Workbook(),
|
||||||
|
ws = sheet_from_array_of_arrays(data);
|
||||||
|
|
||||||
|
if (merges.length > 0) {
|
||||||
|
if (!ws['!merges']) ws['!merges'] = [];
|
||||||
|
merges.forEach(item => {
|
||||||
|
ws['!merges'].push(XLSX.utils.decode_range(item))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
if (autoWidth) {
|
||||||
|
/*设置worksheet每列的最大宽度*/
|
||||||
|
const colWidth = data.map(row => row.map(val => {
|
||||||
|
/*先判断是否为null/undefined*/
|
||||||
|
if (val == null) {
|
||||||
|
return {
|
||||||
|
'wch': 10
|
||||||
|
};
|
||||||
|
}
|
||||||
|
/*再判断是否为中文*/
|
||||||
|
else if (val.toString().charCodeAt(0) > 255) {
|
||||||
|
return {
|
||||||
|
'wch': val.toString().length * 2
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
return {
|
||||||
|
'wch': val.toString().length
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}))
|
||||||
|
/*以第一行为初始值*/
|
||||||
|
let result = colWidth[0];
|
||||||
|
for (let i = 1; i < colWidth.length; i++) {
|
||||||
|
for (let j = 0; j < colWidth[i].length; j++) {
|
||||||
|
if (result[j]['wch'] < colWidth[i][j]['wch']) {
|
||||||
|
result[j]['wch'] = colWidth[i][j]['wch'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ws['!cols'] = result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* add worksheet to workbook */
|
||||||
|
wb.SheetNames.push(ws_name);
|
||||||
|
wb.Sheets[ws_name] = ws;
|
||||||
|
|
||||||
|
var wbout = XLSX.write(wb, {
|
||||||
|
bookType: bookType,
|
||||||
|
bookSST: false,
|
||||||
|
type: 'binary'
|
||||||
|
});
|
||||||
|
saveAs(new Blob([s2ab(wbout)], {
|
||||||
|
type: "application/octet-stream"
|
||||||
|
}), `${filename}.${bookType}`);
|
||||||
|
}
|
@@ -474,7 +474,7 @@ export const tableConfigCal = (
|
|||||||
return data.list.length === 0;
|
return data.list.length === 0;
|
||||||
},
|
},
|
||||||
extra: {
|
extra: {
|
||||||
xlsxMap: tableKeyMap,
|
xlsxMap: isCarbon ? tableCarbonKeyMap : tableCalKeyMap,
|
||||||
xlsxName: '分组信息YYYY-MM-DD',
|
xlsxName: '分组信息YYYY-MM-DD',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@@ -59,7 +59,10 @@
|
|||||||
查询
|
查询
|
||||||
</a-button>
|
</a-button>
|
||||||
</div>
|
</div>
|
||||||
<a-button type="primary" style="position: absolute; right: 40px; top: -45px">
|
<a-button
|
||||||
|
type="primary"
|
||||||
|
style="position: absolute; right: 40px; top: -45px"
|
||||||
|
@click="exportExcel()">
|
||||||
导出
|
导出
|
||||||
</a-button>
|
</a-button>
|
||||||
</div>
|
</div>
|
||||||
@@ -84,6 +87,9 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
|
import XLSX from 'xlsx';
|
||||||
|
// import Export2Excel from '/@/util/Export2Excel.js';
|
||||||
|
|
||||||
import { ref, onMounted, defineOptions } from 'vue';
|
import { ref, onMounted, defineOptions } from 'vue';
|
||||||
// import { http } from '/nerv-lib/util/http';
|
// import { http } from '/nerv-lib/util/http';
|
||||||
import { Pagination, SelectProps, TreeSelectProps, TableColumnType } from 'ant-design-vue';
|
import { Pagination, SelectProps, TreeSelectProps, TableColumnType } from 'ant-design-vue';
|
||||||
@@ -346,6 +352,61 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
// 导出excel
|
||||||
|
/**导出按钮点击事件函数
|
||||||
|
* @前期准备 npm install -S xlsx file-saver 及 Export2Excel.js
|
||||||
|
*/
|
||||||
|
const exportExcel = () => {
|
||||||
|
import('/@/util/Export2Excel.js').then((excel) => {
|
||||||
|
// 导出的表头名
|
||||||
|
let tHeader = [];
|
||||||
|
let filterVal = [];
|
||||||
|
for (let i = 0; i < tableColumns.value.length; i++) {
|
||||||
|
if (tableColumns.value[i].dataIndex) {
|
||||||
|
tHeader.push(tableColumns.value[i].title);
|
||||||
|
filterVal.push(tableColumns.value[i].dataIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// const tHeader = [
|
||||||
|
// 'ID',
|
||||||
|
// '名称',
|
||||||
|
// '视频ID',
|
||||||
|
// '视频标题',
|
||||||
|
// '发布',
|
||||||
|
// '视频类型',
|
||||||
|
// '播放量',
|
||||||
|
// '上传时间',
|
||||||
|
// ];
|
||||||
|
// // 导出的表头字段名
|
||||||
|
// const filterVal = [
|
||||||
|
// 'id',
|
||||||
|
// 'name',
|
||||||
|
// 'videoId',
|
||||||
|
// 'videoTitle',
|
||||||
|
// 'release',
|
||||||
|
// 'videoType',
|
||||||
|
// 'playVolume',
|
||||||
|
// 'updateTime',
|
||||||
|
// ];
|
||||||
|
//传入的数据
|
||||||
|
const list = data.value;
|
||||||
|
|
||||||
|
const datas = formatJson(filterVal, list);
|
||||||
|
excel.export_json_to_excel({
|
||||||
|
header: tHeader, // 表格头部
|
||||||
|
data: datas, // 表格数据
|
||||||
|
filename: '表格导出测试', // excel文件名
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
* 格式化表格数据
|
||||||
|
* @filterVal 格式头
|
||||||
|
* @jsonData 用来格式化的表格数据
|
||||||
|
*/
|
||||||
|
const formatJson = (filterVal: any, jsonData: any) => {
|
||||||
|
return jsonData.map((v: any) => filterVal.map((j: any) => v[j]));
|
||||||
|
};
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
// 获取频率
|
// 获取频率
|
||||||
let frequency = await getEnum({ params: { enumType: 'TimeFlagEnum' } });
|
let frequency = await getEnum({ params: { enumType: 'TimeFlagEnum' } });
|
||||||
|
@@ -65,6 +65,13 @@
|
|||||||
:unCheckedValue="0"
|
:unCheckedValue="0"
|
||||||
@change="(checked) => updateShowed(record)" />
|
@change="(checked) => updateShowed(record)" />
|
||||||
</template>
|
</template>
|
||||||
|
<template
|
||||||
|
v-if="column.dataIndex === 'device1Area' || column.dataIndex === 'device2Area'">
|
||||||
|
<a-tooltip v-if="text.length > 15" :title="text">
|
||||||
|
{{ text.slice(0, 15) }}...
|
||||||
|
</a-tooltip>
|
||||||
|
<span v-else>{{ text }}</span>
|
||||||
|
</template>
|
||||||
</template>
|
</template>
|
||||||
<template #title>
|
<template #title>
|
||||||
<div
|
<div
|
||||||
@@ -171,7 +178,7 @@
|
|||||||
const typeList = ref();
|
const typeList = ref();
|
||||||
|
|
||||||
const quyuvalue = ref<string[]>([]);
|
const quyuvalue = ref<string[]>([]);
|
||||||
const useFlag = ref<Number>();
|
const useFlag = ref<Number | null>();
|
||||||
const useFlagList = ref();
|
const useFlagList = ref();
|
||||||
useFlagList.value = [
|
useFlagList.value = [
|
||||||
{
|
{
|
||||||
@@ -218,6 +225,7 @@
|
|||||||
// 重置
|
// 重置
|
||||||
const resetting = () => {
|
const resetting = () => {
|
||||||
quyuvalue.value = [];
|
quyuvalue.value = [];
|
||||||
|
useFlag.value = null;
|
||||||
areaName.value = '';
|
areaName.value = '';
|
||||||
};
|
};
|
||||||
// 修改是否显示状态
|
// 修改是否显示状态
|
||||||
@@ -296,6 +304,8 @@
|
|||||||
// quyuvalue.value = [treeData2.value[0].childList[0].id];
|
// quyuvalue.value = [treeData2.value[0].childList[0].id];
|
||||||
// }
|
// }
|
||||||
});
|
});
|
||||||
|
|
||||||
|
queryDeviceInfoListPage();
|
||||||
};
|
};
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
// 获取环境参数
|
// 获取环境参数
|
||||||
@@ -360,6 +370,13 @@
|
|||||||
{
|
{
|
||||||
title: '设备一级区域',
|
title: '设备一级区域',
|
||||||
dataIndex: 'device1Area',
|
dataIndex: 'device1Area',
|
||||||
|
// width: 300,
|
||||||
|
// ellipsis: true,
|
||||||
|
// textNumber: 15,
|
||||||
|
// textEllipsis: true,
|
||||||
|
// ellipsis: {
|
||||||
|
// showTitle: false, // 设置为 false 在悬浮时显示 tooltip
|
||||||
|
// },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: '设备二级区域',
|
title: '设备二级区域',
|
||||||
|
Reference in New Issue
Block a user