receive.blade.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. @extends('layouts.app')
  2. @section('title')手持入库-收货@endsection
  3. @section('content')
  4. <div class="d-none" id="container">
  5. <div class="card offset-md-3 col-md-6">
  6. <div class="card-header text-center mt-2 bg-transparent" id="header_title">
  7. <span class="font-weight-bold h4">收货</span>
  8. </div>
  9. <div class="card-body" >
  10. <div class="offset-1">
  11. <span class="font-weight-bold">ASN号:</span><br>
  12. <p class="small font-weight-light">可输入条码,ASN号,货主编号(如:YOUWU)_搜索</p>
  13. <div class="form-group row mt-2">
  14. <label for="asn"></label>
  15. <input type="text" class="form-control col-8" id="asn" autocomplete="off"
  16. :class="errors.asnno ? 'is-invalid' : ''" v-model="info.asnno">
  17. <span class="ml-2">
  18. <button type="button" id="select" class="btn btn-info" @click="selectAsn()">搜索</button>
  19. </span>
  20. <span class="invalid-feedback" role="alert" v-if="errors.asnno">
  21. <strong>@{{ errors.asnno[0] }}</strong>
  22. </span>
  23. </div>
  24. </div>
  25. <div style="overflow: auto;overflow-x: hidden" id="cardTable">
  26. <table class="table-sm table-striped table-bordered table-hover mb-3"
  27. style="background: rgb(255, 255, 255);">
  28. <tr v-for="(asn,i) in asns" @click="selectTrOne(i,asn)" :class="selectTr===i+1?'focusing' : ''">
  29. <td style="filter:grayscale(30%);">
  30. <div>
  31. <div style="transform:scale(1)" class="pl-0">
  32. <span><span class="text-danger">ASN编号:</span><span class="text-black font-weight-bold">@{{ asn.asnno }}</span></span><br>
  33. <span>
  34. <span >状态:</span>
  35. <span class="text-lowercase small" v-if="asn.asnstatus==='00'">订单创建</span>
  36. <span class="text-lowercase small" v-if="asn.asnstatus==='30'">部分收货</span>
  37. </span>
  38. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
  39. <span><span>货主:</span><span class="text-black font-weight-bold small">@{{ asn.customerid }}</span></span><br>
  40. <span><span class="text-lowercase">客户订单号1:</span><span class="text-lowercase">@{{ asn.asnreference1 }} </span></span>
  41. <span><span class="text-black">创建时间:</span><span class="text-black-50">@{{ asn.addtime }}</span></span>
  42. <span>
  43. <span class="btn btn-success btn-sm" v-if="!asn.up" @click.stop="getAsnDetails(asn)">明细</span>
  44. <span class="btn btn-secondary btn-sm" v-if="asn.up" @click.stop="closeDetail(asn)">收起</span>
  45. </span>
  46. <table class="table-sm table-borderless" v-if="asns.length>0 && asn.asnDetails && asn.up">
  47. <tr v-for="(asnDetail,i) in asn.asnDetails">
  48. <td>
  49. <span><span class="small">产品:</span><span class="text-black small">@{{ asnDetail.sku }}</span></span>
  50. <span><span class="small">条码:</span><span class="text-black font-weight-bold small">@{{ asnDetail.alternate_sku1 }}</span></span>
  51. <span><span class="small">品名:</span><span class="text-black small">@{{ asnDetail.skudescrc }}</span></span>
  52. <span><span class="small">预期数量:</span><span class="text-black font-weight-bold small">@{{ asnDetail.expectedqty }}</span></span>
  53. <span><span class="small">已收数量:</span><span class="text-black font-weight-bold small">@{{ asnDetail.receivedqty }}</span></span>
  54. <td/>
  55. </tr>
  56. </table>
  57. </div>
  58. </div>
  59. </td>
  60. </tr>
  61. </table>
  62. </div>
  63. </div>
  64. <div class="card-footer bg-transparent">
  65. <button type="button" id="confirm" class="btn btn-sm btn-outline-success float-right" @click="ensure()">确定</button>
  66. <button type="button" id="cancel" class="btn btn-sm btn-outline-info float-left" @click="cancel()">取消</button>
  67. </div>
  68. </div>
  69. </div>
  70. @stop
  71. @section('lastScript')
  72. <script type="text/javascript">
  73. new Vue({
  74. el:"#container",
  75. data:{
  76. height:0,//屏幕高度
  77. info:{},
  78. errors:{},
  79. asns:[],
  80. selectTr:'',
  81. isAndroid:false,
  82. asnno:'',
  83. customerid:'',
  84. },
  85. mounted(){
  86. if (navigator.userAgent.indexOf("Android")!==-1)this.isAndroid = true;
  87. this.pageInit();
  88. $("#container").removeClass("d-none");
  89. this.height=window.screen.availHeight;
  90. document.getElementById('cardTable').style.height=this.height*0.35+'px';
  91. document.getElementById("asn").focus();
  92. },
  93. methods:{
  94. //页面初始化
  95. pageInit(){
  96. if (!this.isAndroid)return;
  97. let element = document.getElementById("navbarSupportedContent").parentElement;
  98. element.className = "row";
  99. element.children[0].className += " col-5";
  100. element.innerHTML = element.children[0].outerHTML;
  101. let e1 = document.getElementById("menu");
  102. let e2 = document.getElementById("demand-div");
  103. if (e1)e1.remove();
  104. if (e2)e2.remove();
  105. },
  106. selectAsn(){
  107. this.selectTr='';
  108. let url = '{{url('store/handInStorage/selectAsn')}}';
  109. window.axios.post(url,{asnno:this.info.asnno})
  110. .then(res=>{
  111. if (res.data.success){
  112. this.asns=res.data.data;
  113. this.$forceUpdate()
  114. return;
  115. }
  116. window.tempTip.setDuration(2000);
  117. window.tempTip.show(res.data.data);
  118. }).catch(err=>{
  119. window.tempTip.setDuration(2000);
  120. window.tempTip.show("网络错误:"+err);
  121. })
  122. },
  123. getAsnDetails(asn){
  124. if (!asn)return;
  125. let url = '{{url('store/handInStorage/selectAsnDetails')}}';
  126. window.axios.post(url,{asnno:asn.asnno})
  127. .then(res=>{
  128. if (res.data.success){
  129. this.asns.forEach(function (Asn){
  130. if (Asn.asnno==asn.asnno){
  131. Asn.up=true;
  132. Asn.asnDetails=res.data.data;
  133. }
  134. })
  135. this.$forceUpdate()
  136. return;
  137. }
  138. window.tempTip.setDuration(2000);
  139. window.tempTip.show(res.data.data);
  140. }).catch(err=>{
  141. window.tempTip.setDuration(2000);
  142. window.tempTip.show("网络错误:"+err);
  143. })
  144. },
  145. closeDetail(asn){
  146. this.asns.forEach(function (Asn){
  147. if (Asn.asnno==asn.asnno){
  148. Asn.up=false;
  149. }
  150. })
  151. this.$forceUpdate()
  152. },
  153. selectTrOne(i,asn){
  154. if (this.selectTr===i+1){
  155. this.selectTr=0
  156. }else {
  157. this.selectTr=i+1;
  158. this.info.asnno=asn.asnno;
  159. this.info.customerid=asn.customerid;
  160. this.info.asntype=asn.asntype;
  161. }
  162. },
  163. onfocus(){
  164. document.getElementById("asn").focus();
  165. },
  166. ensure(){
  167. let error = {};
  168. if (!this.info.asnno)error.asnno = ["ASN号必填"];
  169. if (this.info.asnno && this.info.asnno.indexOf('ASN')===-1)error.asnno = ["无效ASN号"];
  170. if (JSON.stringify(error)!=='{}'){this.errors = error;return;}
  171. if (!this.info.customerid||!this.info.asntype){this.info.customerid='';this.info.asntype='';}
  172. this.checkAsnOperation();
  173. },
  174. checkAsnOperation(){
  175. let url = '{{url('store/handInStorage/checkAsnOperation')}}';
  176. window.axios.post(url,{info:this.info})
  177. .then(res=>{
  178. if (res.data.success){
  179. window.location.href="{{url('store/handInStorage/receiveDetailPage')}}/" + res.data.data.asnno+'/'+ res.data.data.customerid;
  180. }else {
  181. window.tempTip.setDuration(2000);
  182. window.tempTip.show(res.data.data);
  183. }
  184. }).catch(err=>{
  185. window.tempTip.setDuration(2000);
  186. window.tempTip.show("网络错误:"+err);
  187. })
  188. },
  189. cancel(){
  190. setTimeout(function () {
  191. window.location.reload();
  192. this.onfocus();
  193. },100);
  194. },
  195. },
  196. });
  197. </script>
  198. @stop