vue2框架配置路由设计打印单

devtools/2025/1/9 2:59:27/

业务效果:

查询出列表后,点击申请单按钮,弹出申请表格,可进行打印

后端实现

控制器、服务层等省略,关联查出数据提供接口给前端即可

<!--获取详细信息(用于申请单打印)--><select id="selectXxxxDetail" parameterType="String" resultType="xxxVo">SELECTc.`name` AS xxx,c.xxx,c.xxxAS xxx,c.xxxAS xxx,c.xxxAS xxx,ca.xxxAS xxx,vr.xxx,b.xxx,bm.xxx,v.xxx,dd.xxxas xxx,v.xxx,v.xxx,v.xxx,v.xxx,de.xxx,d.xxxFROMxxx  vrLEFT JOIN xxx  rr ON rr.xxx  = vr.xxx  LEFT JOIN xxx  v ON v.id = rr.xxx  _idLEFT JOIN xxx  c ON c.id = rr.xxx  LEFT JOIN xxx  ca ON ca.id = rr.xxx  LEFT JOIN xxx  b ON b.id = v.xxx  LEFT JOIN xxx  bm ON bm.id = v.xxx  LEFT JOIN xxx  cf ON cf.id = rr.xxx  LEFT JOIN xxx  bc ON bc.id = v.xxx  LEFT JOIN xxx  bd ON bd.xxxid = bc.xxx  LEFT JOIN sys_dict_data dd ON dd.xxx  = v.xxx  LEFT JOIN sys_user u ON u.user_name = vr.create_byLEFT JOIN sys_dept d ON d.dept_id = u.dept_idLEFT JOIN xxx  dm ON dm.user_id = u.user_idLEFT JOIN xxx   de ON de.id = dm.xxx  WHEREvr.id = #{id}</select>

前端实现

1.首先在配置跳转路由

具体配置项: 

 

javascript">  {path: '/xxxxxxForm',component: (resolve) => require(['@/views/xxx/xxxxx/xxxxxxForm'], resolve),hidden: true,meta: { title: 'xxxx申请表' }},

2.这个配置申请单的数据查询接口到js

分析:因为这个表格的数据要比当前业务表的数据要集成得多,所以需要重新写接口关联查询进行获取,通过VO接收后给到前端

javascript">// 获取车辆补证详情信息详细信息(用于申请单打印)
export function getReissuecertDetail(id) {return request({url: '/ddc/vehicleTransactReissuecert/getReissuecertDetail/' + id,method: 'get'})
}

3.页面加“申请单”按钮,及配置跳转的处理逻辑

4.表格页面代码:


