index.blade.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. @extends('layouts.app')
  2. @section('title')称重管理@endsection
  3. @section('content')
  4. <span id="nav2">
  5. @component('weight.menu')@endcomponent
  6. @component('weight.package.menu')@endcomponent
  7. </span>
  8. <div class="d-none" id="list">
  9. <div class="container-fluid">
  10. <div class="">
  11. <div>
  12. <form method="GET" action="{{url('package/')}}" id="optionSubmit">
  13. <table class="table table-sm table-bordered text-nowrap mb-0">
  14. <tr v-if="isBeingFilterConditions">
  15. <td colspan="10"><div class="col" style="padding:0">
  16. <a href="{{url('package')}}"><span class="btn btn-warning text-dark">清除过滤条件</span></a>
  17. </div></td>
  18. </tr>
  19. <tr>
  20. <td>
  21. <span class="text-muted">每页显示记录:</span>
  22. </td>
  23. <td colspan="9">
  24. <select name="paginate" v-model="filterData.paginate" class="tooltipTarget form-control-sm" style="vertical-align: middle" @change="setPaginate">
  25. <option value="50">50行</option>
  26. <option value="100">100行</option>
  27. <option value="200">200行</option>
  28. <option value="500">500行</option>
  29. <option value="1000">1000行</option>
  30. </select></td>
  31. </tr>
  32. <tr>
  33. <td rowspan="2">
  34. <span class="text-muted">根据条件过滤:</span>
  35. </td>
  36. <td >
  37. <input style="width: 150px" name="created_at_start" type="date" v-model="filterData.created_at_start" :class="filterData.created_at_start?'bg-warning':''" class="form-control-sm tooltipTarget" title="选择显示指定日期的起始时间">
  38. </td>
  39. <td>
  40. <input type="text" class="form-control-sm tooltipTarget" placeholder="客户"
  41. style="width:70px" @input="owner_seek"
  42. title="输入关键词快速定位下拉列表,回车确定">
  43. <select name="owner_id" id="owner_id" :class="filterData.owner_id?'bg-warning':''" v-model="filterData.owner_id" @change="setOwner"
  44. class="form-control-sm tooltipTarget" title="选择要显示的客户">
  45. @foreach($owners as $owner)
  46. <option value="{{$owner->id}}">{{$owner->name}}</option>
  47. @endforeach
  48. </select>
  49. <input hidden type="submit" >
  50. </td>
  51. <td >
  52. <input :class="filterData.logistic_number?'bg-warning':''" type="text" title="支持15内模糊搜索与15天外精确搜索" name="logistic_number" class="form-control-sm tooltipTarget" v-model="filterData.logistic_number" style="vertical-align: middle" placeholder="快递单号"></td>
  53. <td >
  54. <input :class="filterData.delivery_number?'bg-warning':''" type="text" title="支持15内模糊搜索与15天外精确搜索" name="delivery_number" class="form-control-sm tooltipTarget" v-model="filterData.delivery_number" style="vertical-align: middle" placeholder="发货单号"></td>
  55. <td colspan="5"></td>
  56. </tr>
  57. <tr>
  58. <td>
  59. <input style="width: 150px" type="date" name="created_at_end" v-model="filterData.created_at_end" :class="filterData.created_at_end?'bg-warning':''" class="form-control-sm tooltipTarget" title="选择显示指定日期的结束时间">
  60. </td>
  61. <td >
  62. <input type="text" title="支持15内模糊搜索与15天外精确搜索" name="batch_number" class="form-control-sm tooltipTarget" v-model="filterData.batch_number" :class="filterData.batch_number?'bg-warning':''" style="vertical-align: middle" placeholder="波次号"></td>
  63. </tr>
  64. <tr>
  65. <td>
  66. <span class="text-muted">操作选定记录:</span>
  67. </td>
  68. <td colspan="9">
  69. <span class="dropdown">
  70. <button class="btn btn-outline-dark btn-sm form-control-sm dropdown-toggle tooltipTarget" :class="[checkData>0?'btn-dark text-light':'']"
  71. data-toggle="dropdown" title="导出所有页将会以搜索条件得到的过滤结果,将其全部记录(每一页)导出">
  72. 导出Excel
  73. </button>
  74. <div class="dropdown-menu">
  75. <a class="dropdown-item" @click="packageExport(1)" href="javascript:">导出勾选内容</a>
  76. <a class="dropdown-item" @click="packageExport(2)" href="javascript:">导出所有页</a>
  77. </div>
  78. </span>
  79. <input hidden type="submit" >
  80. </td>
  81. </tr>
  82. </table>
  83. </form>
  84. </div>
  85. <div class="">
  86. <table class="table table-striped table-sm text-nowrap table-hover">
  87. <tr>
  88. <th>
  89. <label for="all">
  90. <input id="all" type="checkbox" @click="checkAll($event)">全选
  91. </label>
  92. </th>
  93. <th>序号</th>
  94. <th>ID</th>
  95. <th>货主</th>
  96. <th>快递单号</th>
  97. <th>波次号</th>
  98. <th>物流公司</th>
  99. <th>设备</th>
  100. <th>重(KG)</th>
  101. <th>长*宽*高(cm)</th>
  102. <th>体积(cm³)</th>
  103. <th>纸箱</th>
  104. <th>状态</th>
  105. <th>波次规则</th>
  106. <th>称重时间</th>
  107. <th>收件人</th>
  108. <th>收件人电话</th>
  109. </tr>
  110. <tr v-for="(package,i) in packages">
  111. <td>
  112. <input class="checkItem" type="checkbox" :value="package.id" v-model="checkData">
  113. </td>
  114. <td>@{{ i+1 }}</td>
  115. <td class="text-muted">@{{package.id}}</td>
  116. <td>@{{package.ownerName}}</td>
  117. <td>@{{package.logisticNumber}}</td>
  118. <td class="text-muted">@{{package.batchNumber}}</td>
  119. <td class="text-muted">@{{package.logisticName}}</td>
  120. <td class="text-muted">@{{package.measuringMachineName}}</td>
  121. <td>@{{package.weight}}</td>
  122. <td>@{{package.length}}<a v-if="package.length" class="text-primary">*</a>@{{package.width}}<a class="text-primary" v-if="package.width">*</a>@{{package.height}}</td>
  123. <td>@{{package.bulk}}</td>
  124. <td>@{{package.paperBoxName}}</td>
  125. <td :class="[package.status==='已上传'?'text-success':'']">@{{package.status}}</td>
  126. <td class="text-muted">@{{package.batchRule}}</td>
  127. <td class="text-muted">@{{package.weighed_at}}</td>
  128. <td class="text-muted">@{{package.recipient}}</td>
  129. <td class="text-muted">@{{package.recipientMobile}}</td>
  130. </tr>
  131. </table>
  132. <div class="text-info h5 btn btn">{{$packages->count()}}/{{$packages->total()}}</div>
  133. @if(isset($request))
  134. {{$packages->appends($request)->links()}}
  135. @else
  136. {{$packages->links()}}
  137. @endif
  138. </div>
  139. </div>
  140. </div>
  141. </div>
  142. @endsection
  143. @section('lastScript')
  144. <script>
  145. @if(isset($request))
  146. let request={!! json_encode($request) !!};
  147. @endif
  148. new Vue({
  149. el:"#list",
  150. data:{
  151. packages:[
  152. @foreach($packages as $package)
  153. {id:'{{$package->id}}',ownerName:'{{$package->owner_name}}',logisticNumber:'{{$package->logistic_number}}'
  154. ,wmsNumber:'{{$package->delivery_number}}',batchNumber:'{{$package->batch_number}}',batchRule:'{{$package->batch_rule}}'
  155. ,recipient:'{{$package->recipient}}',recipientMobile:'{{$package->recipient_mobile}}',logisticName:'{{$package->logistic_name}}'
  156. ,measuringMachineName:'{{$package->measuring_machine_name}}',
  157. weight:'{{$package->weight}}', length:'{{$package->length}}',width:'{{$package->width}}',height:'{{$package->height}}',
  158. bulk:'{{$package->bulk}}',paperBoxName:'{{$package->paperBox_name}}',
  159. status:'{{$package->status}}',created_at:'{{$package->created_at}}',weighed_at:'{{$package->weighed_at}}'},
  160. @endforeach
  161. ],
  162. i:0,
  163. owners:[
  164. @foreach($owners as $owner)
  165. {id:'{{$owner->id}}',name:'{{$owner->name}}'},
  166. @endforeach
  167. ],
  168. filterData:
  169. {paginate:'50',created_at_start:'',created_at_end:'',logistic_number:'',delivery_number:'',owner_id: '',batch_number:''},
  170. checkData:[]
  171. },
  172. mounted:function(){
  173. this.initInputs();
  174. $(".tooltipTarget").tooltip({'trigger':'hover'});
  175. $('#list').removeClass('d-none');
  176. },
  177. watch:{
  178. checkData:{
  179. handler(){
  180. if (this.checkData.length === this.packages.length){
  181. document.querySelector('#all').checked = true;
  182. }else {
  183. document.querySelector('#all').checked = false;
  184. }
  185. },
  186. deep:true
  187. }
  188. },
  189. computed:{
  190. isBeingFilterConditions:function(){
  191. for(let key in this.filterData){
  192. if(this.filterData[key]){
  193. if(key==='paginate')continue;
  194. return true
  195. }
  196. }
  197. return false;
  198. },
  199. },
  200. methods:{
  201. initInputs:function(){
  202. let data=this;
  203. let uriParts =decodeURI(location.href).split("?");
  204. if(uriParts.length>1){
  205. let params = uriParts[1].split('&');
  206. params.forEach(function(paramPair){
  207. let pair=paramPair.split('=');
  208. let key = pair[0], val = pair[1];
  209. $('input[name="'+key+'"]').val(val);
  210. $('select[name="'+key+'"]').val(val);
  211. decodeURI(data.filterData[key]=val);
  212. });
  213. }
  214. },
  215. setPaginate:function(e){
  216. this.filterData.paginate=e.target.value;
  217. var form = document.getElementById("optionSubmit");
  218. form.submit();
  219. },
  220. setOwner:function (e){
  221. this.filterData.owner_id=e.target.value;
  222. var form = document.getElementById("optionSubmit");
  223. form.submit();
  224. },
  225. checkAll(e){
  226. if (e.target.checked){
  227. this.packages.forEach((el,i)=>{
  228. if (this.checkData.indexOf(el.id) == '-1'){
  229. this.checkData.push(el.id);
  230. }
  231. });
  232. }else {
  233. this.checkData = [];
  234. }
  235. },
  236. packageExport(e){
  237. let val=e;
  238. let data=this.filterData;
  239. if (val==1){
  240. if (this.checkData&&this.checkData.length<=0){
  241. tempTip.setDuration(4000);
  242. tempTip.showSuccess('没有勾选任何记录');
  243. }else{
  244. location.href="{{url('package/export').'/'}}"+this.checkData;
  245. }
  246. } else {
  247. location.href="{{url('package/export/-1?created_at_start=')}}"+
  248. data.created_at_start+"&created_at_end="+data.created_at_end+"&logistic_number="+
  249. data.logistic_number+"&delivery_number="+data.delivery_number+"&owner_id="+data.owner_id+
  250. "&batch_number="+data.batch_number;
  251. }
  252. },
  253. owner_seek:function (e) {
  254. let _this=this;
  255. let $val=e.target.value;
  256. if($val==='')_this.filterData.owner_id='';
  257. else
  258. _this.owners.forEach(function (owner) {
  259. if (owner.name.includes($val)){
  260. _this.filterData.owner_id=owner.id;
  261. }
  262. });
  263. },
  264. },
  265. });
  266. </script>
  267. @endsection