【Vue】使用print.js插件实现打印预览功能,超简单
目录
一、实现效果
二、实现步骤
【1】安装插件
【2】在需要打印的页面导入
【3】在vue文件中需要打印的部分外层套一层div,给div设置id。作为打印的区域
【4】在打印按钮上添加打印事件
【5】在methods中添加点击事件
三、完整代码
一、实现效果


二、实现步骤
print.js插件,可以打印html、pdf、json数据等。
官网:https://printjs.crabbly.com/
【1】安装插件
npm install print-js --save
【2】在需要打印的页面导入
import print from 'print-js'
【3】在vue文件中需要打印的部分外层套一层div,给div设置id。作为打印的区域
<el-table :data="showData" id="printBox" style="display: flex;"><el-table-column type="index" label="序号" width="180" align="center"></el-table-column><el-table-column prop="adminname" label="账号" align="center"></el-table-column><el-table-column label="权限" align="center"><template #default="{ row }"><el-tag v-if="row.role == 1" type="" effect="dark">管理员</el-tag><el-tag v-else-if="row.role == 2" type="warning" effect="dark">超级管理员</el-tag><el-tag v-else type="info" effect="dark">未知</el-tag></template></el-table-column><el-table-column label="操作" align="center"><template #default="{ row }"><el-button circle type="success" @click="editHandler(row)"><el-icon><Edit></Edit></el-icon></el-button><el-popconfirm title="你确定删除吗?" confirm-button-text="是" cancel-button-text="取消" @confirm="delHandler(row)"><template #reference><el-button circle type="danger"><el-icon><Delete></Delete></el-icon></el-button></template></el-popconfirm></template></el-table-column></el-table>
【4】在打印按钮上添加打印事件
<el-button type="primary" @click="printBox">打印</el-button>
【5】在methods中添加点击事件
必要的就是printable和bype
methods: {printBox() {setTimeout(function () {print({printable: 'printBox',type: 'html',scanStyles: false,targetStyles: ['*']})}, 500)},
}
三、完整代码
<template><el-breadcrumb class="breadcrumb" separator="/"><el-breadcrumb-item :to="{ path: '/layout' }">主页</el-breadcrumb-item><el-breadcrumb-item>账号管理</el-breadcrumb-item><el-breadcrumb-item>管理员列表</el-breadcrumb-item></el-breadcrumb><div><!-- 按钮 --><el-button type="primary" @click="openAdd">添加管理员</el-button><el-button type="primary" @click="printBox">打印</el-button><!-- 表格 --><el-table :data="showData" id="printBox" style="display: flex;"><el-table-column type="index" label="序号" width="180" align="center"></el-table-column><el-table-column prop="adminname" label="账号" align="center"></el-table-column><el-table-column label="权限" align="center"><template #default="{ row }"><el-tag v-if="row.role == 1" type="" effect="dark">管理员</el-tag><el-tag v-else-if="row.role == 2" type="warning" effect="dark">超级管理员</el-tag><el-tag v-else type="info" effect="dark">未知</el-tag></template></el-table-column><el-table-column label="操作" align="center"><template #default="{ row }"><el-button circle type="success" @click="editHandler(row)"><el-icon><Edit></Edit></el-icon></el-button><el-popconfirm title="你确定删除吗?" confirm-button-text="是" cancel-button-text="取消" @confirm="delHandler(row)"><template #reference><el-button circle type="danger"><el-icon><Delete></Delete></el-icon></el-button></template></el-popconfirm></template></el-table-column></el-table><!-- 分页器 --><div class="pagination"><el-pagination v-model:current-page="count" v-model:page-size="limitNum" :page-sizes="[1, 3, 5, 8]"layout="total, sizes, prev, pager, next, jumper" :total="allData.length" /></div><!-- 抽屉 --><el-drawer v-model="isShow"><template #header><h4>{{ type }} 管理员</h4></template><template #default><div><el-form :model="form"><el-form-item label="账号" size="small"><el-input v-model="form.adminname"></el-input></el-form-item><el-form-item label="密码"><el-input v-model="form.password"></el-input></el-form-item><el-form-item label="角色"><el-select v-model="form.role"><el-option label="管理员" :value="1"></el-option><el-option label="超级管理员" :value="2"></el-option></el-select></el-form-item><el-form-item label="权限"><el-tree ref="treeRef" :data="treeData" show-checkbox default-expand-all node-key="path":props="defaultProps" /></el-form-item></el-form></div></template><template #footer><div style="flex:auto"><el-button @click="cancelClick">取消</el-button><el-button type="primary" @click="confirmClick">确定</el-button></div></template></el-drawer></div>
</template><script>
import print from 'print-js'
import { formatRoutes } from "@/utils/tools"
import { getAdminList, addAdmin, updataAdmin, delAdmin } from '@/apis/user'
export default {data() {return {// 当前页码count: 1,// 每页显示条数limitNum: 3,// 所有管理员列表信息allData: [],// 管理员抽屉的数据form: {adminname: '',password: '',role: 1,},// 抽屉是否显示isShow: false,// 区别当前是添加管理员还是更新管理员type: '',// 树节点信息treeData: [],// 要显示的元素defaultProps: {children: 'children',label: function (data) {// label设置要显示的文字信息,lable的值可以是函数return data.meta.title}}};},watch: {isShow(value) {if (!value) {this.form = {}}this.$refs.treeRef?.setCheckedNodes([])}},computed: {showData() {return this.allData.slice((this.count - 1) * this.limitNum, this.count * this.limitNum)}},mounted() {this.getAllData(),this.treeData = formatRoutes(this.$router.getRoutes())},methods: {printBox() {setTimeout(function () {print({printable: 'printBox',type: 'html',scanStyles: false,targetStyles: ['*']})}, 500)},delHandler(row) {delAdmin({ adminid: row.adminid }).then(data => {this.getAllData()})},cancelClick() {this.isShow = false},confirmClick() {this.isShow = false// 获取表单数据和树形菜单数据,调用 添加、修改接口// getCheckedNodes,选中的节点的数据// 第一个false:选中父节点,字节点数据都获取// 第二个true:无论父节点有没有被选中,选中的子节点都能获取if (this.type == '添加') {addAdmin({...this.form,checkedKeys: this.$refs.treeRef?.getCheckedNodes(false, true)}).then(res => {this.getAllData()})} else {updataAdmin({...this.form,checkedKeys: this.$refs.treeRef?.getCheckedNodes(false, true)}).then(res => {this.getAllData()})}},// 获取所有管理员列表信息getAllData() {getAdminList().then(res => {console.log("管理员列表", res)this.allData = res.datathis.count = 1})},editHandler(row) {this.type = '修改',this.isShow = truethis.form = {adminname: row.adminname,password: row.password,role: row.role}},openAdd() {this.type = '添加',this.isShow = true}},
};
</script><style lang="scss" scoped>
.breadcrumb {margin-bottom: 25px;}.pagination {display: flex;justify-content: center;.el-pagination {margin: 10px;}
}
</style>
相关文章:
【Vue】使用print.js插件实现打印预览功能,超简单
目录 一、实现效果 二、实现步骤 【1】安装插件 【2】在需要打印的页面导入 【3】在vue文件中需要打印的部分外层套一层div,给div设置id。作为打印的区域 【4】在打印按钮上添加打印事件 【5】在methods中添加点击事件 三、完整代码 一、实现效果 二、实现步…...
3.5 Spring MVC参数传递
Spring MVC的Controller接收请求参数的方式有多种,本节主要介绍Spring MVC下的HttpServletRequest、基本数据类型、Java Bean、数组、List、Map、JSON参数传递方式,同时解决POST请求中文乱码问题。 1. HttpServletRequest参数传递 Controller RequestM…...
linux程序保护机制gcc编译选项
预备知识: 计算机内存的结构通常包括以下几个主要部分: 1.代码段(Code Segment):也称为文本段,存储程序的可执行指令。代码段是被标记为可执行的,程序从代码段中获取指令并执行。 2.数据段(Data Segment):…...
指针与引用:C语言中的内存魔法
开始本篇文章之前先推荐一个好用的学习工具,AIRIght,借助于AI助手工具,学习事半功倍。欢迎访问:http://airight.fun/。 也把我学习过程中搜集的资料分享给大家,希望可以帮助大家少走弯路,链接:h…...
docker desktop搭建 nginx
【docker 桌面版】windows 使用 docker 搭建 nginx 拉取 nginx 镜像 docker pull nginx运行容器 docker run -d -p 80:8081 --name nginx nginx本地磁盘创建 nginx 目录 D:\DockerRep\nginx复制 docker 中的 nginx 配置文件 查看运行的容器 docker ps -a docker cp 9f0f82d66dd…...
Redis缓存雪崩、击穿、穿透?
我们谈谈Redis在实际项目中用作缓存时经常碰到的,也是经常面试的三大问题:缓存穿透、缓存击穿、缓存雪崩,以及这些问题的常用解决方法。 在介绍这三大问题之前,我们需要先了解Redis作为一个缓存中间件,在项目中是如何…...
Kettle系列(一)下载安装与基础配置
Kettle系列(一)下载安装与基础配置 说明一、下载二、目录结构三、基础配置(1)环境变量(2)kettle配置 四、连接mysql8五、连接其他数据库六、总结 说明 更新时间:2023/08/13 17:47 本文记录了wi…...
MuMu模拟器运行一段时间后Device.Present耗时突然上升
1)MuMu模拟器运行一段时间后Device.Present耗时突然上升 2)如何在运行过程中获得温度信息 3)Input System鼠标更换主按键的Bug 4)如何禁止Unity向https://config.uca.cloud.unity3d.com发送设备信息 这是第347篇UWA技术知识分享…...
14-矩阵相乘及其运算法则
矩阵与向量的乘法 在这一篇文章中我们就将基于上一篇重新审视矩阵的这个视点来理解矩阵的乘法,那么在这一篇,我们主要来看一下矩阵和向量的乘法。这里这个线性方程组是上一小节给大家举的模拟的一个非常简单的小型经济系统的例子,我们可以把…...
redis学习笔记(八)
文章目录 redis的配置redis的核心配置选项Redis的使用 redis的配置 cat /etc/redis/redis.confredis 安装成功以后,window下的配置文件保存在软件 安装目录下,如果是mac或者linux,则默认安装/etc/redis/redis.conf redis的核心配置选项 绑定ip:访问白名单&#x…...
Wlan——无线服务集和AP的基本概念以及AP的配置
目录 WLAN服务集的基本概念 AP的基本概念 AP的分类 AP模式的切换 胖(FAT)AP介绍 胖AP的工作模式 接入模式和路由模式的区别 胖AP的组网方式 瘦(FIT)AP介绍 瘦AP的工作模式 瘦AP的组网方式 胖AP和瘦AP的区别 AP的配置…...
【必看】时序逻辑仿真成组合逻辑?你知道原因吗?
对于初学者,一般会遇到这种情况,明明写的时序逻辑,结果仿真结果却是组合逻辑,然后看遍设计代码,始终找不到原因,交流群、知乎这种问题随处可见。但不要怀疑软件问题,modelsim这些专用软件基本不…...
PyTorch翻译官网教程-LANGUAGE MODELING WITH NN.TRANSFORMER AND TORCHTEXT
官网链接 Language Modeling with nn.Transformer and torchtext — PyTorch Tutorials 2.0.1cu117 documentation 使用 NN.TRANSFORMER 和 TORCHTEXT进行语言建模 这是一个关于训练模型使用nn.Transformer来预测序列中的下一个单词的教程。 PyTorch 1.2版本包含了一个基于论…...
SpringBoot复习:(43)如何以war包的形式运行SpringBoot程序
一、.pom.xml配置packging为war <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven…...
Dubbo高手之路2,6种扩展机制详解
目录 一、Dubbo扩展机制的概述二、Dubbo的自适应扩展机制1. 什么是自适应扩展机制2. 自适应扩展机制的使用示例 三、Dubbo的SPI扩展机制1. 什么是SPI扩展机制2. SPI扩展机制的使用示例3. Dubbo的SPI扩展机制中自定义扩展点的实现示例 四、Dubbo的自定义扩展点机制1. 什么是自定…...
C语言快速回顾(二)
前言 在Android音视频开发中,网上知识点过于零碎,自学起来难度非常大,不过音视频大牛Jhuster提出了《Android 音视频从入门到提高 - 任务列表》,结合我自己的工作学习经历,我准备写一个音视频系列blog。C/C是音视频必…...
ADB连接安卓手机提示unauthorized
近期使用airtest进行自动化测试时,因为需要连接手机和电脑端,所以在使用adb去连接本人的安卓手机vivo z5时,发现一直提示unauthorized。后来经过一系列方法尝试,最终得以解决。 问题描述: 用数据线将手机接入电脑端&…...
【软件工程】内聚
概念 是指一个模块内部个成分之间相互关联程度的度量。也就是说,凝聚是对模块内各处理动作组合强度的一种度量。很显然,一个模块的内聚越大越好。 偶然凝聚 一个模块内的各处理元素之间没有任何联系,只是偶然地被凑到一起。这种模块也称为…...
支持对接鸿蒙系统的无线模块及其常见应用介绍
近距离的无线通信得益于万物互联网的快速发展,基于集成部近距离无线连接,为固定和移动设备建立通信的蓝牙技术也已经广泛应用于汽车领域、工业生产及医疗领域。为协助物联网企业终端产品能快速接入鸿蒙生态系统,SKYLAB联手国产芯片厂家研发推…...
java项目打包运行报异常:Demo-1.0-SNAPSHOT.jar中没有主清单属性
检查后发现pom文件中有错误,需要添加build内容才能恢复正常。 添加下面文件后再次启动恢复正常。 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactI…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
uniapp 实现腾讯云IM群文件上传下载功能
UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中,群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS,在uniapp中实现: 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...
mac:大模型系列测试
0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何,是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试,是可以跑通文章里面的代码。训练速度也是很快的。 注意…...
【堆垛策略】设计方法
堆垛策略的设计是积木堆叠系统的核心,直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法,涵盖基础规则、优化算法和容错机制: 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则: 大尺寸/重量积木在下…...
