vue中使用window.print打印效果

项目要求

  • 打印每页有10行表格,如果接口数据没有十个显示10行

效果图

  • 第一页

  • 第二页

子组件

  1. <template>
  2. <div>
  3. <div class="print" :key="i" v-for="i in Len">
  4. <p class="print-title">打印页面</p>
  5. <div class="print-header">
  6. Lorem ipsum dolor sit amet consectetur adipisicing elit. Ratione officiis quaerat dolorem nesciunt error et fugit fuga molestias quas labore autem, eligendi eum rem alias quod possimus quae voluptatum? Id?
  7. </div>
  8. <div class="print-layout">
  9. 我是来占位置的
  10. </div>
  11. <ul class="print-table">
  12. <li class="first-li">
  13. <span>序号</span>
  14. <span>姓名</span>
  15. <span>性别</span>
  16. <span>年龄</span>
  17. <span>电话</span>
  18. <span>住址</span>
  19. </li>
  20. <li class="main-li" v-for="(item,index) in 10" :key="item">
  21. <span v-if="dataList[index+10*(i-1)]">{{item+(10*(i-1))}}</span>
  22. <span v-else></span>
  23. <span v-if="dataList[index+10*(i-1)]">{{dataList[index+10*(i-1)].name}}</span>
  24. <span v-else></span>
  25. <span v-if="dataList[index+10*(i-1)]">{{dataList[index+10*(i-1)].sex}}</span>
  26. <span v-else></span>
  27. <span v-if="dataList[index+10*(i-1)]">{{dataList[index+10*(i-1)].age}}</span>
  28. <span v-else></span>
  29. <span v-if="dataList[index+10*(i-1)]">{{dataList[index+10*(i-1)].phone}}</span>
  30. <span v-else></span>
  31. <span v-if="dataList[index+10*(i-1)]">{{dataList[index+10*(i-1)].address}}</span>
  32. <span v-else></span>
  33. </li>
  34. </ul>
  35. <div class="print-footer">
  36. 我是底部信息
  37. </div>
  38. </div>
  39. </div>
  40. </template>
  41. <script>
  42. export default {
  43. props: ['itemList'],
  44. data() {
  45. return {
  46. dataList: []
  47. }
  48. },
  49. computed:{
  50. Len(){
  51. if(this.dataList.length<=0) {
  52. return 1;
  53. }
  54. else{
  55. return Math.ceil(this.dataList.length/10.0);
  56. }
  57. }
  58. },
  59. created() {
  60. this.dataList = this.itemList || [];
  61. this.dataList=[...this.dataList];
  62. }
  63. }
  64. </script>
  65. <style lang="less">
  66. @media screen {
  67. .print {
  68. display: none;
  69. }
  70. }
  71. @media print {
  72. #app {
  73. display: none;
  74. }
  75. .print {
  76. display: block;
  77. }
  78. }
  79. * {
  80. margin: 0;
  81. padding: 0;
  82. }
  83. ul,li {
  84. list-style-type: none;
  85. }
  86. .print {
  87. page-break-before:always;
  88. width: 297mm;
  89. height: 209mm;
  90. padding: 24px 30px 0 30px;
  91. box-sizing: border-box;
  92. .print-title {
  93. font-size: 18px;
  94. }
  95. .print-header {
  96. height: 146px;
  97. padding-top: 15px;
  98. box-sizing: border-box;
  99. font-size: 14px;
  100. }
  101. .print-layout {
  102. height: 184px;
  103. border: 1px solid #45484d;
  104. box-sizing: border-box;
  105. font-size: 14px;
  106. }
  107. .print-table {
  108. height: 293px;
  109. margin-top: 5px;
  110. border: 1px solid #303339;
  111. box-sizing: border-box;
  112. li {
  113. height: 26px;
  114. border-bottom: 1px solid #dadadc;
  115. box-sizing: border-box;
  116. &:last-child {
  117. border-bottom: none;
  118. }
  119. span {
  120. display: inline-block;
  121. width: 16%;
  122. height: 26px;
  123. vertical-align: top;
  124. line-height: 26px;
  125. text-align: center;
  126. border-right: 1px solid #dadadc;
  127. box-sizing: border-box;
  128. color: #2b2e34;
  129. font-size: 12px;
  130. &:last-child {
  131. border-right: none;
  132. }
  133. }
  134. &.first-li {
  135. height: 30px;
  136. background: #bdbec0 !important;
  137. color: #2b2e34;
  138. span {
  139. height:30px;
  140. line-height: 30px;
  141. }
  142. }
  143. &.main-li {
  144. }
  145. }
  146. }
  147. .print-footer {
  148. height: 115px;
  149. font-size: 14px;
  150. padding-top: 10px;
  151. box-sizing: border-box;
  152. }
  153. }
  154. </style>

