delivering.blade.php 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355
  1. @extends('layouts.app')
  2. @section('title')发运-运输管理@endsection
  3. @section('content')
  4. @component('waybill.menu')@endcomponent
  5. <div id="list" class=" container-fluid">
  6. <form method="GET" action="{{url('waybill/delivering')}}" id="form">
  7. <div class="text-nowrap mb-0" style="background: #fff;">
  8. <div v-if="isBeingFilterConditions">
  9. <div><div class="col" style="padding:0">
  10. <a href="{{url('waybill/delivering')}}"><span class="btn btn-warning text-dark">清除筛选</span></a>
  11. </div>
  12. </div>
  13. </div>
  14. <div class="row mt-2 ml-2">
  15. <div class="col-md-6 form-inline" style="max-width: 400px">
  16. <input type="date" name="created_at_start" class="form-control form-control-sm tooltipTarget" title="选择显示指定日期的起始时间"
  17. v-model="filterData.created_at_start" :class="filterData.created_at_start?'bg-warning':''">
  18. <input type="date" class="form-control form-control-sm tooltipTarget" name="created_at_end" title="选择显示指定日期的结束时间"
  19. v-model="filterData.created_at_end" :class="filterData.created_at_end?'bg-warning':''" >
  20. </div>
  21. <div class=" col-md-2 mr-0 " style="max-width: 160px">
  22. <input type="text" title="运单号:可在两侧增加百分号(%)进行模糊搜索" name="waybill_number" placeholder="运单号"
  23. class="form-control form-control-sm tooltipTarget" v-model="filterData.waybill_number" style="vertical-align: middle;width: 153px" :class="filterData.waybill_number?'bg-warning':''">
  24. </div>
  25. <div class=" col-md-2 ml-2 p-0" style="max-width: 160px">
  26. <input type="text" title="承运商单号:可在两侧增加百分号(%)进行模糊搜索" name="carrier_bill" placeholder="承运商单号"
  27. class="form-control form-control-sm tooltipTarget" v-model="filterData.carrier_bill" style="vertical-align: middle;width: 153px" :class="filterData.carrier_bill?'bg-warning':''">
  28. </div>
  29. <input type="submit" hidden>
  30. </div>
  31. <div class="ml-4 mt-2">
  32. <span class="dropdown">
  33. <button type="button" class="btn btn-sm form-control-sm dropdown-toggle tooltipTarget" :class="[checkData.length>0?'btn-dark text-light':'btn-outline-dark']"
  34. data-toggle="dropdown" title="导出所有页将会以搜索条件得到的筛选结果,将其全部记录(每一页)导出">
  35. 导出Excel
  36. </button>
  37. <div class="dropdown-menu">
  38. <a class="dropdown-item" @click="waybillExport(false)" href="javascript:">导出勾选内容</a>
  39. <a class="dropdown-item" @click="waybillExport(true)" href="javascript:">导出所有页</a>
  40. </div>
  41. </span>
  42. </div>
  43. </div>
  44. </form>
  45. <div class="card">
  46. <table class="table table-sm table-hover table-striped table-bordered d-none" id="headerRoll"></table>
  47. <table class="card-body table table-sm table-hover table-striped table-bordered d-none d-sm-block p-0 text-nowrap" style="width: 100%" id="headerParent">
  48. <tr style="width: 100%" id="header">
  49. <th class="td-operation">
  50. <label for="all">
  51. <input id="all" type="checkbox" @click="checkAll($event)">全选
  52. </label>
  53. </th>
  54. </tr>
  55. <tr v-for="(waybill,i) in waybills">
  56. <td>
  57. <input class="checkItem" type="checkbox" :value="waybill.id" v-model="checkData">
  58. </td>
  59. <td>@{{ i+1 }}</td>
  60. <td>@{{ waybill.created_at }}</td>
  61. <td>@{{ waybill.carrier_name }}</td>
  62. <td>@{{ waybill.waybill_number }}</td>
  63. <td>@{{ waybill.origination }}</td>
  64. <td>@{{ waybill.owner_name }}</td>
  65. <td>@{{ waybill.warehouse_weight_other }}</td>
  66. <td>@{{ waybill.warehouse_weight }}</td>
  67. <td><span v-if="waybill.status=='已完结'">已完成</span><span v-else><span v-if="waybill.carrier_bill">已提交</span><span v-if="!waybill.carrier_bill">待提交</span></span></td>
  68. <td>
  69. <span v-if="waybill.isBtn || !waybill.carrier_bill">
  70. <input :id="'carrier_bill'+waybill.id+'PC'" :class="errors['_'+waybill.id]&&errors['_'+waybill.id].carrier_bill?'is-invalid tooltipTargetError':''"
  71. :title="errors['_'+waybill.id]&&errors['_'+waybill.id].carrier_bill?errors['_'+waybill.id].carrier_bill[0]:''" type="text" class="form-control form-control-sm w-100" :value="waybill.carrier_bill">
  72. </span><span v-else>@{{ waybill.carrier_bill }}</span>
  73. </td>
  74. <td>
  75. <span v-if="waybill.isBtn || !waybill.carrier_bill">
  76. <input :id="'inquire_tel'+waybill.id+'PC'" :class="errors['_'+waybill.id]&&errors['_'+waybill.id].inquire_tel?'is-invalid tooltipTargetError':''"
  77. :title="errors['_'+waybill.id]&&errors['_'+waybill.id].inquire_tel?errors['_'+waybill.id].inquire_tel[0]:''" type="text" class="form-control form-control-sm w-100" :value="waybill.inquire_tel">
  78. </span><span v-else>@{{ waybill.inquire_tel }} </span>
  79. </td>
  80. <td>
  81. <span v-if="waybill.isBtn || !waybill.carrier_bill">
  82. <input :id="'amount'+waybill.id+'PC'" :class="errors['_'+waybill.id]&&errors['_'+waybill.id].amount?'is-invalid tooltipTargetError':''"
  83. :title="errors['_'+waybill.id]&&errors['_'+waybill.id].amount?errors['_'+waybill.id].amount[0]:''" type="text" class="form-control form-control-sm w-100" :value="waybill.amount">
  84. </span><span v-else><span v-if="waybill.amount">@{{ waybill.amount }} @{{ waybill.amount_unit_name }}</span></span>
  85. </td>
  86. <td>
  87. <span v-if="waybill.isBtn || !waybill.carrier_bill">
  88. <input :id="'carrier_weight_other'+waybill.id+'PC'" :class="errors['_'+waybill.id]&&errors['_'+waybill.id].carrier_weight_other?'is-invalid tooltipTargetError':''"
  89. :title="errors['_'+waybill.id]&&errors['_'+waybill.id].carrier_weight_other?errors['_'+waybill.id].carrier_weight_other[0]:''" type="text" class="form-control form-control-sm w-100" :value="waybill.carrier_weight_other">
  90. </span><span v-else>@{{ waybill.carrier_weight_other }}</span>
  91. </td>
  92. <td>
  93. <span v-if="waybill.isBtn || !waybill.carrier_bill">
  94. <input :id="'carrier_weight'+waybill.id+'PC'" :class="errors['_'+waybill.id]&&errors['_'+waybill.id].carrier_weight?'is-invalid tooltipTargetError':''"
  95. :title="errors['_'+waybill.id]&&errors['_'+waybill.id].carrier_weight?errors['_'+waybill.id].carrier_weight[0]:''" type="text" class="form-control form-control-sm w-100" :value="waybill.carrier_weight">
  96. </span><span v-else>@{{ waybill.carrier_weight }}</span>
  97. </td>
  98. <td>
  99. <span v-if="waybill.status!='已完结'">
  100. <button v-if="!waybill.isBtn&&waybill.carrier_bill" @click="waybill.isBtn=true" class="btn btn-sm btn-outline-dark" >修改</button>
  101. <button v-if="!waybill.isBtn&& !waybill.carrier_bill" @click="submit(waybill.id+'PC',waybill.id);" class="btn btn-sm btn-outline-info" >录入</button>
  102. <button v-if="waybill.isBtn" @click="submit(waybill.id+'PC',waybill.id);" class="btn btn-sm btn-outline-success">确定</button>
  103. <button @click="waybill.isBtn=false" v-if="waybill.isBtn" class="btn btn-sm btn-outline-danger">取消</button>
  104. </span>
  105. </td>
  106. </tr>
  107. </table>
  108. <table class="table table-striped table-sm table-bordered table-hover p-0 d-block d-sm-none" style="background: rgb(255, 255, 255);">
  109. <tbody>
  110. <tr v-for="waybill in waybills">
  111. <td style="filter:grayscale(30%); ">
  112. <div :style="waybill.status!='已完结'?'background-color:#f6eee8':''" class="mt-3">
  113. <div style="transform:scale(0.9)" class="pl-0">
  114. <span class="mr-3 text-nowrap"><span style="color:#783000">日期:</span><span style="color:#af7651">@{{ waybill.created_at }}</span></span>
  115. <span class="mr-3 text-nowrap"><span style="color:#783000">承运商:</span><span style="color:#af7651">@{{ waybill.carrier_name }}</span></span>
  116. <span class="mr-3 text-nowrap"><span style="color:#783000">宝时运单号:</span><span style="color:#af7651">@{{ waybill.waybill_number }}</span></span>
  117. <span class="mr-3 text-nowrap"><span style="color:#783000">提货仓:</span><span style="color:#af7651">@{{ waybill.origination }}</span></span>
  118. <span class="mr-3 text-nowrap"><span style="color:#783000">项目:</span><span style="color:#af7651">@{{ waybill.owner_name }}</span></span>
  119. <span class="mr-3 text-nowrap"><span style="color:#783000">预估重量:</span><span style="color:#af7651" v-if="waybill.warehouse_weight_other">@{{ waybill.warehouse_weight_other }} @{{ waybill.warehouse_weight_unit_other_name }}</span></span>
  120. <span class="mr-3 text-nowrap"><span style="color:#783000">预估体积:</span><span style="color:#af7651" v-if="waybill.warehouse_weight">@{{ waybill.warehouse_weight }} @{{ waybill.warehouse_weight_unit_name }}</span></span>
  121. </div>
  122. </div>
  123. <div :style="waybill.status!='已完结'?'background-color:#e8eef6':''" class="mb-3">
  124. <div style="transform:scale(0.9)" class="pl-0 form-inline">
  125. <span class="mr-3 text-nowrap form-inline"><span style="color:#02346a">专线运单号:</span>
  126. <input :id="'carrier_bill'+waybill.id" :class="errors['_'+waybill.id]&&errors['_'+waybill.id].carrier_bill?'is-invalid tooltipTargetError':''"
  127. :title="errors['_'+waybill.id]&&errors['_'+waybill.id].carrier_bill?errors['_'+waybill.id].carrier_bill[0]:''" v-if="waybill.isBtn || !waybill.carrier_bill" type="text" :value="waybill.carrier_bill"
  128. class="form-control form-control-sm " @click="enlarge($event)" style="width: 50px">
  129. <span v-else class="text-muted">@{{ waybill.carrier_bill }}</span>
  130. </span>
  131. <span class="mr-3 text-nowrap form-inline"><span style="color:#02346a">查&nbsp;件&nbsp;电&nbsp;话:</span>
  132. <input :id="'inquire_tel'+waybill.id" :class="errors['_'+waybill.id]&&errors['_'+waybill.id].inquire_tel?'is-invalid tooltipTargetError':''"
  133. :title="errors['_'+waybill.id]&&errors['_'+waybill.id].inquire_tel?errors['_'+waybill.id].inquire_tel[0]:''" v-if="waybill.isBtn || !waybill.carrier_bill" type="text" :value="waybill.inquire_tel"
  134. class="form-control form-control-sm" @click="enlarge($event)" style="width:50px">
  135. <span v-else class="text-muted">@{{ waybill.inquire_tel }}</span>
  136. </span>
  137. <span class="mr-3 text-nowrap form-inline"><span style="color:#02346a">件数:</span>
  138. <input :id="'amount'+waybill.id" :class="errors['_'+waybill.id]&&errors['_'+waybill.id].amount?'is-invalid tooltipTargetError':''"
  139. :title="errors['_'+waybill.id]&&errors['_'+waybill.id].amount?errors['_'+waybill.id].amount[0]:''" v-if="waybill.isBtn || !waybill.carrier_bill" type="text" :value="waybill.amount" class="form-control form-control-sm"
  140. @click="enlarge($event)" style="width:50px">
  141. <span v-else class="text-muted"><span v-if="waybill.amount">@{{ waybill.amount }} @{{ waybill.amount_unit_name }}</span></span>
  142. </span>
  143. <span class="mr-3 text-nowrap form-inline"><span style="color:#02346a">重量:</span>
  144. <input :id="'carrier_weight_other'+waybill.id" :class="errors['_'+waybill.id]&&errors['_'+waybill.id].carrier_weight_other?'is-invalid tooltipTargetError':''"
  145. :title="errors['_'+waybill.id]&&errors['_'+waybill.id].carrier_weight_other?errors['_'+waybill.id].carrier_weight_other[0]:''" v-if="waybill.isBtn || !waybill.carrier_bill" type="text" :value="waybill.carrier_weight_other"
  146. class="form-control form-control-sm" @click="enlarge($event)" style="width:50px">
  147. <span v-else class="text-muted">@{{ waybill.carrier_weight_other }}</span>
  148. </span>
  149. <span class="mr-3 text-nowrap form-inline"><span style="color:#02346a">体积:</span>
  150. <input :id="'carrier_weight'+waybill.id" :class="errors['_'+waybill.id]&&errors['_'+waybill.id].carrier_weight?'is-invalid tooltipTargetError':''"
  151. :title="errors['_'+waybill.id]&&errors['_'+waybill.id].carrier_weight?errors['_'+waybill.id].carrier_weight[0]:''" v-if="waybill.isBtn || !waybill.carrier_bill" type="text" :value="waybill.carrier_weight"
  152. class="form-control form-control-sm" @click="enlarge($event)" {{--@mouseleave="shrink($event)"--}} style="width:50px">
  153. <span v-else class="text-muted">@{{ waybill.carrier_weight }}</span>
  154. </span>
  155. <span class="mr-3 text-nowrap" v-if="waybill.status!='已完结'">
  156. <button v-if="waybill.isBtn==true || !waybill.carrier_bill" class="btn btn-sm btn-outline-success" @click="submit(waybill.id)">提交</button>
  157. <button v-if="waybill.isBtn==true" class="btn btn-sm btn-outline-danger" @click="waybill.isBtn=false">取消</button>
  158. <button v-if="waybill.isBtn==false && waybill.carrier_bill" class="btn btn-sm " @click="waybill.isBtn=true" :class="waybill.carrier_bill?'btn-outline-dark':'btn-outline-primary'">修改</button></span></div>
  159. </div>
  160. </td>
  161. </tr>
  162. </tbody>
  163. </table>
  164. </div>
  165. </div>
  166. @endsection
  167. @section('lastScript')
  168. <style>
  169. .color1{background-color: #FFA07A}
  170. .color2{background-color: cornflowerblue}
  171. </style>
  172. <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
  173. <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>
  174. <script>
  175. new Vue({
  176. el:"#list",
  177. data:{
  178. waybills:[
  179. @foreach($waybills as $waybill)
  180. {id:'{{$waybill->id}}',
  181. created_at:'{{$waybill->created_at}}',
  182. waybill_number:'{{$waybill->waybill_number}}',
  183. origination:'{{$waybill->origination}}',
  184. carrier_bill:'{{$waybill->carrier_bill}}',
  185. warehouse_weight:'{{$waybill->warehouse_weight}}',
  186. carrier_weight:'{{$waybill->carrier_weight}}',
  187. warehouse_weight_other:'{{$waybill->warehouse_weight_other}}',
  188. carrier_weight_other:'{{$waybill->carrier_weight_other}}',
  189. status:'{{$waybill->status}}',
  190. amount:'{{$waybill->amount}}',
  191. amount_unit_id:'{{$waybill->amount_unit_id}}',
  192. amount_unit_name:'{{$waybill->amount_unit ? $waybill->amount_unit->name : ''}}',
  193. inquire_tel:'{{$waybill->inquire_tel}}',
  194. carrier_name:'{{$waybill->logistic->name ?? ''}}',
  195. owner_name:'{{$waybill->owner_name ?? ($waybill->owner->name ?? '')}}',
  196. warehouse_weight_unit_name:'{{$waybill->warehouse_weight_unit ? $waybill->warehouse_weight_unit->name : ''}}',
  197. carrier_weight_unit_name:'{{$waybill->carrier_weight_unit ? $waybill->carrier_weight_unit->name : ''}}',
  198. warehouse_weight_unit_other_name:'{{$waybill->warehouse_weight_unit_other ? $waybill->warehouse_weight_unit_other->name : ''}}',
  199. carrier_weight_unit_other_name:'{{$waybill->carrier_weight_unit_other ? $waybill->carrier_weight_unit_other->name : ''}}',
  200. isBtn:false
  201. },
  202. @endforeach
  203. ],
  204. filterData:{
  205. created_at_start:'',created_at_end:'',waybill_number:'',carrier_bill:''
  206. },
  207. checkData:[],
  208. errors:{},
  209. sum:{!! $waybills->total() !!},
  210. },
  211. watch:{
  212. checkData:{
  213. handler(){
  214. if (this.checkData.length === this.waybills.length){
  215. document.querySelector('#all').checked = true;
  216. }else {
  217. document.querySelector('#all').checked = false;
  218. }
  219. },
  220. deep:true
  221. }
  222. },
  223. mounted:function(){
  224. let _this=this;
  225. $(".tooltipTarget").tooltip({'trigger':'hover'});
  226. _this.initInputs();
  227. $("#list").removeClass('d-none');
  228. let column = [
  229. {name:'index',value: '序号', neglect: true},
  230. {name:'created_at',value: '日期', class:"color1"},
  231. {name:'carrier_name',value: '承运商', class:"color1"},
  232. {name:'waybill_number',value: '宝时运单号', class:"color1"},
  233. {name:'origination',value: '提货仓', class:"color1"},
  234. {name:'owner_name',value: '货主', class:"color1"},
  235. {name:'warehouse_weight_other',value: '预估重量', neglect: true, class:"color1"},
  236. {name:'warehouse_weight',value: '预估体积', neglect: true, class:"color1"},
  237. {name:'status',value: '状态', class:"color2"},
  238. {name:'carrier_bill',value: '专线运单号', class:"color2"},
  239. {name:'inquire_tel',value: '查件电话', class:"color2"},
  240. {name:'amount',value: '件数', neglect: true, class:"color2"},
  241. {name:'carrier_weight_other',value: '重量', neglect: true, class:"color2"},
  242. {name:'carrier_weight',value: '体积', neglect: true, class:"color2"},
  243. {name:'operation',value: '操作', neglect: true},
  244. ];
  245. if (window.innerWidth > 500){
  246. let header = new Header({
  247. el: "#header",
  248. column: column,
  249. data: this.waybills,
  250. restorationColumn: 'id',
  251. fixedTop:($('#form_div').height())+2,
  252. offset:0.5,
  253. });
  254. header.init();
  255. }
  256. },
  257. computed:{
  258. isBeingFilterConditions:function(){
  259. for(let key in this.filterData){
  260. if(this.filterData[key]){
  261. return true
  262. }
  263. }
  264. return false;
  265. },
  266. },
  267. methods:{
  268. initInputs:function(){
  269. let data=this;
  270. let uriParts =decodeURI(location.href).split("?");
  271. if(uriParts.length>1){
  272. let params = uriParts[1].split('&');
  273. params.forEach(function(paramPair){
  274. let pair=paramPair.split('=');
  275. let key = pair[0], val = pair[1];
  276. $('input[name="'+key+'"]').val(val);
  277. $('select[name="'+key+'"]').val(val);
  278. decodeURI(data.filterData[key]=val);
  279. });
  280. }
  281. },
  282. checkAll(e){
  283. if (e.target.checked){
  284. this.waybills.forEach((el,i)=>{
  285. if (this.checkData.indexOf(el.id) == '-1'){
  286. this.checkData.push(el.id);
  287. }
  288. });
  289. }else {
  290. this.checkData = [];
  291. }
  292. },
  293. waybillExport(checkAllSign){
  294. let url = '{{url('waybill/deliveringExport')}}';
  295. let token='{{ csrf_token() }}';
  296. excelExport(checkAllSign,this.checkData,url,this.sum,token);
  297. },
  298. enlarge(e){
  299. e.target.style.width="150px";
  300. },
  301. shrink(e){
  302. e.target.style.width="50px";
  303. },
  304. submit(waybill_id,id=null){
  305. if (!confirm('确定要提交吗?')){return;}
  306. let _this=this;
  307. let data={};
  308. data['id'] = id ? waybill_id : '';
  309. data['carrier_bill'] = $("#carrier_bill"+waybill_id).val();
  310. data['inquire_tel'] = $("#inquire_tel"+waybill_id).val();
  311. data['amount'] = $("#amount"+waybill_id).val();
  312. data['carrier_weight'] = $("#carrier_weight"+waybill_id).val();//体积
  313. data['carrier_weight_other'] = $("#carrier_weight_other"+waybill_id).val();//重量
  314. if (_this.errors["_"+data['id']])_this.errors["_"+data['id']]={};
  315. axios.post("{{url('waybill/storeCarrierBill')}}",data)
  316. .then(function (response) {
  317. if (response.data.error){
  318. tempTip.setDuration(3000);
  319. tempTip.show(response.data.error);
  320. return
  321. }
  322. if (response.data.errors){
  323. Vue.set(_this.errors,"_"+data['id'],response.data.errors);
  324. setTimeout(function(){
  325. $(".tooltipTargetError").tooltip('show');
  326. },1);
  327. return;
  328. }
  329. _this.waybills.some(function (waybill) {
  330. if (waybill.id===data['id']){
  331. waybill.carrier_bill=response.data.carrier_bill;
  332. waybill.inquire_tel=response.data.inquire_tel;
  333. waybill.amount=response.data.amount;
  334. waybill.amount_unit_name=response.data.amount_unit_name;
  335. waybill.carrier_weight=response.data.carrier_weight;
  336. waybill.carrier_weight_other=response.data.carrier_weight_other;
  337. waybill.isBtn=false;
  338. tempTip.setDuration(2000);
  339. tempTip.showSuccess('录入成功!');
  340. return true;
  341. }
  342. });
  343. }).catch(function (err) {
  344. tempTip.setDuration(3000);
  345. tempTip.show('网络异常:'+err);
  346. });
  347. }}
  348. });
  349. </script>
  350. @endsection