print.vue 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. <template>
  2. <ele-modal
  3. title="工艺流程卡"
  4. :visible.sync="QRvisible"
  5. v-if="QRvisible"
  6. width="70%"
  7. >
  8. <div id="printSection" style="font-family: 'Microsoft Yahei', Arial, sans-serif; font-size: 12px; background: #fff; padding: 10px; margin: 40px;">
  9. <div style="text-align: center; font-size: 16px; font-weight: bold; margin: 5px 0;">工艺流程卡</div>
  10. <table style="width: 100%; border-collapse: collapse; margin-bottom: 6px;">
  11. <tr>
  12. <td rowspan="4" style="border: 1px solid #000; padding: 3px 5px; vertical-align: middle; text-align: center; width: 90px; height: 120px;">
  13. <img :src="card.qrLeft" alt="二维码" style="width: 80px; height: 80px;" />
  14. </td>
  15. <td style="border: 1px solid #000; padding: 3px 5px; vertical-align: middle;">单号</td>
  16. <td style="border: 1px solid #000; padding: 3px 5px; vertical-align: middle;">{{ card.code }}</td>
  17. <td style="border: 1px solid #000; padding: 3px 5px; vertical-align: middle;">单据日期</td>
  18. <td style="border: 1px solid #000; padding: 3px 5px; vertical-align: middle;">{{ card.createDate }}</td>
  19. <td rowspan="4" style="border: 1px solid #000; padding: 3px 5px; vertical-align: middle; text-align: center; width: 90px; height: 120px;">
  20. <img :src="card.qrRight" alt="二维码" style="width: 80px; height: 80px;" />
  21. </td>
  22. </tr>
  23. <tr>
  24. <td style="border: 1px solid #000; padding: 3px 5px; vertical-align: middle;">编号</td>
  25. <td style="border: 1px solid #000; padding: 3px 5px; vertical-align: middle;">{{ card.productCode }}</td>
  26. <td style="border: 1px solid #000; padding: 3px 5px; vertical-align: middle;">存货名称</td>
  27. <td style="border: 1px solid #000; padding: 3px 5px; vertical-align: middle;">{{ card.productName }}</td>
  28. </tr>
  29. <tr>
  30. <td style="border: 1px solid #000; padding: 3px 5px; vertical-align: middle;">图号</td>
  31. <td style="border: 1px solid #000; padding: 3px 5px; vertical-align: middle;">{{ card.imgCode }}</td>
  32. <td style="border: 1px solid #000; padding: 3px 5px; vertical-align: middle;">计划开始时间</td>
  33. <td style="border: 1px solid #000; padding: 3px 5px; vertical-align: middle;">{{ card.planStartTime }}</td>
  34. </tr>
  35. <tr>
  36. <td style="border: 1px solid #000; padding: 3px 5px; vertical-align: middle;">计划结束时间</td>
  37. <td style="border: 1px solid #000; padding: 3px 5px; vertical-align: middle;">{{ card.planCompleteTime }}</td>
  38. <td colspan="2" style="border: 1px solid #000; padding: 3px 5px; vertical-align: middle;"></td>
  39. </tr>
  40. </table>
  41. <table style="width: 100%; border-collapse: collapse; margin-bottom: 8px;">
  42. <thead>
  43. <tr>
  44. <th rowspan="2" style="border: 1px solid #000; padding: 3px; text-align: center; font-weight: bold;">工序</th>
  45. <th colspan="4" style="border: 1px solid #000; padding: 3px; text-align: center; font-weight: bold;">数量</th>
  46. <th rowspan="2" style="border: 1px solid #000; padding: 3px; text-align: center; font-weight: bold;">品质验收</th>
  47. <th rowspan="2" style="border: 1px solid #000; padding: 3px; text-align: center; font-weight: bold;">交接签字</th>
  48. <th rowspan="2" style="border: 1px solid #000; padding: 3px; text-align: center; font-weight: bold;">备注</th>
  49. </tr>
  50. <tr>
  51. <th style="border: 1px solid #000; padding: 3px; text-align: center; font-weight: bold;">加工</th>
  52. <th style="border: 1px solid #000; padding: 3px; text-align: center; font-weight: bold;">发料</th>
  53. <th style="border: 1px solid #000; padding: 3px; text-align: center; font-weight: bold;">合格</th>
  54. <th style="border: 1px solid #000; padding: 3px; text-align: center; font-weight: bold;">报废</th>
  55. </tr>
  56. </thead>
  57. <tbody>
  58. <tr v-for="(row, idx) in card.printTaskCarDetail" :key="idx">
  59. <td style="border: 1px solid #000; padding: 3px; text-align: center;">{{ row.taskName }}</td>
  60. <td style="border: 1px solid #000; padding: 3px; text-align: center;">{{ row.formingNum }}</td>
  61. <td style="border: 1px solid #000; padding: 3px; text-align: center;">{{ row.formedNum }}</td>
  62. <td style="border: 1px solid #000; padding: 3px; text-align: center;">{{ row.qualified }}</td>
  63. <td style="border: 1px solid #000; padding: 3px; text-align: center;">{{ row.noQualifiedSum }}</td>
  64. <td style="border: 1px solid #000; padding: 3px; text-align: center;"></td>
  65. <td style="border: 1px solid #000; padding: 3px; text-align: center;"></td>
  66. <td style="border: 1px solid #000; padding: 3px; text-align: center;"></td>
  67. </tr>
  68. </tbody>
  69. </table>
  70. <el-row :gutter="16">
  71. <el-col :span="12"><div>制单人:{{ card.createUserName }}</div></el-col>
  72. <el-col :span="12"><div>审核人:</div></el-col>
  73. </el-row>
  74. <!-- 打印按钮 -->
  75. <!-- <div style="margin-top: 10px; display: block;">
  76. <button @click="doPrint">打印</button>
  77. </div> -->
  78. </div>
  79. <div slot="footer">
  80. <el-button @click="print">打印预览</el-button>
  81. <el-button @click="close">关闭</el-button>
  82. </div>
  83. </ele-modal>
  84. </template>
  85. <script>
  86. import { queryPrintV2 } from '@/api/produceOrder';
  87. import QRCode from 'qrcode';
  88. export default {
  89. name: 'print-dialog',
  90. data() {
  91. return {
  92. card: {
  93. qrLeft: '',
  94. qrRight: '',
  95. productCode: '',
  96. createDate: '',
  97. code: '',
  98. productName: '',
  99. imgCode: '',
  100. planStartTime: '',
  101. planCompleteTime: '',
  102. printTaskCarDetail: [],
  103. createUserName: '',
  104. auditor: '',
  105. page: 6,
  106. totalPages: 14,
  107. },
  108. printId: '',
  109. QRvisible: false
  110. };
  111. },
  112. mounted() {
  113. // this.doPrint();
  114. },
  115. methods: {
  116. open(ids) {
  117. console.log('ids~~~', ids);
  118. this.printId = ids[0]
  119. this.getData()
  120. this.QRvisible = true;
  121. },
  122. close() {
  123. this.QRvisible = false;
  124. },
  125. getData() {
  126. queryPrintV2({id: this.printId}).then(res => {
  127. console.log('queryPrintV2', res)
  128. if(res.length) {
  129. this.card = res[0]
  130. QRCode.toDataURL(this.printId)
  131. .then((url) => {
  132. this.card.qrLeft = url;
  133. this.card.qrRight = url;
  134. this.$forceUpdate();
  135. })
  136. .catch((err) => {
  137. console.error(err);
  138. });
  139. }
  140. }).catch(err => {
  141. console.log('err', err)
  142. })
  143. },
  144. print() {
  145. const printSection = document.getElementById('printSection');
  146. // 创建打印任务
  147. const printWindow = window.open('', '_blank');
  148. printWindow.document.open();
  149. printWindow.document.write('<html><head><title>打印预览</title>');
  150. printWindow.document.write(
  151. '<link rel="stylesheet" href="your-stylesheet-url.css" type="text/css" />'
  152. );
  153. printWindow.document.write('</head><body>');
  154. printWindow.document.write(printSection.innerHTML);
  155. printWindow.document.write('</body></html>');
  156. printWindow.document.close();
  157. printWindow.onload = function () {
  158. printWindow.print();
  159. };
  160. },
  161. doPrint() {
  162. this.$nextTick(() => {
  163. window.print();
  164. });
  165. }
  166. }
  167. };
  168. </script>