vue3+ts+element-plus实际开发之导出表格和不同类型之间相互赋值

news2024/9/22 5:31:36

vue3+ts+element-plus实际开发常用功能

  • ✏️ 1. 前端导出选中表格数据到本地成xlsx文件
          • 1. 安装依赖
          • 2. 引入,import * as XLSX from "xlsx";
          • 3. 报错找不到模块“xlsx”或其相应的类型声明
          • 4. 使用导出文件
  • ✏️ 2. 通过接口获取文件流下载xlsx文件
      • 1. 直接用a标签下载
      • 2. 有特殊数据需要解析文件流方式
          • * 定义请求方式,axios
          • * 下载文件流
  • ✏️ 3. 如何获取proxy对象中的值,以及‘ 提示不能将类型“xxx”分配给类型“xxx2” ’ 解决方案
      • 1. 获取Proxy(Object)中数据方法
          • 就比如选中表格单条数据时候,直接打印proxy里面的值可能会报undefined
          • * 解决方法一:直接给item:any设置类型
          • * 解决方法二:JSON.parse(JSON.stringify( ))
          • * 解决方法三:import { toRaw } from'@vue/reactivity';
      • 2. 提示不能将类型“xxx”分配给类型“xxx2”解决方案
          • 1. 显式类型转换:当你比 TypeScript 编译器更了解某个变量的类型时,可以使用 as 来强制将其转换为你指定的类型,这样 TypeScript 不会给出类型检查错误。
  • 日常学习笔记,有路过的发现错误希望能指出!🙏


✏️ 1. 前端导出选中表格数据到本地成xlsx文件

//---- 导出表格到本地xlsx文件 ----
const webDerive = () => {
    ElMessageBox.confirm("是否确认导出选中数据?", "警告", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
    }).then(() => {
        
    })
}

在这里插入图片描述

1. 安装依赖

npm run xlsx

2. 引入,import * as XLSX from “xlsx”;
3. 报错找不到模块“xlsx”或其相应的类型声明

修改成大写就好了import * as XLSX from 'XLSX',如果没有报提示就直接用

4. 使用导出文件

//---- 导出表

格到本地xlsx文件 ----
const webDerive = () => {
    ElMessageBox.confirm("是否确认导出选中数据?", "警告", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
    }).then(() => {
        //deleteDate  选中数据列表
        let tableData = [
            ['序号', '时间', '姓名', '地址', '收件地址']//导出表头
        ] // 表格表头
        deleteDate.forEach((item: any, index) => {
            console.log(item, item.name)
            let rowData = []
            //导出内容的字段
            rowData = [
                index + 1,
                item.create_time,
                item.name,
                item.address
            ]
            tableData.push(rowData)
        })
        let workSheet = XLSX.utils.aoa_to_sheet(tableData);
        let bookNew = XLSX.utils.book_new();
        XLSX.utils.book_append_sheet(bookNew, workSheet, '作品名称') // 工作簿名称
        let name = '全部人员'+ '.xlsx'
        XLSX.writeFile(bookNew, name) // 保存的文件名
    })
}

在这里插入图片描述

✏️ 2. 通过接口获取文件流下载xlsx文件

1. 直接用a标签下载

//html
 <a href="http://xxxxxxx:8082/file/down" class="download" id="aupload">a标签导出文件流 </a>
 
//css
.download {
    display: inline-block;
    padding: 2px 10px;
    color: #409eff;
    background-color: #ecf5ff;
    border: 1px solid #52a4f6a4 !important;
    border-radius: 4px;
    text-decoration: none;
    margin-left: 12px;
}
.download:hover {
    color: #fff;
    background-color: #409eff;
    border: 1px solid #52a4f6a4 !important;
}

在这里插入图片描述
鼠标移入样式,点击自动下载
在这里插入图片描述

2. 有特殊数据需要解析文件流方式

* 定义请求方式,axios

在这里插入图片描述

   responseType:'blob', //记得添加

在这里插入图片描述

* 下载文件流
    //引入请求方法
    import { download } from '../../api/upload'
    //在自己方法中法请求
    download().then(((res) => {
        const url = window.URL.createObjectURL(new Blob([res.data]));
        const link = document.createElement('a');
        let fname = '测试.pdf';
        link.href = url;
        link.setAttribute('download', fname);
        document.body.appendChild(link);
        link.click();
    }))

✏️ 3. 如何获取proxy对象中的值,以及‘ 提示不能将类型“xxx”分配给类型“xxx2” ’ 解决方案

1. 获取Proxy(Object)中数据方法

使用vue3.0时,因为底层是使用proxy进行代理的所以当我们打印一些值得时候是proxy代理之后的是Proxy
对象,Proxy对象里边的[[Target]]才是真实的对象。

  • 就比如选中表格单条数据时候,直接打印proxy里面的值可能会报undefined

