vue3+ts+vite+element plus中使用luckysheet(预览效果)

news2024/12/27 13:35:20

前言:

        这两天一个项目,需要在页面中以excel的形式展示大量数据,喜欢偷懒的我果断扒拉了一堆适用于vue3的插件,下面简单说说我使用的luckysheet

使用:

一、准备一个vue3+ts+vite+element plus的项目

此处省略n个字。。。

嗯。。?先看个效果

看图就晓得,我这是只拿对自己有用的了,没用的直接全部干掉了。。

二、直接看luckysheet官网(文档写的还是非常详细的哟)

快速上手 | Luckysheet文档

三、按照教程添加luckysheet到自己项目中

1、引入方式:

        ①、cdn引入,②、下载到本地引入

cnd没啥问题,按照文档教程在index.html中卡卡一顿引入就好

重点说下下载到本地引入(因为本人使用的时候,下载打包遇到一些问题,所以直接把打包好的文件放在了网盘上,如果你下载官网提供的资源包出现npminstall 报错或者打包报错,可以直接去网盘提取)

链接:https://pan.baidu.com/s/182-mPDcVWtB4ldA0-y2ktA 
提取码:0000

当你已经有dist包的时候,你需要把dist包中所以文件(不包括index.html)引入到项目中去,我这边引入的是public静态文件中,然后在项目中index.html文件中引入

index.html
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <link rel="icon" href="/favicon.ico">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Vite App</title>

//插入部分
  <link rel='stylesheet' href='./plugins/css/pluginsCss.css' />
  <link rel='stylesheet' href='./plugins/plugins.css' />
  <link rel='stylesheet' href='./css/luckysheet.css' />
  <link rel='stylesheet' href='./assets/iconfont/iconfont.css' />
  <script src="/plugins/js/plugin.js"></script>
  <script src="/luckysheet.umd.js"></script>


</head>

<body>
  <div id="app"></div>
  <script type="module" src="/src/main.ts"></script>
</body>

</html>

2、安装依赖

"exceljs": "^4.3.0",
"luckyexcel": "^1.0.1",
"luckysheet": "^2.1.13",

3、直接封装luckysheet组件

注意:封装luckysheet组件的时候要参照官方文档中的配置信息来设置

<script setup lang="ts">
import { onMounted, watch } from 'vue'

const emit = defineEmits(['luckyBack'])
const props = defineProps({
	luckySheetId: {
		type: String,
		required: true
	},
	luckySheetData: {
		type: Array,
		required: true
	}
})
declare let luckysheet: any

const luckyS = (val) => {
	const ddd = val.luckySheetData
	const dataA = luckysheet.transToCellData(ddd)
//这一步是为了给首行首列设置背景颜色
	dataA.forEach((item) => {
		if (item.r === 0 && item.c > 1) {
			item.v = {
				bg: '#f5e041',
				v: item.v
			}
		}
		if (item.c === 0 && item.r > 1) {
			item.v = {
				bg: '#f5e041',
				v: item.v
			}
		}
		if (item.c === 0 && item.r === 0) {
			item.v = {
				bg: '#ff0000',
				v: item.v
			}
		}
	})

	const options = {
		showtoolbar: false, // 是否显示工具栏
		showinfobar: false, // 是否显示顶部信息栏
		showsheetbar: false,
		showstatisticBar: false, // 是否显示底部sheet按钮
		lang: 'zh', // 设定表格语言
		cellRightClickConfig: {
			copy: false, // 复制
			copyAs: false, // 复制为
			paste: false, // 粘贴
			insertRow: false, // 插入行
			insertColumn: false, // 插入列
			deleteRow: false, // 删除选中行
			deleteColumn: false, // 删除选中列
			deleteCell: false, // 删除单元格
			hideRow: false, // 隐藏选中行和显示选中行
			hideColumn: false, // 隐藏选中列和显示选中列
			rowHeight: false, // 行高
			columnWidth: false, // 列宽
			clear: false, // 清除内容
			matrix: false, // 矩阵操作选区
			sort: false, // 排序选区
			filter: false, // 筛选选区
			chart: false, // 图表生成
			image: false, // 插入图片
			link: false, // 插入链接
			data: false, // 数据验证
			cellFormat: false // 设置单元格格式,
		},
		enableAddRow: false, // 允许添加行
		enableAddBackTop: false, // 允许回顶部
		sheetFormulaBar: false, // 是否显示公式栏
		showstatisticBarConfig: {
			zoom: true
		},
		container: val.luckySheetId // luckysheet为容器id
	}
	console.log(options.container)

	options.data = [
		{
			celldata: dataA,
			row: 50,
			frozen: {   //锁定指定行列
				type: 'rangeBoth',
				range: { row_focus: 1, column_focus: 1 }
			}
		}
	]
	luckysheet.create(options)
}
watch(
	() => props.luckySheetData,
	(val) => {
		console.log(val, props)

		luckyS(props)
	},
	{ deep: true }
)