父组件

  1. <template>
  2. <div class="index">
  3. <button @click="handleClick">点击</button>
  4. <button @click="printClick">打印</button>
  5. <!-- 打印页面 -->
  6. <div v-if="printShow" >
  7. <Print :itemList="itemAjax" ref="printDom"></Print>
  8. </div>
  9. </div>
  10. </template>
  11. <script>
  12. import Print from '../components/print.vue';
  13. export default {
  14. data() {
  15. return{
  16. printShow: false,
  17. itemAjax: [
  18. {
  19. name: '杜二',
  20. sex: '女',
  21. age: '17',
  22. phone: 112365478961,
  23. address: '浙江'
  24. },
  25. {
  26. name: '张三',
  27. sex: '男',
  28. age: '18',
  29. phone: 112365478966,
  30. address: '上海'
  31. },
  32. {
  33. name: '李四',
  34. sex: '男',
  35. age: '38',
  36. phone: 112365478968,
  37. address: '南京'
  38. },
  39. {
  40. name: '王麻子',
  41. sex: '男',
  42. age: '28',
  43. phone: 112365478969,
  44. address: '苏州'
  45. },
  46. {
  47. name: '王大',
  48. sex: '女',
  49. age: '18',
  50. phone: 112365478970,
  51. address: '杭州'
  52. },
  53. {
  54. name: '杜二',
  55. sex: '女',
  56. age: '17',
  57. phone: 112365478971,
  58. address: '浙江'
  59. },
  60. {
  61. name: '张三',
  62. sex: '男',
  63. age: '18',
  64. phone: 112365458966,
  65. address: '上海'
  66. },
  67. {
  68. name: '李四',
  69. sex: '男',
  70. age: '38',
  71. phone: 112365878968,
  72. address: '南京'
  73. },
  74. {
  75. name: '王麻子',
  76. sex: '男',
  77. age: '28',
  78. phone: 112365978969,
  79. address: '苏州'
  80. },
  81. {
  82. name: '王大',
  83. sex: '女',
  84. age: '18',
  85. phone: 112365108970,
  86. address: '杭州'
  87. },
  88. {
  89. name: '杜二',
  90. sex: '女',
  91. age: '17',
  92. phone: 112365474971,
  93. address: '浙江'
  94. }
  95. ]
  96. }
  97. },
  98. methods: {
  99. handleClick() {
  100. alert('点击事件')
  101. },
  102. printClick(){
  103. this.printShow = true;
  104. this.$nextTick(()=>{
  105. const print = this.$refs.printDom.$el;
  106. document.body.appendChild(print);
  107. window.print();
  108. this.printShow = false;
  109. })
  110. }
  111. },
  112. components: {
  113. Print
  114. }
  115. }
  116. </script>

