index.blade.php 11 KB

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