onMounted(() => {
	luckyS(props)
})
const mouseupaa = () => {
	const range = luckysheet.getRange()
	emit('luckyBack', { range })
	console.log('@@@@@@@@@@@@@@22', range)
}
</script>

<template>
	<div
		:id="luckySheetId"
		@mouseup="mouseupaa"
		style="position: relative; width: 100%; height: 95%; left: 0px"
	></div>
</template>
<style scoped lang="scss"></style>

4、在需要使用的地方引入

import LuckySheet from '@/components/Luckysheet/index.vue'

const luckySheetId = ref('LuckySheetId')
const luckySheetData = reactive([])

// 接收传过来的值
const luckyBack = (e) => {
	console.log(e)
}


<div>
<LuckySheet
    style="height: 80%"
    :luckySheetId="luckySheetId"
    :luckySheetData="luckySheetData"
    @luckyBack="luckyBack"
></LuckySheet>
</div>

ok!到这里基本上完事了,大毛病没有,小毛病。。。。

遇到问题:根据luckysheet设计思路,好像一个项目中只能渲染出来一个,就算设置不同的容器id,后面渲染的直接就把前面渲染的干死了。。。嗯,感觉这点不太友好!有可以同时渲染多个的方法可以留言

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

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

相关文章

如何用 WampServer+快解析 搭建php文件管理器

基于网络&#xff0c;资源是大家最最基本的需求&#xff0c;许多网络爱好者不求利益&#xff0c;把自己收集的一些通过一些平台共享给大家&#xff0c;这就是资源共享。 资源共享程度越高&#xff0c;代表信息发展水平越高。现实工作中&#xff0c;由于用户提供的数据可能来自…

Linux基础IO - 软硬链接 | 动静态库

之前的文章中我们讲述了软硬链接中有关软连接的知识&#xff0c;本文中将继续讲述硬链接部分的知识&#xff0c;并且讲述一下动静态库的相关内容。 硬链接 硬链接本质上就是在当前目录建立一个新的文件名与指定文件inode的关系。 每当我们在当前目录下建立一个硬链接就会让文…

C++11多线程之条件变量

文章目录 一、关于多线程的同步二、初始条件变量三、关于条件变量的例题四、生产者消费者模型 一、关于多线程的同步 //函数被调用&#xff0c;分配相应的栈帧&#xff0c;进行现场保护void func(char c) {char filename[20] {};sprintf(filename, "test%c.txt",c)…

Fiddler Response私人订制

在客户端接口的测试中&#xff0c;我们经常会需要模拟各种返回状态或者特定的返回值&#xff0c;常见的是用Fiddler模拟各种请求返回值场景&#xff0c;如重定向AutoResponder、请求拦截修改再下发等等。小编在近期的测试中遇到的一些特殊的请求返回模拟的测试场景&#xff0c;…

《变形金刚7》票房大跳水!特效敷衍?剧情单薄?汽车人的未来在哪里?

《变形金刚&#xff1a;超能勇士崛起》 6.11&#xff08;上映第3天&#xff09; 单日票房8200万 6.12&#xff08;上映第4天&#xff09; 单日票房2173万 6.13&#xff08;上映第5天&#xff09; 单日票房1700万 说实在的&#xff0c;真没想到《变形金刚7》日票房会如此大幅…

高压放大器在铁电材料中的应用研究

铁电材料是一种具有特殊磁电性能的材料&#xff0c;包括压电陶瓷、磷酸铁钠陶瓷、氧化锌压电陶瓷等。这些材料在电力、电子、机械等领域有广泛的应用&#xff0c;如超声波发生器、声纳、压力传感等。其中&#xff0c;高压放大器在铁电材料中有着重要的应用。 一、高压放大器的基…

完美搭建一个vue3+ts项目(一篇文章搞定你的所有疑惑)

目录 一、创建vite项目 二、启动vite项目 三、处理一些配置问题 四、增加工程化插件 1、安装sass 2、安装vue-router 3、安装pinia 4、安装element-plus 5、安装axios 6、设置路径别名&#xff0c;将相对路径改为绝对路径 一、创建vite项目 1、在一个文件夹下通…

Vision Pro:为什么空间音频是AR的绝杀武器?

Apple Vision Pro&#xff0c;不仅仅是苹果全新的重磅品类&#xff0c;而且在它身上也融合了苹果过去几乎所有新技术&#xff0c;比如空间音频就是其中一个例子。 苹果表示&#xff0c;Vision Pro中空间音频可以很好的应用在&#xff1a;影视节目、游戏内容、3D空间照片、3D空…

金融风控项目实战-银行信用卡流失预测模型_基于ANN神经网络_金融培训_论文科研_毕业设计

