一、打印组件

需要选定区域进行打印,使用vue-print组件

组件安装

npm install vue-print-nb --save

在项目的Main.js中引入(全局注册):

import Print from 'vue-print-nb'
Vue.use(Print)

组件使用

1、对要打印的区域套一个div,设置id属性

<div id="printView">
这是要打印的区域代码....
<div/>

2、放置打印触发按钮,该组件已经装填了自定义指令(v-print),传入字符填写id选择器

<div class="drawer-bottom-bar">
<el-button v-print="'#printView'" type="primary">打印</el-button>
<el-button @click="$parent.$parent.closePrintDialog()">取消</el-button>
</div>

二、打印预览

element-ui 表格组件在打印时会样式崩塌,这个问题没法解决,直接弃用组件

实际上的需求是打印单据,用最简单的table组件实现即可

字体的样式:

font-size: 12px; /* 字体大小 */
font-family: SimSun; /* 字体样式 */

表格的标签属性和样式:

属性

<table border="1pm" cellspacing="0" align="center" width="100%">
表格内容...
<table/>

样式

/* 表格边框线折叠 */
border-collapse: collapse; /* 单元格布局 */
table-layout:fixed;
word-wrap:break-word;
word-break:break-all;

三、完整代码:

<template>
<div v-loading="loading" style="padding: 10px;">
<div id="printView" style="padding-left: 90px; padding-right: 20px;">
<h2 style="text-align: center;margin: 30px 0 10px 0;font-family: SimSun;">用款申请单</h2>
<table class="table" border="0pm" cellspacing="0" align="left" width="100%" style="font-size: 12px;font-family: SimSun;margin-bottom: 10px; table-layout:fixed;word-wrap:break-word;word-break:break-all">
<tr>
<td style="padding:5px;" align="left"> </td>
<td style="padding:5px;" align="left"> </td>
<td style="padding:5px;" align="left"> </td>
<td style="padding:5px; font-weight: bolder; font-size: 15px;" align="right">{{ form.fullCoName }}</td>
</tr>
<tr>
<td style="padding:5px;" align="left"> </td>
<td style="padding:5px;" align="left"> </td>
<td style="padding:5px;" align="left"> </td>
<td style="padding:5px; font-weight: bolder; font-size: 15px;" align="right">单据编号:{{ form.apCode }}</td>
</tr>
<tr>
<td style="padding:5px;" align="left">申请部门:{{ form.deName }}</td>
<td style="padding:5px;" align="left">申请日期:{{ form.apDate }}</td>
<td style="padding:5px;" align="left">报销人:{{ form.apProposerName }}</td>
<td style="padding:5px;" align="left">制单人:{{ form.creatorName }}</td>
</tr>
<tr style="margin:0;padding:0;">
<td style="padding:5px;" align="left">往来对象类型:{{ form.apRoTypeName }}</td>
<td style="padding:5px;" align="left">往来对象:{{ form.apReObjName }}</td>
<td style="padding:5px;" align="left">付款结算方式:{{ form.apSettMethName }}</td>
<td style="padding:5px;" align="left">合计金额:{{ form.apToAmount }}</td>
</tr>
<tr style="margin:0;padding:0;">
<td style="padding:5px;" align="left">收款人:{{ form.apRePayee }}</td>
<td style="padding:5px;" align="left">收款账号:{{ form.apReAccount }}</td>
<td style="padding:5px;" align="left">收款银行:{{ form.apReBank }}</td>
<td style="padding:5px;" align="left">收款支行:{{ form.apReSubbranch }}</td>
</tr>
<tr style="margin:0;padding:0;">
<td style="padding:5px;" align="left">开户行所在地:{{ form.apReBaLocus }}</td>
<td style="padding:5px;" align="left">付款备注:{{ form.apPaRemark }}</td>
<td />
<td />
</tr>
</table> <div style="font-size: 12px;font-family: SimSun;font-weight: bold;margin: 0 0 10px 5px;">用款明细</div>
<table class="yk-table" border="1pm" cellspacing="0" align="center" width="100%" style="font-size: 12px;font-family: SimSun; table-layout:fixed;word-wrap:break-word;word-break:break-all">
<tr>
<th width="55px">序号</th>
<th>摘要</th>
<th>归属项目</th>
<th>金额(元)</th>
<th>费用类别</th>
</tr>
<tr v-for="(item, index) in form.detailList" :key="index" align="center">
<td>{{ index + 1 }}</td>
<td>{{ item.adSummary }}</td>
<td>{{ item.inName }}</td>
<td>{{ item.adAmount }}</td>
<td>{{ item.exName }}</td>
</tr>
<tr align="center">
<td>合计</td>
<td colspan="2">{{ adAmountUpper }}</td>
<td>{{ adAmount }}</td>
<td />
</tr>
</table>
</div> <div class="drawer-bottom-bar">
<el-button v-print="'#printView'" type="primary">打印</el-button>
<el-button @click="$parent.$parent.closePrintDialog()">取消</el-button>
</div>
</div>
</template> <script>
import { getFinSpApplyById } from '@/api/financial/spend/spapply'
import { amtLower2Upper } from '@/utils'
import { getCustomerList } from '@/api/system/archives/customer'
import { getEmployeeList } from '@/api/system/archives/employee' export default {
name: 'SpApplyPrint',
props: {
keyId: {
type: [String, Number],
required: false,
default: null
},
approve: {
type: Object,
required: false,
default() {
return {
approveId: '',
approveType: 'SN070201',
approveResult: '',
actTaskId: ''
}
}
}
},
data() {
return {
loading: false,
toggleFlag: false,
loadingFlag: false,
formRef: 'formRefKey',
form: {
apCode: '',
coName: '',
deName: '',
apDate: '',
apReObj: '',
apReObjName: '',
apApprStateName: '',
apProposerName: '',
apRoTypeName: '',
apSettMethName: '',
apToAmount: '',
creatorName: '',
attachList: [],
detailList: []
},
commonStyle: { width: '100%' },
apRoNameList: [],
adAmount: 0,
adAmountUpper: ''
}
},
created() {
this.initialSpApplyDetail()
},
methods: {
async initialSpApplyDetail() {
const isFromApprove = !!this.approve.approveId
const { data: res } = await getFinSpApplyById(isFromApprove ? this.approve.approveId : this.keyId)
this.form = res
const isUnit = this.form.apRoType === 'B140001'
if (isUnit) {
const { data: res } = await getCustomerList({ sealupState: '0' })
this.apRoNameList = res.map((customer, idx) => Object.assign(customer, { commonName: customer.cuName }))
} else {
const { data: res } = await getEmployeeList({})
this.apRoNameList = res.map((employee, idx) => Object.assign(employee, { commonName: employee.emName }))
}
const obj = this.apRoNameList.find(obj => obj.id === this.form.apReObj)
this.$set(this.form, 'apReObjName', obj.commonName) let sum = 0
this.form.detailList.forEach(x => { sum += x.adAmount })
this.adAmount = sum
this.adAmountUpper = amtLower2Upper(sum)
}
}
}
</script> <style media="print">
@page {
size: auto;
margin: 3mm;
}
html {
background-color: #ffffff;
margin: 0px;
}
body {
border: solid 1px #ffffff;
}
</style>
<style lang="scss" scoped>
@media print {
#printView {
display: block;
width: 100%;
overflow: hidden;
}
}
</style>

  

