vue3+ts 前端实现打印功能
1.安装插件
npm install vue3-print-nb --save
2.全局引用
import { createApp } from ‘vue’
import App from ‘./App.vue’
import print from ‘vue3-print-nb’
const app = createApp(App)
app.use(print)
app.mount(‘#app’)
例子
<template><div><el-dialog v-model="jfDialogVisible" title="机房出入详情" width="60%" @close="close"><div id="a"><img class="pass" v-if="params.applyStatus == '2'" src="../../../assets/images/pass.png" /><div class="title">申请信息:</div><table><tr><th width="80px">申请单号:</th><td>{{ params.applyNumber }}</td><th>状态:</th><td>{{ applyStatusEnum[params.applyStatus] }}</td></tr><tr><th width="80px">申请时间:</th><td>{{ params.applyTime }}</td><th>缓急:</th><td>{{ urgentFlagData[params.urgentFlag] }}</td></tr><tr><th>申请人:</th><td>{{ params.applyUserName }}</td><th width="80px">联系电话:</th><td>{{ params.mobilePhone }}</td></tr><tr><th width="120px">所属单位团队:</th><td colspan="3">{{ params.unitTeam }}</td></tr><tr><th width="80px">机房名称:</th><td colspan="3">{{ params.roomName }}</td></tr><tr><th width="80px">机房地址:</th><td colspan="3">{{ params.roomAddress }}</td></tr><tr><th>申请出入时间:</th><td colspan="3">{{ params.accessBegin }}至{{ params.accessEnd }}</td></tr><tr><th width="80px">工作内容:</th><td colspan="3">{{ params.jobContent }}</td></tr><tr><th width="80px">携带物资:</th><td colspan="3">{{ params.bring }}</td></tr></table><div class="title">通行人员名单:</div><table><tr><th width="50px">序号</th><th width="50px">姓名</th><th width="50px">性别</th><th width="150px">单位</th><th width="150px">身份证号码</th><th>备注</th></tr><tr v-for="(item, index) in passList" :key="index"><td>{{ index + 1 }}</td><td>{{ item.name }}</td><td>{{ genderData[item.gender] }}</td><td>{{ item.unit }}</td><td>{{ item.sfz }}</td><td>{{ item.remark }}</td></tr><tr class="no-data-row" v-if="passList.length == 0"><td colspan="6">暂无数据</td></tr></table><div class="title">机房通行信息:</div><table><tr><th width="120px">同意出入时间:</th><td>{{ params.passtimeBegin }}至{{ params.passtimeEnd }}</td><th>机房联系电话:</th><td>{{ params.roomPhone }}</td></tr><tr><th width="80px">陪同人员:</th><td>{{ params.escortUser }}</td><th width="120px">陪同人员电话:</th><td>{{ params.escortPhone }}</td></tr><tr><th width="80px">其他安排:</th><td colspan="3">{{ params.remark }}</td></tr></table><div class="title">申请/审核过程:</div><table><tr><th width="100px">流程节点</th><th width="80px">经办人</th><th width="80px">办理结果</th><th>建议/意见</th><th width="180px">办理时间</th></tr><tr v-for="(item, index) in hdxqData" :key="index"><td>{{ item.jdm }}</td><td>{{ item.jbr }}</td><td>{{ item.bljg }}</td><td>{{ item.shyj }}</td><td>{{ item.qssj }}</td></tr><tr class="no-data-row" v-if="hdxqData.length == 0"><td colspan="5">暂无数据</td></tr></table></div><template #footer><span class="dialog-footer"><el-button @click="jfDialogVisible = false">取消</el-button><el-button type="primary" v-print="printObj">打印 </el-button></span></template></el-dialog></div>
</template><script setup lang="ts">
import { getRoomApplyByApplyId } from "@/api/modules/roomApplyApi/applyApi";
import { queryDictEnum, queryDictData } from "@/api/modules/system/dictApi";
import { loadHdxqList } from "@/api/modules/workflow/jylcApi";
import { dayjs } from "element-plus";
const jfDialogVisible = ref(false);
const passList = ref<any>([]);
const hdxqData = ref<any>([]);
interface Props {ywbh?: any;
}
//打印的属性设置
const printObj = ref({id: "a", // 这里是要打印元素的IDpopTitle: " ", // 打印的标题extraCss: "", // 打印可引入外部的一个 css 文件extraHead: `<style>.extra-head-text {text-align: center;font-weight: bold;font-size: 20px;}</style><div class="extra-head-text">机房出入申请单明细</div>` // 打印头部文字
});const props = defineProps<Props>();
const emit = defineEmits(["hide"]);
const close = () => {emit("hide");jfDialogVisible.value = false;
};
const params = ref();
//获取打印信息
const jfDialog = (val: any) => {getRoomApplyByApplyId(val).then((res: any) => {params.value = res.data;params.value.accessBegin = dayjs(params.value.accessBegin).format("YYYY年MM月DD日");params.value.accessEnd = dayjs(params.value.accessEnd).format("YYYY年MM月DD日");params.value.passtimeBegin = dayjs(params.value.passtimeBegin).format("YYYY年MM月DD日");params.value.passtimeEnd = dayjs(params.value.passtimeEnd).format("YYYY年MM月DD日");passList.value = res.data.passersList;});jfDialogVisible.value = true;loadHdxqData();
};
//获取审核信息列表
const loadHdxqData = async () => {const res = await loadHdxqList(props.ywbh);if (res.code === 200) {hdxqData.value = res.data as any;}
};const applyStatusEnum = ref<any>({});
//获取通知公告状态
const getApplyStatus = () => {queryDictEnum("RoomApplyStatusEnum_wos-workorder").then((res: any) => {res.data.forEach((item: any) => {applyStatusEnum.value[item.value] = item.label;});});
};
const urgentFlagData = ref<any>({});
const genderData = ref<any>({});
//获取缓急程度
const getUrgentFlag = () => {queryDictData("URGENT").then((res: any) => {res.data.forEach((item: any) => {urgentFlagData.value[item.value] = item.label;});});
};
//获取性别
const getGender = () => {queryDictData("COMMON_GENDER").then((res: any) => {res.data.forEach((item: any) => {genderData.value[item.value] = item.label;});});
};
getGender();
getUrgentFlag();
getApplyStatus();
defineExpose({jfDialog
});
</script>
<style scoped lang="scss">
.title {margin: 10px 0;font-weight: bold;font-size: 15px;
}
.no-data-row td {text-align: center;font-weight: bold;color: gray;height: 200px;
}
table {border-collapse: collapse;width: 100%;
}table,
th,
td {border: 1px solid gray;
}
#a {position: relative;
}
.pass {position: absolute;top: 25px;right: 0px;opacity: 0.4;
}
th,
td {padding: 8px;text-align: left;
}
</style>相关文章:
vue3+ts 前端实现打印功能
1.安装插件 npm install vue3-print-nb --save 2.全局引用 import { createApp } from ‘vue’ import App from ‘./App.vue’ import print from ‘vue3-print-nb’ const app createApp(App) app.use(print) app.mount(‘#app’) 例子 <template><div><el-…...
egg.js sequelize数据库操作配置
egg.js sequelize数据库操作配置 文章目录 egg.js sequelize数据库操作配置1. 数据库配置2. 迁移配置3.数据表设计和迁移4.模型创建 1. 数据库配置 安装并配置egg-sequelize插件(它会辅助我们将定义好的 Model 对象加载到 app 和 ctx 上)和mysql2模块&a…...
vagrant安装k8s集群
目录 概述前期准备安装virtualbox安装vagrant安装gitbash 集群架构集群安装集群初始化集群测试 概述 使用vagrant、virtualbox创建。 前期准备 安装virtualbox 访问官网安装,版本7.0.10 安装vagrant 访问官网安装,版本2.3.7 安装gitbash 访问官网…...
ArcGIS进阶:水源涵养功能分级评价操作
首先抛出水源涵养重要性评价的公式:水源涵养量降雨量-蒸散发量-地表径流量,其中地表径流量降雨量*平均地表径流系数 声明:以下数据来源于来自于牛强老师书籍(城乡规划GIS技术)。 以下给出重要性评价阈值表࿱…...
数据结构与算法 | 第四章:字符串
本文参考网课为 数据结构与算法 1 第四章字符串,主讲人 张铭 、王腾蛟 、赵海燕 、宋国杰 、邹磊 、黄群。 本文使用IDE为 Clion,开发环境 C14。 更新:2023 / 11 / 12 数据结构与算法 | 第四章:字符串 字符串概念字符串字符字符…...
2023-11-rust-struct
struct 类似 schema。 ts的interface 和type struct MyStruct {width: i32,height: i32, } 创建实例 let eg1 MyStruct {width: 23,height: 22,}; struct 可以有自己的方法,并且默认第一个参数是该实例 impl MyStruct {fn can_hold(&self, instance: &…...
Docker容器编排
文章目录 基本概念Docker ComposeSwarm分布式NodeTaskservice集群搭建弹性伸缩 基本概念 针对容器生命周期的管理,对容器生命周期进行更方便更快捷的方式进行管理。 依赖管理:当一个容器必须在另一个容器运行完成后,才能运行时,…...
计算机中丢失mfc140u.dll怎么解决
mfc140u.dll是一个Microsoft Visual C库文件,主要用于MFC(Microsoft Foundation Class)应用程序的开发。它包含了MFC应用程序所需的一些常用功能,如对话框、窗口、菜单等。当mfc140u.dll丢失时,可能会导致MFC应用程序无…...
postman设置动态token, 每次登录更新token
postman设置动态token, 每次登录更新token 文章目录 postman设置动态token, 每次登录更新token问题1. 设置全局变量2. 新建登录接口3. 设置脚本4. 切换环境5. 配置动态token 问题 token过期时间一般比较短, 每次使用postman调用接口都token非常麻烦 实现token过期后, 调用一次…...
架构师范文(AI写作)两篇
请点击↑关注、收藏,本博客免费为你获取精彩知识分享!有惊喜哟!! 架构师范文-论区块链技术及应用 2022年3月,我参与了某集团内部一款基于区块链技术的数字资产管理平台,该平台是为了方便管理公司旗下的各种…...
基于SSM的电子病历系统
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…...
一次sougo workflow库的使用过程
安装就是常规的make install tutorial http_echoserver实现一下,在macos上实现 cmakelist.txt cmake_minimum_required(VERSION 3.6)set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Release")project(mainLANGUAGES C CXX )set(CMAKE_RUNTIME_OUTP…...
macOS Big Sur(macos11版本)
macOS Big Sur是苹果推出的最新操作系统,具有以下特点: 全新的设计风格:Big Sur采用了全新的设计语言,包括更加圆润的窗口和控件、更加鲜明的色彩和更加简洁的界面。这种设计风格使得操作系统更加美观和易用。强大的性能表现&…...
泛微E-Office信息泄露漏洞复现
简介 Weaver E-Office是中国泛微科技(Weaver)公司的一个协同办公系统。 Weaver E-Office 9.5版本存在安全漏洞。攻击者利用该漏洞可以访问文件或目录。 漏洞编号:CVE-2023-2766 漏洞复现 FOFA语法: app"泛微-EOffice&qu…...
-bash: sudo: command not found的解决方法
在 Linux 系统中,使用 sudo 命令时提示 “command not found”,首先执行以下命令看一下 /etc/sudoers.d 文件是否存在: find /etc/sudoers.d1)如果返回 No such file or directory,就说明系统没有安装sudo,…...
CMOS介绍
1 二极管 2 CMOS 2.1 栅极、源极、漏极 2.2 内部结构 2.2 导电原理 - 原理:1.通过门级和衬底加一个垂直电场Ev,从而在两口井之间形成反形层2.如果加的电场足够强,反形层就可以把source(源极)和drain(漏极…...
《软件工程与计算》期末考试真题范例及答案
今天分享一套针对《软件工程与计算》这本书的真题案例,有关《软件工程与计算》23章内容的重点知识整理,已经总结在了博客专栏中,有需要的自行阅读: 《软件工程与计算》啃书总结https://blog.csdn.net/jsl123x/category_12468792.…...
springboot高校全流程考勤系统-计算机毕设 附源码 27637
Springboot高校全流程考勤系统 摘 要 本文针对高校考勤等问题,对其进行研究分析,然后开发设计出高校全流程考勤系统以解决问题。高校全流程考勤系统系统主要功能模块包括:考勤签到、课程信息、考勤情况、申请记录列表等,系统功能设…...
大二第四周总结——用原生js封装一个分页器
用原生js封装一个分页器 起因:这次项目还是用原生的js来写的,我负责的是后台,分页是后台最常见的一个功能了,于是干脆封装一下,废话少说,直接上代码 这里是基本的样式 .pagination {display: flex;width: 600px;hei…...
智能AI系统ChatGPT系统源码+支持GPT4.0+支持ai绘画(Midjourney)/支持OpenAI GPT全模型+国内AI全模型
一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
负载均衡器》》LVS、Nginx、HAproxy 区别
虚拟主机 先4,后7...
小智AI+MCP
什么是小智AI和MCP 如果还不清楚的先看往期文章 手搓小智AI聊天机器人 MCP 深度解析:AI 的USB接口 如何使用小智MCP 1.刷支持mcp的小智固件 2.下载官方MCP的示例代码 Github:https://github.com/78/mcp-calculator 安这个步骤执行 其中MCP_ENDPOI…...
UE5 音效系统
一.音效管理 音乐一般都是WAV,创建一个背景音乐类SoudClass,一个音效类SoundClass。所有的音乐都分为这两个类。再创建一个总音乐类,将上述两个作为它的子类。 接着我们创建一个音乐混合类SoundMix,将上述三个类翻入其中,通过它管理每个音乐…...
如何通过git命令查看项目连接的仓库地址?
要通过 Git 命令查看项目连接的仓库地址,您可以使用以下几种方法: 1. 查看所有远程仓库地址 使用 git remote -v 命令,它会显示项目中配置的所有远程仓库及其对应的 URL: git remote -v输出示例: origin https://…...
react-pdf(pdfjs-dist)如何兼容老浏览器(chrome 49)
之前都是使用react-pdf来渲染pdf文件,这次有个需求是要兼容xp环境,xp上chrome最高支持到49,虽然说iframe或者embed都可以实现预览pdf,但为了后续的定制化需求,还是需要使用js库来渲染。 chrome 49测试环境 能用的测试…...
