printTable.vue 3.7 KB

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