• vue打印功能详解


    vue打印功能详解
    安装Print包
    npm install vue-print-nb --save
    main.js全局注册
    import Print from 'vue-print-nb'
    Vue.use(Print);
    
    使用
    用v-print指定需要打印的div容器,本次叫printTest。
    最好使用行内样式,使用组件库部分样式可能不能生成。
    
           <div id="printTest" >
               <p>锄禾日当午</p>
          <p>汗滴禾下土 </p>
          <p>谁知盘中餐</p>
          <p>粒粒皆辛苦</p>
        </div>
        <button v-print="'#printTest'">打印</button>
    我的项目代码(ant design of vue组件)
    <a-modal :title="`巡检单打印预览:${pollingListNO}`"
               v-model="show"
               :maskClosable="false"
               width="80%"
               :bodyStyle="bodyStyle"
               @cancel="handleCancel">
        <!-- <a-button key="back"
                  @click="handleCancel">取消</a-button>
        <a-button key="submit"
                  type="primary"
                  style="margin-left: 16px"
                  :loading="submitLoading"
                  @click="handleConfirm">打印</a-button>
        <a-divider /> -->
        <template v-if="!loading">
          <div id="printWrap"
               title="测试">
            <h6 style="font-size:24px;text-align: center;line-height:40px;">设备巡检单</h6>
            <div style="height:80px;">
              <div style="float:left;50%;"><span style="display:inline-block;100px">巡检单号:</span><span>{{ myInfo.pollingListNo||"" }}</span></div>
              <div style="float:left;50%;"><span style="display:inline-block;100px">派发时间:</span><span>{{ myInfo.distributionTime||"" }}</span></div>
              <div style="float:left;50%;"><span style="display:inline-block;100px">派发人:</span><span>{{ myInfo.distributionUserName||"" }}</span></div>
              <div style="float:left;50%;"><span style="display:inline-block;100px">完成期限:</span><span>{{ myInfo.pollingDeadline||"" }}</span></div>
              <div style="float:left;50%;"><span style="display:inline-block;100px">巡检人:</span><span>{{ myInfo.pollingUserName||"" }}</span></div>
              <div style="float:left;50%;"><span style="display:inline-block;100px">打印时间:</span><span>{{ printTime }}</span></div>
            </div>
            <!-- <a-table rowKey="id"
                    size="middle"
                    :bordered="true"
                    :columns="TableColumns"
                    :dataSource="myInfo.myCheckEquip"
                    :pagination="false"
                    :loading="loading">
              <template slot="deailResponse"
                        slot-scope="deailResponse, record">
                <span>{{ deailResponse.map((item,index)=>{return index+1+""+item.pollingItemName}).join("") }}</span>
              </template>
              <template slot="deailResponse"
                        slot-scope="deailResponse, record">
                <span>{{ deailResponse.map((item,index)=>{return index+1+""+item.pollingItemFunction}).join("") }}</span>
              </template>
            </a-table> -->
            <table style="100%;">
              <thead>
                <tr>
                  <th style="text-align:left;border:1px solid black;2%;">序号</th>
                  <th style="text-align:left;border:1px solid black;8%;">存放地点</th>
                  <th style="text-align:left;border:1px solid black;10%;">设备名称</th>
                  <th style="text-align:left;border:1px solid black;10%;">设备资产编号</th>
                  <th style="text-align:left;border:1px solid black;25%;">项目</th>
                  <th style="text-align:left;border:1px solid black;25%;">方法</th>
                  <th style="text-align:left;border:1px solid black;10%;">结果</th>
                  <th style="text-align:left;border:1px solid black;10%;">备注</th>
                </tr>
              </thead>
              <tbody>
                <template v-if="myInfo.myCheckEquip&&myInfo.myCheckEquip.length">
                  <tr v-for="(item,index) in myInfo.myCheckEquip"
                      :key="index">
                    <td style="text-align:left;border:1px solid black;4%;">{{ index+1 }}</td>
                    <td style="text-align:left;border:1px solid black;6%;">{{ item.location }}</td>
                    <td style="text-align:left;border:1px solid black;10%;">{{ item.equipmentName }}</td>
                    <td style="text-align:left;border:1px solid black;10%;">{{ item.equipmentAssetsNo }}</td>
                    <!-- <td style="text-align:left;border:1px solid black;25%;">{{ item.deailResponse&&item.deailResponse.length?item.deailResponse.map((deail,j)=>{return j+1+""+deail.pollingItemName}).join(""):"" }}</td> -->
                    <td style="text-align:left;border:1px solid black;25%;">
                      <template v-if="item.deailResponse&&item.deailResponse.length">
                        <span style="display: block;"
                              v-for="(detail,j) in item.deailResponse">{{ j+1+""+detail.pollingItemName+"" }}</span>
                      </template>
                      <template v-else>无</template>
                    </td>
                    <!-- <td style="text-align:left;border:1px solid black;25%;">{{ item.deailResponse&&item.deailResponse.length?item.deailResponse.map((deail,j)=>{return j+1+""+deail.pollingItemFunction}).join(""):"" }}</td> -->
                    <td style="text-align:left;border:1px solid black;25%;">
                      <template v-if="item.deailResponse&&item.deailResponse.length">
                        <span style="display: block;"
                              v-for="(detail,j) in item.deailResponse">{{ j+1+""+detail.pollingItemFunction+"" }}</span>
                      </template>
                      <template v-else>无</template>
                    </td>
                    <td style="text-align:left;border:1px solid black;10%;"></td>
                    <td style="text-align:left;border:1px solid black;10%;"></td>
                  </tr>
                </template>
              </tbody>
            </table>
          </div>
        </template>
        <template v-else>
          <div class="spin-wrap">
            <a-spin size="large" />
          </div>
        </template>
        <template slot="footer">
          <a-button key="back"
                    @click="handleCancel">取消</a-button>
          <a-button key="submit"
                    type="primary"
                    v-print="'#printWrap'">打印</a-button>
        </template>
      </a-modal>
    </template>
    <script>
    import moment from 'moment'
    import { TableColumns } from './index'
    import { printInfo } from '@/api/equipment/polling/myNowTask'
    import { Empty } from 'ant-design-vue'
    export default {
      props: ['visible', 'pollingListSn', 'pollingListNO', 'userSn'],
      data () {
        return {
          bodyStyle: {
            'max-height': '600px',
            'overflow': 'auto'
          },
          printTime: null,
          loading: false,
          TableColumns,
          myInfo: {
            myCheckEquip: []
          }
        }
      },
      computed: {
        show: {
          get: function () {
            return this.visible
          },
          set: function () { }
        }
      },
      watch: {
        visible (newVal, oldVal) {
          if (newVal) {
            if (this.pollingListSn) {
              this.getInfo()
              this.printTime = moment().format('YYYY-MM-DD HH:mm:ss')
            }
          }
        }
      },
      beforeCreate () {
        this.simpleImage = Empty.PRESENTED_IMAGE_SIMPLE
      },
      methods: {
        getInfo () {
          this.loading = true
          const { pollingListSn, userSn } = this
          printInfo({ pollingListSn, userSn }).then(res => {
            console.log('printInfo', res)
            this.myInfo = res
          }).finally(() => {
            this.loading = false
          })
        },
        handleCancel () {
          this.$emit('close')
        }
      }
    }
    </script>
    <style lang="less" scoped>
    .spin-wrap {
      text-align: center;
      border-radius: 4px;
      margin-bottom: 20px;
      padding: 30px 50px;
      margin: 20px 0;
    }
    </style>
  • 相关阅读:
    小程序历程
    关于两个字符串用加号连接
    关于数据类型的取值范围的理解
    求最小公倍数和最大公约数
    js关于两个字符串的加减乘除运算
    a:hover + 兄弟选择器(标签选择)失效的解决方法
    ul和li标签实现列表
    小图标的使用(插入icon图标)
    水平垂直居中
    【转】JMeter学习(三十七)Jmeter录制手机app脚本
  • 原文地址:https://www.cnblogs.com/xiadongqing/p/16068719.html
Copyright © 2020-2023  润新知