vue + Lodop 实现浏览器自动打印 无需预览打印

官网地址:https://www.lodop.net/download.html
先去Lodop官网下载相应的安装包
解压安装将LodopFuncs.js放在项目中utils文件夹中加一行代码

export { getLodop }; //导出
<template><div><div class="main"><ul class="btns"><li @click="start">开始打印</li><li @click="end">停止打印</li></ul><div class="user" v-if="list.length"><div class="userList" v-for="(item, index) in list" :key="index"><div>{{ item.name }}</div><div class="status"><div v-if="item.status">已打印</div><div v-if="!item.status">未打印</div></div></div></div><div v-if="!list.length" class="img"><img src="../../assets/errs.png" alt="" /></div></div></div>
</template><script>
import { getUnprintedList } from "@/utils/http.js";
import { getLodop } from "@/utils/LodopFuncs"; 
export default {data() {return {timer: null,list: [],beforeList: [],id: 2,};},created() {this.$store.commit("setPath", "/activityList");this.getListBefore();},methods: {async getListBefore() {const { data: res } = await getUnprintedList({activityId: this.$route.query.id,});if (!res.content) {return this.$message.warning("没有需要打印的信息了");}res.content.forEach((item) => {if (item.remark) {if (item.remark.length > 21) {item.firstPart = item.remark.substring(0, 21);item.secondPart = item.remark.substring(21);}}});this.list = res.content;this.id = 1;},start() {this.timer = setInterval(() => {this.getList();}, 7000); // 每7秒请求一次接口},end() {if (this.timer) {clearInterval(this.timer);}},async getList() {if (this.id == 1) {this.list.forEach((item) => {item.status = true;});this.beforeList = this.list;this.id = 2;this.forList();return;}this.list.forEach((item) => {item.status = true;});const { data: res } = await getUnprintedList({activityId: this.$route.query.id,});this.id = 2;if (!res.content) {if (this.timer) {clearInterval(this.timer);}return this.$message.warning("没有需要打印的信息了");}res.content.forEach((item) => {if (item.remark) {if (item.remark.length > 21) {item.firstPart = item.remark.substring(0, 21);item.secondPart = item.remark.substring(21);}}});this.beforeList = res.content;res.content.forEach((item) => {this.list.unshift(item);});console.log(this.list);//   return;this.forList();},forList() {this.beforeList.forEach((item) => {this.btnClickPrint(item);});},// 打印快递单btnClickPrint(data) {let tops = 30;if (data.position.length > 9) {tops = 50;}const LODOP = getLodop(); // 调用getLodop获取LODOP对象LODOP.PRINT_INIT("");LODOP.SET_PRINT_PAGESIZE(1, "55mm", "60mm", ""); // 设置纸张大小LODOP.ADD_PRINT_TEXT(0, 0, 170, 20, `姓名:${data.name}`);LODOP.ADD_PRINT_TEXT(15, 0, 160, 20, `职位:${data.position}`);LODOP.ADD_PRINT_TEXT(tops, 0, 160, 20, `公司:${data.companyName}`);if (data.firstPart) {LODOP.ADD_PRINT_TEXT(120, 0, 160, 20, `备注:${data.firstPart}`);LODOP.ADD_PRINT_TEXT(155, 0, 160, 20, `${data.secondPart}`);} else {LODOP.ADD_PRINT_TEXT(120, 0, 160, 20, `备注:${data.remark}`);}//   LODOP.ADD_PRINT_TEXT(130, 10, 150, 20, " ");// LODOP.SET_PRINT_STYLEA(0, "UseStyle", 1);//   LODOP.PREVIEW(); // 预览并打印、LODOP.PRINT();},beforeDestroy() {// 清除定时器if (this.timer) {clearInterval(this.timer);}},},
};
</script><style scoped lang='scss'>
.main {background: #fff;min-height: 400px;padding-top: 1px;margin-top: 20px;border-radius: 10px;
}
.btns {margin: 24px;display: flex;cursor: pointer;
}.btns > li:nth-of-type(1) {width: 146px;height: 44px;background: linear-gradient(214deg, #059ff4 0%, #0266e6 100%);box-shadow: 0px 2px 10px 0px rgba(3, 107, 231, 0.6);border-radius: 4px;font-size: 18px;font-family: SourceHanSansCN, SourceHanSansCN;font-weight: 500;color: #ffffff;line-height: 27px;text-shadow: 0px 2px 10px rgba(3, 107, 231, 0.6);text-align: center;line-height: 44px;margin-right: 40px;
}.btns > li:nth-of-type(2) {width: 146px;height: 42px;border-radius: 4px;border: 2px solid #026ce7;font-size: 18px;font-family: SourceHanSansCN, SourceHanSansCN;font-weight: 500;color: #026ce7;text-align: center;line-height: 42px;margin-right: 40px;
}
.user {display: flex;box-sizing: border-box;padding: 20px;flex-wrap: wrap;
}
.userList {background: #e5e4ff;border-radius: 4px;color: #000;margin-bottom: 6px;width: 80px;height: 70px;line-height: 70px;text-align: center;margin-right: 10px;font-size: 14px;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;position: relative;cursor: pointer;
}
.status {position: absolute;bottom: 2px;right: 0px;background: #999999;line-height: 20px;font-size: 12px;color: #fff;width: 50px;border-radius: 4px;opacity: 0.4;
}
.img {text-align: center;padding-bottom: 170px;
}
.img > img {width: 500px;
}
</style>

已经试验过可以实现,有问题可以互相交流

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

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

相关文章

ISO/OIS的七层模型②

OSI模型是一个分层的模型&#xff0c;每一个部分称为一层&#xff0c;每一层扮演固定的角色&#xff0c;互不干扰。OSI有7层&#xff0c;从上到下分别是&#xff1a; 一&#xff0c;每层功能 7.应用层&#xff08;Application layer &#xff09;&#xff1a;应用层功能&#x…

Java发展过程中,JVM的演进

1. 初期的JVM&#xff08;Java 1.0 到 Java 1.1&#xff09; Java 1.0 于1996年发布&#xff0c;最初的JVM设计主要是为了跨平台兼容性和基本的垃圾回收功能。早期的JVM以解释执行字节码为主&#xff0c;性能相对较低。 2. 引入即时编译&#xff08;JIT&#xff09;&#xff…

如何从gitlab删除仓库

嗨&#xff0c;我是兰若姐姐。今天发现gitlab上有些仓库的代码没有用&#xff0c;是个多余的仓库&#xff0c;想要删掉&#xff0c;经过一番操作之后&#xff0c;成功的删除了&#xff0c;git上没有 多余的仓库&#xff0c;看着干净舒服很多&#xff0c;现在把删除的过程分享出…

基于ssm的图书管理系统的设计与实现

摘 要 在当今信息技术日新月异的时代背景下&#xff0c;图书管理领域正经历着深刻的变革&#xff0c;传统的管理模式已难以适应现代社会的快节奏和高要求&#xff0c;逐渐向数字化、智能化的方向演进。本论文聚焦于这一转变趋势&#xff0c;致力于设计并成功实现一个基于 SSM&…

开发不认可bug策略

作为测试&#xff0c;不仅仅要发现问题&#xff0c;更需要站在用户层面主动推进问题得到有效解决&#xff1b; 首先要积极耐心和开发进行沟通并共同复现bug&#xff0c;提供测试环境、操作步骤、测试数据、截图、日志等&#xff0c;确保rd对bug有充分的了解&#xff0c;更好地理…

U-net和U²-Net网络详解

目录 U-Net: Convolutional Networks for Biomedical Image Segmentation摘要U-net网络结构pixel-wise loss weight U-Net: Going Deeper with Nested U-Structure for Salient Object Detection摘要网络结构详解整体结构RSU-n结构RSU-4F结构saliency map fusion module -- 显著…

JavaFx+MySql学生管理系统

前言: 上个月学习了javafx和mysql数据库,于是写了一个学生管理系统,因为上个月在复习并且有一些事情,比较忙,所以没有更新博客了,这个项目页面虽然看着有点简陋了,但是大致内容还是比较简单的,于是现在跟大家分享一下我的学生管理系统,希望对这方面有兴趣的同学提供一些帮助 &a…

如何将canvas画布变成一张img图片

将Canvas画布转换成一张图片&#xff08;通常是PNG或JPEG格式&#xff09;可以通过Canvas的toDataURL()方法来实现。这个方法可以将Canvas上的内容转换为一个表示图像数据的URL&#xff0c;这个URL可以被用作<img>标签的src属性&#xff0c;或者通过JavaScript进一步处理…

Vue 3 中创建一个动态的组件实例

本文将介绍如何在 Vue 3 中实现一个动态 Toast 组件实例。我们将创建一个简单的 Toast 组件&#xff0c;并使用一个动态创建实例的脚本来显示 Toast 消息。在 Vue 3 中创建动态组件实例有许多好处&#xff0c;这些好处主要体现在灵活性、性能、可维护性和用户体验等方面。 创建…

【JavaScript 算法】快速排序:高效的排序算法

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、算法原理二、算法实现三、应用场景四、优化与扩展五、总结 快速排序&#xff08;Quick Sort&#xff09;是一种高效的排序算法&#xff0c;通过分治法将数组分为较小的子数组&#xff0c;递归地排序子数组。快速排序通常…

北方园艺期刊

《北方园艺》是由黑龙江省农科院主管、黑龙江省园艺学会和黑龙江省农科院主办的以科学研究和技术普及相结合的园艺类综合性科技期刊。创刊四十年来&#xff0c;《北方园艺》紧随时代及行业的发展&#xff0c;根据前沿热点不断完善栏目设置&#xff1b;积极引进高学历人才&#…

分享一个 .NET 通过监听器拦截 EF 消息写日志的详细例子

前言 EF 开发效率确实很高也很便捷&#xff0c;但当它发生错误时&#xff0c;也挺让人头疼的&#xff0c;为什么&#xff1f;因为 EF 就像是一个黑盒子&#xff0c;一切全被封装起来&#xff0c;出错的时候很难定位原因&#xff0c;如果能够知道并打印 EF 生成的 SQL 语句&…

Memcached内存告急:深度解析与实战优化

标题&#xff1a;Memcached内存告急&#xff1a;深度解析与实战优化 在现代的动态Web应用中&#xff0c;Memcached作为一项关键的缓存技术&#xff0c;以其卓越的性能和简便的部署赢得了开发者的青睐。然而&#xff0c;随着数据量的激增和访问频率的提高&#xff0c;Memcached…

记录些Redis题集(1)

为什么Redis要有淘汰机制&#xff1f; 淘汰机制的存在是必要的&#xff0c;因为Redis是一种基于内存的数据库&#xff0c;所有数据都存储在内存中。然而&#xff0c;内存资源是有限的。在Redis的配置文件redis.conf中&#xff0c;有一个关键的配置项&#xff1a; # maxmemory…

Go语言入门之Map详解

Go语言入门之Map详解 1.基础定义 map是一个无序的&#xff0c;k-v键值对格式的集合 &#xff08;1&#xff09;特点 类型特点&#xff1a;map为引用类型&#xff0c;所以在函数中更新value值会永久改变顺序特点&#xff1a;map的遍历是无序的&#xff0c;因为底层是哈希表&am…

零基础学python(二)

1. 字典 字典的创建 最常见的创建方式&#xff1a; d {"k1": "v1", "k2": "v2"} 再向字典中添加一对键值&#xff1a; d["k3"] "v3" 字典还可以用dict()创建&#xff0c;这种方式中&#xff0c;键是不加引…

【Unity2D 2022:UI】制作主菜单

一、创建主菜单游戏场景 1. 在Scenes文件夹中新建一个游戏场景Main Menu 2. 为场景添加背景 &#xff08;1&#xff09;创建画布Canvas &#xff08;2&#xff09;在Canvas中创建新的空游戏物体Main Menu &#xff08;3&#xff09;在Main Menu中新建一个图像游戏物体Backgrou…

GDB调试

GDB调试 一 调试准备二 启动和退出gdb2.1 启动gdb2.2 命令行传参2.3 gdb中启动程序2.4 退出gdb 三 查看代码3.1 当前文件3.2 切换文件3.3 设置显示的行数 四 断点操作4.1 设置断点4.2 查看断点4.3 删除断点4.4 设置断点状态 五 调试命令5.1 继续运行gdb5.2 手动打印信息5.2.1 打…

无人机之机身保养

一、外观检查 1、检查机器表面整洁无划痕、无针孔凹陷擦伤、畸变等损坏情况&#xff1b; 2、晃动机身&#xff0c;仔细听机身内部有无松动零件或者螺丝在机身内部。 二、桨叶检查 1、有无裂痕、磨损、变形等缺陷&#xff0c;如有明显缺陷建议更换&#xff1b; 2、卡扣、紧…

C++函数模板学习

函数模板是C中的一个强大特性&#xff0c;允许编写通用函数来处理不同的数据类型。学习函数模板有助于理解泛型编程的概念&#xff0c;提高代码的可重用性和可维护性。以下是一些学习函数模板时可以关注的方面&#xff1a; 1. 模板的基本概念 模板定义&#xff1a;了解如何定义…