当前位置: 首页 > 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软件系统。那么如…...

Windows PDF处理终极方案:5分钟部署Poppler完整工具包

Windows PDF处理终极方案&#xff1a;5分钟部署Poppler完整工具包 【免费下载链接】poppler-windows Download Poppler binaries packaged for Windows with dependencies 项目地址: https://gitcode.com/gh_mirrors/po/poppler-windows 还在为Windows系统上的PDF文档处…...

.NET 诊断技巧 | 日志框架原理、手写日志框架学习秸

一、 什么是 AI Skills&#xff1a;从工具级到框架级的演化 AI Skills&#xff08;AI 技能&#xff09; 的概念最早在 Claude Code 等前沿 Agent 实践中被强化。最初&#xff0c;Skills 被视为“工具级”的增强&#xff0c;如简单的文件读写或终端操作&#xff0c;方便用户快速…...

算法安全自评估报告怎么写?内容框架 + 难点解析 + 实战模板(直接照搬)

本文适合&#xff1a;算法工程师、合规专员、产品负责人、备案申报人员&#xff0c;全文干货无废话&#xff0c;可直接用于项目申报、内部评审、算法备案材料。一、前言随着《算法推荐管理规定》《生成式人工智能服务管理暂行办法》等政策落地&#xff0c;算法安全自评估报告已…...

自动控制理论(12)——控制系统校正的工程实践与优化

1. 控制系统校正的工程意义 在工业自动化领域&#xff0c;控制系统就像人体的神经系统&#xff0c;需要精确调节才能保证设备稳定运行。想象一下化工反应釜的温度控制&#xff1a;如果响应太慢会导致反应不充分&#xff0c;响应太快又可能引发剧烈振荡。这就是为什么我们需要校…...

ComfyUI自定义脚本完全指南:10个高效功能提升AI绘画体验

ComfyUI自定义脚本完全指南&#xff1a;10个高效功能提升AI绘画体验 【免费下载链接】ComfyUI-Custom-Scripts Enhancements & experiments for ComfyUI, mostly focusing on UI features 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-Custom-Scripts Comf…...

5个高效RAG部署教程:BGE-Reranker-v2-m3免配置一键启动

5个高效RAG部署教程&#xff1a;BGE-Reranker-v2-m3免配置一键启动 你是不是也遇到过这样的问题&#xff1a;费了好大劲搭建的RAG系统&#xff0c;检索出来的文档看似相关&#xff0c;但交给大模型生成答案时&#xff0c;却总是“答非所问”&#xff1f;或者明明检索到了正确答…...

day09:数据分析三剑客之numpy

数据分析三剑客的依赖关系(重点):数据三剑客的互补关系:numpy示例1:numpy数组的多种创建方式# 导包 import numpy as np# 1.把列表转换成数组 a1 np.array([1, 2, 3, 4, 5]) print(a1) print(a1.ndim) # todo 维度 print(a1.shape) # todo 元素几行几列a1 np.array([[1, 2,…...

TensorFlow.js推理超快

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 TensorFlow.js推理速度革命&#xff1a;构建超快Web端AI应用的实践与未来目录TensorFlow.js推理速度革命&#xff1a;构建超快We…...

基于MATLAB的MT-2型车钩缓冲器的列车纵向动力学仿真,牵引制动特性,车辆冲击试验

基于MATLAB的MT-2型车钩缓冲器的列车纵向动力学仿真&#xff0c;牵引制动特性&#xff0c;车辆冲击试验&#xff0c;线路模拟 根据MT-2型缓冲器的结构建立了详细的数学模型&#xff0c;并应用于列车纵向动力学仿真 &#xff08;带程序使用说明和源代码&#xff0c;原文献&#…...

从微调到部署:如何通过对话模板对齐确保vLLM与LLaMA-Factory的推理效果一致

1. 为什么你的微调模型在vLLM上效果变差了&#xff1f; 最近帮几个团队排查大模型部署问题&#xff0c;发现一个高频痛点&#xff1a;在LLaMA-Factory微调好的模型&#xff0c;用vLLM部署后生成质量明显下降。比如有个做客服机器人的团队&#xff0c;微调时回答准确率能达到92%…...