show.blade.php 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681
  1. @extends('layouts.app')
  2. @section('title')盘收一体-任务@endsection
  3. @section('content')
  4. <span id="nav2">
  5. @component('store.menu')@endcomponent
  6. @component('store.checkingReceive.menu')
  7. @can('入库管理-盘收一体-盘收')
  8. <li class="nav-item">
  9. <a class="nav-link" href="{{URL::current()}}" :class="{active:isActive('mission',3)}">盘收</a>
  10. </li>@endcan
  11. @endcomponent
  12. </span>
  13. <div id="container" class="d-none container-fluid">
  14. @include('store.checkingReceive._modal')
  15. @can('入库管理-盘收一体-盘收-编辑')
  16. <div class="row m-2 card" v-if="is_show">
  17. <audio src="{{asset('sound/warning_otherBarcode.mp3')}}" controls="controls" preload id="soundWarning" hidden>
  18. </audio>
  19. <audio src="{{asset('sound/ding.mp3')}}" controls="controls" preload id="soundDing" hidden>
  20. </audio>
  21. <div class="card-body col-12">
  22. <div class="col-12">
  23. <p class="text-muted small" v-if="inputMode=='regular'">常规:可输入效期,相同条码记录不会合并</p>
  24. <p class="text-muted small" v-if="inputMode=='increasing'">逐一扫描:处理单一重复商品,每扫一次对应隔口总数量自动递增,扫到不同条码会提示</p>
  25. <p class="text-muted small" v-if="inputMode=='multiIncreasing'">边扫边分:处理多种商品,自动将扫到的不同条码数量递增到各自隔口号</p>
  26. <ul class="nav nav-tabs mb-4 mt-n3">
  27. <li class="nav-item"><a style="cursor: pointer" class="nav-link text-primary" :class="inputMode=='regular'?'active':''"
  28. @click="switchMenu('regular')">常规</a></li>
  29. <li class="nav-item"><a style="cursor: pointer" class="nav-link text-primary" :class="inputMode=='increasing'?'active':''"
  30. @click="switchMenu('increasing')">逐一扫描</a></li>
  31. <li class="nav-item"><a style="cursor: pointer" class="nav-link text-primary" :class="inputMode=='multiIncreasing'?'active':''"
  32. @click="switchMenu('multiIncreasing')">边扫边分</a></li>
  33. </ul>
  34. </div>
  35. <div class="col-12 row">
  36. <div class="col-6">
  37. <div v-if="inputMode=='regular'">
  38. <div class="btn btn-sm btn-outline-primary" v-if="status.barcodeDisable" @click="status.barcodeDisable=false">手动输入</div>
  39. <div class="btn btn-sm btn-outline-danger" v-if="!status.barcodeDisable" @click="status.barcodeDisable=true">扫描输入</div>
  40. </div>
  41. <input type="text" id="barcode" class="form-control"
  42. :placeholder="status.barcodeDisable ? '扫入条码' : '输入条码'" :disabled="status.barcodeDisable" v-model="inputting.barcode" :class="inputMode=='regular' ? '' : 'mt-4'"
  43. @focusin="focusOutDocument" @focusout="focusDocument">
  44. <div v-if="inputMode=='regular'">
  45. <div class="card-title">生产日期:</div>
  46. <input type="date" class="form-control mb-2"
  47. v-model="inputting.produce_date" @focusin="focusOutDocument" @focusout="focusDocument" @keyup="oninputEnter">
  48. <div class="card-title">失效日期:</div>
  49. <input type="date" class="form-control mb-2"
  50. v-model="inputting.valid_date" @focusin="focusOutDocument" @focusout="focusDocument" @keyup="oninputEnter">
  51. <div class="card-title">唯一码:</div>
  52. <input type="text" class="form-control mb-2"
  53. v-model="inputting.unique_code" @focusin="focusOutDocument" @focusout="focusDocument" @keyup="oninputEnter">
  54. </div>
  55. </div>
  56. <div class="col-6">
  57. <div class="card-title" id="amountLabel">输入数量:</div>
  58. <div class="input-group mt-n2 mb-2">
  59. <input type="number" id="amount" style='height: 40px;font-size: 1.6em;color:blue;font-weight: bolder;padding: 3px;text-align: center' class="form-control" placeholder=""
  60. :disabled="status.amountDisable" v-model="inputting.amount" @focusin="focusOutDocument" @focusout="focusDocument" @keyup="oninputEnter">
  61. </div>
  62. <div class="card-title">格口号:</div>
  63. <input type="number" id="bin_number" class="form-control mt-n2 mb-2" style='height: 100px;font-size: 5em;color:red;font-weight: bolder;padding: 3px;text-align: center'
  64. v-model="inputting.bin_number" :disabled="status.binDisable" @focusin="focusOutDocument" @focusout="focusDocument" @keyup="oninputEnter">
  65. <div v-if="inputMode=='regular'" class="mt-4">
  66. <div class="card-title">批次号:</div>
  67. <input type="text" class="form-control mb-2"
  68. v-model="inputting.batch_number" @focusin="focusOutDocument" @focusout="focusDocument" @keyup="oninputEnter">
  69. </div>
  70. </div>
  71. <div class="col-12" v-if="status.commitButtonVisible && inputMode=='regular'" >
  72. <button class="btn btn-success btn form-control" @click="commitGoods">确定</button>
  73. </div>
  74. </div>
  75. </div>
  76. </div>
  77. @endcan
  78. <div class="ml-2 mt-2">
  79. <button type="button" class="btn btn-sm btn-outline-dark" @click="exportItem()">导出</button>
  80. @can('入库管理-盘收一体-盘收-编辑')<button type="button" v-if="storeCheckingReceive.status != '已收货'" class="btn btn-sm btn-outline-danger" @click="isResetAmount()">重新清点</button>@endcan
  81. @can('入库管理-盘收一体-盘收-编辑')<button type="button" v-if="storeCheckingReceive.status != '已收货'" class="btn btn-sm btn-outline-success" data-toggle="modal" data-target="#asnWindow">匹配ASN单据</button>@endcan
  82. </div>
  83. <div class="row text-primary ml-1 mr-2 mt-1 mb-1 w-100" style="background-color: #c3e3b5">
  84. <span class="ml-md-1">任务ID: <b class="text-dark">@{{ storeCheckingReceive.id }}</b></span>
  85. <span class="ml-md-3"> &nbsp;货主: <b class="text-dark">@{{ storeCheckingReceive.owner_name }}</b></span>
  86. <span class="ml-md-3">创建时间: <b class="text-dark">@{{ storeCheckingReceive.created_at }}</b></span>
  87. <span class="ml-md-3">ASN号: <b class="text-dark">@{{ storeCheckingReceive.asn }}</b></span>
  88. </div>
  89. <!-- pc >544 -->
  90. <div class="d-none d-sm-block">
  91. <table class="table table-sm text-nowrap table-bordered d-none" id="headerRoll"></table>
  92. <table class="table table-striped table-sm text-nowrap table-hover mt-1" id="headerParent">
  93. <tr id="header"></tr>
  94. <tr v-for="(storeCheckingReceiveItem,i) in storeCheckingReceiveItems">
  95. <td>@{{ i+1 }}</td>
  96. <td>@{{ storeCheckingReceiveItem.bin_number }}</td>
  97. <td>@{{ storeCheckingReceiveItem.commodity_name }}</td>
  98. <td>
  99. <span v-for="commodity_barcode in storeCheckingReceiveItem.commodity_barcodes">
  100. <small>@{{ commodity_barcode.code }}</small><br>
  101. </span>
  102. </td>
  103. <td>@{{ storeCheckingReceiveItem.imported_amount }}</td>
  104. <td @click="showInput(storeCheckingReceiveItem.id)" v-if="is_show">
  105. <div class="form-inline">
  106. <input @blur="delFocus()" :id = "'counted_amount_'+storeCheckingReceiveItem.id" :value="storeCheckingReceiveItem.counted_amount"
  107. class="form-control form-control-sm" type="text" :disabled="disabledItemId == storeCheckingReceiveItem.id ? false : true">
  108. <button v-if="disabledItemId == storeCheckingReceiveItem.id" type="button" class="btn btn-sm btn-success ml-1"
  109. @click="updateCountedAmount(storeCheckingReceiveItem)">确定</button>
  110. <button v-if="disabledItemId == storeCheckingReceiveItem.id" type="button" class="btn btn-sm btn-danger"
  111. @click="disabledItemId = ''">取消</button>
  112. </div>
  113. </td>
  114. <td v-if="!is_show">@{{ storeCheckingReceiveItem.counted_amount }}</td>
  115. <td>@{{ storeCheckingReceiveItem.asn_amount }}</td>
  116. <td>@{{ storeCheckingReceiveItem.imported_diff_amount }}</td>
  117. <td>@{{ storeCheckingReceiveItem.asn_diff_amount }}</td>
  118. <td>@{{ storeCheckingReceiveItem.produced_at }}</td>
  119. <td>@{{ storeCheckingReceiveItem.invalid_at }}</td>
  120. <td>@{{ storeCheckingReceiveItem.batch_code }}</td>
  121. <td>@{{ storeCheckingReceiveItem.unique_code }}</td>
  122. </tr>
  123. </table>
  124. </div>
  125. <!-- phone <544 -->
  126. <div class="d-xl-none">
  127. <div v-for="(storeCheckingReceiveItem,i) in storeCheckingReceiveItems" class="mt-1 border border-1 rounded"
  128. @click="openAll(storeCheckingReceiveItem.id)">
  129. <div class="row">
  130. <div class="col-6">
  131. <label class="text-muted">序号:</label>@{{ i+1 }}
  132. </div>
  133. <div class="col-6">
  134. <span class="pull-right mr-1 text-muted font-weight-bold">···</span>
  135. </div>
  136. </div>
  137. <div class="row">
  138. <div class="col-12 row">
  139. <label class="text-primary col-3 mr-0">条码:</label>
  140. <div class="col-9 ml-0">
  141. <span v-for="commodity_barcode in storeCheckingReceiveItem.commodity_barcodes">
  142. <small>@{{ commodity_barcode.code }}</small><br>
  143. </span>
  144. </div>
  145. </div>
  146. </div>
  147. <div class="row">
  148. <div class="col-12">
  149. <label class="text-muted">名称:</label>@{{ storeCheckingReceiveItem.commodity_name }}
  150. </div>
  151. </div>
  152. <div class="row">
  153. <div class="col-6">
  154. <label class="text-muted">格口号:</label>@{{ storeCheckingReceiveItem.bin_number }}
  155. </div>
  156. <div class="col-6">
  157. <label class="text-muted">实盘数:</label>@{{ storeCheckingReceiveItem.counted_amount }}
  158. </div>
  159. </div>
  160. <div v-if="signOpenId == storeCheckingReceiveItem.id">
  161. <div class="row">
  162. <div class="col-6">
  163. <label class="text-muted">导入数:</label>@{{ storeCheckingReceiveItem.imported_amount }}
  164. </div>
  165. <div class="col-6">
  166. <label class="text-muted">ASN数:</label>@{{ storeCheckingReceiveItem.asn_amount }}
  167. </div>
  168. </div>
  169. <div class="row">
  170. <div class="col-6">
  171. <label class="text-muted">导入差异:</label>@{{ storeCheckingReceiveItem.imported_diff_amount }}
  172. </div>
  173. <div class="col-6">
  174. <label class="text-muted">ASN差异:</label>@{{ storeCheckingReceiveItem.asn_amount }}
  175. </div>
  176. </div>
  177. <div class="row">
  178. <div class="col-6">
  179. <label class="text-muted">导入差异:</label>@{{ storeCheckingReceiveItem.imported_amount }}
  180. </div>
  181. <div class="col-6">
  182. <label class="text-muted">ASN差异:</label>@{{ storeCheckingReceiveItem.asn_diff_amount }}
  183. </div>
  184. </div>
  185. <div class="row">
  186. <div class="col-6">
  187. <label class="text-muted">生产日期:</label>@{{ storeCheckingReceiveItem.produced_at }}
  188. </div>
  189. <div class="col-6">
  190. <label class="text-muted">有效日期:</label>@{{ storeCheckingReceiveItem.invalid_at }}
  191. </div>
  192. </div>
  193. <div class="row">
  194. <div class="col-6">
  195. <label class="text-muted">唯一号码:</label>@{{ storeCheckingReceiveItem.unique_code }}
  196. </div>
  197. <div class="col-6">
  198. <label class="text-muted">批次号码:</label>@{{ storeCheckingReceiveItem.batch_code }}
  199. </div>
  200. </div>
  201. </div>
  202. </div>
  203. </div>
  204. </div>
  205. @stop
  206. @section('lastScript')
  207. <script type="text/javascript" src="{{asset('js/queryForm/header200826b.js')}}"></script>
  208. <script>
  209. new Vue({
  210. el:"#container",
  211. data:{
  212. storeCheckingReceive:{id:'{{$storeCheckingReceive->id}}',owner_name:'{{$storeCheckingReceive->owner ? $storeCheckingReceive->owner->name : ''}}',
  213. created_at:'{{$storeCheckingReceive->created_at}}',asn:'{{$storeCheckingReceive->asn}}',status:'{{$storeCheckingReceive->status}}'},
  214. storeCheckingReceiveItems:[
  215. @foreach($storeCheckingReceive->storeCheckingReceiveItems as $storeCheckingReceiveItem)
  216. {id:'{{$storeCheckingReceiveItem->id}}',bin_number:'{{$storeCheckingReceiveItem->bin_number}}',
  217. commodity_name:"{{$storeCheckingReceiveItem->commodity ? $storeCheckingReceiveItem->commodity->name : ''}}",
  218. commodity_barcodes:{!! $storeCheckingReceiveItem->commodity ? ($storeCheckingReceiveItem->commodity->barcodes ? $storeCheckingReceiveItem->commodity->barcodes : []) : [] !!},
  219. imported_amount:'{{$storeCheckingReceiveItem->imported_amount}}',counted_amount:'{{$storeCheckingReceiveItem->counted_amount}}',
  220. asn_amount:'{{$storeCheckingReceiveItem->asn_amount}}',imported_diff_amount:'{{$storeCheckingReceiveItem->imported_diff_amount}}',
  221. asn_diff_amount:'{{$storeCheckingReceiveItem->asn_diff_amount}}',produced_at:'{{$storeCheckingReceiveItem->produced_at}}',
  222. invalid_at:'{{$storeCheckingReceiveItem->invalid_at}}',batch_code:'{{$storeCheckingReceiveItem->batch_code}}',
  223. unique_code:'{{$storeCheckingReceiveItem->unique_code}}'},
  224. @endforeach
  225. ],
  226. inputMode : 'regular',
  227. status:{
  228. barcodeDisable : true,
  229. commitButtonVisible:false,
  230. scanEndInputted:false,
  231. amountDisable : false,
  232. binDisable : false,
  233. },
  234. focusing : 'document',
  235. inputting:{
  236. barcode : '',
  237. amount : '',
  238. bin_number : '',
  239. batch_number : '',
  240. produce_date : '',
  241. valid_date : '',
  242. unique_code:'',
  243. },
  244. lastScannedBarcode : '',
  245. asn : '',
  246. is_show : {!! $is_show !!},
  247. signOpenId : "",
  248. disabledItemId : "",
  249. },
  250. mounted(){
  251. $('#container').removeClass('d-none');
  252. $(".tooltipTarget").tooltip({'trigger':'hover'});
  253. let column = [
  254. {name:'index',value: '序号', neglect: true},
  255. {name:'bin_number',value: '格口号'},
  256. {name:'commodity_name',value: '商品名'},
  257. {name:'commodity_barcode',value: '商品条码'},
  258. {name:'imported_amount',value: '导入数量', neglect: true},
  259. {name:'counted_amount',value: '实盘数量', neglect: true},
  260. {name:'asn_amount',value: 'ASN数量', neglect: true},
  261. {name:'imported_diff_amount',value: '导入差异数', neglect: true},
  262. {name:'asn_diff_amount',value: 'ASN差异数', neglect: true},
  263. {name:'produced_at',value: '生产日期'},
  264. {name:'invalid_at',value: '有效期'},
  265. {name:'batch_code',value: '批次号'},
  266. {name:'unique_code',value: '唯一码'},
  267. ];
  268. let header = new Header({
  269. el: "#header",
  270. column: column,
  271. data: this.storeCheckingReceiveItems,
  272. restorationColumn: 'id',
  273. });
  274. header.init();
  275. this.scanListening();
  276. },
  277. methods:{
  278. //显示该条全部信息
  279. openAll(id){
  280. if (this.signOpenId === id ) this.signOpenId = "";
  281. else this.signOpenId = id;
  282. },
  283. //获取焦点,取消全局监听
  284. showInput(id){
  285. if (this.disabledItemId === id)return;
  286. this.focusing = "";
  287. document.getElementById('counted_amount_'+id).focus();
  288. this.disabledItemId = id;
  289. },
  290. //实盘数量输出框失焦
  291. delFocus(){
  292. this.focusDocument();
  293. },
  294. //执行修改
  295. updateCountedAmount(item){
  296. let counted_amount = document.getElementById('counted_amount_'+item.id).value;
  297. if(!counted_amount || parseInt(counted_amount) != counted_amount){
  298. tempTip.setDuration(3000);
  299. tempTip.show('请输入正整数!');
  300. return;
  301. }
  302. axios.post('{{url('store/checkingReceive/updateCountedAmount')}}',{id : item.id,counted_amount : counted_amount})
  303. .then((res)=>{
  304. if (res.data.success){
  305. item.counted_amount = counted_amount;
  306. this.disabledItemId = "";
  307. tempTip.setDuration(2000);
  308. tempTip.showSuccess("实盘数量成功修改为“"+counted_amount+"”");
  309. return;
  310. }
  311. tempTip.setDuration(3000);
  312. tempTip.show(res.data.data);
  313. })
  314. .catch((err)=>{
  315. tempTip.setDuration(3000);
  316. tempTip.show('网络错误:'+err);
  317. });
  318. },
  319. switchMenu(menuName){
  320. this.inputMode = menuName;
  321. this.cleanInputs();
  322. if (menuName === 'regular') {
  323. this.status.amountDisable = false;
  324. $('#amountLabel').text('输入数量:');
  325. }else {
  326. this.status.amountDisable = true;
  327. $('#amountLabel').text('扫入数量:');
  328. }
  329. },
  330. scanListening: function () {
  331. let _this = this;
  332. $(document).on('keypress', function (e) {
  333. if(_this.focusing!=='document'){return}
  334. if(!_this.status.barcodeDisable){return}
  335. if (e.keyCode !== 13) {
  336. if(_this.status.scanEndInputted){
  337. _this.inputting.barcode='';
  338. _this.status.scanEndInputted=false;
  339. }
  340. _this.inputting.barcode += String.fromCharCode(e.keyCode);
  341. } else {
  342. if(_this.inputting.barcode.length<=1){
  343. window.tempTip.setDuration(4500);
  344. window.tempTip.show('未扫入条码,请检查扫码枪设置,尝试调至“直接键盘输出”模式');
  345. return;
  346. }
  347. _this.status.scanEndInputted = true;
  348. switch(_this.inputMode){
  349. case 'regular' : _this.commitGoodsOnRegularMode();break;
  350. case 'increasing': _this.commitGoodsOnIncreasingMode();break;
  351. case 'multiIncreasing': _this.commitGoodsOnIncreasingMode(false);break;
  352. }
  353. }
  354. });
  355. },
  356. showCommitButton: function () {
  357. if(this.inputting.barcode && this.inputting.amount /*&& this.inputting.bin_number*/){
  358. if (this.status.commitButtonVisible){
  359. this.commitGoods();
  360. }else this.status.commitButtonVisible=true;
  361. }else{
  362. if (this.status.barcodeDisable){
  363. this.focusing = '';
  364. document.getElementById('amount').focus();
  365. }
  366. }
  367. },
  368. _isExist(item){
  369. if (item.bin_number == this.inputting.bin_number
  370. && item.batch_code == this.inputting.batch_number
  371. && item.produced_at == this.inputting.produce_date
  372. && item.unique_code == this.inputting.unique_code
  373. && item.invalid_at == this.inputting.valid_date){
  374. return true;
  375. }
  376. return false;
  377. },
  378. commitGoods: function () {
  379. window.tempTip.setDuration(3000);
  380. if (this.inputMode === 'regular'){
  381. if (!this.inputting.amount) {window.tempTip.show('请输入数量');return;}
  382. let item = this.getItem();
  383. if (item){
  384. if (item.produced_at && !this.inputting.produce_date){window.tempTip.show('请输入生产日期');return;}
  385. if (item.invalid_at && !this.inputting.valid_date){window.tempTip.show('请输入失效日期');return;}
  386. if (item.batch_code && !this.inputting.batch_number){window.tempTip.show('请输入批次号');return;}
  387. if (this._isExist(item)){
  388. if (!confirm('该单盘点已存在是否叠加数量?'))return;
  389. }
  390. }
  391. }
  392. if(!this.inputting.barcode){window.tempTip.show('请扫入条码');return;}
  393. else if(!this.inputting.bin_number){window.tempTip.show('请输入隔口号');return;}
  394. axios.post('{{url('store/checkingReceive/insertItem')}}',{mission_id : this.storeCheckingReceive.id,goods : this.inputting})
  395. .then(res=>{
  396. if (res.data.success) {
  397. this.lastScannedBarcode = this.inputting.barcode;
  398. if (res.data.type === 'create'){
  399. this._addStoreCheckingReceiveItem(res.data.data);
  400. window.tempTip.setDuration(2000);
  401. window.tempTip.showSuccess('成功提交:' + this.inputting.barcode);
  402. }else{
  403. if (this.storeCheckingReceiveItems.length > 0 && res.data.data.id === this.storeCheckingReceiveItems[0].id){
  404. this.storeCheckingReceiveItems[0].counted_amount = res.data.data.counted_amount;
  405. this.storeCheckingReceiveItems[0].imported_diff_amount = res.data.data.imported_diff_amount;
  406. this.storeCheckingReceiveItems[0].asn_diff_amount = res.data.data.asn_diff_amount;
  407. this.storeCheckingReceiveItems[0].bin_number = res.data.data.bin_number;
  408. }else{
  409. this._removeCheckingReceiveItem(res.data.data.id);
  410. this._addStoreCheckingReceiveItem(res.data.data);
  411. }
  412. this.inputting.amount = res.data.data.counted_amount;
  413. window.tempTip.setDuration(2000);
  414. window.tempTip.showSuccess('成功增加“'+this.inputting.barcode+'”实盘数量')
  415. }
  416. if (this.status.commitButtonVisible) this.status.commitButtonVisible=false;
  417. this.audioDing();
  418. if (this.inputMode === 'regular')this.cleanInputs();
  419. if (this.inputting.bin_number && !this.status.binDisable)this.status.binDisable = true;
  420. return;
  421. }
  422. window.tempTip.setDuration(3000);
  423. window.tempTip.show(res.data.data);
  424. }).catch(err=>{
  425. window.tempTip.setDuration(3000);
  426. window.tempTip.show("网络错误:"+err);
  427. });
  428. },
  429. _addStoreCheckingReceiveItem(item){
  430. let storeCheckingReceiveItem = {
  431. id:item.id,
  432. bin_number:item.bin_number,
  433. commodity_name:item.commodity ? item.commodity.name : '',
  434. commodity_barcodes:item.commodity ? item.commodity.barcodes : [],
  435. imported_amount:item.imported_amount,
  436. counted_amount:item.counted_amount,
  437. asn_amount:item.asn_amount,
  438. imported_diff_amount:item.imported_diff_amount,
  439. asn_diff_amount:item.asn_diff_amount,
  440. produced_at:item.produced_at,
  441. invalid_at:item.invalid_at,
  442. batch_code:item.batch_code,
  443. unique_code:item.unique_code,
  444. };
  445. this.storeCheckingReceiveItems.unshift(storeCheckingReceiveItem);
  446. },
  447. _removeCheckingReceiveItem(id){
  448. this.storeCheckingReceiveItems.some((item,index)=>{
  449. if (item.id == id){
  450. this.storeCheckingReceiveItems.splice(index,1);
  451. return true;
  452. }
  453. });
  454. },
  455. cleanInputs: function () {
  456. this.inputting.barcode='';
  457. this.inputting.amount='';
  458. this.inputting.bin_number='';
  459. this.inputting.produce_date='';
  460. this.inputting.unique_code='';
  461. this.inputting.valid_date='';
  462. this.inputting.batch_number='';
  463. this.status.commitButtonVisible=false;
  464. this.status.binDisable=false;
  465. this.status.barcodeDisable = true;
  466. },
  467. autoFillBin: function () {
  468. let isNotRepeatingBarcode=this.storeCheckingReceiveItems.every(item=>{
  469. if (item.commodity_barcodes.length > 0){
  470. return item.commodity_barcodes.every(barcode=> {
  471. if (barcode.code === this.inputting.barcode){
  472. if (item.bin_number){
  473. this.inputting.bin_number=item.bin_number;
  474. this.status.binDisable=true;
  475. }
  476. return false;
  477. }
  478. return true;
  479. });
  480. }else return true;
  481. });
  482. if(isNotRepeatingBarcode) this.status.binDisable=false;
  483. },
  484. commitGoodsOnRegularMode(){
  485. this.showCommitButton();
  486. },
  487. commitGoodsOnIncreasingMode: function (signIncreasing = true) {
  488. let item = this.getItem();
  489. let _this = this;
  490. if (!item){
  491. _this.focusOutDocument();
  492. window.tempTip.setInputType('number');
  493. window.tempTip.inputVal('该商品第一件递增请输入隔口号:', function (bin_number) {
  494. if (bin_number === '') {
  495. window.tempTip.setDuration(2200);
  496. window.tempTip.show('未输入隔口号,请重新扫描');
  497. _this.alertVibrate();
  498. _this.focusDocument();
  499. return;
  500. }
  501. _this.inputting.bin_number = bin_number;
  502. _this.inputting.amount = 1;
  503. _this.commitGoods();
  504. _this.focusDocument();
  505. });
  506. return;
  507. }
  508. _this.status.binDisable=true;
  509. if (item.bin_number) {
  510. _this.inputting.bin_number = item.bin_number;
  511. _this.commit(item, signIncreasing);
  512. }else{
  513. //_this.status.binDisable=false;
  514. _this.lastScannedBarcode = _this.inputting.barcode;
  515. //_this.inputting.bin_number = item.bin_number;
  516. _this.focusOutDocument();
  517. window.tempTip.setInputType('number');
  518. window.tempTip.inputVal('该条码存在但无隔口号,请输入:', function (bin_number) {
  519. if (bin_number === '') {
  520. window.tempTip.setDuration(2200);
  521. window.tempTip.show('未输入隔口号,请重新扫描');
  522. _this.alertVibrate();
  523. _this.focusDocument();
  524. return;
  525. }
  526. _this.inputting.bin_number = bin_number;
  527. _this.commit(item, signIncreasing);
  528. });
  529. }
  530. },
  531. commit(item, signIncreasing){
  532. this.inputting.amount = '';
  533. this.inputting.produce_date=item.produced_at;
  534. this.inputting.unique_code=item.unique_code;
  535. this.inputting.valid_date=item.invalid_at;
  536. this.inputting.batch_number=item.batch_code;
  537. if (signIncreasing && this.lastScannedBarcode && this.lastScannedBarcode !== this.inputting.barcode) {
  538. this.audioWarning_otherBarcode();
  539. this.focusOutDocument();
  540. window.tempTip.confirm('扫到其它条码,是否切换至新条码并记录?', ()=>{
  541. this.commitGoods();
  542. this.focusDocument();
  543. }, () => {
  544. this.focusDocument();
  545. });
  546. }else{
  547. this.commitGoods();
  548. this.focusDocument();
  549. }
  550. },
  551. getItem: function () {
  552. let repeatedGoods=null;
  553. this.storeCheckingReceiveItems.every(item=>{
  554. if (item.commodity_barcodes.length > 0){
  555. return item.commodity_barcodes.every(barcode=> {
  556. if (barcode.code === this.inputting.barcode){
  557. repeatedGoods = item;
  558. return false;
  559. }
  560. return true;
  561. });
  562. }else return true;
  563. });
  564. return repeatedGoods;
  565. },
  566. oninputEnter:function(e){
  567. if (e.key === 'Enter') {
  568. this.focusDocument();
  569. this.showCommitButton();
  570. }
  571. },
  572. focusDocument: function () {
  573. this.focusing = 'document';
  574. },
  575. focusOutDocument: function () {
  576. this.focusing = '';
  577. this.autoFillBin();
  578. },
  579. audioWarning_otherBarcode: function () {
  580. let audio = document.getElementById('soundWarning');
  581. audio.currentTime = 0;//重新播放
  582. if(audio.paused){
  583. audio.play();// 播放
  584. }
  585. this.alertVibrate();
  586. },
  587. audioDing: function () {
  588. let audio = document.getElementById('soundDing');
  589. audio.currentTime = 0;//重新播放
  590. audio.play();// 播放
  591. //手机震动
  592. function startVibrate(duration) {
  593. if (navigator.vibrate) {
  594. navigator.vibrate(duration);
  595. } else if (navigator.webkitVibrate) {
  596. navigator.webkitVibrate(duration);
  597. }
  598. }
  599. startVibrate(500);
  600. },
  601. alertVibrate: function () {
  602. function startVibrate(duration) {
  603. if (navigator.vibrate) {
  604. navigator.vibrate(duration);
  605. } else if (navigator.webkitVibrate) {
  606. navigator.webkitVibrate(duration);
  607. }
  608. }
  609. let vibrateInterval = setInterval(function() {
  610. startVibrate(150);
  611. }, 50);
  612. setTimeout(function() {
  613. clearInterval(vibrateInterval)
  614. }, 2000);
  615. },
  616. exportItem(){
  617. let url = '{{url('store/checkingReceive/mission/export?mission_id=')}}'+this.storeCheckingReceive.id;
  618. window.open(url);
  619. },
  620. isResetAmount(){
  621. window.tempTip.confirm('是否要进行重新清点,该操作会重置当前任务所有已盘数量!',()=>{
  622. this.resetAmount();
  623. });
  624. },
  625. resetAmount(){
  626. axios.post('{{url('store/checkingReceive/mission/resetAmount')}}',{mission_id:this.storeCheckingReceive.id})
  627. .then(res=>{
  628. if (res.data.success){
  629. this.storeCheckingReceiveItems.forEach(function (item) {
  630. item.counted_amount = 0;
  631. item.imported_diff_amount = '';
  632. item.asn_diff_amount = '';
  633. });
  634. window.tempTip.setDuration(2000);
  635. window.tempTip.showSuccess('重新清点完毕,数量已重置为0');
  636. return;
  637. }
  638. window.tempTip.setDuration(3000);
  639. window.tempTip.show(res.data.data);
  640. }).catch(err=>{
  641. window.tempTip.setDuration(3000);
  642. window.tempTip.show("网络错误:"+err);
  643. });
  644. },
  645. matchASN(){
  646. if (!this.asn){
  647. window.tempTip.setIndex(1099);
  648. window.tempTip.setDuration(3000);
  649. window.tempTip.show('请输入ASN号!');
  650. return;
  651. }
  652. axios.post('{{url('store/checkingReceive/mission/matchASN')}}',{asn:this.asn,mission_id:this.storeCheckingReceive.id})
  653. .then(res=>{
  654. if (res.data.success){
  655. window.tempTip.setIndex(1099);
  656. window.tempTip.setDuration(2000);
  657. window.tempTip.showSuccess("匹配成功");
  658. location.reload();
  659. return;
  660. }
  661. window.tempTip.setIndex(1099);
  662. window.tempTip.setDuration(3000);
  663. window.tempTip.show(res.data.data);
  664. }).catch(err=>{
  665. window.tempTip.setIndex(1099);
  666. window.tempTip.setDuration(3000);
  667. window.tempTip.show("网络错误:"+err);
  668. });
  669. }
  670. },
  671. });
  672. </script>
  673. @stop