最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue實現(xiàn)表格打印功能

 更新時間:2024年01月17日 11:38:28   作者:bug愛好者  
常見的打印有JavaScript打印、jQuery、vue打印,這里主要講述vue使用vue-print-nb進行打印,廢話不多說,直接手摸手上代碼,感興趣的朋友可以參考下

實際效果圖展示:

數(shù)據(jù)結(jié)構(gòu):

安裝依賴

npm install vue-print-nb --save

頁面引用

import print from 'vue-print-nb'

父組件DOM

<div class="table-manage-20">
  <!-- 標(biāo)題欄 -->
  <llsTitleBox title="打印功能" :back="false">
    <template slot="button">
      <llsButton type="primary" @click="batchPrintHandle">打印</llsButton>
      
      // directives自定義print事件,目的:
         1. 取代將print在man.js全局注入(Vue.use(Print))
         2. 當(dāng)點擊打印按鈕后,會將打印列表printObj對象進行賦值,此時就會打開打印列表組件,取代將打印列表組件進行傳統(tǒng)的顯示影藏操作
      <llsButton type="primary" ref="printBtn" v-show="false" v-print="printObj"></llsButton>
    </template>
  </llsTitleBox>
  <!-- 表格 -->
  <div style="padding:0 15px;">
    <lls-table :max-height="tableHeight" :data="tableList" @selection-change="handleSelectionChange">
    <lls-table-column type="selection" width="55"></lls-table-column>
    <lls-table-column type="index" label="序號" width="50"></lls-table-column>
    <lls-table-column prop="assetNo" min-width="180" label="編號"></lls-table-column>
    <lls-table-column prop="assetId" min-width="180" label="數(shù)字證編號"></lls-table-column>
    <lls-table-column prop="coreCompanyName" min-width="200" label="企業(yè)"></lls-table-column>
    <lls-table-column prop="amount" min-width="150" :formatter="formatMoney" align="right" label="金額(元)"></lls-table-column>
    <lls-table-column prop="operateTime" label="操作"  width="60" fixed="right">
      <template v-slot:default="{ row }">
         <div class="table-btn" @click="printHandle([row])">打印</div>
      </template>
    </lls-table-column>
  </lls-table>
  // 打印列表組件
  <div class="hide">
     // 打印區(qū)域組件上需要加id="printContent",與打印組件綁定
     <div id="printContent">
       // page-break-after:always:設(shè)置在表格元素之后始終進行分頁的分頁行為:在元素后插入分頁符,原因:當(dāng)一頁表格內(nèi)容放不下的情況不會進行分頁,內(nèi)容會被截斷,此樣式可以解決該問題
       // printList:為當(dāng)前全選或單選的對象,該數(shù)據(jù)將會填充打印表格的結(jié)構(gòu)數(shù)據(jù)
       <printTemplate style="page-break-after:always" v-for="(item, index) in printList" :baseData="item" :key="index"></printTemplate>
     </div>
   </div>

父組件js代碼

