vue 列表、查询、折线图、导出excel

该博客介绍了如何使用Vue.js进行列表展示(包含分页、序号列、条件筛选),实现查询功能(日/月/年报选择、后台数据回显),并利用Echarts创建多条折线图。同时,详细讲解了如何集成Excel导出功能,涵盖了从api.js到Java后端的完整流程,包括controller、service、mapper和mapper.xml的相关配置。

具体细节:
列表:分页、序号列、v-if条件展示
查询:日/月/年报下拉菜单、后台回显数据下拉菜单、日/月/年/时间选择器
折线图:echarts插件、多条折线图
导出excel:

页面:
在这里插入图片描述
vue:

<template>
    <section class="water-list">
        <el-form :inline="true" :model="water" style="margin-left: 10px;" size="small">

            <el-form-item label="统计报表">
                <el-select v-model="reroptType" placeholder="日报" @change="changeReport">
                    <el-option
                            v-for="item in reportOptions"
                            :key="item.reroptType"
                            :label="item.label"
                            :value="item.reroptType">
                    </el-option>
                </el-select>
            </el-form-item>

            <el-form-item label="站点名称">
                <el-select v-model="water.siteName" placeholder="请选择" style="width: 200px;">
                    <el-option
                            v-for="item in dataOptions"
                            :key="item.value"
                            :label="item.label"
                            :value="item.value">
                    </el-option>
                </el-select>
            </el-form-item>
            <el-form-item label="日期">

                <el-date-picker v-if="showDate"
                        v-model="orderCountDate"
                        type="date"
                        placeholder="选择日期"
                        format="yyyy-MM-dd"
                        value-format="yyyy-MM-dd">
                </el-date-picker>
                <el-time-picker v-if="showDate"
                        is-range
                        v-model="orderCountTime"
                        range-separator="至"
                        start-placeholder="开始时间"
                        end-placeholder="结束时间"
                        format="HH:mm"
                        value-format="HH:mm">
                </el-time-picker>

                <el-date-picker v-if="showMonth"
                                v-model="orderCountMonth"
                                type="month"
                                placeholder="选择月份"
                                format="yyyy-MM"
                                value-format="yyyy-MM">
                </el-date-picker>

                <el-date-picker v-if="showYear"
                                v-model="orderCountYear"
                                type="year"
                                placeholder="选择年"
                                format="yyyy"
                                value-format="yyyy">
                </el-date-picker>

            </el-form-item>

            <el-form-item>
                <el-button type="primary" @click="searchWater" icon="el-icon-search">查询</el-button>
            </el-form-item>

            <el-form-item>
                <el-button type="primary" @click="exportExcel">导出</el-button>
            </el-form-item>
        </el-form>
        <div style="margin-top: 10px;">
            <div id="myChart" :auto-resize="true" style="height: 350px;"></div>
        </div>
        <div class="content-box">
            <el-table :data="waterList" stripe fit v-loading="tableLoading">
                <el-table-column label="序号" type="index" width="50" align="center"></el-table-column>
                <el-table-column prop="siteName" label="站点名称" align="center">
                    <template slot-scope="scope">
                        <el-tag type="success" size="small">{
   
   {
   
   scope.row.siteName}}</el-tag>
                    </template>
                </el-table-column>
                <el-table-column prop="siteId" label="站点编号" align="center"></el-table-column>
                <el-table-column prop="ph" label="PH值" align="center"></el-table-column>
                <el-table-column prop="temperature" label="温度" align="center"></el-table-column>
                <el-table-column prop="turbidity" label="透明度" align="center"></el-table-column>
                <el-table-column prop="dissolvedOxygen" label="溶解氧" align="center"></el-table-column>
                <el-table-column prop="conductivity" label="氧化还原电位" align="center"></el-table-column>
                <el-table-column prop="carbon" label="总有机碳" align="center"></el-table-column>
                <el-table-column prop="permanganate" label="高锰酸盐指数" align="center"></el-table-column>
                <el-table-column prop="ammonia" label="氨氮" align="center"></el-table-column>
                <el-table-column prop="phosphorus" label="总磷" align="center"></el-table-column>
                <el-table-column prop="evaluate" label="水质评价" align="center"></el-table-column>
                <el-table-column prop="name" label="负责人" align="center"></el-table-column>
                <el-table-column v-if="this.reroptType == 1" prop="detectTime" label="监测时间" align="center"></el-table-column>
                <el-table-column v-if="this.reroptType != 1" prop="dates" label="监测时间" align="center"></el-table-column>
            </el-table>

            <!-- 页码区 -->
            <div class="block">
                <el-pagination
                        @size-change="handleSizeChange"
                        @current-change="handleCurrentChange"
                        :current-page="page.curPage"
                        :page-sizes="[10, 15, 20, 30]"
                
### 如何在Vue项目中实现ECharts折线图导出功能 为了实现在Vue项目中将ECharts折线图导出Excel的功能,可以采用`exceljs``file-saver`这两个库来处理文件创建与保存操作。具体来说,在获取到ECharts表的数据之后,可以通过这些数据构建Excel工作表并提供下载链接。 #### 准备阶段 安装必要的依赖包: ```bash npm install echarts exceljs file-saver --save ``` 引入所需的模块并在组件内部定义方法用于触发导出行为: ```javascript import * as XLSX from 'xlsx'; import { saveAs } from 'file-saver'; import * as ExcelJS from 'exceljs'; export default { methods: { exportChartToExcel() { const chart = this.$refs.chart.getEchartsInstance(); // 获取echarts实例 let option = chart.getOption(); // 创建一个新的workbook对象 var workbook = new ExcelJS.Workbook(); var worksheet = workbook.addWorksheet('Sheet Name'); // 添加标题行 worksheet.addRow(['时间', '数值']); // 遍历series中的data数组并将每一对time-value加入worksheet for (let i = 0; i < option.series[0].data.length; ++i){ worksheet.addRow([option.xAxis.data[i], option.series[0].data[i]]); } // 将Workbook转换成Buffer流形式 workbook.xlsx.writeBuffer().then((buffer) => { const blob = new Blob([buffer], { type: "application/octet-stream" }); saveAs(blob, `chart_export_${new Date().toISOString().slice(0,10)}.xlsx`); }); } }, } ``` 此代码片段展示了如何利用JavaScript Promise机制异步地完成整个流程——从读取ECharts配置项到最后一步生成可供用户点击下载的二进制文件[^1]。 值得注意的是,上述例子假设了存在一个名为`chart`的ref指向包含ECharts实例化的DOM元素,并且该实例已经加载完毕可被访问;另外也假定所使用的ECharts形仅有一个系列(即一条折线),如果实际应用中有多个系列,则需相应调整循环逻辑以适应更复杂的情况。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值