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软件系统。那么如…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释
以Module Federation 插件详为例,Webpack.config.js它可能的配置和含义如下: 前言 Module Federation 的Webpack.config.js核心配置包括: name filename(定义应用标识) remotes(引用远程模块࿰…...

使用SSE解决获取状态不一致问题
使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件,这个上传文件是整体功能的一部分,文件在上传的过程中…...