haozi 4 жил өмнө
parent
commit
7381096742

+ 72 - 0
app/Http/Controllers/HandInStorageController.php

@@ -0,0 +1,72 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Components\AsyncResponse;
+use App\OracleDOCASNHeader;
+use App\Services\HandInStorageService;
+use Illuminate\Http\Request;
+
+class HandInStorageController extends Controller
+{
+    use AsyncResponse;
+    /**
+     * 搜索查詢asn
+     */
+    public function selectAsn(Request $request)
+    {
+        /** @var HandInStorageService $handInStorageService  */
+        $handInStorageService=app('HandInStorageService');
+        $asnno= $request->input('asnno');
+        $asns =$handInStorageService->selectAsn($asnno);
+        if ($asns->count()>0){
+            $this->success($asns);
+        }else{
+            $this->error('未搜索到ASN单');
+        }
+    }
+    /**
+     * @param $asnno
+     * 跳转到收货明细页面
+     */
+    public function receiveDetailPage($asnno,$customerid)
+    {
+        /** @var HandInStorageService $handInStorageService  */
+        $handInStorageService=app('HandInStorageService');
+        if (!$customerid||$customerid=='undefined')
+            $customerid=OracleDOCASNHeader::query()->where('asnno',$asnno)->value('customerid');
+        $qualityStatus=$handInStorageService->getQualityStatus();
+        $attributeLocations=$handInStorageService->getAttributeLocation();
+        return view('store.handInStorage.receiveDetailPage')
+            ->with(['asnno'=>$asnno,'customerid'=>$customerid,'qualityStatus'=>$qualityStatus,'attributeLocations'=>$attributeLocations]);
+    }
+
+    /**
+     * @param Request $request
+     * 查询富勒asn_detail(集合)
+     */
+    public function selectAsnDetails(Request $request)
+    {
+        $asnno= $request->input('asnno');
+        $asnDetails =app('HandInStorageService')->selectAsnDetails($asnno);
+        if ($asnDetails->count()>0)$this->success($asnDetails);
+        else $this->error('未搜索到ASN详情单');
+
+    }
+    /**
+     * @param Request $request
+     * 查询富勒bas_sku 并关联 bas_lotid
+     */
+    public function getBasSkuWithLot(Request $request): array
+    {
+        $customerid= $request->input('customerid');
+        $sku= $request->input('sku');
+        $asnno= $request->input('asnno');
+        $asnDetail=app('HandInStorageService')->getAsnDetail($asnno,$sku);
+        $basSku =app('HandInStorageService')->getBasSkuLotId($customerid,$sku);
+        if (isset($basSku)&&isset($asnDetail))return ['success'=>true,'basSku'=>$basSku,'asnDetail'=>$asnDetail];
+        else $this->error('无效条码');
+    }
+
+
+}

+ 1 - 0
app/Http/Controllers/TestController.php

@@ -39,6 +39,7 @@ use App\MeasuringMachine;
 use App\Menu;
 use App\Notifications\SendEmailNotification;
 use App\OracleActAllocationDetails;
+use App\OracleBasLotId;
 use App\OracleDOCASNHeader;
 use App\Order;
 use App\OrderBin;

+ 21 - 0
app/OracleBasLotId.php

@@ -0,0 +1,21 @@
+<?php
+
+namespace App;
+
+use App\Traits\ModelTimeFormat;
+use Illuminate\Database\Eloquent\Model;
+use App\Traits\ModelLogChanging;
+
+/**
+ * DB:      FLUX/WMS_USER
+ * TABLE:   BAS_LOTID
+ * EXPLAIN: 批次属性规则表
+ */
+class OracleBasLotId extends Model
+{
+    use ModelTimeFormat;
+    use ModelLogChanging;
+
+    protected $connection="oracle";
+    protected $table="BAS_LOTID";
+}

+ 5 - 1
app/OracleBasSKU.php

@@ -9,7 +9,6 @@ use Illuminate\Database\Eloquent\Model;
  * EXPLAIN: 商品
  */
 use App\Traits\ModelTimeFormat;