在这里插入图片描述

  • * 解决方法一:直接给item:any设置类型

在这里插入图片描述
下边两种事网上给的答案,目前在我这个场景感觉没用。相同场景就不用看下边了。

  • * 解决方法二:JSON.parse(JSON.stringify( ))
 deleteDate.forEach((item) => {
   let obj = JSON.parse(JSON.stringify(item))
   console.log(obj, obj.name)
 })

打印结果:
在这里插入图片描述

  • * 解决方法三:import { toRaw } from’@vue/reactivity’;

能打印出来,但是会有警告“类型“never”上不存在属性“name”。所以还得加any,家里之后就没有警告了。
在这里插入图片描述

2. 提示不能将类型“xxx”分配给类型“xxx2”解决方案

不能将类型“xxx”分配给类型“xxx2”。ts(2322)
(property) Ref<string>.value: string。

as 是 TypeScript 中的类型断言操作符。它的作用是告诉 TypeScript
编译器某个值的确切类型,并强制将该值视为指定的类型。

类型断言有两种形式: 和 value as Type,在最新的 TypeScript 版本中,推荐使用 value as Type 的语法,因为它与 JSX 不会产生冲突。

1. 显式类型转换:当你比 TypeScript 编译器更了解某个变量的类型时,可以使用 as 来强制将其转换为你指定的类型,这样 TypeScript 不会给出类型检查错误。
let myVariable: any = "Hello";
let myNumber: number = myVariable as number; // 显式将myVariable转换为number类型

日常学习笔记,有路过的发现错误希望能指出!🙏

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HEVC码流解析

根据《T-REC-H.265-201504-I!!PDF-E》协议描述。 一&#xff0c;HEVC的码流格式定义 字节流格式由字节流NAL 单元语法结构序列构成。每一字节流NAL 单元语法结构包含有一个起始编码前缀&#xff0c;后面跟随一个nal_unit(NumBytesInNALunit)语法结构。它可能&#xff08;一定情…

嵌入式传感器的接口:中断驱动的ADC驱动器

我们研究了如何编写阻塞的模数转换器&#xff08;ADC&#xff09;驱动程序和使用轮询技术不阻塞应用程序流的驱动程序。轮询外围设备的驱动程序效率很低&#xff0c;如果系统可能处于低功耗状态&#xff0c;它们可能会浪费宝贵的时钟周期&#xff0c;而这些时钟周期本来会被使用…

【体系认证】ISO27701 隐私信息管理体系

1 认证定义 ISO/IEC 27701 隐私信息管理体系是ISO国际标准化组织和IEC国际电工委员会联合发布的隐私信息管理体系国际标准&#xff0c;它是对SO27001信息安全管理体系的扩展&#xff0c;在全球普遍受到认可&#xff0c;且具国际权威性。 ISO/IEC27701通过对隐私保护的控制对…

【Lua学习笔记】Lua进阶——Table(3) 元表

接上文 文章目录 元表__tostring__call__index__newindex运算符元方法其它元表操作 元表 Q&#xff1a;为什么要使用元表&#xff1f; A&#xff1a;在Lua中&#xff0c;常常会需要表与表之间的操作。元表中提供了一些元方法&#xff0c;通过自定义元方法可以实现想要的功能&…

Linux Day03

一、基础命令(在Linux Day02基础上补充) 1.10 find find 搜索路径 -name 文件名 按文件名字搜索 find 搜索路径 -cmin -n 搜索过去n分钟内修改的文件 find 搜索路径 -ctime -n搜索过去n分钟内修改的文件 1&#xff09;按文件名字 2&#xff09;按时间 1.11 grep 在文件中过…

m1 docker安装tomcat

背景 看到有同事尝试使用docker搭建tomcat服务&#xff0c;然后用nginx实现服务的负载均衡&#xff0c;但是遇到了挂载的问题&#xff0c;于是我在我自己的mac上尝试了一下。 实践过程 在本地新建tomcat的目录&#xff0c;下方挂载对应的数据文件和脚本文件。 其中&#xff…

小皮面板新增一个新网页页面

复制到根目录下&#xff0c;根目录 这里查看根目录。 然后点创建网站&#xff0c;基本配置里写入域名&#xff0c;还要刚才的网页文件夹&#xff0c;即index所在文件夹&#xff0c;index就是网页页面。 网址就是&#xff1a;http://xxxx.com/xxxx/ 参考小皮面板官网文章 htt…

【STL】模拟实现反向迭代器

目录 1. 读源码 2. 搭建框架 3. 迭代器的操作 operator*() operator->() operator() operator--() operator!() 4. 实现 list 的反向迭代器 5. 实现 vector 的反向迭代器 6. 源码分享 写在最后&#xff1a; 1. 读源码 我们之前实现的 vector&#xff0c;list…

