index.blade.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. @extends('layouts.app')
  2. @section('title')设备查询-包裹管理@endsection
  3. @section('content')
  4. <div class="page-holder w-100 d-flex flex-wrap" id="list">
  5. <div class="container-fluid px-xl-5">
  6. <section class="py-5">
  7. <div class="row">
  8. <div class="col-lg-12 mb-4">
  9. <div class="card">
  10. <div class="card-header">
  11. <div class="form-inline">
  12. <h5>
  13. <ul class="nav nav-pills">
  14. <b style="padding: 10px">请选择设备:</b>
  15. <li v-for="measuringMachine in measuringMachines" @click="clickMeasuringMachine(measuringMachine.id)" :class="[measuringMachine.name==package.measuringMachine ? selectedMachine : otherMachine] " style="padding: 10px">
  16. <span :class="[measuringMachine.status=='离线' ? off : on] " style="font-size:12px;"></span>
  17. <a style="text-decoration:none;cursor:pointer" class="text-dark" >@{{measuringMachine.name}}</a>
  18. </li>
  19. </ul>
  20. </h5>
  21. </div>
  22. <div class="card-body" v-if="package.id">
  23. <h1>
  24. <table class="table card-text dashboard" :class="[package.measuringMachine_status=='在线'?'on':'off']" style="height: 800px">
  25. <tr>
  26. <th class="tag" scope="row">货主</th>
  27. <td style="border-right:thick double #aaaaaa;">@{{package.owner}}</td>
  28. <th class="tag" scope="row">重量(KG)</th>
  29. <td>@{{package.weight}}</td>
  30. </tr>
  31. <tr>
  32. <th class="tag" scope="row">订单编号</th>
  33. <td style="border-right:thick double #aaaaaa;">@{{package.orderno}}</td>
  34. <th class="tag" scope="row">收件人</th>
  35. <td>@{{package.recipient}}</td>
  36. </tr>
  37. <tr>
  38. <th class="tag" scope="row">承运商</th>
  39. <td style="border-right:thick double #aaaaaa;">@{{package.logistic_name}}</td>
  40. <th class="tag" scope="row">快递单号</th>
  41. <td>@{{package.logistic_number}}</td>
  42. </tr>
  43. <tr>
  44. <th class="tag" scope="row">纸箱名称</th>
  45. <td style="border-right:thick double #aaaaaa;">@{{package.paperBox}}</td>
  46. <th class="tag" scope="row">体积(CM³)</th>
  47. <td>@{{package.bulk}}</td>
  48. </tr>
  49. <tr>
  50. <th class="tag" scope="row">状态</th>
  51. <td style="border-right:thick double #aaaaaa;">@{{package.status}}</td>
  52. <th class="tag" scope="row">操作时间</th>
  53. <td>@{{package.weighed_at}}</td>
  54. </tr>
  55. </table>
  56. </h1>
  57. </div>
  58. </div>
  59. </div>
  60. </div>
  61. </div>
  62. </section>
  63. </div>
  64. </div>
  65. @endsection
  66. @section('lastScript')
  67. <style>
  68. #selected a:hover{background-color: #4aa0e6;display: block;cursor:pointer}
  69. .dashboard.off .tag {color:red;}
  70. .dashboard.on .tag {color:green;}
  71. </style>
  72. <script>
  73. let vue=new Vue({
  74. el:'#list',
  75. data:{
  76. package:
  77. {id:'',logistic_number:'',orderno:'',
  78. weight:'',owner:'',paperBox:'',
  79. measuringMachine:'',recipient:'',measuringMachine_status:'',
  80. status:'',weighed_at:'',bulk:'',logistic_name:''},
  81. measuringMachines:[
  82. @foreach($measuringMachines as $measuringMachine)
  83. {id:'{{$measuringMachine->id}}',name:'{{$measuringMachine->name}}',code:'{{$measuringMachine->code}}',status:'{{$measuringMachine->status}}',},
  84. @endforeach
  85. ],
  86. measuringMachinesIndex:{},
  87. on:'fa fa-circle text-success',
  88. off:'fa fa-circle text-danger',
  89. selectedMachine:'nav-item btn btn-primary',
  90. otherMachine:'nav-item',
  91. onColor:{color:'green'},
  92. offColor:{color:'red'},
  93. logisticAudioURL:{},
  94. currentAudioIndex:1,
  95. amount:3,
  96. },
  97. mounted(){
  98. let body = $("#list");
  99. for(let i=1;i<=this.amount;i++){
  100. let audioTag=$('<audio id="audio'+i+'" src="" autoplay></audio>');
  101. body.append(audioTag);
  102. }
  103. this.measuringMachines.forEach((machine)=>{
  104. this.measuringMachinesIndex[machine.name] = machine;
  105. })
  106. initEcho();
  107. Echo.channel('{{$laravelEchoPrefix}}package').listen('WeighedEvent',e=>{
  108. let item = e.package;
  109. let audio = document.getElementById('audio'+this.currentAudioIndex);
  110. if (this.currentAudioIndex === this.amount){
  111. this.currentAudioIndex = 1;
  112. } else {
  113. this.currentAudioIndex = this.currentAudioIndex +1;
  114. }
  115. if (item && item.measuring_machine && item.measuring_machine.name === this.package.measuringMachine){
  116. if (item.id === this.package.id){
  117. this.package.measuringMachine_status = item.measuring_machine.status;
  118. this.measuringMachinesIndex[item.measuring_machine.name].status = item.measuring_machine.status;
  119. window.tempTip.setDuration(2000);
  120. window.tempTip.showSuccess('暂无新数据');
  121. return ;
  122. }
  123. this.updateData(item);
  124. let logistic_name = item.order ? (item.order.logistic ? item.order.logistic.name : '') : '';
  125. let logistic_number = item.logistic_number;
  126. this.speech(logistic_name,logistic_number);
  127. window.tempTip.setDuration(1000);
  128. window.tempTip.showSuccess('刷新成功!');
  129. }
  130. });
  131. },
  132. methods:{
  133. clickMeasuringMachine(e){
  134. let url = '{{route('measureMonitor.dataApi')}}';
  135. let data = {id:e};
  136. window.axios.post(url,data).then(res =>{
  137. if (res.data.id){
  138. let orderPackage=res.data;
  139. this.updateData(orderPackage);
  140. this.package.measuringMachine= orderPackage.measuring_machine ? orderPackage.measuring_machine.name : '';
  141. }else {
  142. tempTip.setDuration(3000);
  143. tempTip.showSuccess('暂无数据!');
  144. }
  145. }).catch(err=>{
  146. tempTip.setDuration(4000);
  147. tempTip.show('切换设备错误:'+err);
  148. });
  149. },
  150. updateData(item){
  151. this.package.id=item.id;
  152. this.package.logistic_number=item.logistic_number;
  153. this.package.orderno = item.order ? item.order.code : '';
  154. this.package.weight=item.weight;
  155. this.package.owner=item.order ? (item.order.owner ? item.order.owner.name : '') : '';
  156. this.package.paperBox=item.paper_box ? item.paper_box.name : '';
  157. this.package.recipient=item.order ? item.order.recipient : '';
  158. this.package.status=item.status;
  159. this.package.weighed_at=item.weighed_at;
  160. this.package.bulk=item.bulk;
  161. this.package.logistic_name=item.order ? (item.order.logistic ? item.order.logistic.name : '') : '';
  162. this.package.measuringMachine_status=item.measuring_machine ? item.measuring_machine.status : '';
  163. this.measuringMachinesIndex[item.measuring_machine ? item.measuring_machine.name : ''].status = item.measuring_machine ? item.measuring_machine.status : '离线';
  164. },
  165. speech(logistic_name,logistic_number){
  166. let audio = document.getElementById('audio'+this.currentAudioIndex);
  167. window.tempTip.setDuration(3000);
  168. let url = '{{route('measureMonitor.speechApi')}}';
  169. let data = {logistic:logistic_name,logistic_number:logistic_number};
  170. window.axios.post(url,data).then(res=>{
  171. if(res.data.success){
  172. let name =res.data.data.name;
  173. let path = res.data.data.path;
  174. this.logisticAudioURL[name] = path;
  175. audio.src = path;
  176. setTimeout(()=>{
  177. audio.play();
  178. },0);
  179. }else {
  180. if (res.data.data){
  181. audio.src = res.data.data.path;
  182. setTimeout(()=>{
  183. audio.play();
  184. },0);
  185. }
  186. }
  187. }).catch(err=>{
  188. window.tempTip.show('语音合成发生错误:'+err);
  189. });
  190. },
  191. },
  192. });
  193. </script>
  194. @endsection