JeecgBoot企业级开发中实现自定义导出EXCEL的前端表格字段功能

news/2024/11/24 6:52:38/

文章目录

  • 如何在后端实现导出前端列表字段到Excel功能
    • 需求
    • 前端的实现
      • 1. 提供一个导出的点击函数
      • 2.引入组件中的userMethod
      • 3.tableProps中导出中添加对应的查询参数
      • 4. 编写导出函数
    • 后端逻辑的实现
      • 1.Controller层
      • 2.创建Modal类
      • 3.Sevice层
    • 检验成果
      • 总结

如何在后端实现导出前端列表字段到Excel功能

需求

  • 根据表格展示的列表字段、点击导出会弹出一个EXCEL包含下列的信息,但是由于框架自带的是Mybatis-plus需要提供的实体类字段和表格中展示的是一样的,因此是行不通的,因为下列的字段和数据库表不能一一对应上,因此考虑自定义封装一个接口
    在这里插入图片描述

前端的实现

1. 提供一个导出的点击函数

    <!--引用表格--><BasicTable @register="registerTable" :rowSelection="rowSelection"><!--插槽:table标题--><template #tableTitle><a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增</a-button><a-button  type="primary" preIcon="ant-design:export-outlined" @click="exportXlS"> 导出</a-button><j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button><a-dropdown v-if="selectedRowKeys.length > 0"><template #overlay><a-menu><a-menu-item key="1" @click="batchHandleDelete"><Icon icon="ant-design:delete-outlined"></Icon>删除</a-menu-item></a-menu></template><a-button>批量操作<Icon icon="mdi:chevron-down"></Icon></a-button></a-dropdown></template><!--操作栏--><template #action="{ record }"><TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)" /></template><!--字段回显插槽--><template #htmlSlot="{ text }"><div v-html="text"></div></template><template #bill_data="{ record }"> <!-- 文字提示 --><a-tooltip><template #title>{{ record.bill}}</template> <a-button type="primary" shape="round" @click = "showBillDetails(record.id)">查看</a-button> </a-tooltip></template><!--省市区字段回显插槽--><template #pcaSlot="{ text }">{{ getAreaTextByCode(text) }}</template><template #fileSlot="{ text }"><span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span><a-button v-else :ghost="true" type="primary" preIcon="ant-design:download-outlined" size="small"@click="downloadFile(text)">下载</a-button></template></BasicTable>

2.引入组件中的userMethod

  import { useMethods } from '/@/hooks/system/useMethods';

3.tableProps中导出中添加对应的查询参数

const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({tableProps: {title: '数据报表',api: queryList,columns,canResize: false,useSearchForm: false,showActionColumn: false,summaryData: summaryData,pagination:false,actionColumn: {width: 120,fixed: 'right',},beforeFetch: (params) => {return Object.assign(params, queryParam.value);},afterFetch: (data) =>{}},exportConfig: {name: "数据报表",url: getExportUrl,params:queryParam.value},importConfig: {url: getImportUrl,success: handleSuccess},
});

4. 编写导出函数

  //导入导出方法const { handleExportXls, handleImportXls } = useMethods();/*** 导出事件*/function exportXlS() {return handleExportXls("账号数据表", "/count/opReport/exportExcel", queryParam.value);}

后端逻辑的实现

1.Controller层

  • 使用ModelAndView进行接收,同时Dto是前端查询的那些参数,ReportAccountModal实体类使我们导出Excel对应的那些字段
	/**@param reportAccountDto* @author chenglin* @description 补充导出Excel功能* @date  16:26 2023/5/30**/@RequestMapping(value = "/exportExcel")public ModelAndView exportExcel(HttpServletRequest request, ReportAccountDto reportAccountDto) {return OpReportAccountService.exportExcel(request,reportAccountDto, ReportAccountModal.class,"账号数据表");}

2.创建Modal类

package org.jeecg.modules.count.modal;import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;/*** @description: 账号报表EXCEL模型类* @author: chenglin* @date: 2023年05月30日 16:28*/
@Data
public class ReportAccountModal implements Serializable {private static final long serialVersionUID = 1L;/**账号昵称*/@Excel(name = "账号昵称", width = 15)@ApiModelProperty(value = "账号昵称")private String nickName;/**账号*/@Excel(name = "账号", width = 15)@ApiModelProperty(value = "账号")private String account;/**游戏*/@Excel(name = "游戏", width = 15)@ApiModelProperty(value = "游戏")private String subGameIds;/**渠道*/@Excel(name = "渠道", width = 15)@ApiModelProperty(value = "渠道")private String channelName;/**投放消耗*/@Excel(name = "投放消耗", width = 15)@ApiModelProperty(value = "投放消耗")private BigDecimal outCostMoney;/**账号余额*/@Excel(name = "账号余额", width = 15)@ApiModelProperty(value = "账号余额")private BigDecimal surplusAmount;/**曝光*/@Excel(name = "曝光", width = 15)@ApiModelProperty(value = "曝光")private BigDecimal exhibition;/**下载*/@Excel(name = "下载", width = 15)@ApiModelProperty(value = "下载")private BigDecimal download ;/**负责人*/@Excel(name = "负责人", width = 15)@ApiModelProperty(value = "负责人")private String principalUser;/**创建时间*/@Excel(name = "创建时间", width = 15)@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")@DateTimeFormat(pattern="yyyy-MM-dd")@ApiModelProperty(value = "创建时间")private Date createTime;/**更新时间*/@Excel(name = "更新时间", width = 15)@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")@DateTimeFormat(pattern="yyyy-MM-dd")@ApiModelProperty(value = "更新时间")private Date updateTime;
}