-
 use App\Traits\ModelLogChanging;
 
 class OracleBasSKU extends Model
@@ -26,4 +25,9 @@ class OracleBasSKU extends Model
      *         Descr_C 商品名称
      *
      * */
+    public function lotId()
+    {
+        return $this->hasOne(OracleBasLotId::class,'lotid','lotid')
+            ->select('lotid','lotkey01','lotkey02','lotkey03','lotkey04','lotkey05','lotkey08');
+    }
 }

+ 0 - 1
app/OracleDOCASNHeader.php

@@ -4,7 +4,6 @@ namespace App;
 
 use App\Traits\ModelTimeFormat;
 use Illuminate\Database\Eloquent\Model;
-
 use App\Traits\ModelLogChanging;
 
 class OracleDOCASNHeader extends Model

+ 2 - 0
app/Providers/AppServiceProvider.php

@@ -151,6 +151,7 @@ use App\Services\SettlementBillsAreaFeeService;
 use App\Services\DbOpenService;
 use App\Services\DeliveryTypeService;
 use App\Services\ErrorPushService;
+use App\Services\HandInStorageService;
 
 class AppServiceProvider extends ServiceProvider
 {
@@ -246,6 +247,7 @@ class AppServiceProvider extends ServiceProvider
         app()->singleton('ForeignHaiRoboticsService',ForeignHaiRoboticsService::class);
         app()->singleton('ForeignZhenCangService',ForeignZhenCangService::class);
         app()->singleton('GoodScanWeightService',GoodScanWeightService::class);
+        app()->singleton('HandInStorageService',HandInStorageService::class);
         app()->singleton('HaoChuangWeightService',HaoChuangWeightService::class);
         app()->singleton('HengLiWeightService',HengLiWeightService::class);
         app()->singleton('InventoryAccountMissionService', InventoryAccountMissionService::class);

+ 112 - 0
app/Services/HandInStorageService.php

@@ -0,0 +1,112 @@
+<?php
+
+namespace App\Services;
+
+use App\OracleBasCode;
+use App\OracleBasSKU;
+use App\OracleDOCASNDetail;
+use App\OracleDOCASNHeader;
+use App\Traits\ServiceAppAop;
+use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Database\Eloquent\Collection;
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Support\Facades\Cache;
+
+class HandInStorageService
+{
+    use ServiceAppAop;
+
+    /**
+     * @param $asn
+     * @return Builder[]|Collection
+     * 获取富勒asn_header
+     *
+     */
+    public function selectAsn($asn)
+    {
+        if ($asn) return OracleDOCASNHeader::query()
+            ->with('asnStatus')
+            ->select(['asnno','asnreference1','asnstatus','addtime','customerid'])
+            ->where('asnno',$asn)
+            ->get();
+
+        return OracleDOCASNHeader::query()
+            ->select(['asnno','asnreference1','asnstatus','addtime','customerid'])
+            ->with('asnStatus')
+            ->where('asnstatus','00')
+            ->orderByDesc('addtime')
+            ->limit(50)
+            ->get();
+    }
+
+    /**
+     * @param $asnno
+     * @return Builder[]|Collection
+     * 获取富勒asn_detail (集合)
+     */
+    public function selectAsnDetails($asnno)
+    {
+        return OracleDOCASNDetail::query()
+            ->select(['sku','expectedqty','skudescrc','asnlineno','asnno','receivedqty'])
+            ->where('asnno',$asnno)
+            ->get();
+    }
+
+    /**
+     * @param $asnno
+     * @param $sku
+     * @return Builder|Model|object|null
+     *
+     */
+    public function getAsnDetail($asnno,$sku)
+    {
+        return OracleDOCASNDetail::query()
+            ->select(['sku','expectedqty','skudescrc','asnlineno','asnno','receivedqty'])
+            ->where('asnno',$asnno)
+            ->where('sku',$sku)
+            ->first();
+    }
+
+    /**
+     * @return mixed
+     * 获取质量状态
+     */
+    public function getQualityStatus()
+    {
+        return Cache::remember('BAS_CODE_QLT_STS', 600, function () {
+            return OracleBasCode::query()->select(['codeid','code','codename_c'])
+                ->where('codeid','QLT_STS')
+                ->get();
+        });
+    }
+
+    /**
+     * @return mixed
+     * 获取属性仓
+     */
+    public function getAttributeLocation()
+    {
+        return Cache::remember('BAS_CODE_CUS_UDFPC', 600, function () {
+            return OracleBasCode::query()->select(['codeid','code','codename_c'])
+                ->where('codeid','CUS_UDFPC')
+                ->get();
+        });
+    }
+
+    /**
+     * @param $customerid
+     * @param $sku
+     * @return mixed
+     * 根据customerid和sku 查询商品关联的批次属性规则
+     */
+    public function getBasSkuLotId($customerid,$sku)
+    {
+        return Cache::remember('bas_sku_lot_'.$customerid.'_'.$sku, 600, function ()use($customerid,$sku) {
+            return OracleBasSKU::query()->select(['customerid','sku','lotid'])
+                ->where('customerid',$customerid)
+                ->where('sku',$sku)
+                ->with('lotId')
+                ->first();
+        });
+    }
+}

+ 65 - 66
resources/views/store/handInStorage/receive.blade.php

@@ -2,30 +2,48 @@
 @section('title')手持入库-收货@endsection
 
 @section('content')
-    <div class="container-fluid d-none" id="container">
-        <div class="card offset-md-3 col-md-6 col-sm-12">
+    <div class="d-none" id="container">
+        <div class="card offset-md-3 col-md-6">
             <div class="card-header text-center mt-2 bg-transparent" id="header_title">
                 <span class="font-weight-bold h4">收货</span>
             </div>
-            <div class="card-body">
+            <div class="card-body" >
                 <div class="offset-2">
                     <span class="font-weight-bold">ASN号:</span>
                     <div class="form-group row mt-2">
                         <label for="asn"></label>
                         <input type="text" class="form-control col-8" id="asn"
-                               @change="downSign()" :class="errors.asn ? 'is-invalid' : ''" @keydown.enter="enterVal($event)" v-model="info.asn" @blur="checkAsn()">
-                        <span class="invalid-feedback offset-3" role="alert" v-if="errors.asn">
-                            <strong>@{{ errors.asn[0] }}</strong>
-                        </span>
+                               :class="errors.asn ? 'is-invalid' : ''" @keydown.enter="selectCustomerid($event)" v-model="info.asn">
                         <span class="ml-2">
                              <button type="button" id="select" class="btn btn-info" @click="selectAsn()">搜索</button>
                         </span>
+                        <span class="invalid-feedback" role="alert" v-if="errors.asn">
+                            <strong>@{{ errors.asn[0] }}</strong>
+                        </span>
                     </div>
                 </div>
+                <div style="overflow: auto;overflow-x: hidden" id="cardTable">
+                    <table class="table-sm table-striped table-bordered table-hover mb-3"
+                           style="background: rgb(255, 255, 255);">
+                        <tr v-for="(asn,i) in asns" @click="selectTrOne(i,asn)" :class="selectTr===i+1?'focusing' : ''">
+                            <td style="filter:grayscale(30%);">
+                                <div>
+                                    <div style="transform:scale(1)" class="pl-0">
+                                        <span><span class="text-danger font-weight-bold">ASN编号:</span><span class="text-black">@{{ asn.asnno }}</span></span>
+                                        <span><span class="font-weight-bold">交接状态:</span><span class="text-lowercase" v-if="asn.asn_status">@{{ asn.asn_status.codename_c }}</span></span>
+                                        <span><span class="text-lowercase">客户订单号1:</span><span class="text-lowercase">@{{ asn.asnreference1 }} </span></span>
+                                        <span><span class="text-black">创建时间:</span><span class="text-black-50">@{{ asn.addtime }}</span></span>
+                                    </div>
+                                </div>
+                            </td>
+                        </tr>
+                    </table>
+                </div>
             </div>
+
             <div class="card-footer bg-transparent">
-                <button type="button" id="confirm" class="btn btn-sm btn-outline-success float-right" @click="">确定</button>
-                <button type="button" id="cancel" class="btn btn-sm btn-outline-info float-left" @click="">取消</button>
+                <button type="button" id="confirm" class="btn btn-sm btn-outline-success float-right" @click="ensure()">确定</button>
+                <button type="button" id="cancel" class="btn btn-sm btn-outline-info float-left" @click="cancel()">取消</button>
             </div>
         </div>
     </div>
@@ -36,28 +54,19 @@
         new Vue({
             el:"#container",
             data:{
-                permissionList:[ //允许聚焦许可列表
-                    "asn","station","amount","location","ov_amount"
-                ],
+                height:0,//屏幕高度
                 info:{},
-                mount:false,
-                before:{
-                    asn:"",
-                },
-                focus:"",
                 errors:{},
-                ov:{},//溢出减量数值
-                checkSign:false,
-                element:[
-                    "asn","station","barCode","amount","submit"
-                ],
+                asns:[],
+                selectTr:'',
                 isAndroid:false,
             },
             mounted(){
                 if (navigator.userAgent.indexOf("Android")!==-1)this.isAndroid = true;
-                this.createBefore();
                 this.pageInit();
                 $("#container").removeClass("d-none");
+                this.height=window.screen.availHeight;
+                document.getElementById('cardTable').style.height=this.height*0.50+'px';
             },
             methods:{
                 //页面初始化
@@ -72,53 +81,43 @@
                     if (e1)e1.remove();
                     if (e2)e2.remove();
                 },
-                // checkInfo(){
-                //     let error = {};
-                //     if (!this.info.asn)error.asn = ["ASN号必填"];
-                //     if (this.info.asn && this.info.asn.length!==13)error.asn = ["非法ASN号"];
-                //     if (!this.info.barCode)error.barCode = ["商品条码必填"];
-                //     if (!this.info.station)error.station = ["库位必填"];
-                //     if (!this.info.amount && !this.info.maximum)error.amount = ["数量必填"];
-                //     if (JSON.stringify(error)!=='{}'){this.errors = error;return;}
-                //     if (!this.info.amount && this.info.maximum)this.info.amount = this.info.maximum;
-                // },
-                createBefore(){
-                    let now = new Date();
-                    let yy = now.getFullYear().toString().substr(2, 2);
-                    let mm = now.getMonth() + 1;
-                    mm = mm <10 ? '0'+mm : mm.toString();
-                    let dd = now.getDate();
-                    dd = dd <10 ? '0'+dd : dd.toString();
-                    this.before.asn = 'ASN'+yy+mm+dd+'000';
+                selectAsn(){
+                    let url = '{{url('store/handInStorage/selectAsn')}}';
+                    window.axios.post(url,{asnno:this.info.asn})
+                        .then(res=>{
+                            if (res.data.success){
+                                this.asns=res.data.data;
+                                this.$forceUpdate()
+                                return;
+                            }
+                            window.tempTip.setDuration(2000);
+                            window.tempTip.show(res.data.data);
+                        }).catch(err=>{
+                        window.tempTip.setDuration(2000);
+                        window.tempTip.show("网络错误:"+err);
+                    })
                 },
-                checkAsn(){
-                    if(!this.info.asn)return;
-                    let len = this.info.asn.length;
-                    if (len<13)this.info.asn = this.before.asn.substr(0,13-len)+this.info.asn;
-                    if (!this.checkSign)this.checkMaximum(e,'');
+                selectTrOne(i,asn){
+                    if (this.selectTr===i+1){
+                        this.selectTr=0
+                    }else {
+                        this.selectTr=i+1;
+                        this.info.asn=asn.asnno;
+                        this.info.customerid=asn.customerid;
+                    }
                 },
-                downSign(){
-                    this.checkSign = false;
+                ensure(){
+                    let error = {};
+                    if (!this.info.asn)error.asn = ["ASN号必填"];
+                    if (this.info.asn && this.info.asn.length!==13)error.asn = ["无效ASN号"];
+                    if (JSON.stringify(error)!=='{}'){this.errors = error;return;}
+                    window.location.href="{{url('store/handInStorage/receiveDetailPage')}}/" + this.info.asn+'/'+ this.info.customerid;
                 },
-                checkMaximum(){
-                    if (!this.info.asn || !this.info.barCode || this.checkSign)return;
-                    window.tempTip.postBasicRequest("{{url('store/inStorage/checkMaximum')}}",this.info,res=>{
-                        this.info.maximum = res.maximum;
-                        this.info.material_box_id = res.material_box_id;
-                        this.info.material_box_model_id = res.material_box_model_id;
-                        this.info.commodity_id = res.commodity_id;
-                        if(!this.info.amount)this.info.amount = res.maximum;
-                        return "该库位最大可上数为"+res.maximum;
-                    });
-                    this.checkSign = true;
+                cancel(){
+                    setTimeout(function () {
+                        window.location.reload();
+                    },100);
                 },
-                enterVal(e){
-                    let index = this.element.indexOf(e.target.id)+1;
-                    let element = document.getElementById(this.element[index]);
-                    if (element)element.focus();
-                    e.preventDefault();
-                    return false;
-                }
             },
         });
     </script>

+ 280 - 0
resources/views/store/handInStorage/receiveDetailPage.blade.php

@@ -0,0 +1,280 @@
+@extends('layouts.app')
+@section('title')手持入库-收货详情@endsection
+
+@section('content')
+    <div class="d-none" id="container">
+        <div class="card offset-md-3 col-md-6 col-sm-12">
+            <div class="card-header text-center mt-2 bg-transparent" id="header_title">
+                <span class="font-weight-bold h4">收货</span>
+            </div>
+            <div class="card-body">
+                <div class="form-group row m-1">
+                        <span class="text-right">
+                            <span class="fa fa-search fa-lg" aria-hidden="true" @click="selectAsnDetails()"></span>
+                            <label for="sku" class="text-right text-danger font-weight-bold">条码:</label>
+                        </span>
+                    <input type="text" class="form-control form-control-sm col-8" id="sku"
+                           :class="errors.sku ? 'is-invalid' : ''" @keydown.enter="enterVal($event)" v-model="info.sku" @blur="checkedSku()">
+                    <span class="invalid-feedback offset-3" role="alert" v-if="errors.sku">
+                            <strong>@{{ errors.sku[0] }}</strong>
+                    </span>
+                </div>
+                <div v-if="isInit">
+                    <div class="form-group row m-1">
+                        <label for="name" class="text-right">品名:</label>
+                        <span id="name" >@{{ info.name }}</span>
+                    </div>
+                    <div class="form-group row m-1">
+                        <label for="quantity" class="text-right">已收/预收数量:</label>
+                        <span>&nbsp;&nbsp;&nbsp;</span>
+                        <span id="quantity">@{{ info.receivedqty??0 }}/@{{ info.expectedqty??0 }}</span>
+                    </div>
+                    <div class="form-group row m-1">
+                        <label for="amount" class="text-right text-danger font-weight-bold">实收数量:</label>
+                        <input type="text" class="form-control form-control-sm col-8" id="amount"
+                               :class="errors.amount ? 'is-invalid' : ''" v-model="info.amount" @keydown.enter="enterVal($event)">
+                        <span class="invalid-feedback offset-3" role="alert" v-if="errors.amount">
+                            <strong>@{{ errors.amount[0] }}</strong>
+                        </span>
+                    </div>
+                    <div class="form-group row m-1">
+                        <label for="trackNumber" class="text-right">托盘号:</label>
+                        <input type="text" class="form-control form-control-sm col-8" id="trackNumber"
+                               @keydown.enter="enterVal($event)" v-model="info.trackNumber">
+                    </div>
+                </div>
+                <div style="overflow: auto;overflow-x: hidden" id="cardTable" v-if="!isInit">
+                    <table class="table-sm table-striped table-bordered table-hover mb-3"
+                           style="background: rgb(255, 255, 255);">
+                        <tr v-for="(asnDetail,i) in asnDetails" @click="selectTrOne(i,asnDetail.sku)" :class="selectTr===i+1?'focusing' : ''">
+                            <td style="filter:grayscale(30%);">
+                                <div>
+                                    <div style="transform:scale(1)" class="pl-0">
+                                        <span><span class="text-danger font-weight-bold">条码:</span><span class="text-black">@{{ asnDetail.sku }}</span></span>
+                                        <span><span class="font-weight-bold">行号:</span><span class="text-lowercase" >@{{ asnDetail.asnlineno }}</span></span>
+                                        <span class="text-right float-right">选中:<input type="checkbox" @click="checked(asnDetail)"></span>
+                                        <span><span class="text-lowercase">品名:</span><span class="text-lowercase">@{{ asnDetail.skudescrc }} </span></span>
+                                        <span><span class="text-black">预期数量:</span><span class="text-black-50">@{{ asnDetail.expectedqty }}</span></span>
+                                    </div>
+                                </div>
+                            </td>
+                        </tr>
+                    </table>
+                </div>
+            </div>
+            <div class="card-body border-top border-dark" v-if="basSku.lot_id">
+                <div class="form-group row">
+                    <span class="col-6" v-if="basSku.lot_id.lotkey01==='Y'">
+                        <label for="lotatt01" class=" text-right text-danger">生产日期:</label><br>
+                        <input type="date" class="form-control form-control-sm"
+                               :class="errors.lotatt01 ? 'is-invalid' : ''"  id="lotatt01" v-model="info.lotatt01">
+                        <span class="invalid-feedback offset-3" role="alert" v-if="errors.lotatt01">
+                            <strong>@{{ errors.lotatt01[0] }}</strong>
+                        </span>
+                    </span>
+                    <span class="col-6" v-if="basSku.lot_id.lotkey02==='Y'">
+                        <label for="lotatt02" class=" text-right text-danger">失效日期:</label>
+                        <input type="date" class="form-control form-control-sm"
+                               :class="errors.lotatt02 ? 'is-invalid' : ''" id="lotatt02" v-model="info.lotatt02">
+                        <span class="invalid-feedback offset-3" role="alert" v-if="errors.lotatt02">
+                            <strong>@{{ errors.lotatt02[0] }}</strong>
+                        </span>
+                    </span>
+                </div>
+                <div class="form-group row">
+                    <span class="col-6" v-if="basSku.lot_id.lotkey04==='Y'">
+                        <label for="lotatt04" class=" text-right text-danger">批号:</label><br>
+                        <input type="text" class="form-control form-control-sm" :class="errors.lotatt04 ? 'is-invalid' : ''"
+                               id="lotatt04" v-model="info.lotatt04">
+                         <span class="invalid-feedback offset-3" role="alert" v-if="errors.lotatt04">
+                            <strong>@{{ errors.lotatt04[0] }}</strong>
+                        </span>
+                    </span>
+                    <span class="col-6" v-if="basSku.lot_id.lotkey05==='Y'">
+                        <label for="lotatt05" class=" text-right text-danger">属性仓:</label>
+                       <select class="form-control form-control-sm" :class="errors.lotatt05 ? 'is-invalid' : ''"
+                               id="lotatt05" v-model="info.lotatt05">
+                             <option v-for="(attributeLocation,i) in attributeLocations"  :value="attributeLocation.code">@{{ attributeLocation.codename_c }}</option>
+                       </select>
+                         <span class="invalid-feedback offset-3" role="alert" v-if="errors.lotatt05">
+                            <strong>@{{ errors.lotatt05[0] }}</strong>
+                        </span>
+                    </span>
+                </div>
+                <div class="form-group row">
+                    <span class="col-6" v-if="basSku.lot_id.lotkey08==='Y'">
+                        <label for="lotatt08" class=" text-right text-danger">质量状态:</label>
+                       <select class="form-control form-control-sm"
+                               :class="errors.lotatt08 ? 'is-invalid' : ''" id="lotatt08" v-model="info.lotatt08">
+                           <option v-for="(quality,i) in qualityStatus"  :value="quality.code">@{{ quality.codename_c }}</option>
+                       </select>
+                         <span class="invalid-feedback offset-3" role="alert" v-if="errors.lotatt08">
+                            <strong>@{{ errors.lotatt08[0] }}</strong>
+                        </span>
+                    </span>
+                    <span class="col-6" v-if="basSku.lot_id.lotkey03==='Y'">
+                        <label for="lotatt03" class=" text-right text-danger">入库日期:</label>
+                        <input type="date" class="form-control form-control-sm"
+                               :class="errors.lotatt03 ? 'is-invalid' : ''" id="lotatt03" v-model="info.lotatt03">
+                         <span class="invalid-feedback offset-3" role="alert" v-if="errors.lotatt03">
+                            <strong>@{{ errors.lotatt03[0] }}</strong>
+                        </span>
+                    </span>
+                </div>
+            </div>
+            <div class="card-footer bg-transparent">
+                <button type="button" id="confirm" class="btn btn-sm btn-outline-success float-right" @click="ensure()">确定</button>
+                <button type="button" id="cancel" class="btn btn-sm btn-outline-info float-left" @click="cancel()">取消</button>
+            </div>
+        </div>
+    </div>
+@stop
+
+@section('lastScript')
+    <script type="text/javascript">
+        new Vue({
+            el:"#container",
+            data:{
+                asnno:'{!! $asnno !!}',
+                customerid:'{!! $customerid !!}',
+                qualityStatus:{!! $qualityStatus !!},
+                attributeLocations:{!! $attributeLocations !!},
+                basSku:{},
+                permissionList:[ //允许聚焦许可列表
+                    "sku","amount","trackNumber"
+                ],
+                asnDetails:[],
+                info:{},
+                errors:{},
+                isAndroid:false,
+                isInit:true,
+                element:[
+                    "sku","amount","trackNumber"
+                ],
+                selectTr:'',
+            },
+            mounted(){
+                if (navigator.userAgent.indexOf("Android")!==-1)this.isAndroid = true;
+                this.codeFocus();
+                this.pageInit();
+                $("#container").removeClass("d-none");
+            },
+            methods:{
+                //页面初始化
+                pageInit(){
+                    if (!this.isAndroid)return;
+                    let element = document.getElementById("navbarSupportedContent").parentElement;
+                    element.className = "row";
+                    element.children[0].className += " col-5";
+                    element.innerHTML = element.children[0].outerHTML;
+                    let e1 = document.getElementById("menu");
+                    let e2 = document.getElementById("demand-div");
+                    if (e1)e1.remove();
+                    if (e2)e2.remove();
+                },
+                selectTrOne(i,sku){
+                    if (this.selectTr===i+1){
+                        this.selectTr=0
+                    }else {
+                        this.selectTr=i+1;
+                        // this.info.sku=sku;
+                    }
+                },
+                checkedSku(){
+                    let url = '{{url('store/handInStorage/getBasSkuWithLot')}}';
+                    window.axios.post(url,{asnno:this.asnno,customerid:this.customerid,sku:this.info.sku})
+                        .then(res=>{
+                            if (res.data.success){
+                                this.fillInfo(res.data.asnDetail);
+                                this.basSku=res.data.basSku;
+                                this.$forceUpdate()
+                                return;
+                            }
+                            this.clearInfo();
+                            window.tempTip.setDuration(2000);
+                            window.tempTip.show(res.data.data);
+                        }).catch(err=>{
+                        window.tempTip.setDuration(2000);
+                        window.tempTip.show("网络错误:"+err);
+                    })
+                },
+                checked(asnDetail){
+                    this.isInit=true;
+                    this.fillInfo(asnDetail);
+                    let url = '{{url('store/handInStorage/getBasSkuWithLot')}}';
+                    window.axios.post(url,{asnno:this.asnno,customerid:this.customerid,sku:this.info.sku})
+                        .then(res=>{
+                            if (res.data.success){
+                                this.basSku=res.data.basSku;
+                                this.$forceUpdate()
+                                return;
+                            }
+                            window.tempTip.setDuration(2000);
+                            window.tempTip.show(res.data.data);
+                        }).catch(err=>{
+                        window.tempTip.setDuration(2000);
+                        window.tempTip.show("网络错误:"+err);
+                    })
+                },
+                clearInfo(){
+                    this.info.name='';
+                    this.info.expectedqty=0;
+                    this.info.receivedqty=0;
+                    this.$forceUpdate()
+                },
+                fillInfo(asnDetail){
+                    this.info.sku=asnDetail.sku;
+                    this.info.name=asnDetail.skudescrc;
+                    this.info.expectedqty=asnDetail.expectedqty;
+                    this.info.receivedqty=asnDetail.receivedqty;
+                },
+                //聚焦 白名单
+                codeFocus(){
+                    document.getElementById("sku").focus();
+                },
+                checkInfo(){
+                    let error = {};
+                    if (!this.info.sku)error.sku = ["条码必填"];
+                    if (!this.info.amount)error.amount = ["实收数量必填"];
+                    if (this.basSku.lot_id && this.basSku.lot_id.lotkey01==='Y' && !this.info.lotatt01) error.lotatt01=["生产日期为选"];
+                    if (this.basSku.lot_id && this.basSku.lot_id.lotkey02==='Y' && !this.info.lotatt02) error.lotatt02=["失效日期为选"];
+                    if (this.basSku.lot_id && this.basSku.lot_id.lotkey03==='Y' && !this.info.lotatt03) error.lotatt03=["入库日期为选"];
+                    if (this.basSku.lot_id && this.basSku.lot_id.lotkey04==='Y' && !this.info.lotatt04) error.lotatt04=["批号未填"];
+                    if (this.basSku.lot_id && this.basSku.lot_id.lotkey05==='Y' && !this.info.lotatt05) error.lotatt05=["属性仓未选"];
+                    if (this.basSku.lot_id && this.basSku.lot_id.lotkey08==='Y' && !this.info.lotatt08) error.lotatt08=["质量状态未选"];
+                    if (JSON.stringify(error)!=='{}'){this.errors = error;return;}
+                    if (!this.info.amount && this.info.maximum)this.info.amount = this.info.maximum;
+                },
+                enterVal(e){
+                    let index = this.element.indexOf(e.target.id)+1;
+                    let element = document.getElementById(this.element[index]);
+                    if (element)element.focus();
+                    e.preventDefault();
+                    return false;
+                },
+                selectAsnDetails(){
+                    this.isInit=false;
+                    this.info={};
+                    let url = '{{url('store/handInStorage/selectAsnDetails')}}';
+                    window.axios.post(url,{asnno:this.asnno})
+                        .then(res=>{
+                            if (res.data.success){
+                                this.asnDetails=res.data.data;
+                                this.$forceUpdate()
+                                return;
+                            }
+                            window.tempTip.setDuration(2000);
+                            window.tempTip.show(res.data.data);
+                        }).catch(err=>{
+                        window.tempTip.setDuration(2000);
+                        window.tempTip.show("网络错误:"+err);
+                    })
+                },
+                ensure(){
+                  this.checkInfo();
+                  console.log(this.info)
+                },
+            },
+        });
+    </script>
+@stop

+ 4 - 0
routes/web.php

@@ -472,6 +472,10 @@ Route::group(['middleware'=>'auth'],function ($route){
             Route::get('receive',function (){return view('store.handInStorage.receive');});//收货页面
             Route::get('putaway',function (){return view('store.handInStorage.putaway');});//上架页面
             Route::get('android.index',function (){return view('store.handInStorage.androidIndex');});
+            Route::post('selectAsn','HandInStorageController@selectAsn');
+            Route::post('selectAsnDetails','HandInStorageController@selectAsnDetails');
+            Route::post('getBasSkuWithLot','HandInStorageController@getBasSkuWithLot');
+            Route::get('receiveDetailPage/{asnno}/{customerid}','HandInStorageController@receiveDetailPage');
         });
         Route::group(['prefix'=>'fast'],function() {
             Route::resource('storeItem','StoreItemController');