【Vue】单据打印功能的更多相关文章

  1. 使用那各VUE的打印功能(print.js)出现多打印一个空白页的问题

    最近这段时间,用VUE写东西,有个打印功能. 百度了一下,铺天盖地的VUE打印的两种实现方法. 很感激这些千篇一律的帖子,虽然不知道他们是否真的用过,还是只是复制粘贴. 至少这些帖子告诉我,是有两个可 ...

  2. vue实现打印功能的两种方法

    第一种方法:通过npm 安装插件 1,安装  npm install vue-print-nb --save 2,引入  安装好以后在main.js文件中引入 import Print from 'v ...

  3. vue实现打印功能

    通过npm 安装插件 1.安装  npm install vue-print-nb --save 2.引入  安装好以后在main.js文件中引入 import Print from 'vue-pri ...

  4. vue html页面打印功能vue-print

    vue项目中,HTML页面打印功能.在项目中,有时需要打印页面的表格, 在网上找了一个打印组件vue-print-nb 使用方式 安装 npm install vue-print-nb --save ...

  5. vue常用插件之打印功能、二维码插件、批量打印二维码

    vue实现打印的两种方法 vue实现批量打印二维码 (需安装二维码插件qrcodejs2) 一.vue-print-nb插件 1.安装: npm i vue-print-nb -S 2.全局注册(ma ...

  6. SNF开发平台WinForm之七-单据打印和使用说明-SNF快速开发平台3.3-Spring.Net.Framework

    8.1运行效果: 8.2开发实现: 1.  先要创建.grf报表模版,指定数据列.存储位置:Reports\Template文件夹下 2.  之后在程序当中查出数据,之后把数据和打印模版 传入方法进行 ...

  7. 生鲜配送管理系统_升鲜宝V2.0 小标签打印功能【代配送商品打印小标签功能】说明_15382353715

    小标签打印说明 小标签打印可以打印本系统的订单商品数量,也可以把外部的订单商品导入本系统进行打印. 打印本系统中的订单商品操作说明[上篇文章已经讲解相关的操作说明] 打印本系统之外的订单商品明细清单 ...

  8. 个人永久性免费-Excel催化剂功能第50波-批量打印、导出PDF、双面打印功能

    在倡导无纸化办公的今天,是否打印是一个碍眼的功能呢,某些时候的确是,但对于数据的留存,在现在鼓吹区块链技术的今天,仍然不失它的核心价值,数据报表.单据打印出来留存,仍然是一种不可或缺的数据存档和防篡改 ...

  9. 使用FastReport.net 报表在网页上实现打印功能

    这些年的工作当中,最早是在8年前接触到FastReport这个报表工具,从名字上来看,直译过来就是快速报表,正所谓天下武功,唯快不破,FastReport报表早些年确实是制作报表的不二之选,8年前的工 ...

  10. vue项目-打印页面中指定区域的内容(亲测有效!)

    关于打印整个页面的,没什么好说的.今天我给大家分享一个打印指定区域的方法,你想打印哪里,就打印哪里! 我也是刚刚开始接触打印这一块功能的,然后当然是找度娘深入了解了一番啦,期间试了网上的各种方法,有的 ...

随机推荐

  1. C#笔记 picturebox功能实现(滚动放大,拖动)

    代码链接 1. picturebox上的坐标与原图中坐标的转换 (1) 由于图片的长宽比例和picturebox的长宽比例不同,所以图片不想拉伸的话,左右或者上下会有留白.将picturebox的si ...

  2. python获取豆瓣电影TOP250的所有电影的相关信息

    参考文档:https://weread.qq.com/web/reader/37132a705e2b2f37196c138k98f3284021498f137082c2e 说明:我才接触网络爬虫,在看 ...

  3. (拼多多)pdd的Anti-Content

    声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 目标网站 aHR0cHM6 ...

  4. JS注释 JS变量

    <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8 ...

  5. while适用于不确定循环次数

      // 当前有一个随机数,是生成100-999的随机数值         // 需要生成数值666,需要知道循环了多少次,才生成的666这个数值         // 我们可以通过循环来实现     ...

  6. v-for 伪标签:template:

    根据一组数组或对象的选项列表进行渲染. v-for指令需要使用 (item,index) in 数组或对象 形式的特殊语法,同时还需要指定key值,key的作用在vue进行新旧数据比对渲染页面里,如果 ...

  7. 再谈中断机制(APIC)

    中断是硬件和软件交互的一种机制,可以说整个操作系统,整个架构都是由中断来驱动的.一个中断的起末会经历设备,中断控制器,CPU 三个阶段:设备产生中断信号,中断控制器翻译信号,CPU 来实际处理信号. ...

  8. JavaScript通过递归实现深拷贝

    思路 首先是用Object.prototype.toString.call(obj)来得到传入的值的类型,如果是几个基本类型,则直接返回值就可以了 如果是引用类型,则通过深拷贝函数递归进行再次拷贝. ...

  9. feildconfig

    <template> <div style="float:left;width: 100%"> <el-row> <el-col :spa ...

  10. DELL服务器安装racadm检测服务器硬件状态

    1.下载racadm命令 For Linux 7及以上版本: https://dl.dell.com/FOLDER07423496M/1/DellEMC-iDRACTools-Web-LX-10.1. ...