printlist.vue 19 KB

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