当前位置:   article > 正文

【Vue】使用print.js插件实现打印预览功能,超简单_vue实现打印预览功能

vue实现打印预览功能

目录

一、实现效果

 二、实现步骤

【1】安装插件

【2】在需要打印的页面导入

【3】在vue文件中需要打印的部分外层套一层div,给div设置id。作为打印的区域

【4】在打印按钮上添加打印事件

【5】在methods中添加点击事件

三、完整代码


一、实现效果

 

 二、实现步骤

print.js插件,可以打印html、pdf、json数据等。

官网:https://printjs.crabbly.com/

【1】安装插件

npm install print-js --save

【2】在需要打印的页面导入

import print from 'print-js'

【3】在vue文件中需要打印的部分外层套一层div,给div设置id。作为打印的区域

  1. <el-table :data="showData" id="printBox" style="display: flex;">
  2. <el-table-column type="index" label="序号" width="180" align="center"></el-table-column>
  3. <el-table-column prop="adminname" label="账号" align="center"></el-table-column>
  4. <el-table-column label="权限" align="center">
  5. <template #default="{ row }">
  6. <el-tag v-if="row.role == 1" type="" effect="dark">
  7. 管理员
  8. </el-tag>
  9. <el-tag v-else-if="row.role == 2" type="warning" effect="dark">
  10. 超级管理员
  11. </el-tag>
  12. <el-tag v-else type="info" effect="dark">
  13. 未知
  14. </el-tag>
  15. </template>
  16. </el-table-column>
  17. <el-table-column label="操作" align="center">
  18. <template #default="{ row }">
  19. <el-button circle type="success" @click="editHandler(row)">
  20. <el-icon>
  21. <Edit></Edit>
  22. </el-icon>
  23. </el-button>
  24. <el-popconfirm title="你确定删除吗?" confirm-button-text="是" cancel-button-text="取消" @confirm="delHandler(row)">
  25. <template #reference>
  26. <el-button circle type="danger">
  27. <el-icon>
  28. <Delete></Delete>
  29. </el-icon>
  30. </el-button>
  31. </template>
  32. </el-popconfirm>
  33. </template>
  34. </el-table-column>
  35. </el-table>

【4】在打印按钮上添加打印事件

    <el-button type="primary" @click="printBox">打印</el-button>

【5】在methods中添加点击事件

必要的就是printable和bype

  1. methods: {
  2. printBox() {
  3. setTimeout(function () {
  4. print({
  5. printable: 'printBox',
  6. type: 'html',
  7. scanStyles: false,
  8. targetStyles: ['*']
  9. })
  10. }, 500)
  11. },
  12. }

