delivery-slip-a4.php 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. <?php
  2. /**
  3. * A4 鲜花配送单 HTML 模板(链科云打印,HTML 直打)
  4. *
  5. * @var array $data
  6. */
  7. $escape = function ($value) {
  8. return htmlspecialchars((string)$value, ENT_QUOTES, 'UTF-8');
  9. };
  10. $paper = $data['paper'] ?? [
  11. 'pageSize' => 'A4 portrait',
  12. 'pageMargin' => '10mm',
  13. 'contentWidth' => '190mm',
  14. ];
  15. ?>
  16. <!DOCTYPE html>
  17. <html lang="zh-CN">
  18. <head>
  19. <meta charset="UTF-8">
  20. <title><?= $escape($data['title'] ?? '鲜花配送单') ?></title>
  21. <style>
  22. @page {
  23. size: <?= $escape($paper['pageSize']) ?>;
  24. margin: <?= $escape($paper['pageMargin']) ?>;
  25. }
  26. * {
  27. margin: 0;
  28. padding: 0;
  29. box-sizing: border-box;
  30. font-family: "SimSun", "宋体", serif;
  31. }
  32. body {
  33. margin: 0;
  34. padding: 0;
  35. background: #ffffff;
  36. }
  37. /* 外层 table 居中:兼容 Windows 打印 HTML 时 margin:auto 失效 */
  38. .page-center {
  39. width: 100%;
  40. border: 0;
  41. border-collapse: collapse;
  42. }
  43. .delivery-wrap {
  44. width: <?= $escape($paper['contentWidth']) ?>;
  45. max-width: 100%;
  46. margin: 0 auto;
  47. text-align: left;
  48. }
  49. .header-top {
  50. text-align: center;
  51. padding: 4mm 0;
  52. position: relative;
  53. }
  54. .title {
  55. font-size: 32px;
  56. font-weight: bold;
  57. }
  58. .order-no {
  59. position: absolute;
  60. right: 0;
  61. top: 4mm;
  62. font-size: 22px;
  63. }
  64. table.sheet {
  65. width: 100%;
  66. border-collapse: collapse;
  67. }
  68. table.sheet td {
  69. padding: 4mm 5mm;
  70. vertical-align: top;
  71. font-size: 24px;
  72. border: 1px solid #000;
  73. background: transparent;
  74. }
  75. table.sheet td:first-child {
  76. width: 38mm;
  77. }
  78. tr.time-row td,
  79. tr.card-row td,
  80. tr.name-row td,
  81. tr.addr-row td {
  82. padding-top: 8mm;
  83. padding-bottom: 8mm;
  84. }
  85. tr.addr-row td:last-child {
  86. text-align: left;
  87. }
  88. .addr-block {
  89. display: block;
  90. line-height: 1.5;
  91. }
  92. .addr-distance {
  93. display: block;
  94. margin-top: 6mm;
  95. line-height: 1.5;
  96. }
  97. .goods-label {
  98. vertical-align: middle !important;
  99. line-height: 1.4;
  100. }
  101. .goods-row {
  102. display: block;
  103. overflow: hidden;
  104. }
  105. .goods-img {
  106. float: left;
  107. width: 52mm;
  108. height: 62mm;
  109. margin-right: 5mm;
  110. background: #eee;
  111. }
  112. .goods-img img {
  113. width: 100%;
  114. height: 100%;
  115. object-fit: cover;
  116. }
  117. .goods-text {
  118. padding-top: 2mm;
  119. overflow: hidden;
  120. }
  121. .goods-name {
  122. font-size: 24px;
  123. font-weight: bold;
  124. margin-bottom: 3mm;
  125. }
  126. .goods-count {
  127. font-weight: bold;
  128. }
  129. .goods-count .num {
  130. font-size: 48px;
  131. }
  132. .bottom-tip {
  133. padding: 5mm 0 0;
  134. text-align: center;
  135. font-size: 23px;
  136. font-weight: bold;
  137. }
  138. .footer-bottom {
  139. text-align: center;
  140. }
  141. .circle-num-wrap {
  142. margin-top: 8mm;
  143. text-align: center;
  144. }
  145. .circle-num {
  146. display: inline-block;
  147. width: 52mm;
  148. height: 52mm;
  149. border: 3px solid #000;
  150. border-radius: 50%;
  151. text-align: center;
  152. line-height: 52mm;
  153. font-size: 28mm;
  154. font-weight: bold;
  155. background: transparent;
  156. }
  157. @media print {
  158. body {
  159. padding: 0;
  160. margin: 0;
  161. }
  162. .delivery-wrap {
  163. width: <?= $escape($paper['contentWidth']) ?>;
  164. margin: 0 auto;
  165. }
  166. }
  167. </style>
  168. </head>
  169. <body>
  170. <table class="page-center" cellpadding="0" cellspacing="0" border="0">
  171. <tr>
  172. <td align="center" valign="top">
  173. <div class="delivery-wrap">
  174. <div class="header-top">
  175. <div class="title"><?= $escape($data['title'] ?? '鲜花配送单') ?></div>
  176. <div class="order-no"><?= $escape($data['batchNo'] ?? '') ?></div>
  177. </div>
  178. <table class="sheet">
  179. <tr class="name-row">
  180. <td>顾客姓名</td>
  181. <td><?= $escape($data['receiveUserName'] ?? '') ?></td>
  182. <td>顾客电话</td>
  183. <td><strong><?= $escape($data['receiveMobile'] ?? '') ?></strong></td>
  184. </tr>
  185. <tr class="addr-row">
  186. <td>顾客地址</td>
  187. <td colspan="3">
  188. <span class="addr-block"><strong><?= $escape($data['fullAddress'] ?? '') ?></strong></span>
  189. <?php if (!empty($data['distanceText'])): ?>
  190. <span class="addr-distance">配送距离: <?= $escape($data['distanceText']) ?></span>
  191. <?php endif; ?>
  192. 配送距离:直线304米
  193. </td>
  194. </tr>
  195. <tr class="time-row">
  196. <td>配送时间</td>
  197. <td colspan="3">
  198. <strong><?= $escape($data['reachDateLabel'] ?? '') ?></strong>
  199. <strong><?= $escape($data['reachDateTime'] ?? '') ?></strong>
  200. </td>
  201. </tr>
  202. <tr>
  203. <td class="goods-label">商品描述<br>参考照片</td>
  204. <td colspan="3">
  205. <div class="goods-row">
  206. <div class="goods-img">
  207. <?php if (!empty($data['productImage'])): ?>
  208. <img src="<?= $escape($data['productImage']) ?>" alt="<?= $escape($data['productName'] ?? '商品图') ?>">
  209. <?php endif; ?>
  210. </div>
  211. <div class="goods-text">
  212. <div class="goods-name"><?= $escape($data['productName'] ?? '') ?></div>
  213. <div class="goods-count">共 <span class="num"><?= $escape($data['productCount'] ?? '1') ?></span> 个</div>
  214. </div>
  215. </div>
  216. </td>
  217. </tr>
  218. <tr class="card-row">
  219. <td>贺卡内容</td>
  220. <td colspan="3"><?= nl2br($escape($data['cardInfo'] ?? '')) ?></td>
  221. </tr>
  222. </table>
  223. <div class="footer-bottom">
  224. <?php if (!empty($data['servicePhone'])): ?>
  225. <div class="bottom-tip">
  226. 如在制作,配送环节出现问题或疑问,欢迎随时致电: <?= $escape($data['servicePhone']) ?>
  227. </div>
  228. <?php endif; ?>
  229. <?php if (!empty($data['sendNum'])): ?>
  230. <div class="circle-num-wrap">
  231. <span class="circle-num"><?= $escape($data['sendNum']) ?></span>
  232. </div>
  233. <?php endif; ?>
  234. </div>
  235. </div>
  236. </td>
  237. </tr>
  238. </table>
  239. </body>
  240. </html>