vue3后台管理实现局部打印功能

最近在做一个后台管理系统,有个模块需要用到打印功能,想着直接使用浏览器自带的打印功能 ,也就是 window.print(),但是因为功能有局限性,会把整张网页都打印出来,而且我还需要保留原有的样式。所以这里使用到了 print-js这个插件。

下载 print-js
npm i print-js
引入此模块
import printJS from 'print-js'
要打印的页面的局部数据
<el-button color="#6b8fe2" plain size="small" @click="onPrint">打印</el-button >
<div ref="printContent" id="printContent">
    //我这里的数据是表格数据,内容是想要打印的内容,看大家的情况编辑,从这里开始
  <h3 class="word-caption">{{ ltableData.caption }}</h3>
  <span class="table-date" style="fontsize: 16px; lineheight: 40px">年 月 日</span>
  <table border="1px" class="word-table" style="textalign: center">
    <tr>
      <td class="word-td">{{ ltableData.tr1td1 }}</td>
      <td colspan="2" class="word-td1"></td>
      <td class="word-td">{{ ltableData.tr1td2 }}</td>
      <td colspan="2" class="word-td1"></td>
      <td rowspan="4">照片</td>
    </tr>
    <tr>
       <td class="word-td">{{ ltableData.tr2td1 }}</td>
       <td class="word-td2"></td>
       <td class="word-td">{{ ltableData.tr2td2 }}</td>
       <td class="word-td2"></td>
       <td class="word-td">{{ ltableData.tr2td3 }}</td>
       <td class="word-td2"></td>
     </tr>
     <tr>
       <td class="word-td"> {{ ltableData.tr3td1 }}</td>
       <td class="word-td2"></td>
       <td class="word-td">{{ ltableData.tr3td2 }}</td>
       <td class="word-td2"></td>
       <td class="word-td">{{ ltableData.tr3td3 }}</td>
       <td class="word-td2"></td>
     </tr>
     <tr>
        <td class="word-td">{{ ltableData.tr4td1 }}</td>
        <td colspan="2"></td>
        <td class="word-td">{{ ltableData.tr4td2 }}</td>
        <td colspan="2"></td>
     </tr>
     <tr>
        <td class="word-td">{{ ltableData.tr5td1 }}</td>
        <td></td>
        <td class="word-td">{{ ltableData.tr5td2 }}</td>
        <td></td>
        <td class="word-td">{{ ltableData.tr5td3 }}</td>
        <td colspan="2">√是&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
      </tr>
      <tr>
        <td class="word-td">{{ ltableData.tr6 }}</td>
        <td colspan="7" style="height: 100px"></td>
      </tr>
      <tr>
       	<td class="word-td">{{ ltableData.tr7 }}</td>
        <td colspan="7" style="height: 120px"></td>
      </tr>
      <tr>
        <td class="word-td">{{ ltableData.tr8 }}</td>
        <td colspan="7" style="height: 100px"></td>
      </tr>
      <tr>
        <td class="word-td">{{ ltableData.tr9 }}</td>
        <td colspan="7" style="height: 80px"></td>
      </tr>
  </table>
  //到这里结束
</div>
js代码

我这里的js用的是vue3组合式setup语法糖的写法

<script setup>
import { onMounted,reactive,ref } from "vue";
import printJS from "print-js";

// 打印内容与div标签绑定
const printContent = ref(null);
const ltableData = reactive({
  caption: "xxx社团报名表",
  tr1td1: "院系",
  tr1td2: "专业",
  tr2td1: "姓名",
  tr2td2: "性别",
  tr2td3: "籍贯",
  tr3td1: "政治面貌",
  tr3td2: "民族",
  tr3td3: "身高/体重",
  tr4td1: "联系方式",
  tr4td2: "电子邮箱",
  tr5td1: "第一意愿",
  tr5td2: "第二意愿",
  tr5td3: "是否接受调剂",
  tr6: "兴趣爱好/个人特长",
  tr7: "个人经历(参与过的社团经历、社会实践等)",
  tr8: "曾获得的奖项",
  tr9: "个人优势",
});
//打印按钮
const onPrint = () => {
  //获取元素
  const node = printContent.value;
  printJS({
    printable: node,
    type: "html",
    targetStyles: ["*"], //添加样式
  });
};
</script>
样式
<style lang="scss" scoped>
.newManager {
  margin-top: 15px;
  height: 100%;
  width: 100%;
  display: flex;
  .leftMain {
    position: relative;
    .card-title {
      margin-top: 10px;
    }
  }
  // overflow: auto;
  .rightMain {
    margin-left: 25px;
    margin-right: 15px;
    flex: 1;
    width: 100%;
    overflow: auto;
    .word-caption {
      font-size: 25px;
      text-align: center;
    }
    .word-table {
      width: 100%;
      text-align: center;
      margin-bottom: 200px;

      .word-td {
        width: 100px;
        height: 38px;
      }
      .word-td1 {
        width: 135px;
      }
      .word-td2 {
        width: 90px;
      }
    }
    .word-header {
      margin-bottom: 30px;
      display: flex;
      // float: right;
      flex-direction: row-reverse;
      // justify-content: space-between;
    }
  }
}

实现效果
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿珍敲code

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值