PrintWidget.vue 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. <template>
  2. <div class="form-group">
  3. <label for="select-printer">{{ $t('lang.PrintWidget.selectPrinter') }}</label>
  4. <select
  5. id="select-printer"
  6. v-model="selectedPrinter"
  7. class="form-control"
  8. style="width: 15em"
  9. @change="selectedPrinterChanged"
  10. >
  11. <option value="" />
  12. <option
  13. v-for="printer in printers"
  14. :key="printer.name"
  15. :value="printer.name"
  16. >
  17. {{ printer.name }}
  18. </option>
  19. </select>
  20. <button
  21. v-if="showPrintButton"
  22. class="btn btn-default"
  23. @click="print()"
  24. >
  25. {{ $t('lang.PrintWidget.printing') }}
  26. </button>
  27. </div>
  28. </template>
  29. <script>
  30. var PrintUtil = require('./PrintUtil.js').default;
  31. export default {
  32. name: 'PrintWidget',
  33. components: {
  34. },
  35. props: {
  36. // 控件唯一的Id,用于localstorage存储打印机名称
  37. 'printerLocalstorageId':
  38. {
  39. type: String,
  40. default: '',
  41. },
  42. // 是否显示打印按钮
  43. 'showPrintButton':
  44. {
  45. type: Boolean,
  46. default: false,
  47. },
  48. },
  49. emits: ['changePrinter', 'print'],
  50. data: function () {
  51. return {
  52. 'printers': [], // 系统上的打印机
  53. 'selectedPrinter': '', // 选择的打印机
  54. };
  55. },
  56. mounted: function () {
  57. var _self = this;
  58. _self.restoreSelectedPrinter();
  59. PrintUtil.getPrinters().then(successData => {
  60. if (successData != null && successData.length > 0) {
  61. successData.forEach(item => {
  62. _self.printers.push(item);
  63. });
  64. }
  65. _self.restoreSelectedPrinter();
  66. }, errorData => {
  67. console.log(errorData);
  68. _self.restoreSelectedPrinter();
  69. });
  70. },
  71. methods: {
  72. /**
  73. * 选择的打印机发生改变,保存打印机的设置
  74. */
  75. selectedPrinterChanged: function () {
  76. this.$emit('changePrinter');
  77. if (this.selectedPrinter != null) {
  78. localStorage.setItem(this.key, this.selectedPrinter);
  79. } else {
  80. localStorage.removeItem(this.key);
  81. }
  82. },
  83. /**
  84. * 恢复选择的打印机
  85. */
  86. restoreSelectedPrinter: function () {
  87. var selectedPrinterStr = localStorage.getItem(this.key);
  88. if (selectedPrinterStr != null && selectedPrinterStr.length > 0) {
  89. this.selectedPrinter = selectedPrinterStr;
  90. } else {
  91. this.selectedPrinter = '';
  92. }
  93. },
  94. /**
  95. * 打印文件
  96. */
  97. print: function () {
  98. var _self = this;
  99. this.$emit('print', _self.selectedPrinter);
  100. },
  101. /**
  102. * 获取选择打印机的名称
  103. */
  104. getSelectedPrinterName: function () {
  105. return this.selectedPrinter;
  106. },
  107. /**
  108. * 获取选择打印的类型
  109. */
  110. getSelectedPrinterType: function(){
  111. for(let index = 0; index < this.printers.length; index ++){
  112. if(this.printers[index].name === this.selectedPrinter){
  113. return this.printers[index].type;
  114. }
  115. }
  116. return null;
  117. },
  118. },
  119. };
  120. </script>
  121. <style scoped>
  122. .m-row {
  123. margin-bottom: 15px;
  124. }
  125. </style>