购物车功能实现(小兔鲜儿)【Vue3】

购物车 流程梳理和本地加入购物车实现 购物车业务逻辑梳理拆解 整个购物车的实现分为两个大分支, 本地购物车操作和接口购物车操作由于购物车数据的特殊性,采取Pinia管理购物车列表数据并添加持久化缓存 本地购物车 - 加入购物车实现 添加购物车 基础思想&#xff1a;如果…

力扣每日一题--2050. 并行课程 III(拓补排序例题)

题目描述&#xff1a; 给你一个整数 n &#xff0c;表示有 n 节课&#xff0c;课程编号从 1 到 n 。同时给你一个二维整数数组 relations &#xff0c;其中 r e l a t i o n s [ j ] [ p r e v C o u r s e j , n e x t C o u r s e j ] relations[j] [prevCoursej, nextCou…

【云原生】Docker容器命令监控+Prometheus监控平台

目录 1.常用命令监控 docker ps docker top docker stats 2.weave scope 1.下载 2.安装 3.访问查询即可 3.Prometheus监控平台 1.部署数据收集器cadvisor 2.部署Prometheus 3.部署可视化平台Gragana 4.进入后台控制台 1.常用命令监控 docker ps [rootlocalhost ~…

手把手教你怎么写顺序表

目录 一、顺序表有什么功能&#xff1f; 二、实现顺序表的各个功能 1.前置准备 2.初始化顺序表 3.顺序表扩容 4.打印顺序表 5.增加顺序表成员 5.1尾增 5.2头增 6.删除顺序表中成员的内容 6.1尾删 6.2头删 7.查找成员 8.修改(替换) 9.插入(在目标位置插入成员) 10.定…

Kong Ming Qi hdu7321

Problem - 7321 题目大意&#xff1a;在(n2)*(m2)的棋盘上&#xff0c;中间摆满了n*m个棋子&#xff0c;每个棋子可以向上下左右四个方向移动&#xff0c;对于相邻的三格&#xff0c;移动前后分别为 有 有 无->无 无 有&#xff0c;问最后棋盘上最少能剩下几个棋子 1<n…

论文解读|PF-Net:用于 3D 点云补全的点分形网络

原创 | 文 BFT机器人 01 背景 从激光雷达等设备中获取的点云往往有所缺失&#xff08;反光、遮挡等&#xff09;&#xff0c;这给点云的后续处理带来了一定的困难&#xff0c;也凸显出点云补全作为点云预处理方法的重要性。 点云补全&#xff08;Point Cloud Completion&#x…

Drools用户手册翻译——第四章 Drools规则引擎(七)规则执行模式和线程安全

甩锅声明&#xff1a;本人英语一般&#xff0c;翻译只是为了做个笔记&#xff0c;所以有翻译错误的地方&#xff0c;错就错了&#xff0c;如果你想给我纠正&#xff0c;就给我留言&#xff0c;我会改过来&#xff0c;如果懒得理我&#xff0c;就直接划过即可。 drools的规则执…

HighTec 工程属性介绍2

目录 首先需要创建或导入一个工程&#xff0c;如下图&#xff1a; 有两种方式可以进入工程的属性面板&#xff1a; 选中工程&#xff0c;右键点击 Properies . 选中工程&#xff0c;按键 Alt Enter. 进入工程属性面板之后&#xff0c;左侧是书签标记&#xff0c;右侧是该书…

How to choose WIFI7 IPQ9554- WIFI6 IPQ8072? Who has the better performance?

How to choose WIFI7 IPQ9554- WIFI6 IPQ8072? Who has the better performance? The Wi-Fi standard is Wi-Fi 6, also known as 802.11ax. Wi-Fi 6 brings significant speed, capacity and performance improvements over the previous Wi-Fi 5 (802.11ac) standard. It p…

如何做好项目管理?年薪百万项目大佬一直在用这11张图!

日常工作中&#xff0c;我们会遇到各种大大小小的工作项目&#xff0c;如何能让项目保质保量的完成&#xff0c;就需要项目管理。项目管理是什么&#xff1f;一句话解释&#xff1a;在有限的时间内&#xff0c;在约束的范围中&#xff0c;集合有限资源来完成项目目标。 本周小编…

如何安装mmcv?官网解答

pip install -U openmim mim install mmcv

什么是宏变量和宏替换?

在Java中&#xff0c;宏变量和宏替换通常是与C/C预处理器相关的概念&#xff0c;而不是Java本身的特性。在Java中&#xff0c;我们通常不使用预处理器指令(例如宏定义)来进行代码替换。Java使用的编译器并不支持预处理器指令&#xff0c;因此没有宏替换的概念。 然而&#xff0…