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

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: "&nbsp;", // 打印的标题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插件&#xff08;它会辅助我们将定义好的 Model 对象加载到 app 和 ctx 上&#xff09;和mysql2模块&a…...

vagrant安装k8s集群

目录 概述前期准备安装virtualbox安装vagrant安装gitbash 集群架构集群安装集群初始化集群测试 概述 使用vagrant、virtualbox创建。 前期准备 安装virtualbox 访问官网安装&#xff0c;版本7.0.10 安装vagrant 访问官网安装&#xff0c;版本2.3.7 安装gitbash 访问官网…...

ArcGIS进阶:水源涵养功能分级评价操作

首先抛出水源涵养重要性评价的公式&#xff1a;水源涵养量降雨量-蒸散发量-地表径流量&#xff0c;其中地表径流量降雨量*平均地表径流系数 声明&#xff1a;以下数据来源于来自于牛强老师书籍&#xff08;城乡规划GIS技术&#xff09;。 以下给出重要性评价阈值表&#xff1…...

数据结构与算法 | 第四章:字符串

本文参考网课为 数据结构与算法 1 第四章字符串&#xff0c;主讲人 张铭 、王腾蛟 、赵海燕 、宋国杰 、邹磊 、黄群。 本文使用IDE为 Clion&#xff0c;开发环境 C14。 更新&#xff1a;2023 / 11 / 12 数据结构与算法 | 第四章&#xff1a;字符串 字符串概念字符串字符字符…...

2023-11-rust-struct

struct 类似 schema。 ts的interface 和type struct MyStruct {width: i32,height: i32, } 创建实例 let eg1 MyStruct {width: 23,height: 22,}; struct 可以有自己的方法&#xff0c;并且默认第一个参数是该实例 impl MyStruct {fn can_hold(&self, instance: &…...

Docker容器编排

文章目录 基本概念Docker ComposeSwarm分布式NodeTaskservice集群搭建弹性伸缩 基本概念 针对容器生命周期的管理&#xff0c;对容器生命周期进行更方便更快捷的方式进行管理。 依赖管理&#xff1a;当一个容器必须在另一个容器运行完成后&#xff0c;才能运行时&#xff0c;…...

计算机中丢失mfc140u.dll怎么解决

mfc140u.dll是一个Microsoft Visual C库文件&#xff0c;主要用于MFC&#xff08;Microsoft Foundation Class&#xff09;应用程序的开发。它包含了MFC应用程序所需的一些常用功能&#xff0c;如对话框、窗口、菜单等。当mfc140u.dll丢失时&#xff0c;可能会导致MFC应用程序无…...

postman设置动态token, 每次登录更新token

postman设置动态token, 每次登录更新token 文章目录 postman设置动态token, 每次登录更新token问题1. 设置全局变量2. 新建登录接口3. 设置脚本4. 切换环境5. 配置动态token 问题 token过期时间一般比较短, 每次使用postman调用接口都token非常麻烦 实现token过期后, 调用一次…...

架构师范文(AI写作)两篇

请点击↑关注、收藏&#xff0c;本博客免费为你获取精彩知识分享&#xff01;有惊喜哟&#xff01;&#xff01; 架构师范文-论区块链技术及应用 2022年3月&#xff0c;我参与了某集团内部一款基于区块链技术的数字资产管理平台&#xff0c;该平台是为了方便管理公司旗下的各种…...

基于SSM的电子病历系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…...

一次sougo workflow库的使用过程

安装就是常规的make install tutorial http_echoserver实现一下&#xff0c;在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是苹果推出的最新操作系统&#xff0c;具有以下特点&#xff1a; 全新的设计风格&#xff1a;Big Sur采用了全新的设计语言&#xff0c;包括更加圆润的窗口和控件、更加鲜明的色彩和更加简洁的界面。这种设计风格使得操作系统更加美观和易用。强大的性能表现&…...

泛微E-Office信息泄露漏洞复现

简介 Weaver E-Office是中国泛微科技&#xff08;Weaver&#xff09;公司的一个协同办公系统。 Weaver E-Office 9.5版本存在安全漏洞。攻击者利用该漏洞可以访问文件或目录。 漏洞编号&#xff1a;CVE-2023-2766 漏洞复现 FOFA语法&#xff1a; app"泛微-EOffice&qu…...

