赞
踩
本文是基于vue3 进行写vue打印,vue2 只需要改动代码即可。
打印我使用的是vue3-print-nb,vue2也有对应的版本。
npm install vue3-print-nb --save
vue2 版本
npm install vue-print-nb --save
安装完毕后,在vue3中使用是在main.js中进行引入
-
- import print from 'vue3-print-nb'
- createApp(App).use(store).use(router)
- .use(ElementPlus)
- .use(print)
接着就是可以利用vue3-print-nb进行打印啦
我这里打印的数据是mock接口模拟的哦,大家自己也可以尝试着模拟数据过来
- <el-button v-print="printObj" >打印</el-button>
- // 利用v-print进行打印,printObj是一个方法
- <!-- 打印部分的内容,v-show用来控制显示与隐藏,必须要在id的外面上面写,如果在id中写,则打印的内容不生效 -->
- <div v-show='false'>
- <div id='printMe' >
- <!-- 打印的关键在与id,它是利用id进行查找内容进行打印 -->
- <div v-for="(item,index) in data1" :key="index" >
- <h2 style='text-align:center;'>文章列表</h2>
- <div id='text'>
- <span>姓名:{{item.name}}</span>
- <span>创建时间:{{item.creataAt}}</span>
- <span>价格:{{item.sale}}</span>
- </div>
- <span>描述:{{item.desc}}</span>
- <table align='center'>
- <tr>
- <td colspan="2">第一行</td>
- </tr>
- <tr>
- <td>活动名称:{{form1.name}}</td>
- <td>活动区域:{{form1.region}}</td>
- </tr>
- </table>
- <!-- 用来控制分页 -->
- <div style="page-break-after: always;"></div>
- </div>
- </div>
- </div>
script中的代码
- import { ref, onMounted } from 'vue'
- import { print1 } from '@/api/index.js'
- const form1 = ref({
- name: '',
- region: 'shanghai'
- })
- const printObj = ref({
- id: 'printMe', // 打印哪一部分的名字
- popTitle: 'good print' // 打印的标题
- })
- const data1 = ref([])
- const getprint1 = async () => {
- const res = await print1()
- if (res.data.code === 200) {
- data1.value = res.data.data.list
- }
- console.log(data1.value)
- }
- onMounted(() => {
- getprint1()
- })
打印的样式写法:一定不要 使用class 哦,可能在后续打包的过程中导致样式失效,可以使用media或者是行内样式来解决这个问题。
这里在style的上面,写media=‘printMe’ printMe就是你要打印的地方的名字是什么,然后根据id=printMe就可以设置它的样式。
- <style lang="scss" media='printMe' scoped>
- // 非打印部分的样式
- #uu{
- background-color:blue;
- }
- // 打印部分的样式
- #printMe {
- #text{
- width:100%;
- background-color:blue;
- display:flex;
- height:120px;
- flex-wrap: wrap;
- span{
- width:33.3%;
- align-self:center;
-
- }
- }
- table{
- text-align: center;
- width:50%;
- height:100px;
- border-collapse: collapse;
- }
- td{
- border:1px solid black;
-
- }
- #printMe ::-webkit-scrollbar {
- display: none; /* Chrome Safari */
- }
-
- }
- </style>
打印效果如下:
页面展示效果如下:
最后附上完整代码:
- <template>
- <div>
- <!-- 在页面中显示打印的内容 -->
- <div style='height:400px; overflow:auto;'>
- <div v-for="(item,index) in data1" :key="index" >
- <h2 style='text-align:center;'>文章列表</h2>
- <div id='text'>
- <span>姓名:{{item.name}}</span>
- <span>创建时间:{{item.creataAt}}</span>
- <span>价格:{{item.sale}}</span>
- </div>
- <span>描述:{{item.desc}}</span>
- <table align='center'>
- <tr>
- <td colspan="2">第一行</td>
- </tr>
- <tr>
- <td>活动名称:{{form1.name}}</td>
- <td>活动区域:{{form1.region}}</td>
- </tr>
- </table>
- </div>
- </div>
-
- <!-- 打印部分的内容,v-show用来控制显示与隐藏,必须要在id的外面上面写,如果在id中写,则打印的内容不生效 -->
- <div v-show='false'>
- <div id='printMe' >
- <!-- 打印的关键在与id,它是利用id进行查找内容进行打印 -->
- <div v-for="(item,index) in data1" :key="index" >
- <h2 style='text-align:center;'>文章列表</h2>
- <div id='text'>
- <span>姓名:{{item.name}}</span>
- <span>创建时间:{{item.creataAt}}</span>
- <span>价格:{{item.sale}}</span>
- </div>
- <span>描述:{{item.desc}}</span>
- <table align='center'>
- <tr>
- <td colspan="2">第一行</td>
- </tr>
- <tr>
- <td>活动名称:{{form1.name}}</td>
- <td>活动区域:{{form1.region}}</td>
- </tr>
- </table>
- <!-- 用来控制分页 -->
- <div style="page-break-after: always;"></div>
- </div>
- </div>
- </div>
- <el-button v-print="printObj" >打印</el-button>
-
- <div>
- <el-form ref="form" :model="form1" label-width="80px" id='uu'>
- <el-form-item label="活动名称">
- <el-input v-model="form1.name"></el-input>
- </el-form-item>
- <el-form-item label="活动区域">
- <el-select v-model="form1.region" placeholder="请选择活动区域">
- <el-option label="区域一" value="shanghai"></el-option>
- <el-option label="区域二" value="beijing"></el-option>
- </el-select>
- </el-form-item>
- </el-form>
- </div>
- </div>
- </template>
-
- <script setup>
- import { ref, onMounted } from 'vue'
- import { print1 } from '@/api/index.js'
- const form1 = ref({
- name: '',
- region: 'shanghai'
- })
- const printObj = ref({
- id: 'printMe', // 打印哪一部分的名字
- popTitle: 'good print' // 打印的标题
- })
- const data1 = ref([])
- const getprint1 = async () => {
- const res = await print1()
- if (res.data.code === 200) {
- data1.value = res.data.data.list
- }
- console.log(data1.value)
- }
- onMounted(() => {
- getprint1()
- })
- </script>
-
- <style lang="scss" media='printMe' scoped>
- // 非打印部分的样式
- #uu{
- background-color:blue;
- }
- // 打印部分的样式
- #printMe {
- #text{
- width:100%;
- background-color:blue;
- display:flex;
- height:120px;
- flex-wrap: wrap;
- span{
- width:33.3%;
- align-self:center;
-
- }
- }
- table{
- text-align: center;
- width:50%;
- height:100px;
- border-collapse: collapse;
- }
- td{
- border:1px solid black;
-
- }
- #printMe ::-webkit-scrollbar {
- display: none; /* Chrome Safari */
- }
-
- }
- </style>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。