三、完整代码

  1. <template>
  2. <el-breadcrumb class="breadcrumb" separator="/">
  3. <el-breadcrumb-item :to="{ path: '/layout' }">主页</el-breadcrumb-item>
  4. <el-breadcrumb-item>账号管理</el-breadcrumb-item>
  5. <el-breadcrumb-item>管理员列表</el-breadcrumb-item>
  6. </el-breadcrumb>
  7. <div>
  8. <!-- 按钮 -->
  9. <el-button type="primary" @click="openAdd">添加管理员</el-button>
  10. <el-button type="primary" @click="printBox">打印</el-button>
  11. <!-- 表格 -->
  12. <el-table :data="showData" id="printBox" style="display: flex;">
  13. <el-table-column type="index" label="序号" width="180" align="center"></el-table-column>
  14. <el-table-column prop="adminname" label="账号" align="center"></el-table-column>
  15. <el-table-column label="权限" align="center">
  16. <template #default="{ row }">
  17. <el-tag v-if="row.role == 1" type="" effect="dark">
  18. 管理员
  19. </el-tag>
  20. <el-tag v-else-if="row.role == 2" type="warning" effect="dark">
  21. 超级管理员
  22. </el-tag>
  23. <el-tag v-else type="info" effect="dark">
  24. 未知
  25. </el-tag>
  26. </template>
  27. </el-table-column>
  28. <el-table-column label="操作" align="center">
  29. <template #default="{ row }">
  30. <el-button circle type="success" @click="editHandler(row)">
  31. <el-icon>
  32. <Edit></Edit>
  33. </el-icon>
  34. </el-button>
  35. <el-popconfirm title="你确定删除吗?" confirm-button-text="是" cancel-button-text="取消" @confirm="delHandler(row)">
  36. <template #reference>
  37. <el-button circle type="danger">
  38. <el-icon>
  39. <Delete></Delete>
  40. </el-icon>
  41. </el-button>
  42. </template>
  43. </el-popconfirm>
  44. </template>
  45. </el-table-column>
  46. </el-table>
  47. <!-- 分页器 -->
  48. <div class="pagination">
  49. <el-pagination v-model:current-page="count" v-model:page-size="limitNum" :page-sizes="[1, 3, 5, 8]"
  50. layout="total, sizes, prev, pager, next, jumper" :total="allData.length" />
  51. </div>
  52. <!-- 抽屉 -->
  53. <el-drawer v-model="isShow">
  54. <template #header>
  55. <h4>{{ type }} 管理员</h4>
  56. </template>
  57. <template #default>
  58. <div>
  59. <el-form :model="form">
  60. <el-form-item label="账号" size="small">
  61. <el-input v-model="form.adminname">
  62. </el-input>
  63. </el-form-item>
  64. <el-form-item label="密码">
  65. <el-input v-model="form.password">
  66. </el-input>
  67. </el-form-item>
  68. <el-form-item label="角色">
  69. <el-select v-model="form.role">
  70. <el-option label="管理员" :value="1">
  71. </el-option>
  72. <el-option label="超级管理员" :value="2">
  73. </el-option>
  74. </el-select>
  75. </el-form-item>
  76. <el-form-item label="权限">
  77. <el-tree ref="treeRef" :data="treeData" show-checkbox default-expand-all node-key="path"
  78. :props="defaultProps" />
  79. </el-form-item>
  80. </el-form>
  81. </div>
  82. </template>
  83. <template #footer>
  84. <div style="flex:auto">
  85. <el-button @click="cancelClick">取消</el-button>
  86. <el-button type="primary" @click="confirmClick">确定</el-button>
  87. </div>
  88. </template>
  89. </el-drawer>
  90. </div>
  91. </template>
  92. <script>
  93. import print from 'print-js'
  94. import { formatRoutes } from "@/utils/tools"
  95. import { getAdminList, addAdmin, updataAdmin, delAdmin } from '@/apis/user'
  96. export default {
  97. data() {
  98. return {
  99. // 当前页码
  100. count: 1,
  101. // 每页显示条数
  102. limitNum: 3,
  103. // 所有管理员列表信息
  104. allData: [],
  105. // 管理员抽屉的数据
  106. form: {
  107. adminname: '',
  108. password: '',
  109. role: 1,
  110. },
  111. // 抽屉是否显示
  112. isShow: false,
  113. // 区别当前是添加管理员还是更新管理员
  114. type: '',
  115. // 树节点信息
  116. treeData: [],
  117. // 要显示的元素
  118. defaultProps: {
  119. children: 'children',
  120. label: function (data) {
  121. // label设置要显示的文字信息,lable的值可以是函数
  122. return data.meta.title
  123. }
  124. }
  125. };
  126. },
  127. watch: {
  128. isShow(value) {
  129. if (!value) {
  130. this.form = {}
  131. }
  132. this.$refs.treeRef?.setCheckedNodes([])
  133. }
  134. },
  135. computed: {
  136. showData() {
  137. return this.allData.slice((this.count - 1) * this.limitNum, this.count * this.limitNum)
  138. }
  139. },
  140. mounted() {
  141. this.getAllData(),
  142. this.treeData = formatRoutes(this.$router.getRoutes())
  143. },
  144. methods: {
  145. printBox() {
  146. setTimeout(function () {
  147. print({
  148. printable: 'printBox',
  149. type: 'html',
  150. scanStyles: false,
  151. targetStyles: ['*']
  152. })
  153. }, 500)
  154. },
  155. delHandler(row) {
  156. delAdmin({ adminid: row.adminid }).then(data => {
  157. this.getAllData()
  158. })
  159. },
  160. cancelClick() {
  161. this.isShow = false
  162. },
  163. confirmClick() {
  164. this.isShow = false
  165. // 获取表单数据和树形菜单数据,调用 添加、修改接口
  166. // getCheckedNodes,选中的节点的数据
  167. // 第一个false:选中父节点,字节点数据都获取
  168. // 第二个true:无论父节点有没有被选中,选中的子节点都能获取
  169. if (this.type == '添加') {
  170. addAdmin({
  171. ...this.form,
  172. checkedKeys: this.$refs.treeRef?.getCheckedNodes(false, true)
  173. }).then(res => {
  174. this.getAllData()
  175. })
  176. } else {
  177. updataAdmin({
  178. ...this.form,
  179. checkedKeys: this.$refs.treeRef?.getCheckedNodes(false, true)
  180. }).then(res => {
  181. this.getAllData()
  182. })
  183. }
  184. },
  185. // 获取所有管理员列表信息
  186. getAllData() {
  187. getAdminList().then(res => {
  188. console.log("管理员列表", res)
  189. this.allData = res.data
  190. this.count = 1
  191. })
  192. },
  193. editHandler(row) {
  194. this.type = '修改',
  195. this.isShow = true
  196. this.form = {
  197. adminname: row.adminname,
  198. password: row.password,
  199. role: row.role
  200. }
  201. },
  202. openAdd() {
  203. this.type = '添加',
  204. this.isShow = true
  205. }
  206. },
  207. };
  208. </script>
  209. <style lang="scss" scoped>
  210. .breadcrumb {
  211. margin-bottom: 25px;
  212. }
  213. .pagination {
  214. display: flex;
  215. justify-content: center;
  216. .el-pagination {
  217. margin: 10px;
  218. }
  219. }
  220. </style>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/105218
推荐阅读
相关标签
  

闽ICP备14008679号