printlist.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530
  1. <template>
  2. <div class="printcontent">
  3. <div class="table-box">
  4. <button @click="PrintRow">打印</button>
  5. <div id="show-table" >
  6. <table cellspacing="0" cellpadding="0">
  7. <thead>
  8. <tr>
  9. <td colspan="23" style="border: 0;">
  10. <div class="table-header">
  11. <img class="left-img" :src="$store.state.ip + showTable.logo" alt="">
  12. <h1 class="table-title">{{showTable.title}}</h1><img class="right-img1" :src='$store.state.ip + showTable.right_logo1' alt=""><img class="right-img2" :src='$store.state.ip + showTable.right_logo2' alt="">
  13. </div>
  14. </td>
  15. </tr>
  16. <tr>
  17. <td colspan="23">
  18. <p style="text-align: left;padding-left: 20px;"><span class="part_content"
  19. style="font-size:16px;margin-right:40px">{{showTable.part_content}}</span><span class="custom">{{showTable.custom}}</span></p>
  20. </td>
  21. </tr>
  22. <tr class="header">
  23. <td rowspan="2">
  24. <p>序号</p>
  25. </td>
  26. <td rowspan="2">
  27. <p style="width:80px ;">位置</p>
  28. </td>
  29. <td rowspan="2">
  30. <p style="width:80px ;">材质</p>
  31. </td>
  32. <td rowspan="2">
  33. <p style="width:80px ;">型号</p>
  34. </td>
  35. <td rowspan="2">
  36. <p style="width:80px ;">工艺</p>
  37. </td>
  38. <td rowspan="2">
  39. <p style="width:80px ;">木皮/颜色</p>
  40. </td>
  41. <td>
  42. <p>门洞尺寸(MM)</p>
  43. </td>
  44. <td>
  45. <p>门扇尺寸(MM)</p>
  46. </td>
  47. <td>
  48. <p>门套尺寸(MM)</p>
  49. </td>
  50. <td rowspan="2">
  51. <p>数量</p>
  52. </td>
  53. <td rowspan="2">
  54. <p>单位</p>
  55. </td>
  56. <td>
  57. <p>平方</p>
  58. </td>
  59. <td rowspan="2">
  60. <p>单价</p>
  61. </td>
  62. <td rowspan="2">
  63. <p>附加</p>
  64. </td>
  65. <td rowspan="2">
  66. <p>金额</p>
  67. </td>
  68. <td rowspan="2">
  69. <p>备注</p>
  70. </td>
  71. </tr>
  72. <tr class="header">
  73. <td>
  74. <p>高*宽*厚度</p>
  75. </td>
  76. <td>
  77. <p>高*宽*厚度</p>
  78. </td>
  79. <td>
  80. <p>高*宽*厚度</p>
  81. </td>
  82. <td>
  83. <p>米</p>
  84. </td>
  85. </tr>
  86. </thead>
  87. <tbody class="content">
  88. <tr v-for="(item,index) in showTableContentStr" :key="index">
  89. <td>
  90. <p>{{item.sort}}</p>
  91. </td>
  92. <td>
  93. <p>{{item.postion}}</p>
  94. </td>
  95. <td>
  96. <p>{{item.process}}</p>
  97. </td>
  98. <td>
  99. <p>{{item.model}}</p>
  100. </td>
  101. <td>
  102. <p>{{item.workmanship}}</p>
  103. </td>
  104. <td>
  105. <p>{{item.color}}</p>
  106. </td>
  107. <td>
  108. <p>{{item.measure1}}</p>
  109. </td>
  110. <td>
  111. <p>{{item.measure2}}</p>
  112. </td>
  113. <td>
  114. <p>{{item.measure3}}</p>
  115. </td>
  116. <td>
  117. <p>{{item.num}}</p>
  118. </td>
  119. <td>
  120. <p>{{item.unit}}</p>
  121. </td>
  122. <td>
  123. <p>{{item.square}}</p>
  124. </td>
  125. <td>
  126. <p>{{item.unit_price}}</p>
  127. </td>
  128. <td>
  129. <p>{{item.ext}}</p>
  130. </td>
  131. <td>
  132. <p>{{item.price}}</p>
  133. </td>
  134. <td>
  135. <p>{{item.remark}}</p>
  136. </td>
  137. </tr>
  138. </tbody>
  139. <tfoot>
  140. <tr>
  141. <td class="amount-index" align="center">{{showTable.list.length + 1}}</td>
  142. <td colspan="11"></td>
  143. <td colspan="2">合计:</td>
  144. <td class="xt_total">{{showTable.foot.xt_total}}</td>
  145. <td></td>
  146. </tr>
  147. <tr>
  148. <td colspan="12" class="remark" style="padding-left: 20px;">{{showTable.foot.remark}}</td>
  149. <td colspan="2">返点:</td>
  150. <td class="return">{{showTable.foot.return}}</td>
  151. <td></td>
  152. </tr>
  153. <tr>
  154. <td colspan="12" class="remark1" style="padding-left: 20px;">{{showTable.foot.remark1}}</td>
  155. <td colspan="2">尾款:</td>
  156. <td class="end_price">{{showTable.foot.end_price}}</td>
  157. <td></td>
  158. </tr>
  159. <tr>
  160. <td colspan="16" style="padding-left: 20px;">
  161. <p class="amount_detail" style="height: 24px;">{{showTable.foot.amount_detail}}</p>
  162. </td>
  163. </tr>
  164. <tr>
  165. <td colspan="16" class="order_info" style="padding-left: 20px;">客户备注:<span
  166. class="customer_remark">{{showTable.foot.customer_remark}}</span>订货日期:<span class="crt_time">{{showTable.foot.crt_time}}</span>交货日期:<span
  167. class="end_time">{{showTable.foot.end_time}}</span>业务经理:<span class="saleman">{{showTable.foot.saleman}}</span>制单人:<span
  168. class="crt_id">{{showTable.foot.crt_id}}</span>审核:<span class="oa">{{showTable.foot.oa}}</span>客户确认:<span class="is_confirm">{{showTable.foot.is_confirm}}</span></td>
  169. </tr>
  170. </tfoot>
  171. </table>
  172. </div>
  173. <div class="print-table" ref="print">
  174. <table cellspacing="0" cellpadding="0" v-for="(item,index) in newArr" :key="index" class="print-cell">
  175. <thead>
  176. <tr>
  177. <td colspan="23" style="border: 0;">
  178. <div class="table-header">
  179. <img class="left-img" :src='showTable.logo' alt="">
  180. <h1 class="table-title">{{showTable.title}}</h1><img class="right-img1" :src='showTable.right_logo1' alt=""><img class="right-img2" :src='showTable.right_logo2' alt="">
  181. </div>
  182. </td>
  183. </tr>
  184. <tr>
  185. <td colspan="23">
  186. <p style="text-align: left;padding-left: 20px;"><span class="part_content"
  187. style="font-size:16px;margin-right:40px">{{showTable.part_content}}</span><span class="custom">{{showTable.custom}}</span></p>
  188. </td>
  189. </tr>
  190. <tr class="header">
  191. <td rowspan="2">
  192. <p>序号</p>
  193. </td>
  194. <td rowspan="2">
  195. <p style="width:80px ;">位置</p>
  196. </td>
  197. <td rowspan="2">
  198. <p style="width:80px ;">材质</p>
  199. </td>
  200. <td rowspan="2">
  201. <p style="width:80px ;">型号</p>
  202. </td>
  203. <td rowspan="2">
  204. <p style="width:80px ;">工艺</p>
  205. </td>
  206. <td rowspan="2">
  207. <p style="width:80px ;">木皮/颜色</p>
  208. </td>
  209. <td>
  210. <p>门洞尺寸(MM)</p>
  211. </td>
  212. <td>
  213. <p>门扇尺寸(MM)</p>
  214. </td>
  215. <td>
  216. <p>门套尺寸 (MM)</p>
  217. </td>
  218. <td rowspan="2">
  219. <p>数量</p>
  220. </td>
  221. <td rowspan="2">
  222. <p>单位</p>
  223. </td>
  224. <td>
  225. <p>平方</p>
  226. </td>
  227. <td rowspan="2">
  228. <p>单价</p>
  229. </td>
  230. <td rowspan="2">
  231. <p>附加</p>
  232. </td>
  233. <td rowspan="2">
  234. <p>金额</p>
  235. </td>
  236. <td rowspan="2">
  237. <p>备注</p>
  238. </td>
  239. </tr>
  240. <tr class="header">
  241. <td>
  242. <p>高*宽*厚度</p>
  243. </td>
  244. <td>
  245. <p>高*宽*厚度</p>
  246. </td>
  247. <td>
  248. <p>高*宽*厚度</p>
  249. </td>
  250. <td>
  251. <p>米</p>
  252. </td>
  253. </tr>
  254. </thead>
  255. <tbody class="content" >
  256. <tr v-for="(_item,_index) in item" :key="_index">
  257. <td>
  258. <p>{{_item.sort}}</p>
  259. </td>
  260. <td>
  261. <p>{{_item.postion}}</p>
  262. </td>
  263. <td>
  264. <p>{{_item.process}}</p>
  265. </td>
  266. <td>
  267. <p>{{_item.model}}</p>
  268. </td>
  269. <td>
  270. <p>{{_item.workmanship}}</p>
  271. </td>
  272. <td>
  273. <p>{{_item.color}}</p>
  274. </td>
  275. <td>
  276. <p>{{_item.measure1}}</p>
  277. </td>
  278. <td>
  279. <p>{{_item.measure2}}</p>
  280. </td>
  281. <td>
  282. <p>{{_item.measure3}}</p>
  283. </td>
  284. <td>
  285. <p>{{_item.num}}</p>
  286. </td>
  287. <td>
  288. <p>{{_item.unit}}</p>
  289. </td>
  290. <td>
  291. <p>{{_item.square}}</p>
  292. </td>
  293. <td>
  294. <p>{{_item.unit_price}}</p>
  295. </td>
  296. <td>
  297. <p>{{_item.ext}}</p>
  298. </td>
  299. <td>
  300. <p>{{_item.price}}</p>
  301. </td>
  302. <td>
  303. <p>{{_item.remark}}</p>
  304. </td>
  305. </tr>
  306. </tbody>
  307. <tfoot>
  308. <tr>
  309. <td class="amount-index" align="center">{{showTable.list.length + 1}}</td>
  310. <td colspan="11"></td>
  311. <td colspan="2">合计:</td>
  312. <td class="xt_total">{{showTable.foot.xt_total}}</td>
  313. <td></td>
  314. </tr>
  315. <tr>
  316. <td colspan="12" class="remark" style="padding-left: 20px;">{{showTable.foot.remark}}</td>
  317. <td colspan="2">返点:</td>
  318. <td class="return">{{showTable.foot.return}}</td>
  319. <td></td>
  320. </tr>
  321. <tr>
  322. <td colspan="12" class="remark1" style="padding-left: 20px;">{{showTable.foot.remark1}}</td>
  323. <td colspan="2">尾款:</td>
  324. <td class="end_price">{{showTable.foot.end_price}}</td>
  325. <td></td>
  326. </tr>
  327. <tr>
  328. <td colspan="16" style="padding-left: 20px;">
  329. <p class="amount_detail" style="height: 24px;">{{showTable.foot.amount_detail}}</p>
  330. </td>
  331. </tr>
  332. <tr>
  333. <td colspan="16" class="order_info" style="padding-left: 20px;">客户备注:<span
  334. class="customer_remark">{{showTable.foot.customer_remark}}</span>订货日期:<span class="crt_time">{{showTable.foot.crt_time}}</span>交货日期:<span
  335. class="end_time">{{showTable.foot.end_time}}</span>业务经理:<span class="saleman">{{showTable.foot.saleman}}</span>制单人:<span
  336. class="crt_id">{{showTable.foot.crt_id}}</span>审核:<span class="oa">{{showTable.foot.oa}}</span>客户确认:<span class="is_confirm">{{showTable.foot.is_confirm}}</span></td>
  337. </tr>
  338. </tfoot>
  339. </table>
  340. </div>
  341. </div>
  342. </div>
  343. </template>
  344. <script>
  345. export default {
  346. name:"printlist",
  347. data(){
  348. return {
  349. showTableContentStr:[],
  350. showTable:{
  351. list:[],
  352. foot:{}
  353. },
  354. newArr:''
  355. }
  356. },
  357. computed:{
  358. },
  359. mounted(){
  360. this.axios({
  361. method:'get',
  362. url:'/api/printe_order_detail',
  363. params:{
  364. order_no:this.$route.query.order_no
  365. }
  366. }).then(res=>{
  367. this.showTableContentStr = res.msg.list
  368. this.showTable = res.msg
  369. this.newArr = this.chunk(this.showTableContentStr,15)
  370. });
  371. },
  372. methods:{
  373. //打印
  374. PrintRow(index, row){
  375. this.$print(this.$refs.print) // 使用
  376. },
  377. printTable() {
  378. // let printData = document.getElementsByClassName('printcontent')[0].innerHTML;
  379. // let all = document.body.innerHTML;
  380. // document.body.innerHTML = printData
  381. window.print();
  382. // document.body.innerHTML = all;
  383. },
  384. chunk(array, size) {
  385. //获取数组的长度,如果你传入的不是数组,那么获取到的就是undefined
  386. const length = array.length
  387. //判断不是数组,或者size没有设置,size小于1,就返回空数组
  388. if (!length || !size || size < 1) {
  389. return []
  390. }
  391. //核心部分
  392. let index = 0 //用来表示切割元素的范围start
  393. let resIndex = 0 //用来递增表示输出数组的下标
  394. //根据length和size算出输出数组的长度,并且创建它。
  395. let result = new Array(Math.ceil(length / size))
  396. //进行循环
  397. while (index < length) {
  398. //循环过程中设置result[0]和result[1]的值。该值根据array.slice切割得到。
  399. result[resIndex++] = array.slice(index, (index += size))
  400. }
  401. //输出新数组
  402. return result
  403. }
  404. }
  405. }
  406. </script>
  407. <style scoped>
  408. * {
  409. margin: 0;
  410. padding: 0;
  411. font-size: 14px;
  412. }
  413. .printcontent{
  414. overflow-y: auto;
  415. overflow-x: auto;
  416. }
  417. button {
  418. position: absolute;
  419. right: 40px;
  420. width: 60px;
  421. }
  422. h1 {
  423. text-align: center;
  424. font-size: 18px;
  425. margin-bottom: 10px;
  426. margin-top: 20px;
  427. }
  428. p {
  429. text-align: center;
  430. }
  431. table {
  432. width: 100%;
  433. border-collapse: collapse;
  434. }
  435. td {
  436. border: 1px solid #000;
  437. }
  438. .right-img1 {
  439. position: absolute;
  440. right: 0;
  441. width: 150px;
  442. margin-bottom: 10px;
  443. height: 60px;
  444. top: 0;
  445. }
  446. .right-img2 {
  447. position: absolute;
  448. width: 150px;
  449. right: 180px;
  450. margin-bottom: 10px;
  451. height: 60px;
  452. top: 0;
  453. }
  454. .table-header {
  455. position: relative;
  456. height: 76px;
  457. line-height: 76px;
  458. }
  459. .left-img {
  460. position: absolute;
  461. left: 0;
  462. width: 150px;
  463. height: 60px;
  464. top: 0;
  465. }
  466. .table-box {
  467. padding: 0 20px;
  468. width: 1000px;
  469. margin: 0 auto;
  470. margin-top: 40px;
  471. }
  472. .order_info span {
  473. margin-right: 28px;
  474. }
  475. .pageSeparator {
  476. visibility: hidden;
  477. page-break-after: always;
  478. overflow: hidden;
  479. height: 0px;
  480. }
  481. .print-table{
  482. display: none;
  483. }
  484. @media print {
  485. button {
  486. display: none;
  487. }
  488. .print-table{
  489. display: block;
  490. width: 100%;
  491. }
  492. .print-cell{
  493. color: black;
  494. margin:16mm 8mm;
  495. width: 262mm;
  496. height: auto;
  497. }
  498. #show-table{
  499. display: none;
  500. }
  501. @page {
  502. }
  503. }
  504. </style>