使用vue3框架vue-next-admin导出表格excel(带图片)

想要使用vue3导出表格内容并且图片显示在表格中(如图): 

步骤如下:

下载安装插件:

    安装命令:npm install js-table2excel

引入插件:

	import table2excel from 'js-table2excel'

使用插件     

        直接上代码:

        onBatchExport方法中数据的key值要与data中保持一致,否则数据无法获取到,打印出的结果就回为undefined。

我写了两种导出:
一种是全部导出;另一种是选中导出。
选中导出需要结合列表中的复选框,给复选框绑定onchange事件,声明变量,把选中的数据存到到变量中,然后给导出的数据换成变量,就可以只导出选中的列表。

下面是全部导出: 

<template>
<div><el-button size="big" type="primary" @click="open">导出</el-button></div>
</template>
<script>
import table2excel from "js-table2excel";
// 账号列表总数据
const datum = ref([]);
// 导出框显示
// 导出全部数据的函数
const exportBtn = () => {const column = [{title: "序号",key: "id",type: "text",},{title: "店长名称",key: "name",type: "text",},{title: "商家门头照",key: "img",type: "image",width: 120,height: 150,},{title: "公司名称",key: "title",type: "text",},{title: "订单号",key: "order_num",type: "text",},{title: "应付",key: "money",type: "text",},{title: "实际支付",key: "fact_money",type: "text",},{title: "类型",key: "type",type: "text",formatter: (row) => {const typeMap = {1: "微信",2: "支付宝",3: "抖音",};return typeMap[row.type] || "未知";},},{title: "平台订单号",key: "terrace_order_num",type: "text",width: 500, // 自动调整宽度numberFormat: "text",},{title: "创建时间",key: "create_time",type: "text",},{title: "下单时间",key: "pay_time",type: "text",},];// 深拷贝数据const tableDatas = JSON.parse(JSON.stringify(datum.value));// 处理数据,将 type 字段的值转换为对应的文字const processedDatas = tableDatas.map((item) => {const typeMap = {1: "微信",2: "支付宝",3: "抖音",};return {...item,type: typeMap[item.type] || "未知", // 转换 type 字段terrace_order_num: item.terrace_order_num + "&nbsp;",};});// 获取当前日期并格式化const currentDate = new Date();const year = currentDate.getFullYear();const month = String(currentDate.getMonth() + 1).padStart(2, "0"); // 月份从0开始,需要加1const day = String(currentDate.getDate()).padStart(2, "0");const formattedDate = `${year}-${month}-${day}`;// 将日期添加到文件名中const fileName = `订单列表导出_${formattedDate}`;// 导出处理后的数据table2excel(column, processedDatas, fileName);
};
</script>

全部导出:我还获取了当前的日期,导出时是名字+导出的日期。
并且:当列表中的某一行内容只有数字时,导出的表格会默认转成缩写格式。
可以把数据处理一下然后给后面加上一个HTML的空格,也就是&nbsb,这样就不会给数字默认转化为科学计数法。

选中导出:

// 声明选中的行
const selectedRows = ref([]);
// 处理选中项变化
const handleSelectionChange = (selection) => {selectedRows.value = selection;console.log("当前选中的数据:", selectedRows.value); // 打印选中的数据
};
// 导出选中数据的函数
const exportPick = () => {console.log("导出选中的数据:", selectedRows.value);if (selectedRows.value.length === 0) {ElMessage.warning("请选择要导出的数据!");return;}// 获取导出数据const column = [{title: "序号",key: "id",type: "text",},{title: "店长名称",key: "name",type: "text",},{title: "商家门头照",key: "img",type: "image",width: 150,height: 100,},{title: "公司名称",key: "title",type: "text",},{title: "订单号",key: "order_num",type: "text",},{title: "价格",key: "money",type: "text",},{title: "类型",key: "type",type: "text",formatter: (row) => {const typeMap = {1: "微信",2: "支付宝",3: "抖音",};return typeMap[row.type] || "未知";},},{title: "平台订单号",key: "terrace_order_num",type: "text",},{title: "创建时间",key: "create_time",type: "text",},{title: "下单时间",key: "pay_time",type: "text",},];const tableDatas = JSON.parse(JSON.stringify(selectedRows.value)); //这里面填写你接口的数据\// 处理数据,将 type 字段的值转换为对应的文字const processedDatas = tableDatas.map((item) => {const typeMap = {1: "微信",2: "支付宝",3: "抖音",};return {...item,type: typeMap[item.type] || "未知", // 转换 type 字段};});// 获取当前日期并格式化const currentDate = new Date();const year = currentDate.getFullYear();const month = String(currentDate.getMonth() + 1).padStart(2, "0"); // 月份从0开始,需要加1const day = String(currentDate.getDate()).padStart(2, "0");const formattedDate = `${year}-${month}-${day}`;// 将日期添加到文件名中const fileName = `订单列表选中导出_${formattedDate}`;table2excel(column, processedDatas, fileName);
};// 打开导出确认对话框
const open = () => {ElMessageBox.confirm("请选择要导出的数据", "导出", {confirmButtonText: "导出全部",cancelButtonText: "导出选中",center: true,}).then(() => {// 点击“导出全部”按钮exportBtn();}).catch(() => {// 点击“导出选中”按钮exportPick();});
};

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/21698.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

懒人精灵本地离线卡密验证系统教程(不联网、安全稳定、省钱、永久免费、无任何限制)

1.合集懒人精灵本地离线卡密验证系统教程(不联网、安全稳定、省钱、永久免费、无任何限制)&#xff1a;https://www.bilibili.com/video/BV1M6rdYEEog/ 备注&#xff1a; 1.本地离线卡密采用最安全的非对称加解密技术&#xff0c;设备id采用最安全多重混合加密不可逆技术生成&…

基于Flask的租房信息可视化系统的设计与实现

【Flask】基于Flask的租房信息可视化系统的设计与实现&#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 随着互联网的快速发展&#xff0c;租房市场日益繁荣&#xff0c;信息量急剧增加&#xff…

JUC并发—8.并发安全集合二

大纲 1.JDK 1.7的HashMap的死循环与数据丢失 2.ConcurrentHashMap的并发安全 3.ConcurrentHashMap的设计介绍 4.ConcurrentHashMap的put操作流程 5.ConcurrentHashMap的Node数组初始化 6.ConcurrentHashMap对Hash冲突的处理 7.ConcurrentHashMap的并发扩容机制 8.Concu…

docker 改了镜像源为阿里云,还是下载失败

我是windows系统&#xff0c;在学习docker&#xff0c;刚开始执行docker run hello-world还是失败&#xff0c;然后改了镜像源为阿里云&#xff0c;还是失败&#xff0c;后来去查资料&#xff0c;除了阿里云还配置了很多其他镜像源&#xff0c;才好使 "registry-mirrors&q…

mysql总结

系列文章目录 暂无 前言 mysql面试题的总结以及部分原理&#xff0c;部分图片为网上资源&#xff0c;如侵权请告知删除。 一、MySQL 执行流程 1.连接器&#xff1a;建立连接&#xff0c;管理连接、校验用户身份&#xff1b; 2.查询缓存&#xff1a;查询语句如果命中查询缓存…

【Linux网络编程】应用层协议HTTP(请求方法,状态码,重定向,cookie,session)

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;Linux网络编程 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 ​ Linux网络编程笔记&#xff1a; https://blog.cs…

城市地质安全专题连载⑦ | 加强国土空间规划管控,规避城市地质安全风险

作者 | 徐海洋 在国土空间规划中&#xff0c;地质调查扮演着先导性和基础性的角色。它如同一把无形的尺子&#xff0c;衡量着每一寸土地的开发潜力与安全边界&#xff0c;不仅为城市规划提供了科学依据&#xff0c;还在规避地质安全风险、优化资源配置方面发挥着关键作用。然而…

内部知识库:安全协作驱动数字化转型新路径

内容概要 在数字化转型进程中&#xff0c;内部知识库作为信息聚合与分发的核心载体&#xff0c;正通过安全协作与智能权限管理重构企业知识治理模式。其核心价值在于将分散的部门数据、经验文档与业务洞察整合至统一平台&#xff0c;形成可追溯、可共享的企业级知识中台&#…

【分布式理论11】分布式协同之分布式事务(一个应用操作多个资源):从刚性事务到柔性事务的演进

文章目录 一. 什么是分布式事务&#xff1f;二. 分布式事务的挑战三. 事务的ACID特性四. CAP理论与BASE理论1. CAP理论1.1. 三大特性1.2. 三者不能兼得 2. BASE理论 五. 分布式事务解决方案1. 两阶段提交&#xff08;2PC&#xff09;2. TCC&#xff08;Try-Confirm-Cancel&…

ARM Linux平台下 OpenCV Camera 实验

一、硬件原理 1. OV2640 1.1 基本功能 OV2640 是一款低功耗、高性能的图像传感器&#xff0c;支持以下功能&#xff1a; 最高分辨率&#xff1a;200 万像素&#xff08;1600x1200&#xff09;。 输出格式&#xff1a;JPEG、YUV、RGB。 内置图像处理功能&#xff1a;自动曝…

Modbus协议基础

文章目录 1、Modbus协议基础知识1.1、Modbus存储范围1.2、Modbus协议功能码说明1.3、Modbus协议分类及测试 2、ModbusRTU通信报文分析2.1、modbusRTU通信格式 3、Modbus通信库开发4、通信库测试 1、Modbus协议基础知识 1.1、Modbus存储范围 modbus规定&#xff0c;每个存储区…

电脑想安装 Windows 11 需要开启 TPM 2.0 怎么办?

尽管 TPM 2.0 已经内置在许多新电脑中&#xff0c;但很多人并不知道如何激活这一功能&#xff0c;甚至完全忽略了它的存在。其实&#xff0c;只需简单的几步操作&#xff0c;你就能开启这项强大的安全特性&#xff0c;为你的数字生活增添一层坚固的防护屏障。无论你是普通用户还…

node 使用 Redis 缓存

缓存是什么&#xff1f; 高并发下&#xff0c;一个项目最先出问题的&#xff0c;并不是程序本身&#xff0c;而是数据库最先承受不住。 在数据库上我们可以做很多优化&#xff0c;例如优化 SQL 语句&#xff0c;优化索引&#xff0c;如果数据量大了&#xff0c;还可以分库、分表…

解决双系统开机显示gnu grub version 2.06 Minimal BASH Like Line Editing is Supported

找了好多教程都没有用&#xff0c;终于解决了&#xff01;&#xff01;我是因为ubuntu分区的时候出问题了 问题描述&#xff1a; 双系统装好&#xff0c;隔天开机找不到引导项&#xff0c;黑屏显示下列 因为我用的D盘划分出来的部分空闲空间&#xff0c;而不是全部&#xff0c…

NLP-RNN-LSTM浅析

目录 双向 LSTM&#xff08;Bi - LSTM&#xff09; 双向 LSTM&#xff08;Bi - LSTM&#xff09;原理深入讲解 代码示例&#xff08;基于 PyTorch&#xff09; LSTM 应用到双向 RNN 中 代码示例&#xff08;基于 PyTorch&#xff09; 双向 LSTM - CRF&#xff08;Conditio…

自动化之ansible(二)

一、ansible中playbook&#xff08;剧本&#xff09; 官方文档&#xff1a; Ansible playbooks — Ansible Community Documentation 1、playbook的基本结构 一个基本的playbook由以下几个主要部分组成 hosts: 定义要执行任务的主机组或主机。 become: 是否需要使用超级用户…

uni-app小程序开发 基础知识2

目标&#xff1a; 构建一个文章发表平台。 我们先来写一个静态框架。 以下是 首页初代码文章列表页代码&#xff1a; <template><view class"content"><!-- 轮播图 --><swiper class"swiper-container" autoplay"true"…

kafka-集群扩容

一. 前言&#xff1a; 随着业务增加&#xff0c;我们会面临这kafka当性能问题&#xff0c;需要进行集群扩容&#xff0c;增加broker节点。 二. 扩容说明: 增加新服务到kafka集群是很容易的(参考&#xff1a; kafka-部署安装-CSDN博客 )&#xff0c;只要为新服务分配一个独一无…

uni-app开发app时 使用uni.chooseLocation遇到的问题

问题一&#xff1a;不显示 问题二&#xff1a;选择地址列表一直在加载中 因为 uni-app 接口文档 中已经说明&#xff0c;使用腾讯的话需要开启云服务&#xff0c;具体可看官网&#xff0c;这就是为什么使用时直接不显示的原因&#xff0c;所以我使用的高德&#xff0c;但又出现…

RabbitMQ的脑裂(网络分区)问题

问题描述&#xff1a; Mnesia reports that this RabbitMQ cluster has experienced a network partition. There is a risk of losing data 一、什么是MQ脑裂&#xff1f; 网络分区 如果另一个节点在一段时间内&#xff08;默认为 60 秒&#xff09;无法与其联系&#xff0…