printTable.vue 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. <template>
  2. <div>
  3. <div v-for="(im, inx) in taData" :key="inx">
  4. <div style="width:100%;height:50px;text-align:center;line-height:50px;">
  5. {{ userName }}
  6. </div>
  7. <table class="printTable" border="1" style="table-layout: auto">
  8. <thead>
  9. <tr>
  10. <th
  11. v-for="(item, index) in tableHeader"
  12. :key="index"
  13. :style="{ minWidth: item.minWidth + 'px' }"
  14. >
  15. {{ item.label }}
  16. </th>
  17. </tr>
  18. </thead>
  19. <tbody>
  20. <tr v-for="(item, index) in im" :key="index">
  21. <td v-for="(itm, idx) in tableHeader" :key="idx">
  22. <span v-if="itm.value == 'iFas'">
  23. <span v-if="item.isFas == '0'">否</span>
  24. <span v-if="item.isFas == '1'">是</span>
  25. </span>
  26. <span v-if="itm.value == 'serial'"> {{ index + 1 }}</span>
  27. <span v-else> {{ item[itm.value] }}</span>
  28. </td>
  29. </tr>
  30. <tr>
  31. <td>合计</td>
  32. <td colspan="5">{{ chaseData(im) }}</td>
  33. <td>{{ amtNumber(im) }}</td>
  34. <td colspan="7"></td>
  35. </tr>
  36. </tbody>
  37. </table>
  38. <div class="fot-val">
  39. {{ tableLabel }}
  40. <br />
  41. <br />
  42. &nbsp; &nbsp; &nbsp; &nbsp;{{ time }}
  43. </div>
  44. <div style="page-break-after: always"></div>
  45. </div>
  46. </div>
  47. </template>
  48. <script>
  49. import { numberToChineseAmount } from "@/utils/utils";
  50. import moment from "moment";
  51. export default {
  52. components: {},
  53. data() {
  54. return {
  55. tableLabel: "",
  56. taData: [],
  57. userName: "",
  58. numBeroMount: "",
  59. time: ""
  60. };
  61. },
  62. props: {
  63. tableHeader: {
  64. type: Array,
  65. default: []
  66. },
  67. tableData: {
  68. type: Array,
  69. default: []
  70. }
  71. },
  72. methods: {
  73. paginData(arr, num) {
  74. let newArr = [];
  75. for (let i = 0; i < arr.length; ) {
  76. //注意:这里与for循环不太一样的是,没有i++
  77. newArr.push(arr.slice(i, (i += num)));
  78. }
  79. return newArr;
  80. },
  81. amtNumber(item) {
  82. let nub = 0;
  83. item.forEach(item => {
  84. nub += Number(item.amt);
  85. });
  86. let pasNub = parseFloat(nub.toFixed(4));
  87. return pasNub + "元";
  88. },
  89. chaseData(item) {
  90. let nub = 0;
  91. item.forEach(item => {
  92. nub += Number(item.amt);
  93. });
  94. let pasNub = parseFloat(nub.toFixed(4));
  95. let newNub = numberToChineseAmount(pasNub);
  96. return newNub;
  97. }
  98. },
  99. mounted() {
  100. let stopTime = moment(new Date()).format("YYYY-MM-DD");
  101. this.time = stopTime;
  102. this.userName =
  103. this.$route.query.branchName +
  104. "----" +
  105. this.$route.query.stmtPrd +
  106. "结算单";
  107. this.tableLabel = this.$store.state.user.username;
  108. let newData = this.paginData(this.tableData, 15);
  109. this.taData = newData;
  110. }
  111. };
  112. </script>
  113. <style scoped lang="scss">
  114. .printTable {
  115. width: 100%;
  116. border-collapse: collapse;
  117. border-spacing: 0px;
  118. tr {
  119. td {
  120. padding: 5px;
  121. border: 1px solid black;
  122. text-align: center;
  123. }
  124. th {
  125. padding: 3px;
  126. }
  127. }
  128. }
  129. </style>
  130. <style media="print" lang="scss">
  131. @media print {
  132. html {
  133. zoom: 75%;
  134. }
  135. @page {
  136. size: auto; /* 重置页面大小,避免出现空白页 */
  137. margin-top: 10mm; /* 取消页眉 */
  138. margin-left: 6mm; /* 取消默认的左右页边距 */
  139. margin-right: 45mm; /* 取消默认的左右页边距 */
  140. }
  141. }
  142. .fot-val {
  143. width: 100%;
  144. height: 100px;
  145. display: flex;
  146. align-items: center;
  147. justify-content: flex-end;
  148. padding-right: 50px;
  149. }
  150. </style>