-bash: sudo: command not found的解决方法

在 Linux 系统中&#xff0c;使用 sudo 命令时提示 “command not found”&#xff0c;首先执行以下命令看一下 /etc/sudoers.d 文件是否存在&#xff1a; find /etc/sudoers.d1&#xff09;如果返回 No such file or directory&#xff0c;就说明系统没有安装sudo&#xff0c…...

CMOS介绍

1 二极管 2 CMOS 2.1 栅极、源极、漏极 2.2 内部结构 2.2 导电原理 - 原理&#xff1a;1.通过门级和衬底加一个垂直电场Ev&#xff0c;从而在两口井之间形成反形层2.如果加的电场足够强&#xff0c;反形层就可以把source&#xff08;源极&#xff09;和drain&#xff08;漏极…...

《软件工程与计算》期末考试真题范例及答案

今天分享一套针对《软件工程与计算》这本书的真题案例&#xff0c;有关《软件工程与计算》23章内容的重点知识整理&#xff0c;已经总结在了博客专栏中&#xff0c;有需要的自行阅读&#xff1a; 《软件工程与计算》啃书总结https://blog.csdn.net/jsl123x/category_12468792.…...

springboot高校全流程考勤系统-计算机毕设 附源码 27637

Springboot高校全流程考勤系统 摘 要 本文针对高校考勤等问题&#xff0c;对其进行研究分析&#xff0c;然后开发设计出高校全流程考勤系统以解决问题。高校全流程考勤系统系统主要功能模块包括&#xff1a;考勤签到、课程信息、考勤情况、申请记录列表等&#xff0c;系统功能设…...

大二第四周总结——用原生js封装一个分页器

用原生js封装一个分页器 起因&#xff1a;这次项目还是用原生的js来写的&#xff0c;我负责的是后台&#xff0c;分页是后台最常见的一个功能了&#xff0c;于是干脆封装一下,废话少说&#xff0c;直接上代码 这里是基本的样式 .pagination {display: flex;width: 600px;hei…...

智能AI系统ChatGPT系统源码+支持GPT4.0+支持ai绘画(Midjourney)/支持OpenAI GPT全模型+国内AI全模型

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

负载均衡器》》LVS、Nginx、HAproxy 区别

虚拟主机 先4&#xff0c;后7...

小智AI+MCP

什么是小智AI和MCP 如果还不清楚的先看往期文章 手搓小智AI聊天机器人 MCP 深度解析&#xff1a;AI 的USB接口 如何使用小智MCP 1.刷支持mcp的小智固件 2.下载官方MCP的示例代码 Github&#xff1a;https://github.com/78/mcp-calculator 安这个步骤执行 其中MCP_ENDPOI…...

UE5 音效系统

一.音效管理 音乐一般都是WAV,创建一个背景音乐类SoudClass,一个音效类SoundClass。所有的音乐都分为这两个类。再创建一个总音乐类&#xff0c;将上述两个作为它的子类。 接着我们创建一个音乐混合类SoundMix&#xff0c;将上述三个类翻入其中&#xff0c;通过它管理每个音乐…...

如何通过git命令查看项目连接的仓库地址?

要通过 Git 命令查看项目连接的仓库地址&#xff0c;您可以使用以下几种方法&#xff1a; 1. 查看所有远程仓库地址 使用 git remote -v 命令&#xff0c;它会显示项目中配置的所有远程仓库及其对应的 URL&#xff1a; git remote -v输出示例&#xff1a; origin https://…...

react-pdf(pdfjs-dist)如何兼容老浏览器(chrome 49)

之前都是使用react-pdf来渲染pdf文件&#xff0c;这次有个需求是要兼容xp环境&#xff0c;xp上chrome最高支持到49&#xff0c;虽然说iframe或者embed都可以实现预览pdf&#xff0c;但为了后续的定制化需求&#xff0c;还是需要使用js库来渲染。 chrome 49测试环境 能用的测试…...