App.vue 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. <template>
  2. <div id="app">
  3. <router-view />
  4. <!-- 语音播报 -->
  5. <iframe id="iframeDom" allow="autoplay" style="display:none" :src="src" sandbox=""></iframe>
  6. <audio class="audio" ref="audio" :src="url" controlsList="nodownload" controls autoplay hidden>
  7. </audio>
  8. <!-- usb自动打印 -->
  9. <usb-auto-print @printOver="printOver" :orderType='orderType' :printNum="printNum" :printData="printData"></usb-auto-print>
  10. </div>
  11. </template>
  12. <script>
  13. import { getSoundMsg } from "./api/setting.js";
  14. import { getPrintOrderInfos } from "./api/order.js";
  15. import bus from "./common/bus.js";
  16. import UsbAutoPrint from "./common/UsbAutoPrint";
  17. import { mapGetters } from "vuex";
  18. export default {
  19. name: "App",
  20. data() {
  21. return {
  22. url: "https://pc.liebaoai.cn/audio/test.mp3",
  23. audioList: [
  24. "https://pc.liebaoai.cn/audio/new-order.mp3",
  25. "https://pc.liebaoai.cn/audio/lower-than.mp3",
  26. "https://pc.liebaoai.cn/audio/missed-orders.mp3",
  27. "https://pc.liebaoai.cn/audio/not-enough.mp3",
  28. "https://pc.liebaoai.cn/audio/order-received.mp3",
  29. "https://pc.liebaoai.cn/audio/rider-cancel.mp3",
  30. "https://pc.liebaoai.cn/audio/rider-go-cancel.mp3",
  31. "https://pc.liebaoai.cn/audio/user-go-cancel.mp3",
  32. "https://pc.liebaoai.cn/audio/over-time.mp3",
  33. ],
  34. src: "https://pc.liebaoai.cn/audio/alone.mp3",
  35. timer: null,
  36. openMsg: false,
  37. printNum: 0,
  38. printData: {},
  39. printList: [],
  40. orderType: 1,
  41. usbPrinterList: [],
  42. };
  43. },
  44. components: {
  45. UsbAutoPrint,
  46. },
  47. computed: {
  48. ...mapGetters(["usbPrinter"]),
  49. },
  50. watch: {
  51. usbPrinter: {
  52. handler(newVal) {
  53. this.usbPrinterList = newVal.filter((v) => {
  54. return v.status;
  55. });
  56. },
  57. deep: true,
  58. immediate: true,
  59. },
  60. },
  61. created() {},
  62. mounted() {
  63. // 进来准备关闭新订单提醒声音了
  64. bus.$on("closeGetSoundMsg", () => {
  65. console.log("进来准备关闭新订单提醒声音了");
  66. clearInterval(this.timer);
  67. this.timer = null;
  68. });
  69. // 进来准备开启新订单提醒声音了
  70. bus.$on("openGetSoundMsg", () => {
  71. console.log("进来准备开启新订单提醒声音了");
  72. this.timer = setInterval(() => {
  73. this.getSoundMsg();
  74. }, 5000);
  75. });
  76. bus.$on("startUsbPrint", (e) => {
  77. console.log("进来准备开始USB打印");
  78. if (!this.usbPrinterList.length) return;
  79. this.usbPrint(e, "", 1);
  80. });
  81. // 诱导用户触发点击动作,否则页面刷新后不会自动播放音频
  82. let userInfo = localStorage.getItem("userInfo");
  83. if (userInfo) {
  84. let nickname = JSON.parse(userInfo).nickname;
  85. this.$confirm(`当前登录账号:${nickname}`, "提示", {
  86. confirmButtonText: "确定",
  87. showCancelButton: false,
  88. type: "warning",
  89. }).then(() => {});
  90. }
  91. },
  92. beforeDestroy() {
  93. clearInterval(this.timer);
  94. this.timer = null;
  95. },
  96. destroyed() {},
  97. methods: {
  98. printOver(isRemove) {
  99. // 是否需要去除已打印的对象
  100. if (isRemove) {
  101. this.printList = this.printList.slice(1);
  102. if (!this.printList.length) {
  103. return;
  104. }
  105. }
  106. this.printData = this.printList[0];
  107. this.printNum += 1;
  108. },
  109. usbPrint(orderId, waimaiOrderId, orderType = 1) {
  110. // usb自动打印新订单、预约单
  111. getPrintOrderInfos({ orderId, waimaiOrderId }).then((res) => {
  112. // console.log("返回内容:", res);
  113. if (res.code === 200 && res.data) {
  114. let data = res.data;
  115. this.printData = data;
  116. this.orderType = orderType;
  117. this.printNum += 1;
  118. }
  119. });
  120. },
  121. getSoundMsg() {
  122. getSoundMsg().then((res) => {
  123. if (res.code === 200) {
  124. if (res.data) {
  125. console.log("提示音:", res.data.sound);
  126. let data = res.data;
  127. let name = data.sound.slice(0, data.sound.indexOf("."));
  128. // 打印新订单、取消单
  129. let orderType;
  130. if (name === "new-order") {
  131. orderType = 1;
  132. this.usbPrint(data.orderId, data.waimaiOrderId, orderType);
  133. }
  134. if (name.includes("cancel")) {
  135. orderType = 2;
  136. this.usbPrint(data.orderId, data.waimaiOrderId, orderType);
  137. }
  138. let url = this.audioList.filter((v) => {
  139. return v.includes(name);
  140. })[0];
  141. this.url = url + "?t=" + new Date().getTime();
  142. }
  143. } else {
  144. this.$message({
  145. type: "error",
  146. message: res.msg,
  147. });
  148. }
  149. });
  150. },
  151. },
  152. };
  153. </script>
  154. <style>
  155. body {
  156. margin: 0;
  157. padding: 0;
  158. }
  159. #app {
  160. font-family: "Avenir", Helvetica, Arial, sans-serif;
  161. -webkit-font-smoothing: antialiased;
  162. -moz-osx-font-smoothing: grayscale;
  163. margin: 0;
  164. padding: 0;
  165. }
  166. </style>