参考JeecgListMixin里的方法handleExportXlsx,写一个类似的方法是能够将StockMeterBaseStatistics页面图标的数据存在excel中
时间: 2024-12-11 10:26:49 浏览: 9
要在 `StockMeterBaseStatistics` 页面实现类似 `handleExportXlsx` 方法的功能,以将图表数据导出到 Excel 中,可以按照以下步骤进行:
1. **定义新的导出方法**:在 `methods` 中定义一个新的方法 `handleExportChartXlsx`。
2. **提取图表数据**:从 ECharts 实例中提取数据。
3. **生成 Excel 文件**:使用现有的 `downloadXlsxFile` 方法或其他适当的库生成 Excel 文件。
4. **处理下载逻辑**:确保用户可以通过点击按钮触发导出操作。
以下是具体的代码实现:
### 更新 `StockMeterBaseStatistics` 组件
```html
<template>
<div>
<a-button type="primary" icon="download" @click="handleExportChartXlsx">导出图表数据</a-button>
<div class="meter-status-chart">
<div class="chart-container">
<div id="chart-1" class="chart" style="width: 450px; height: 300px;"></div>
</div>
<div class="chart-container">
<div id="chart-2" class="chart" style="width: 450px; height: 300px;"></div>
</div>
<div class="chart-container">
<div id="chart-3" class="chart" style="width: 450px; height: 300px;"></div>
</div>
<div class="chart-container">
<div id="chart-4" class="chart" style="width: 450px; height: 300px;"></div>
</div>
</div>
<p>注:统计中不含表具状态=已报废、已置换、临时库存的表具</p>
</div>
</template>
<script>
import * as echarts from 'echarts';
import { downloadXlsxFile, getFileAccessHttpUrl } from '@/api/manage';
export default {
name: 'MeterStatusChart',
data() {
return {
chartsData: {}
};
},
mounted() {
this.initCharts();
},
methods: {
initCharts() {
const options = [
{ id: 'chart-1', title: '在库状态', data: [{ value: 2300, name: '在库' }, { value: 200000, name: '出库' }] },
{ id: 'chart-2', title: '检定状态', data: [{ value: 2300, name: '检定中' }, { value: 200000, name: '已检定' }] },
{ id: 'chart-3', title: '表具状态', data: [{ value: 350, name: '新表库存' }, { value: 500, name: '旧表库存' }, { value: 1000, name: '已领用' }, { value: 5, name: '已返厂' }, { value: 45, name: '已拆除' }] },
{ id: 'chart-4', title: '保养状态', data: [{ value: 10000, name: '大保养' }, { value: 2000, name: '小保养' }, { value: 2201100, name: '未保养' }, { value: 100, name: '保养超期' }] }
];
options.forEach(option => {
const chartDom = document.getElementById(option.id);
const chart = echarts.init(chartDom);
const chartOption = {
title: { text: option.title, left: 'center' },
tooltip: { trigger: 'item' },
legend: { orient: 'vertical', left: 'left' },
series: [
{
name: '状态',
type: 'pie',
radius: '50%',
data: option.data,
emphasis: { itemStyle: { shadowBlur: 10, shadowOffsetX: 0, shadowColor: 'rgba(0, 0, 0, 0.5)' } }
}
]
};
chart.setOption(chartOption);
this.chartsData[option.id] = chart.getData().getData();
});
},
handleExportChartXlsx() {
const param = {};
let times = 0;
const modal = this.$info({
content: '下载中' + '.'.repeat(times % 6 + 1),
okText: '取消'
});
const interval = setInterval(() => {
times++;
modal.update({ content: '下载中' + '.'.repeat(times % 6 + 1) });
}, 1000);
const workbook = XLSX.utils.book_new();
const wsData = [];
Object.keys(this.chartsData).forEach(chartId => {
const data = this.chartsData[chartId];
const sheetData = data.map(item => ({
名称: item.name,
数量: item.value
}));
const worksheet = XLSX.utils.json_to_sheet(sheetData);
XLSX.utils.book_append_sheet(workbook, worksheet, chartId.replace('chart-', ''));
});
XLSX.writeFile(workbook, 'charts_data.xlsx');
clearInterval(interval);
modal.destroy();
}
}
};
</script>
<style scoped>
.meter-status-chart {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 20px;
}
.chart-container {
display: flex;
flex-direction: column;
align-items: center;
border: 2px solid #f0f0f0;
padding: 10px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
background-color: #ffffff;
width: 550px;
margin-bottom: 20px;
}
</style>
```
### 关键点解释
1. **初始化图表**:在 `initCharts` 方法中,我们初始化了四个饼图,并将每个图的数据存储在 `this.chartsData` 对象中。
2. **处理导出逻辑**:在 `handleExportChartXlsx` 方法中,我们使用 `XLSX` 库来创建一个新的工作簿,并将每个图的数据转换为 Excel 表格格式,然后将其保存为 `charts_data.xlsx` 文件。
3. **显示下载进度**:在导出过程中,显示一个简单的下载进度提示,并在导出完成后清除提示。
通过以上步骤,您可以实现在 `StockMeterBaseStatistics` 页面上导出图表数据到 Excel 的功能。希望这对您有所帮助!
阅读全文