index.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389
  1. <template>
  2. <div style="display: inline-block">
  3. <el-dropdown
  4. size="mini"
  5. :disabled="disabled"
  6. split-button
  7. placement="top-start"
  8. @command="onCommand"
  9. @click="visible = true"
  10. >
  11. <span v-print="print">
  12. <i class="el-icon-printer mr-1"></i>
  13. 打 印
  14. </span>
  15. <el-dropdown-menu slot="dropdown">
  16. <el-dropdown-item v-print="print" command="湖南德荣医疗器械有限公司">
  17. 湖南德荣医疗器械有限公司
  18. </el-dropdown-item>
  19. <el-dropdown-item
  20. v-print="print"
  21. divided
  22. command="湖南德荣医疗健康产业有限公司"
  23. >
  24. 湖南德荣医疗健康产业有限公司
  25. </el-dropdown-item>
  26. <el-dropdown-item
  27. v-print="print"
  28. divided
  29. command="湖南德荣医疗器械物流配送服务有限公司"
  30. >
  31. 湖南德荣医疗器械物流配送服务有限公司
  32. </el-dropdown-item>
  33. </el-dropdown-menu>
  34. </el-dropdown>
  35. <div
  36. id="PurchaseOrderPdf"
  37. style="
  38. position: relative;
  39. font-size: 12px;
  40. line-height: 1;
  41. font-family: '宋体';
  42. z-index: -1;
  43. "
  44. >
  45. <!-- width: 210mm; -->
  46. <img
  47. ref="stamp"
  48. :src="src"
  49. :alt="company"
  50. style="
  51. width: 130px;
  52. height: 130px;
  53. position: absolute;
  54. top: 3px;
  55. left: 10px;
  56. z-index: 2;
  57. "
  58. />
  59. <div style="position: absolute; top: 0; left: 0; z-index: 2">
  60. <h1>湖南德荣医疗集团 - 采购订单</h1>
  61. <p style="display: flex">
  62. <span style="width: 50%">甲方(购货方):{{ params.puOrgName }}</span>
  63. <span style="width: 25%">订单编号:{{ params.code }}</span>
  64. <span style="width: 25%">签订日期:{{ params.billDate }}</span>
  65. </p>
  66. <p style="display: flex">
  67. <!-- <span style="width: 50%">采购部门:{{ params.puDeptName }}</span> -->
  68. <span style="width: 50%"
  69. >甲方收票地址:湖南省长沙市开福区湘江北路一段91号德荣医疗物流园1栋14楼集采中心</span
  70. >
  71. <span style="width: 25%">采购员:{{ params.buyerName }}</span>
  72. <!-- <span style="width: 25%">联系方式:{{ params.contactsPhone }}</span> -->
  73. <span style="width: 25%">E-mail:{{ params.buyerEmail }}</span>
  74. </p>
  75. <div style="border-bottom: 1px dashed black"></div>
  76. <p style="display: flex">
  77. <span style="width: 50%"
  78. >乙方(供货方):{{ params.supplierName }}</span
  79. >
  80. <span style="width: 25%"
  81. >ATTN:{{ params.supplierContactsName }}</span
  82. >
  83. <span style="width: 25%"
  84. >E-mail:{{ params.supplierContactsEmail }}</span
  85. >
  86. </p>
  87. <p style="display: flex">
  88. <span>甲方收货地址及联系人:{{ params.address }}</span>
  89. </p>
  90. <el-table
  91. ref="printTable"
  92. show-summary
  93. :summary-method="getSummaries"
  94. :data="params.orderItemPrintList"
  95. style="width: 100%; font-size: 12px; margin-top: 5px"
  96. >
  97. <el-table-column prop="materialCode" label="物料编码" width="auto">
  98. </el-table-column>
  99. <el-table-column
  100. prop="materialManufacturersCode"
  101. label="厂家物料编码"
  102. width="auto"
  103. >
  104. </el-table-column>
  105. <el-table-column prop="materialName" label="物料名称" width="auto">
  106. </el-table-column>
  107. <el-table-column prop="specification" label="规格/型号" width="auto">
  108. <template slot-scope="scope">
  109. {{ scope.row.specification + " " + scope.row.model }}
  110. </template>
  111. </el-table-column>
  112. <el-table-column prop="materialRemark" label="物料备注" width="auto">
  113. </el-table-column>
  114. <el-table-column
  115. prop="manufacturerName"
  116. label="生产厂家"
  117. width="auto"
  118. >
  119. </el-table-column>
  120. <el-table-column prop="unitName" label="单位" width="60">
  121. </el-table-column>
  122. <el-table-column prop="qty" label="数量" width="60">
  123. </el-table-column>
  124. <el-table-column prop="taxPrice" label="含税单价" width="auto">
  125. </el-table-column>
  126. <el-table-column prop="money" label="价税合计" width="auto">
  127. </el-table-column>
  128. <el-table-column prop="registration" label="注册证号" width="auto">
  129. </el-table-column>
  130. <el-table-column prop="deliveryDate" label="交货日期" width="auto">
  131. <template slot-scope="scope">{{
  132. new Date(scope.row.deliveryDate).Format("yyyy-MM-dd")
  133. }}</template>
  134. </el-table-column>
  135. </el-table>
  136. <p>
  137. 二、质量要求与技术标准:符合供方企业标准、所在行业标准、国家标准。
  138. </p>
  139. <p>
  140. 供方承诺若本订单上的货物发生质量问题,按双方签署的《质量保证协议》或其他双方签订的质保条约执行处理。
  141. </p>
  142. <p>三、交货要求:</p>
  143. <p>
  144. 1.供货方在1个工作日内回复交期(若1个工作日内未回复,视同供货方默认同意接受交货日期)
  145. </p>
  146. <p>
  147. 2.常规产品7天内到货,订制产品按双方协议日期交期。交货时,以下纸质资料随货同行,资料所在箱号清晰易见:
  148. </p>
  149. <p>
  150. (1)随货同行单。供货方提供给我公司的随货同行单需包括以下内容:德荣订单编码、供货单位、医疗器械名称、规格(型号)、生产企业、生产企业许可证号(或者备案凭证编号)、注册证号(或者备案凭证编号)、生产批号、有效期、数量、单位、单价、金额、储运条件、收货单位、收货地址、发货日期等内容,并加盖供货单位出库专用章。
  151. </p>
  152. <p>
  153. (2)生产厂家同一批次产品的检验报告。(3)进口物资的报关单和检验检疫证明。
  154. </p>
  155. <p>
  156. 3.交货实际时间以供方货物实际到达需方指定地点的时间为准。如遇特殊情况需变更交货时间,供方应事先通知需方并征得需方同意
  157. </p>
  158. <p>
  159. 4.运输要求:供货方负责将货物运输到购货方指定地址,运输方式及费用由供货方负责(双方另有书面约定的除外)。发货后供货方提供运输单号给购货方。.需要专业冷链运输的产品,必须按照GSP要求严格执行冷链运输,全程温湿度必须在GSP冷链运输的管控范围内,随货同行的温湿度记录仪的冷链数据须在交付时可导出或打印。
  160. </p>
  161. <p>
  162. 四、验收标准:购货方收货后3日内按质量标准进行验收,若有不符应及时通知供货方,供货方应在3日内处理。
  163. </p>
  164. <p>
  165. 五、发票要求:供货方根据双方签定的格式合同约定的时间或是于发货后7个工作日内开具符合国家要求的可抵扣的增值税专用发票给购货方。
  166. </p>
  167. <p>六、结算方式:电汇/转账。</p>
  168. <p>
  169. 七、违约责任:按《中国人民共和国合同法》执行,一方违约,违约方按货款总金额的5‰支付给守约方。
  170. </p>
  171. <p>
  172. 八、争议的解决:因履行本合同发生争议,由双方协商解决,协商不成应向长沙仲裁委员会申请仲裁解决。
  173. </p>
  174. <p>
  175. 九、本订单作为双方采购合同的有效组成附件,经各采购员发布确认后生效。供方应在接到订单后按采购合同约定的时间内向需方作出反馈,否则需方视为供方默认。
  176. </p>
  177. <p>
  178. 十、严禁行贿受贿等一切不合法不合规行为,采购方投诉渠道:电话15386455809;邮箱drpm@derom.com。
  179. </p>
  180. </div>
  181. </div>
  182. </div>
  183. </template>
  184. <script>
  185. import print from "vue-print-nb";
  186. import { PRINT } from "@/api/business/purchase/task";
  187. export default {
  188. directives: {
  189. print,
  190. },
  191. name: "",
  192. components: {},
  193. props: {
  194. id: {
  195. type: [String, Number],
  196. require: true,
  197. },
  198. value: {
  199. type: Object,
  200. require: true,
  201. },
  202. },
  203. data() {
  204. console.log(this.value, "this.value");
  205. return {
  206. size: "mini",
  207. visible: false,
  208. disabled: false,
  209. company: "湖南德荣医疗器械有限公司",
  210. print: {
  211. id: "PurchaseOrderPdf",
  212. popTitle: "&nbsp;", // 打印配置页上方的标题
  213. extraHead: "", // 最上方的头部文字,附加在head标签上的额外标签,使用逗号分割
  214. preview: false, // 是否启动预览模式,默认是false
  215. previewTitle: "预览的标题", // 打印预览的标题
  216. previewPrintBtnLabel: "预览结束,开始打印", // 打印预览的标题下方的按钮文本,点击可进入打印
  217. zIndex: 20002, // 预览窗口的z-index,默认是20002,最好比默认值更高
  218. previewBeforeOpenCallback() {
  219. console.log("正在加载预览窗口!");
  220. console.log(this);
  221. }, // 预览窗口打开之前的callback
  222. previewOpenCallback() {
  223. console.log("已经加载完预览窗口,预览打开了!");
  224. }, // 预览窗口打开时的callback
  225. beforeOpenCallback() {
  226. console.log("开始打印之前!");
  227. }, // 开始打印之前的callback
  228. openCallback() {
  229. console.log("执行打印了!");
  230. }, // 调用打印时的callback
  231. closeCallback() {
  232. console.log("关闭了打印工具!");
  233. }, // 关闭打印的callback(无法区分确认or取消)
  234. clickMounted() {
  235. console.log("点击v-print绑定的按钮了!");
  236. },
  237. // url: 'http://localhost:8080/', // 打印指定的URL,确保同源策略相同
  238. // asyncUrl (reslove) {
  239. // setTimeout(() => {
  240. // reslove('http://localhost:8080/')
  241. // }, 2000)
  242. // },
  243. standard: "",
  244. extarCss: "",
  245. },
  246. // params: {},
  247. // params: this.value,
  248. };
  249. },
  250. computed: {
  251. src: {
  252. get: function () {
  253. return require(`./${this.company}.png`);
  254. },
  255. set: function () {},
  256. },
  257. params: {
  258. get: function () {
  259. return this.value;
  260. },
  261. },
  262. },
  263. watch: {},
  264. methods: {
  265. onCommand(prop) {
  266. this.company = prop;
  267. this.visible = true;
  268. },
  269. getSummaries(param) {
  270. const { columns, data } = param;
  271. const sums = [];
  272. columns.forEach((column, index) => {
  273. const { property } = column;
  274. if (index === 0) {
  275. sums[index] = "合计";
  276. return;
  277. }
  278. if (property === "qty" || property === "money") {
  279. const values = data.map((item) => Number(item[property]));
  280. if (!values.every((value) => isNaN(value))) {
  281. sums[index] = values.reduce((prev, curr) => {
  282. const value = Number(curr);
  283. if (!isNaN(value)) {
  284. return prev + curr;
  285. } else {
  286. return prev;
  287. }
  288. }, 0);
  289. }
  290. }
  291. });
  292. return sums;
  293. },
  294. getValue() {
  295. const A4_HEIGHT = 842; //A4纸的高度为842mm
  296. const printcontent = document.getelementById("print-content"); // 获取需要打印的内容元素
  297. const contentHeight = printcontent.offsetHeight; // 获取内容元素的高度
  298. const pagecount = Math.ceil(contentHeight / A4_HEIGHT); // 计算需要打印的页数
  299. const singlePageHeight = contentHeight / pagecount; // 计算单张A4纸的高度
  300. },
  301. },
  302. async created() {
  303. // try {
  304. // this.disabled = true;
  305. // const { data, code } = await PRINT({ id: this.$props.id || 628 });
  306. // if (code === 200) {
  307. // this.params = data;
  308. // this.disabled = false;
  309. // }
  310. // } catch (err) {
  311. // alert(err);
  312. // } finally {
  313. // }
  314. },
  315. mounted() {
  316. this.$nextTick(() => {
  317. let thead = this.$refs.printTable.$el.querySelector(
  318. ".el-table__header-wrapper thead"
  319. ); //找到dom节点
  320. // let img = this.$refs.stamp.cloneNode(true);
  321. let theadNew = thead.cloneNode(true);
  322. this.$refs.printTable.$el
  323. .querySelector(".el-table__body-wrapper table")
  324. .appendChild(theadNew);
  325. });
  326. },
  327. destroyed() {},
  328. };
  329. </script>
  330. <style scope>
  331. .el-table >>> .el-table__body-wrapper table thead {
  332. display: none;
  333. }
  334. </style>
  335. <style lang="scss" media="print">
  336. // 去除打印的页眉页脚
  337. @page {
  338. size: auto; /* auto is the initial value */
  339. margin: 3mm; /* this affects the margin in the printer settings */
  340. }
  341. // 去除打印的页眉页脚
  342. @media print {
  343. #PurchaseOrderPdf {
  344. width: 100%;
  345. }
  346. p {
  347. margin: 4px 0;
  348. }
  349. .el-table > .el-table__header-wrapper > .el-table__header > thead > tr > th,
  350. .el-table
  351. > .el-table__body-wrapper
  352. > .el-table__body
  353. > tbody
  354. > .el-table__row
  355. > td {
  356. padding: 0;
  357. }
  358. table {
  359. table-layout: auto !important;
  360. }
  361. .el-table__header,
  362. .el-table__body,
  363. .el-table__footer {
  364. width: 100% !important;
  365. color: #000 !important;
  366. }
  367. .el-table .cell,
  368. .el-table th.el-table__cell > .cell {
  369. line-height: 18px !important;
  370. }
  371. .el-table__footer-wrapper tbody td.el-table__cell,
  372. .el-table__header-wrapper tbody td.el-table__cell,
  373. .el-table th.el-table__cell > .cell {
  374. color: #000 !important;
  375. }
  376. .el-table > .el-table__header-wrapper {
  377. display: none;
  378. }
  379. .el-table > .el-table__body-wrapper table thead {
  380. display: table-header-group;
  381. }
  382. }
  383. </style>