当前位置: 首页 > news >正文

【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&#xff0c;给div设置id。作为打印的区域 【4】在打印按钮上添加打印事件 【5】在methods中添加点击事件 三、完整代码 一、实现效果 二、实现步…...

3.5 Spring MVC参数传递

Spring MVC的Controller接收请求参数的方式有多种&#xff0c;本节主要介绍Spring MVC下的HttpServletRequest、基本数据类型、Java Bean、数组、List、Map、JSON参数传递方式&#xff0c;同时解决POST请求中文乱码问题。 1. HttpServletRequest参数传递 Controller RequestM…...

linux程序保护机制gcc编译选项

预备知识&#xff1a; 计算机内存的结构通常包括以下几个主要部分&#xff1a; 1.代码段(Code Segment)&#xff1a;也称为文本段&#xff0c;存储程序的可执行指令。代码段是被标记为可执行的&#xff0c;程序从代码段中获取指令并执行。 2.数据段(Data Segment)&#xff1a…...

指针与引用:C语言中的内存魔法

开始本篇文章之前先推荐一个好用的学习工具&#xff0c;AIRIght&#xff0c;借助于AI助手工具&#xff0c;学习事半功倍。欢迎访问&#xff1a;http://airight.fun/。 也把我学习过程中搜集的资料分享给大家&#xff0c;希望可以帮助大家少走弯路&#xff0c;链接&#xff1a;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在实际项目中用作缓存时经常碰到的&#xff0c;也是经常面试的三大问题&#xff1a;缓存穿透、缓存击穿、缓存雪崩&#xff0c;以及这些问题的常用解决方法。 在介绍这三大问题之前&#xff0c;我们需要先了解Redis作为一个缓存中间件&#xff0c;在项目中是如何…...

Kettle系列(一)下载安装与基础配置

Kettle系列&#xff08;一&#xff09;下载安装与基础配置 说明一、下载二、目录结构三、基础配置&#xff08;1&#xff09;环境变量&#xff08;2&#xff09;kettle配置 四、连接mysql8五、连接其他数据库六、总结 说明 更新时间&#xff1a;2023/08/13 17:47 本文记录了wi…...

MuMu模拟器运行一段时间后Device.Present耗时突然上升

1&#xff09;MuMu模拟器运行一段时间后Device.Present耗时突然上升 2&#xff09;​如何在运行过程中获得温度信息 3&#xff09;Input System鼠标更换主按键的Bug 4&#xff09;如何禁止Unity向https://config.uca.cloud.unity3d.com发送设备信息 这是第347篇UWA技术知识分享…...

14-矩阵相乘及其运算法则

矩阵与向量的乘法 在这一篇文章中我们就将基于上一篇重新审视矩阵的这个视点来理解矩阵的乘法&#xff0c;那么在这一篇&#xff0c;我们主要来看一下矩阵和向量的乘法。这里这个线性方程组是上一小节给大家举的模拟的一个非常简单的小型经济系统的例子&#xff0c;我们可以把…...

redis学习笔记(八)

文章目录 redis的配置redis的核心配置选项Redis的使用 redis的配置 cat /etc/redis/redis.confredis 安装成功以后,window下的配置文件保存在软件 安装目录下,如果是mac或者linux,则默认安装/etc/redis/redis.conf redis的核心配置选项 绑定ip&#xff1a;访问白名单&#x…...

Wlan——无线服务集和AP的基本概念以及AP的配置

目录 WLAN服务集的基本概念 AP的基本概念 AP的分类 AP模式的切换 胖&#xff08;FAT&#xff09;AP介绍 胖AP的工作模式 接入模式和路由模式的区别 胖AP的组网方式 瘦&#xff08;FIT&#xff09;AP介绍 瘦AP的工作模式 瘦AP的组网方式 胖AP和瘦AP的区别 AP的配置…...

【必看】时序逻辑仿真成组合逻辑?你知道原因吗?

对于初学者&#xff0c;一般会遇到这种情况&#xff0c;明明写的时序逻辑&#xff0c;结果仿真结果却是组合逻辑&#xff0c;然后看遍设计代码&#xff0c;始终找不到原因&#xff0c;交流群、知乎这种问题随处可见。但不要怀疑软件问题&#xff0c;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音视频开发中&#xff0c;网上知识点过于零碎&#xff0c;自学起来难度非常大&#xff0c;不过音视频大牛Jhuster提出了《Android 音视频从入门到提高 - 任务列表》&#xff0c;结合我自己的工作学习经历&#xff0c;我准备写一个音视频系列blog。C/C是音视频必…...

ADB连接安卓手机提示unauthorized

近期使用airtest进行自动化测试时&#xff0c;因为需要连接手机和电脑端&#xff0c;所以在使用adb去连接本人的安卓手机vivo z5时&#xff0c;发现一直提示unauthorized。后来经过一系列方法尝试&#xff0c;最终得以解决。 问题描述&#xff1a; 用数据线将手机接入电脑端&…...

【软件工程】内聚

概念 是指一个模块内部个成分之间相互关联程度的度量。也就是说&#xff0c;凝聚是对模块内各处理动作组合强度的一种度量。很显然&#xff0c;一个模块的内聚越大越好。 偶然凝聚 一个模块内的各处理元素之间没有任何联系&#xff0c;只是偶然地被凑到一起。这种模块也称为…...

支持对接鸿蒙系统的无线模块及其常见应用介绍

近距离的无线通信得益于万物互联网的快速发展&#xff0c;基于集成部近距离无线连接&#xff0c;为固定和移动设备建立通信的蓝牙技术也已经广泛应用于汽车领域、工业生产及医疗领域。为协助物联网企业终端产品能快速接入鸿蒙生态系统&#xff0c;SKYLAB联手国产芯片厂家研发推…...

java项目打包运行报异常:Demo-1.0-SNAPSHOT.jar中没有主清单属性

检查后发现pom文件中有错误&#xff0c;需要添加build内容才能恢复正常。 添加下面文件后再次启动恢复正常。 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactI…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

scikit-learn机器学习

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...

Web中间件--tomcat学习

Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机&#xff0c;它可以执行Java字节码。Java虚拟机是Java平台的一部分&#xff0c;Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...

解读《网络安全法》最新修订,把握网络安全新趋势

《网络安全法》自2017年施行以来&#xff0c;在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂&#xff0c;网络攻击、数据泄露等事件频发&#xff0c;现行法律已难以完全适应新的风险挑战。 2025年3月28日&#xff0c;国家网信办会同相关部门起草了《网络安全…...

WebRTC从入门到实践 - 零基础教程

WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC&#xff1f; WebRTC&#xff08;Web Real-Time Communication&#xff09;是一个支持网页浏览器进行实时语音…...