<script>
  import print from 'vue-print-nb'
  import printTemplate from './printTemplate.vue'
  export default {
    components: {
      printTemplate
    },
    // 自定義print指令,頁面中v-print使用,觸發(fā)打印插件
    directives: {
      print   
    },
    data() {
        return {
            tableHeight: "400px",
            tableList: [], //表格數(shù)據(jù)對象
            multipleSelection: [],
            printList: [],
            // 打印對象
            printObj: {
            id: "printContent",
          }
        };
    },
    mounted() {
        this.$nextTick(() => {
            // 整個視圖高度
            let screenHeight = document.body.offsetHeight;
            // 查詢組件DOM,視項目情況而定(搜索組件高度)
            let searchBarHeight = this.$refs.searchBar.clientHeight;
            let dataContent = screenHeight - 44 * 2 - searchBarHeight - 50;
            this.tableHeight = `${dataContent}px`;
        });
    },
    methods: {
        // 全選單選事件
        handleSelectionChange(val) {
          this.multipleSelection = val;
        },
        // 打印按鈕
        batchPrintHandle() {
          if(!this.multipleSelection.length) {
            return this.$message.error("請先選擇數(shù)據(jù)!");
          } else {
            this.printHandle(this.multipleSelection)
          }
        },
        printHandle(printList) {
            // 將數(shù)據(jù)重新拷貝解構(gòu)賦值,打印列表數(shù)據(jù)
            this.printList = [...printList]
            this.$nextTick(() => {
                // 獲取打印按鈕DOM結(jié)構(gòu)
                const btnEl = this.$refs.printBtn.$el
                // 對打印按鈕自定義click事件
                const clickEvent = new MouseEvent('click')
                // dispatchEvent原生觸發(fā)自定義click事件,打開打印組件
                btnEl.dispatchEvent(clickEvent)
            })
        },

父組件樣式代碼

.hide {
  width: 0; height: 0; overflow: hidden;
}

printTemplate子組件DOM

<template>
  <div class="print-wrapper">
    <div class="print-title">打印表單</div>
    <div class="print-table-wrapper">
        <table border="1" cellspacing="0" cellpadding="0"  class="print-table">
        <tr>
          <td colspan="4">基本信息:</td>
        </tr>
        <tr>
          <td class="label">客戶名稱</td>
          <td colspan="3">{{baseData.sedCompanyName}}</td>
        </tr>
        <tr>
          <td class="label">企業(yè)名稱</td>
          <td colspan="3">{{baseData.coreCompanyName}}</td>
        </tr>
        <tr>
          <td class="label">金額(元)</td>
          <td >{{baseData.realAmount | formatMoney}}</td>
          <td class="label">期限(天)</td>
          <td>{{baseData.loanTerm }}</td>
        </tr>
        <tr>
        <td class="label">費率(%)</td>
          <td colspan="3">{{baseData.interestRate}}</td>
        </tr>
        <tr>
          <td class="label">應(yīng)收款(元)</td>
          <td colspan="3">{{baseData.amount | formatMoney}}</td>
        </tr>
        <tr>
          <td class="label">編號</td>
          <td colspan="3">{{baseData.assetId}}</td>
        </tr>
        <tr>
          <td class="label">客戶收款銀行</td>
          <td colspan="3">{{baseData.toBankName}}</td>
        </tr>
        <tr>
          <td class="label">客戶收款賬戶名</td>
          <td colspan="3">{{baseData.toName}}</td>
        </tr>
        <tr>
          <td class="label">客戶收款賬號</td>
          <td colspan="3">{{baseData.toAccount}}</td>
        </tr>
        <tr>
            <td class="label">卡號</td>
          <td colspan="3">{{baseData.unitedBankNumber}}</td>
        </tr>
        <tr>
          <td colspan="4" class="label">處理意見:</td>
        </tr>
        <tr v-for="(item, index) in baseData.approveLogs" :key="index">
          <td class="label">{{item.name | sliceSuffix}}</td>
          <td colspan="3">{{item.approveResultName}}&nbsp;&nbsp; {{item.approveTime}}&nbsp;&nbsp; {{item.assignee}}&nbsp;&nbsp; {{item.approvalOpinions}}</td>
        </tr>
      </table>
    </div>
  </div>
</template>

printTemplate子組件 js

export default {
  name: 'printTemplate',
  props: {
    baseData: {
      type: Object,
      default: () => {}
    }
  },
  // js過濾器方法
  filters: {
    // 上面本是負責(zé)人審批,由于項目需求,需要將審批字段去掉,自己項目視情況而定
    sliceSuffix(name) {
      // endsWith() 是一種字符串方法,用于確定字符串是否以特定的字符序列結(jié)尾。返回一個布爾值
      return name.endsWith('審批') ? name.slice(0, -2) : name
    },
    
    // 金額格式化,格式化效果見頂端需求實現(xiàn)圖
    formatMoney(value) {
      value = Number(value).toFixed(2);
      const index = value.indexOf('.');
      if (index != -1) {
          var decimalPart = value.substring(0, index);
          var pointPart = value.substring(index + 1);
          decimalPart = decimalPart.replace(/(\d)(?=(?:\d{3})+$)/g, '$1,');    // 整數(shù)部分做格式化
          value = decimalPart + "." + pointPart;
      } else {
          value = value.replace(/(\d)(?=(?:\d{3})+$)/g, '$1,');
      }
      return value
    }
  },

3.printTemplate子組件樣式

<style lang="scss" scoped>
// 解決el-table表格內(nèi)容過多,打印不全問題
@page {
  size: auto;
  margin: 3mm;
}
.print-wrapper {
  padding:0 20px;
  .print-title {
    text-align: center;
    font-size: 20px;
    line-height: 40px;
    font-weight: bold;
    margin-bottom: 20px;
    
  }
  .print-table-wrapper {
    border: 1px solid #000;
    padding: 3px;
    margin-bottom: 20px;
    .print-table {
      width: calc(100% - 3px);
      border-collapse: collapse;
      border: 3px solid #000;
      td {
        height: 40px;
        padding: 0 10px;
        border: 1px solid #333;
        color: #333;
        &.label {
          width: 180px;
        }
      }
    }
  }
}
</style>

注意事項:

該打印列表為表格數(shù)據(jù)打印,如果為其他需求打印,該方法將不再適用,請參考指令 v-print="print",print的配置對象參數(shù):

print: {
    id: 'printArea',
    popTitle: '打印', // 打印配置頁上方標(biāo)題
    extraHead: '', //最上方的頭部文字,附加在head標(biāo)簽上的額外標(biāo)簽,使用逗號分隔
    preview: '', // 是否啟動預(yù)覽模式,默認是false(開啟預(yù)覽模式,可以先預(yù)覽后打?。?
    previewTitle: '', // 打印預(yù)覽的標(biāo)題(開啟預(yù)覽模式后出現(xiàn)),
    previewPrintBtnLabel: '', // 打印預(yù)覽的標(biāo)題的下方按鈕文本,點擊可進入打?。ㄩ_啟預(yù)覽模式后出現(xiàn))
    zIndex: '', // 預(yù)覽的窗口的z-index,默認是 20002(此值要高一些,這涉及到預(yù)覽模式是否顯示在最上面)   
    previewBeforeOpenCallback() {}, //預(yù)覽窗口打開之前的callback(開啟預(yù)覽模式調(diào)用)
    previewOpenCallback() {}, // 預(yù)覽窗口打開之后的callback(開啟預(yù)覽模式調(diào)用)
    beforeOpenCallback() {}, // 開啟打印前的回調(diào)事件
    openCallback() {}, // 調(diào)用打印之后的回調(diào)事件
    closeCallback() {}, //關(guān)閉打印的回調(diào)事件(無法確定點擊的是確認還是取消)
    url: '',
    standard: '',
    extraCss: '',
    },

以上就是vue實現(xiàn)表格打印功能的詳細內(nèi)容,更多關(guān)于vue表格打印的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • vue cli4中mockjs在dev環(huán)境和build環(huán)境的配置詳情

    vue cli4中mockjs在dev環(huán)境和build環(huán)境的配置詳情

    這篇文章主要介紹了vue cli4中mockjs在dev環(huán)境和build環(huán)境的配置詳情,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • element-ui組件table實現(xiàn)自定義篩選功能的示例代碼

    element-ui組件table實現(xiàn)自定義篩選功能的示例代碼

    這篇文章主要介紹了element-ui組件table實現(xiàn)自定義篩選功能的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • vue3中nextTick()應(yīng)用實例詳解

    vue3中nextTick()應(yīng)用實例詳解

    這篇文章主要給大家介紹了關(guān)于vue3中nextTick()應(yīng)用的相關(guān)資料,nextTick()等待下一次DOM更新刷新的工具方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-12-12
  • 詳解基于Vue cli開發(fā)修改外部組件Vant默認樣式

    詳解基于Vue cli開發(fā)修改外部組件Vant默認樣式

    這篇文章主要介紹了詳解基于Vue cli開發(fā)修改外部組件Vant默認樣式,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • element-ui表格數(shù)據(jù)轉(zhuǎn)換的示例代碼

    element-ui表格數(shù)據(jù)轉(zhuǎn)換的示例代碼

    這篇文章主要介紹了element-ui表格數(shù)據(jù)轉(zhuǎn)換的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • 4種方案帶你探索Vue代碼復(fù)用的前世今生

    4種方案帶你探索Vue代碼復(fù)用的前世今生

    我們所熟知的Vue.js也在如何提取公共代碼復(fù)用方面也一直在探索優(yōu)化,本文小編就來和各位聊聊Vue.js代碼復(fù)用的前世今生,希望對大家學(xué)習(xí)Vue有一定的幫助
    2023-05-05
  • vue3?ref獲取組件實例詳細圖文教程

    vue3?ref獲取組件實例詳細圖文教程

    在Vue3中可以使用ref函數(shù)來創(chuàng)建一個響應(yīng)式的變量,通過將ref函數(shù)應(yīng)用于一個組件實例,我們可以獲取到該組件的實例對象,這篇文章主要給大家介紹了關(guān)于vue3?ref獲取組件實例的詳細圖文教程,需要的朋友可以參考下
    2023-10-10
  • Vue3全局組件注冊的實現(xiàn)代碼

    Vue3全局組件注冊的實現(xiàn)代碼

    在這篇文章中,我們將學(xué)習(xí)一下 Vue3 的全局組件注冊是如何實現(xiàn)的,文中通過代碼示例給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-12-12
  • Vue頁面渲染中key的應(yīng)用實例教程

    Vue頁面渲染中key的應(yīng)用實例教程

    這篇文章主要給大家介紹了關(guān)于Vue頁面渲染中key的應(yīng)用的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Vue 3.0的attribute強制行為理解學(xué)習(xí)

    Vue 3.0的attribute強制行為理解學(xué)習(xí)

    這篇文章主要為大家介紹了Vue 3.0的attribute強制行為理解學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08

最新評論

晋州市| 佳木斯市| 西昌市| 六盘水市| 曲麻莱县| 嵩明县| 崇礼县| 丰城市| 万源市| 景东| 凌源市| 石棉县| 荣昌县| 浑源县| 抚松县| 扬中市| 剑川县| 武强县| 黄骅市| 大埔区| 辽源市| 精河县| 繁峙县| 巩留县| 遂宁市| 海晏县| 高要市| 抚远县| 灵丘县| 邻水| 孟州市| 安康市| 冕宁县| 蒙城县| 西贡区| 霍林郭勒市| 赤水市| 湖州市| 临夏市| 昌宁县| 巢湖市|