purchasePDF.vue 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. <template>
  2. <div>
  3. <div id="pdfDom" ref="pdfDom" style="width: 776px">
  4. <div style="border: 1px solid #000; border-collapse: collapse">
  5. <div style="text-align: right; padding: 2px 4px 0 0">
  6. 合同号:{{ pdfData.code }}
  7. </div>
  8. <div class="title">购销合同</div>
  9. <div style="display: flex">
  10. <div style="display: flex; width: 50%; padding-right: 20px">
  11. <div style="width: 60px">买方:</div>
  12. <div style="width: calc(100% - 60px)">
  13. <div>福建宏星电子科技有限公司</div>
  14. <div>福建省福州市鼓楼区软件大道89号福州软件园A区28号楼五层</div>
  15. </div>
  16. </div>
  17. <div style="display: flex; width: 50%; padding-left: 20px">
  18. <div style="width: 60px">卖方:</div>
  19. <div style="width: calc(100% - 60px)">
  20. {{ pdfData.supplyName }}
  21. </div>
  22. </div>
  23. </div>
  24. <div style="display: flex">
  25. <div style="display: flex; width: 50%; padding-right: 20px">
  26. <div style="width: 60px">经手人:</div>
  27. <div style="width: calc(100% - 60px)">
  28. {{ pdfData.purchaseName }}
  29. </div>
  30. </div>
  31. <div style="display: flex; width: 50%; padding-left: 20px">
  32. <div style="width: 60px">经手人:</div>
  33. <div style="width: calc(100% - 60px)">
  34. {{ pdfData.contactPerson }}
  35. </div>
  36. </div>
  37. </div>
  38. <div>买卖双方经协商,一致同意签订以下合同</div>
  39. <div>货物名称、规格型号、单位、数量、单价及金额:</div>
  40. <table border="1" style="width: 100%" class="table">
  41. <tr>
  42. <td style="width: 70px">序号</td>
  43. <td>品名</td>
  44. <td>规格型号</td>
  45. <td style="width: 60px">单位</td>
  46. <td style="width: 60px">数量</td>
  47. <td style="width: 100px">单价</td>
  48. <td style="width: 100px">金额</td>
  49. </tr>
  50. <tr v-for="(row, index) in pdfData.purchaseDetailList" :key="row.id">
  51. <td style="width: 70px">{{ index + 1 }}</td>
  52. <td>{{ row.productName }}</td>
  53. <td>{{ row.productSpec }}</td>
  54. <td style="width: 60px">{{ row.productUnitName }}</td>
  55. <td style="width: 60px">{{ row.count }}</td>
  56. <td style="width: 100px">
  57. <span v-if="pdfData.currency">{{ pdfData.currency }}</span
  58. >{{ row.price }}
  59. </td>
  60. <td style="width: 100px">
  61. <span v-if="pdfData.currency">{{ pdfData.currency }}</span
  62. >{{ row.amount }}
  63. </td>
  64. </tr>
  65. <tr>
  66. <td colspan="4" style="text-align: right">其他收费项目:</td>
  67. <td></td>
  68. <td></td>
  69. <td>
  70. <span v-if="pdfData.currency">{{ pdfData.currency }}</span
  71. >{{ pdfData.otherMoney }}
  72. </td>
  73. </tr>
  74. <tr>
  75. <td colspan="4" style="text-align: right">合计:</td>
  76. <td>{{ pdfData.countTotal }}</td>
  77. <td></td>
  78. <td>
  79. <span v-if="pdfData.currency">{{ pdfData.currency }}</span
  80. >{{ pdfData.amount }}
  81. </td>
  82. </tr>
  83. <tr>
  84. <td colspan="7" style="text-align: left">
  85. 合计人民币金额(大写):{{ pdfData.moneyChinese }}
  86. </td>
  87. </tr>
  88. <tr>
  89. <td>交货地点:</td>
  90. <td colspan="6" style="text-align: left">
  91. 福建省福州市鼓楼区软件大道89号福州软件园A区28号楼五层
  92. </td>
  93. </tr>
  94. <!-- <tr>
  95. <td>交货时间:</td>
  96. <td colspan="6" style="text-align: left"></td>
  97. </tr> -->
  98. <tr>
  99. <td>保修期:</td>
  100. <td colspan="6" style="text-align: left">一年</td>
  101. </tr>
  102. <tr>
  103. <td colspan="7" style="text-align: left; padding: 0px">
  104. <div style="padding: 2px 0px">
  105. 一、交货地点:福州软件园A区28座5层。
  106. </div>
  107. <div style="padding: 2px 0px">二、运输方式及运费:买方承担。</div>
  108. <div style="padding: 2px 0px">
  109. 三、质量要求:样品品质、型号、规格、数量如同买方确认上表规格所示,不符合则由卖方承担责任。
  110. </div>
  111. <div style="padding: 2px 0px">四、交货时间:2023年4月13日。</div>
  112. <div style="padding: 2px 0px">五、付款方式:银行转账。</div>
  113. <div style="padding: 2px 0px">六、保修期:一年。</div>
  114. <div style="padding: 2px 0px">
  115. 七、本合同经买卖双方签字盖章后生效,传真件有效。
  116. </div>
  117. <div style="padding: 2px 0px">
  118. 八、解决合同纠纷:原双方另有约定外,均按《中华人民共和国合同法》有关规定处理。
  119. </div>
  120. <div style="padding: 2px 0px">九、其他约定事项:友好解决。</div>
  121. </td>
  122. </tr>
  123. </table>
  124. <div style="display: flex">
  125. <div style="width: 50%; padding-right: 20px">
  126. <div>买方:</div>
  127. <div>单位名称:福建宏星电子科技有限公司</div>
  128. <div>
  129. 地址:福建省福州市鼓楼区软件大道89号福州软件园A区28号楼五层
  130. </div>
  131. <div>电话:</div>
  132. <div>传真:</div>
  133. <div style="opacity: 0">|</div>
  134. <div style="margin-top: auto">代表人签字:</div>
  135. </div>
  136. <div style="width: 50%; padding-left: 20px">
  137. <div>卖方:</div>
  138. <div>单位名称:{{ pdfData.supplyName }}</div>
  139. <div>统一社会信用代码:</div>
  140. <div>开户银行:{{ pdfData.openingBank }}</div>
  141. <div>帐号:{{ pdfData.accountOpening }}</div>
  142. <div>
  143. 地址:<span
  144. v-if="
  145. pdfData.supplyAddress && pdfData.supplyAddress.countryName
  146. "
  147. >{{ pdfData.supplyAddress.countryName }}</span
  148. >
  149. <span
  150. v-if="
  151. pdfData.supplyAddress && pdfData.supplyAddress.provinceName
  152. "
  153. >,{{ pdfData.supplyAddress.provinceName }}</span
  154. >
  155. <span
  156. v-if="pdfData.supplyAddress && pdfData.supplyAddress.cityName"
  157. >,{{ pdfData.supplyAddress.cityName }}</span
  158. >
  159. <span
  160. v-if="pdfData.supplyAddress && pdfData.supplyAddress.areaDetail"
  161. >,{{ pdfData.supplyAddress.areaDetail }}</span
  162. >
  163. </div>
  164. <div>电话:{{ pdfData.contactNumber }}</div>
  165. <div>代表人签字:</div>
  166. </div>
  167. </div>
  168. <div
  169. style="
  170. padding: 30px 0px 20px 0;
  171. text-align: right;
  172. border-top: 1px solid #000;
  173. "
  174. >
  175. 签订日期:{{ pdfData.approvedDate }}
  176. </div>
  177. </div>
  178. </div>
  179. </div>
  180. </template>
  181. <script setup>
  182. import { NumberToChinese } from "@/utils/util.js";
  183. const { proxy } = getCurrentInstance();
  184. const pdfData = ref({});
  185. const props = defineProps({
  186. rowData: Object,
  187. });
  188. const productUnit = ref([]);
  189. proxy.getDictOne(["unit"]).then((res) => {
  190. productUnit.value = res["unit"].map((x) => ({
  191. label: x.dictValue,
  192. value: x.dictKey,
  193. }));
  194. });
  195. const handlePrintPdf = (row) => {
  196. proxy.post("/purchase/detail", { id: row.id }).then((res) => {
  197. proxy
  198. .post("/supplierInfo/detail", { id: res.supplyId })
  199. .then((supplyData) => {
  200. res.contactPerson = supplyData.contactPerson;
  201. res.contactNumber = supplyData.contactNumber;
  202. res.openingBank = supplyData.openingBank;
  203. res.accountOpening = supplyData.accountOpening;
  204. let countTotal = 0;
  205. let productMoney = 0;
  206. for (let i = 0; i < res.purchaseDetailList.length; i++) {
  207. const e = res.purchaseDetailList[i];
  208. e.productUnitName = proxy.dictValueLabel(
  209. e.productUnit,
  210. productUnit.value
  211. );
  212. countTotal += Number(e.count);
  213. productMoney += Number(e.amount);
  214. }
  215. res.countTotal = countTotal;
  216. res.productMoney = productMoney;
  217. res.otherMoney = res.amount - res.productMoney;
  218. res.moneyChinese = NumberToChinese(res.amount);
  219. res.supplyAddress = {
  220. countryName: supplyData.countryName,
  221. provinceName: supplyData.provinceName,
  222. cityName: supplyData.cityName,
  223. areaDetail: supplyData.areaDetail,
  224. };
  225. if (res.approvedDate) {
  226. res.approvedDate = res.approvedDate.slice(0, 10);
  227. }
  228. pdfData.value = res;
  229. });
  230. });
  231. };
  232. if (props.rowData && props.rowData.id) {
  233. handlePrintPdf(props.rowData);
  234. }
  235. watch(
  236. () => props.rowData.id,
  237. (val) => {
  238. if (props.rowData && props.rowData.id) {
  239. handlePrintPdf(props.rowData);
  240. }
  241. }
  242. );
  243. </script>
  244. <style lang="scss" scoped>
  245. #pdfDom {
  246. font-size: 12px;
  247. color: #000000;
  248. padding: 60px 30px;
  249. .title {
  250. font-size: 16px;
  251. font-weight: 700;
  252. margin-top: 10px;
  253. margin-bottom: 20px;
  254. text-align: center;
  255. }
  256. .table {
  257. // width: calc(100% + 2px) !important;
  258. border-collapse: collapse;
  259. border-spacing: 0;
  260. // margin-left: -1px;
  261. // margin-right: -1px;
  262. td {
  263. text-align: center;
  264. padding: 8px 0px;
  265. }
  266. // tr td:last-child {
  267. // border-right: 0 !important;
  268. // }
  269. }
  270. .flex-top-bottom {
  271. display: flex;
  272. justify-content: space-between;
  273. margin: 5px 0px;
  274. }
  275. }
  276. </style>