业务背景 根据央行公布的数据显示&#xff0c;全国性银行信用卡和借贷合一卡的发卡量增速从2017年同比增速26.35%的高点逐年下降&#xff0c;截至2020年同比增速降至4.26%。银行信用卡发卡增速明显放缓的背景下&#xff0c;预防老客户流失的问题变得愈发重要。 假设一家消费信…

pytest+allure

知识点1&#xff1a; 1、测试结果信息阅读 passed表示通过&#xff0c;有个简写. failed表示失败&#xff0c;有个简写F 2、命令行参数 -h&#xff1a;帮助 -version&#xff1a;版本信息 3、测试用例命名规则&#xff1a; 测试函数必须以test开头 测试类必须以Test开头…

我为开放原子全球开源峰会助力:共建开源之梦

我为开放原子全球开源峰会助力&#xff1a;共建开源之梦 6月11日&#xff0c;以“开源赋能&#xff0c;普惠未来”为主题的2023开放原子全球开源峰会开幕式暨高峰论坛在北京成功举办。 开源的力量与魅力 开源是当今软件行业中不可忽视的力量&#xff0c;它为技术的快速发展和…

入职滴滴和字节的2 年里,我感觉忒真实了……

引言 先简单交代一下背景吧&#xff0c;某不知名985的本硕&#xff0c;17年毕业加入滴滴&#xff0c;之后跳槽到了头条&#xff0c;一直从事软件测试相关的工作。之前没有实习经历&#xff0c;算是两年半的工作经验吧。 这两年半之间完成了一次晋升&#xff0c;换了一家公司&…

Ubuntu如何安装vmtools?

虚拟机-安装VMware Tools 然后在Ubuntu中找到设备中的VMware Tools&#xff0c;将这个文件来复制到桌面上去。 选择提取到此处 可以看到桌面上多了一个VMware Tools的文件夹 使用cd命令进入桌面上的这个VMware tools的文件夹 使用sudo ./安装命令 对vmware-tools-distrib文件夹…

政企市场,「观望」AI大模型

数据安全等“刚需”下&#xff0c;私有化成为政企市场的准入门槛&#xff0c;然而私有化下&#xff0c;行业模型局限性尚未可知&#xff0c;加之信创化等因素&#xff0c;厂商仍需取长补短&#xff0c;为政企客户提供全方位的解决方案。 作者|斗斗 编辑|皮爷 出品|产业家 政…

采用UWB定位技术开发的室内定位系统源码

UWB精准定位系统源码 UWB是什么&#xff1f; UWB(Ultra Wideband)超宽带技术是一种全新的、与传统通信技术有极大差异的通信新技术。它不需要使用传统通信体制中的载波&#xff0c;而是通过发送和接收具有纳秒或纳秒级以下的极窄脉冲来传输数据&#xff0c;实现精准定位。 技术…

一名高水平的程序员,为什么面试总是失败?

目录 场景1 场景2 场景3 1 从发现和分析问题方面准备。 2 从linux命令和日志层面分析问题的步骤。 1 事先准备很重要 2 面试开始是自我介绍&#xff0c;这时要表露出&#xff0c;自己解决过redis,dubbo等组件的线上问题 3 一旦开始说第一个组件层面解决过的问题时&…

Django高级扩展之文件上传

文件上传是一个比较常用的网站功能&#xff0c;在服务器端&#xff0c;Django会使用一个叫作request.FILES的对象来处理上传的文件。 目录 存储路径 创建存储目录 配置settings.py 上传单文件 配置url 上传文件模板 视图方法 显示上传页面 上传文件处理 上传效果 1.…

盘点五种最常见加密算法!

大家好&#xff0c;我是Martin。 今天&#xff0c;就给大家来盘点一下最常见的5种加密算法。 大家平时的工作中&#xff0c;可能也在很多地方用到了加密、解密&#xff0c;比如&#xff1a; 用户的密码不能明文存储&#xff0c;要存储加密后的密文 用户的银行卡号、身份证号…

2024年天津农学院专升本专业课参考书目

天津农学院2024年高职升本科拟招生专业参考书目 天津农学院专升本专业课参考教材&#xff08;我校不提供专业课参考教材&#xff09; 人力资源管理专业参考教材&#xff1a; 1、《人力资源管理实用教程》 (第2版)&#xff0c;吴宝华&#xff0c;北京大学出版社 2、《人力资源…

运维(SRE)成长之路-第3天 文本处理三剑客之 grep

1.命令作用以及参数详解 grep: 全局搜索正则表达式并打印行(Global search REgular expression and Print out the line)作用&#xff1a;文本搜索工具&#xff0c;根据用户指定的“模式”对目标文本逐行进行匹配检查&#xff1b;打印匹配到的行模式&#xff1a;由正则表达式字…