3.Sevice层

  • 其中我们的这个reusltList是我调用了之前查询数据的接口,然后将对应的数据拷贝到我的Modal类
    ModelAndView exportExcel(HttpServletRequest request, ReportAccountDto reportAccountDto, Class<ReportAccountModal> reportAccountClass, Stringtitle);//这是impl@Overridepublic ModelAndView exportExcel(HttpServletRequest request, ReportAccountDto reportAccountDto,Class<ReportAccountModal> reportAccountVoClass, String title) {LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();String  username = JwtUtil.getUserNameByToken(request);// Step.2 获取导出数据List<ReportAccountVo> resultList = queryAccountList(reportAccountDto,username);List<ReportAccountModal>exportList = new ArrayList<>();for (ReportAccountVo reportAccountVo : resultList) {ReportAccountModal reportAccountModal = new ReportAccountModal();BeanUtils.copyProperties(reportAccountVo,reportAccountModal);exportList.add(reportAccountModal);}// Step.3 AutoPoi 导出ExcelModelAndView mv = new ModelAndView(new JeecgEntityExcelView());//此处设置的filename无效 ,前端会重更新设置一下mv.addObject(NormalExcelConstants.FILE_NAME, title);mv.addObject(NormalExcelConstants.CLASS, reportAccountVoClass);//update-begin--Author:liusq  Date:20210126 for:图片导出报错,ImageBasePath未设置--------------------ExportParams exportParams=new ExportParams(title + "报表", "导出人:" + sysUser.getRealname(), title);exportParams.setImageBasePath(upLoadPath);//update-end--Author:liusq  Date:20210126 for:图片导出报错,ImageBasePath未设置----------------------mv.addObject(NormalExcelConstants.PARAMS,exportParams);mv.addObject(NormalExcelConstants.DATA_LIST, exportList);return mv;}

检验成果

  • 功能实现
    在这里插入图片描述

总结

JEECG 这个低代码有很多都是封装了,利用Mybatis-plus,而我们很多时候都是需要自定义的,因为我们的数据并不一定就是和实体类对应上的。这个需求来自我实习中的一个,用于记录下学习过程


http://www.ppmy.cn/news/108155.html

相关文章

WebGPU你让我等的好辛苦啊

什么是WebGPU WebGPU是一种新兴的Web标准&#xff0c;旨在为Web应用程序提供高性能的图形和计算功能。它是一种低级别的图形API&#xff0c;为开发人员提供了对现代GPU的直接访问&#xff0c;以实现更高效的图形渲染和通用计算。 WebGPU的设计目标是提供与现代图形API&#x…

代码随想录二刷 day07 |哈希表 之 454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和

day07 454 四数相加II383 赎金信15. 三数之和18. 四数之和 454 四数相加II 题目链接 解题思路&#xff1a; 类似两数相加的变形。将四数变成两组&#xff0c;这样的时间复杂度O(n)是最小的。 不用考虑有重复的四个元素相加等于0的情况&#xff0c; class Solution { public:i…

若依如何修改超级管理员登录密码

文章目录 修改方法方法一&#xff1a;不需要手动改数据库方法二&#xff1a;手动改数据库 为什么密码要加密存储BCryptPasswordEncoder介绍 修改方法 若依等Spring Boot 后台管理框架使用了Spring Security进行身份认证和授权&#xff0c;可以通过以下步骤修改超级管理员密码&…

离散数学_十章-图 ( 4 ):图的表示和图的同构

&#x1f4f7;10.4 图的表示和图的同构 1. 图的表示1.1 邻接表1.1.1 简单图的邻接表1.1.2 有向图的邻接表 1.2 邻接矩阵❗在邻接表和邻接矩阵之间取舍1.3 关联矩阵 2. 图同构3. ⚡判断两个简单图是否同构 图的表示方式有很多种&#xff0c;选择最方便的表示有助于对图的处理~ …

C++中变量、指针、引用、函数和类的内存机制

变量&#xff1a;变量在内存中是一个存储器单元&#xff0c;它能够保存数据&#xff0c;并且可以通过变量名来访问。变量的内存空间大小与其数据类型有关。 指针&#xff1a;指针实际上是一个变量&#xff0c;它存储的是内存中另一个变量的地址。指针在内存中本身也有存储器单…

这篇文章把MOS管的基础知识讲透了

MOS管&#xff08;Metal-Oxide-Semiconductor field-effect transistor&#xff09;是一种常见的半导体器件&#xff0c;它在数字电路、模拟电路、功率电子等领域都有广泛的应用。本文将从MOS管的基本结构、工作原理、参数特性等方面讲解MOS管的基础知识。 一、MOS管的基本结构…

Python3数据分析与挖掘建模(6)离散分布分析示例

1. 离散分布分析示例 相关库&#xff1a; pandas详细用法 numpy详细用法 1.1 引入算法库 # 引入 pandas库 import pandas as pd # 引入 numpy库 import numpy as np# 读取数据 dfpd.read_csv("data/HR.csv")# 查看数据 df Out[6]: satisfaction_level last_eval…

Mybaits Oracle CLob类型处理

问题描述: 使用的是Oracle 数据库, 表中有一个字段类型为clob类型 问题 : 当使用mybatis查询返回map类型时, 该字段的值为clob对象,而不是数据库里面的字符串 解决方案: 1.手动进行转换,把clob类型转换为字符串(这种比较简单) if(map.get("MAIN_BIZ") instanceo…