<!-- 超级飞侠申请表 -->
<template><div :visible.sync="openView.open" class="app-container"><div id="main-div"><p class="bold-large-text" style="text-align: center">超级飞侠申请表</p><table class="table table-bordered"   valign="center" style="table-layout: fixed"><tr><td colspan="12">入伍信息</td></tr><tr><td colspan="2" rowspan="4" >申请人</td><td colspan="2" >姓名/名称</td><td colspan="3" >{{formData.xxxName}}</td><td colspan="2" >个人类型</td><td colspan="3" ><div v-if="formData.xxxtype==='1'">个人</div><div v-if="formData.xxxtype==='2'">组织</div></td></tr><tr><td colspan="2" >身份证号</td><td colspan="3" >{{ formData.xxxIdcard }}</td><td colspan="2" >手机号码</td><td colspan="3" >{{ formData.xxxMobilephone }}</td></tr><tr><td colspan="2" >户籍地址</td><td colspan="8" >{{ formData.xxxPermanentaddress }}</td></tr><tr><td colspan="2" >现居住地址</td><td colspan="8" >{{ formData.xxxResidenceaddress }}</td></tr><tr>...</tr><tr><td colspan="6" rowspan="5"  class="signature-cell"><div align='left'><br>*申请人签字:</div><div align='right'><br><br>时间 _____年_____月_____日</div></td><td colspan="6" rowspan="5"  class="signature-cell"><div align='left'><br>*经办人签字:</div><div align='right'><br><br>时间 _____年_____月_____日</div></td></tr></table></div><div style="float: right;"><el-button ref="printClick" type="primary" @click="printer">打 印</el-button><el-button @click="close">取 消</el-button></div></div>
</template><script>
import {getxxxDetail
} from "@/api/ccc/xxx";
import printJS from 'print-js';const printer = () => {printJS({printable: 'main-div',type: 'html',popTitle:"超级飞侠入伍管理系统",style: `h2{ text-align: center;font-size: 14px;}table{width: 95%;border-collapse: collapse;font-size: 8px; }th, td {border: 1px solid #000000;text-align: center;}.div-text-left { text-align: left; margin-bottom: 10px;}.bold-large-text { text-align: center; font-weight: bold; font-size: 30px; }.divText { text-align: right;}`,scanStyles: true,})
}
export default {name: "txxxForm",data() {return {printer,baseURL: process.env.VUE_APP_BASE_API,//车辆转移登记数据formData: {},// 弹出层标题title: "",// 是否显示弹出层open: false,// 是否显示详细弹出层openView: false,// 表单参数form: {},};},created() {//根据changeId加载数据const xxxId = this.$route.query.xxxId;console.log(xxxId)this.loadData(xxxId);},methods: {close() {window.close();},dialogVisible() {this.$store.dispatch("xxxForm", this.$route)},/** 根据changeId查询查验单信息 */loadData(xxxId) {getxxxDetail(xxxId).then(response => {this.formData = response.data;});},}
};
</script><style rel="stylesheet/scss" lang="scss">
#main-div {display: table;width: 700px;max-width: 100%;margin: 0 auto;
}
.table {width: 100%;border-collapse: collapse;text-align: center;
}
.table td, .table th {padding: 8px;border: 1px solid rgb(50, 66, 74);
}
.kuang {font-size: 30px; /* 调整方框大小 */text-align: center;
}
.bold-large-text {font-size: 24px;font-weight: bold;text-align: center;
}
@media print {.signature-cell {text-align: left !important; /* 确保打印时文字居左 */line-height: 1.5; /* 调整行高 */padding-top: 10px; /* 上边距 */}.div-text-left {text-align: left;margin-bottom: 20px;}
}
</style>

 


http://www.ppmy.cn/devtools/147949.html

相关文章

Vue项目中生成node_modules文件夹的两种常用方法及npm优势

在Vue项目中生成node_modules文件夹的过程非常简单,主要步骤如下: 1、使用 npm 安装依赖包; 2、使用 yarn 安装依赖包。其中,推荐使用npm安装依赖包,原因如下: 兼容性更广:npm是Node.js的默认包管理工具,具有更高的兼容性。社区支持:npm拥有更大的用户基础和社区支持,…

从0开始的opencv之旅(1)cv::Mat的使用

目录 Mat 存储方法 创建一个指定像素方式的图像。 尽管我们完全可以把cv::Mat当作一个黑盒&#xff0c;但是笔者的建议是仍然要深入理解和学习cv::Mat自身的构造逻辑和存储原理&#xff0c;这样在查找问题&#xff0c;或者是遇到一些奇奇怪怪的图像显示问题的时候能够快速的想…

软考教材重点内容 信息安全工程师 第 12 章网络安全审计技术原理与应用

12.1.1 网络安全审计概念 网络安全审计是指对网络信息系统的安全相关活动信息进行获取、记录、存储、分析和利用的工作。网络安全审计的作用在于建立“事后”安全保障措施&#xff0c;保存网络安全事件及行为信息&#xff0c;为网络安全事件分析提供线索及证据&#xff0c;以便…

Chrome 浏览器下载安装教程,保姆级教程

大家好&#xff0c;今天我们来聊一聊如何在国内下载和安装最新版本的 Chrome 浏览器。由于众所周知的原因&#xff0c;Google 的网站在国内是被屏蔽的&#xff0c;因此很多朋友在下载 Chrome 浏览器 时会遇到困难。其实&#xff0c;不必担心&#xff0c;今天我将为大家带来一份…

Android14 CTS-R6和GTS-12-R2不能同时测试的解决方法

背景 Android14 CTS r6和GTS 12-r1之后&#xff0c;tf-console默认会带起OLC Server&#xff0c;看起来olc server可能是想适配ATS(android-test-station)&#xff0c;一种网页版可视化、可配置的跑XTS的方式。这种网页版ATS对测试人员是比较友好的&#xff0c;网页上简单配置下…

Day 23:接口文档与 Swagger

目标&#xff1a;掌握接口文档生成工具 Swagger 的使用。 理论知识 1. Swagger 的作用和优点 作用&#xff1a;Swagger 是一种用于 RESTful API 文档生成的工具&#xff0c;它通过注解的方式自动生成 API 文档。Swagger 提供了一种标准化的方式来描述 API&#xff0c;使得 A…

计算机的错误计算(二百)

摘要 用三个大模型计算 exp(123.456). 结果保留10位有效数字。三个大模型的输出均是错误的&#xff0c;虽然其中一个给出了正确的 Python代码。 例1. 计算 exp(123.456). 保留10位有效数字。 下面是与第一个大模型的对话。 以上为与一个大模型的对话。 下面是与另外一个大模…

深入浅出梯度下降算法:快速抵达函数最小值的方法

引言 梯度是机器学习和优化领域中不可或缺的概念&#xff0c;它为我们提供了理解和调整多维空间中函数行为的工具。本文将详细介绍梯度的定义、性质&#xff0c;并通过具体的一元和多元函数案例展示如何使用梯度下降算法找到最佳参数。 一、梯度的基础知识 1.1 定义与计算 梯…