window.print打印方法实现的更多相关文章

  1. window.print() 打印页面部分内容的方法

    用 JavaScript 实现页面数据的打印 : 主要是用到了一个 print() 函数 , 该函数将会打印整个 web 页面 body 内的所有 html 数据 ! 使用方法为 window.pri ...

  2. 用window.print()打印指定div里面的内容(转载的)

    用window.print()打印指定div里面的内容 今天客户让添加个打印证照功能,直接用window.print()打印的是整个页面,而用以下方法就可以只打印证明了 <!--window.p ...

  3. 用window.print()打印指定div里面的内容

    用window.print()打印指定div里面的内容 今天客户让添加个打印证照功能,直接用window.print()打印的是整个页面,而用以下方法就可以只打印证明了 <!--window.p ...

  4. Web window.print() 打印

    web打印 window.print() 我只给出比较有效的,方便的打印方法,有些WEB打印是调用ActiveX控件的,这样就需要用户去修改自己IE浏览器的Internet选项里的安全里的Active ...

  5. window.print()打印页面指定内容(使用iframe保证原页面不失效)

    使用window.print()时会出现两个问题: (1)直接使用window.print() 打印的是整页内容-->无法实现打印指定区域 (2)打印时替换body中的内容,打印完成后再替换回来 ...

  6. window.print打印指定html元素中的内容

    通常有些时候我们项目过程中使用到打印功能,而wndow.print便是系统里提供的一个函数. 但是直接使用的话,它打印的将是整个页面的所有元素,而有些时候我们又只需要打印部分内容. <body& ...

  7. 用window.print()打印如何去掉页眉和页脚

    用window.print()打印如何去掉页眉和页脚 2007-07-12 11:44:52|  分类: javascript 知识|举报|字号 订阅     <script language= ...

  8. window.print()打印网页(一)

    有时候需要将网页内容打印到纸上,最简单的一种方法是用window对象的print方法. window.print()默认打印当前网页的所有部分.(除了背景,默认打印都是白底黑字,如果有特别的设置 要另 ...

  9. window.print打印指定div

    window.print可以打印网页,但有时候我们只希望打印特定控件或内容,怎么办呢? 首先我们可以把要打印的内容放在div中,然后用下面的代码进行打印. <html> <head& ...

随机推荐

  1. 【BZOJ1046】上升序列(动态规划,贪心)

    [BZOJ1046]上升序列(动态规划,贪心) 题面 BZOJ 洛谷 题解 我一开始看错题了,一度以为是字典序最小的序列. 最后发现它要求的字典序是位置的字典序最小. 那就很好办了. 设\(f[i]\ ...

  2. BZOJ 3143 游走 | 数学期望 高斯消元

    啊 我永远喜欢期望题 BZOJ 3143 游走 题意 有一个n个点m条边的无向联通图,每条边按1~m编号,从1号点出发,每次随机选择与当前点相连的一条边,走到这条边的另一个端点,一旦走到n号节点就停下 ...

  3. linux 第三周读书笔记-----第一二章 20135334赵阳林

    第一章 Linux内核简介 1.1 Unix的历史 由于Unix系统设计简洁并且在发布时提供源代码,所以许多其他组织和团体都对它进了进一步的开发. Unⅸ虽然已经使用了40年,但计算机科学家仍然认为它 ...

  4. interface思考练习一

    参考了这篇文章,博主超级优秀,看他的最好,我只是写了点自己看他的博文学到的东西.CSDNzdwzzu2006 接口这东西认真学是在第一次构建工程的时候,很晕菜,原来学SE时不扎实,导致东西都不会用,看 ...

  5. Tensorflow Object_Detection 目标检测 笔记

    Tensorflow models Code:https://github.com/tensorflow/models 编写时间:2017.7 记录在使用Object_Detection 中遇到的问题 ...

  6. C++ std::allocator<T> 与new对比效率使用

    基础知识通道:http://blog.csdn.net/Xiejingfa/article/details/50955295 C/C++: #include <iostream> #inc ...

  7. SSO基于cas的登录

    概念介绍 1.定义 CAS ( CentralAuthentication Service ) 是 Yale 大学发起的一个企业级的.开源的项目,旨在为 Web 应用系统提供一种可靠的单点登录解决方法 ...

  8. sqlalchemy多外键关联

    一.前言 如果有张表A的多个字段关联另一张表B的一个字段,就如同一个客户表的账单地址和发货地址,同时关联地址表中的id字段. 二.事例 # -*- coding: UTF-8 -*- from sql ...

  9. 总结: 《jQuery基础教程》 5-完结

    第5章:操作DOM HTML属性和DOM属性:attr()和prop() 获取表单控件的值:val() DOM操作方法的归纳: (1) 要在HTML中创建新元素,使用$()函数.(2) 要在每个匹配的 ...

  10. 转:Block原理及引用循环问题

    2010年WWDC发布iOS4时Apple对Objective-C进行了一次重要的升级:支持Block.说到底这东西就是闭包,其他高级语音例如Java和C++已有支持,第一次使用Block感觉满简单好 ...