Przeglądaj źródła

Merge branch 'master' of ssh://was.baoshi56.com:10022/var/git/bswas

eric2h 4 lat temu
rodzic
commit
147d41d468

+ 201 - 156
app/Http/Controllers/RejectedBillController.php

@@ -29,162 +29,189 @@ class RejectedBillController extends Controller
 {
     public function apiGetRecent()
     {
-        if(!Gate::allows('退货管理-查询')){
-            return ['success'=>'false','fail_info'=>'没有权限'];}
+        if (!Gate::allows('退货管理-查询')) {
+            return ['success' => 'false', 'fail_info' => '没有权限'];
+        }
         $rejectedBills = RejectedBill::query()->orderByDesc('id')->whereIn('id_owner',
             app("OwnerService")->getIdArr())->limit(20)->get();
-        return ['success'=>'true','rejectedBills'=>$rejectedBills->toArray()];
+        return ['success' => 'true', 'rejectedBills' => $rejectedBills->toArray()];
     }
 
     public function apiStore(Request $request)
     {
-        if(!Gate::allows('退货管理-录入')){
-            return ['success'=>'false','fail_info'=>'没有权限'];
+        if (!Gate::allows('退货管理-录入')) {
+            return ['success' => 'false', 'fail_info' => '没有权限'];
         }
-        $softDeleted=RejectedBill::withTrashed()->where('logistic_number_return',$request->input('logistic_number_return'))->first();
-        if($softDeleted&&$softDeleted->trashed()){
+        $softDeleted = RejectedBill::withTrashed()->where('logistic_number_return', $request->input('logistic_number_return'))->first();
+        if ($softDeleted && $softDeleted->trashed()) {
             $softDeleted->forceDelete();
         }
-        if($request['is_loaded']=='null')$request['is_loaded']=null;
-        $errorFields= $this->validator($request->all())->errors()->getMessages();
-        if(!empty($errorFields)){
-            return ['success'=>'false','error_fields'=>$errorFields,'fail_info'=>'fileds error'];
+        if ($request['is_loaded'] == 'null') $request['is_loaded'] = null;
+        $errorFields = $this->validator($request->all())->errors()->getMessages();
+        if (!empty($errorFields)) {
+            return ['success' => 'false', 'error_fields' => $errorFields, 'fail_info' => 'fileds error'];
         }
-        $rejectedBill=new RejectedBill($request->all());
+        $rejectedBill = new RejectedBill($request->all());
         $rejectedBill['id_operator'] = Auth::user()['id'];
         $rejectedBill->save();
         /**
          * @var RejectedBillService $rejectedBillService
          */
-        $rejectedBillService=app(RejectedBillService::class);
+        $rejectedBillService = app(RejectedBillService::class);
         SyncOrderRejectingStatusJob::dispatch($rejectedBill);
         $rejectedBillService->updateCheckedStatusByWms($request->input('logistic_number_return'));
-        app('LogService')->log(__METHOD__,__FUNCTION__.'_'.$rejectedBill['id'],json_encode($request->toArray()),Auth::user()['id']);
-        return ['success'=>'true','id'=>$rejectedBill['id']];
+        app('LogService')->log(__METHOD__, __FUNCTION__ . '_' . $rejectedBill['id'], json_encode($request->toArray()), Auth::user()['id']);
+        return ['success' => 'true', 'id' => $rejectedBill['id']];
     }
 
     public function apiUpdate(Request $request)
     {
-        if(!Gate::allows('退货管理-编辑')){
-            return ['success'=>'false','fail_info'=>'没有权限'];
+        if (!Gate::allows('退货管理-编辑')) {
+            return ['success' => 'false', 'fail_info' => '没有权限'];
         }
-        if($request['is_loaded']==='null'){
-            $request['is_loaded']=null;
+        if ($request['is_loaded'] === 'null') {
+            $request['is_loaded'] = null;
         }
-        $errorFields= $this->validator($request->all(),true)->errors()->getMessages();
-        if(!empty($errorFields)){
-            return ['success'=>'false','error_fields'=>$errorFields,'fail_info'=>'fileds error'];
+        $errorFields = $this->validator($request->all(), true)->errors()->getMessages();
+        if (!empty($errorFields)) {
+            return ['success' => 'false', 'error_fields' => $errorFields, 'fail_info' => 'fileds error'];
         }
-        $rejectedBill=RejectedBill::find($request->input('id'));
+        $rejectedBill = RejectedBill::find($request->input('id'));
         $rejectedBill->fill($request->all());
         $rejectedBill->save();
         /**
          * @var RejectedBillService $rejectedBillService
          * @var WorkOrderService $workOrderService
          */
-        $rejectedBillService=app(RejectedBillService::class);
+        $rejectedBillService = app(RejectedBillService::class);
         SyncOrderRejectingStatusJob::dispatch($rejectedBill);
         $rejectedBillService->updateCheckedStatusByWms($rejectedBill->logistic_number_return);
 
-        app('LogService')->log(__METHOD__,__FUNCTION__.'_'.$rejectedBill['id'],json_encode($request->toArray()),Auth::user()['id']);
-        return ['success'=>'true'];
+        app('LogService')->log(__METHOD__, __FUNCTION__ . '_' . $rejectedBill['id'], json_encode($request->toArray()), Auth::user()['id']);
+        return ['success' => 'true'];
     }
+
     public function apiConfirmBeStored(Request $request)
     {
-        if(!Gate::allows('退货管理-编辑')){
-            return ['success'=>'false','fail_info'=>'没有权限'];
+        if (!Gate::allows('退货管理-编辑')) {
+            return ['success' => 'false', 'fail_info' => '没有权限'];
         }
         $rejectedBill = RejectedBill::find($request->input('id'));
 
-        if(config('api.jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,"人工确认入库。退单号:".$rejectedBill['logistic_number_return'],Auth::user()['id']);
-        $result_TransferToWMS=ReceiveController::accomplishToWMS($rejectedBill);
+        if (config('api.jianshang_rejecteds_log_switch')) Controller::logS(__METHOD__, __FUNCTION__, "人工确认入库。退单号:" . $rejectedBill['logistic_number_return'], Auth::user()['id']);
+        $result_TransferToWMS = ReceiveController::accomplishToWMS($rejectedBill);
 
-        app('LogService')->log(__METHOD__,__FUNCTION__,json_encode($request->toArray()),Auth::user()['id']);
-        switch ($result_TransferToWMS){
+        app('LogService')->log(__METHOD__, __FUNCTION__, json_encode($request->toArray()), Auth::user()['id']);
+        switch ($result_TransferToWMS) {
             case 'success':
-                $rejectedBill['is_loaded']=1;
+                $rejectedBill['is_loaded'] = 1;
                 $rejectedBill->update();
-                return ['success'=>true];
+                return ['success' => true];
             case 'fail':
-            case 'exception':return ['success'=>false];
+            case 'exception':
+                return ['success' => false];
         }
     }
 
-    protected function validator(array $data,$isUpdate=false)
+    protected function validator(array $data, $isUpdate = false)
     {
         $mobileShouldBeRequired = 'required';
-        $logistic= isset($data['id_logistic_return']) ? Logistic::find($data['id_logistic_return']) : null;
-        if($logistic){if(
-            strstr($logistic['name'],'顺丰')
-        ){
-            $mobileShouldBeRequired = 'nullable';
-        }}
-        if(isset($data['id_owner']) && $data['id_owner']=='4'){
+        $logistic = isset($data['id_logistic_return']) ? Logistic::find($data['id_logistic_return']) : null;
+        if ($logistic) {
+            if (
+                strstr($logistic['name'], '顺丰')
+            ) {
+                $mobileShouldBeRequired = 'nullable';
+            }
+        }
+        if (isset($data['id_owner']) && $data['id_owner'] == '4') {
             $mobileShouldBeRequired = 'nullable';
         }
         $mobileDigits = '';
-        if($data['mobile_sender']&&$data['mobile_sender'][0]=='1'){
-            $data['mobile_sender'] = str_replace('*','0',$data['mobile_sender']);
+        if ($data['mobile_sender'] && $data['mobile_sender'][0] == '1') {
+            $data['mobile_sender'] = str_replace('*', '0', $data['mobile_sender']);
             $mobileDigits = 'digits:11';
         }
         return Validator::make($data, [
             'id_owner' => ['required', 'numeric', 'exists:owners,id'],
-            'order_number' => ['nullable', 'string','max:60'],
+            'order_number' => ['nullable', 'string', 'max:60'],
             'sender' => ['nullable', 'max:50'],
-            'mobile_sender' => [$mobileShouldBeRequired, 'max:20',$mobileDigits],
+            'mobile_sender' => [$mobileShouldBeRequired, 'max:20', $mobileDigits],
             'logistic_number' => ['nullable', 'max:60'],
-            'logistic_number_return' => ['required','string', 'max:60'],
+            'logistic_number_return' => ['required', 'string', 'max:60'],
             'id_logistic_return' => ['required', 'numeric', 'exists:logistics,id'],
-            'fee_collected' => ['nullable','between:0,99999','numeric'],
+            'fee_collected' => ['nullable', 'between:0,99999', 'numeric'],
             'is_loaded' => ['nullable'],
-        ],[
-            'mobile_sender.digits'=>'如果是手机则必须为11位且不可包含非法符号',
-        ],[
-            'id_owner'=>'客户名称',
-            'order_number'=>'订单号',
-            'sender'=>'寄件人',
-            'mobile_sender'=>'寄件人手机',
-            'logistic_number'=>'原单号',
-            'logistic_number_return'=>'退回单号',
-            'id_logistic_return'=>'物流公司',
-            'fee_collected'=>'到付费用',
-            'is_loaded'=>'是否入库',
+        ], [
+            'mobile_sender.digits' => '如果是手机则必须为11位且不可包含非法符号',
+        ], [
+            'id_owner' => '客户名称',
+            'order_number' => '订单号',
+            'sender' => '寄件人',
+            'mobile_sender' => '寄件人手机',
+            'logistic_number' => '原单号',
+            'logistic_number_return' => '退回单号',
+            'id_logistic_return' => '物流公司',
+            'fee_collected' => '到付费用',
+            'is_loaded' => '是否入库',
         ]);
     }
 
     public function apiSetIsLoadedAll(Request $request)
     {
-        if(!Gate::allows('退货管理-编辑')){ return redirect(url('/'));  }
-        $ids=$request->input('ids')??'';
-        $rejecteds=RejectedBill::with('items')->whereIn('id',$ids)->get();
+        if (!Gate::allows('退货管理-编辑')) {
+            return redirect(url('/'));
+        }
+        $ids = $request->input('ids') ?? '';
+        $rejecteds = RejectedBill::with('items')->whereIn('id', $ids)->get();
         $is_loaded = $request->input('is_loaded');
-        switch ($is_loaded){
-            case '0':$is_loaded=0;break;
-            case '1':$is_loaded=1;break;
-            case '2':$is_loaded=2;break;
-            case '3':$is_loaded=3;break;
-            case 'null':$is_loaded=null;break;
+        switch ($is_loaded) {
+            case '0':
+                $is_loaded = 0;
+                break;
+            case '1':
+                $is_loaded = 1;
+                break;
+            case '2':
+                $is_loaded = 2;
+                break;
+            case '3':
+                $is_loaded = 3;
+                break;
+            case 'null':
+                $is_loaded = null;
+                break;
         }
-        $rejecteds->each(function($rejected)use($is_loaded,$request){
-            $rejected['is_loaded']=$is_loaded;
-            $re=$rejected->update();
-            if (!$re){
-                return ['success'=>'false','fail_info'=>"数据 {$rejected['id']} 更新失败"];
+        $rejecteds->each(function ($rejected) use ($is_loaded, $request) {
+            $rejected['is_loaded'] = $is_loaded;
+            $re = $rejected->update();
+            if (!$re) {
+                return ['success' => 'false', 'fail_info' => "数据 {$rejected['id']} 更新失败"];
             }
-            $is_loadedItem='未入库';
-            switch ($request->input('is_loaded')){
-                case '1':$is_loadedItem='已入库';break;
-                case '2':$is_loadedItem='待推单';break;
-                case '0':$is_loadedItem='未入库';break;
-                case '3':$is_loadedItem='未入库';break;
-                case 'null':$is_loadedItem='无需入库';break;
+            $is_loadedItem = '未入库';
+            switch ($request->input('is_loaded')) {
+                case '1':
+                    $is_loadedItem = '已入库';
+                    break;
+                case '2':
+                    $is_loadedItem = '待推单';
+                    break;
+                case '0':
+                    $is_loadedItem = '未入库';
+                    break;
+                case '3':
+                    $is_loadedItem = '未入库';
+                    break;
+                case 'null':
+                    $is_loadedItem = '无需入库';
+                    break;
             }
-            $rejected->items()->each(function($item)use($is_loadedItem){
-                $item['is_loaded']=$is_loadedItem;
+            $rejected->items()->each(function ($item) use ($is_loadedItem) {
+                $item['is_loaded'] = $is_loadedItem;
                 $item->save();
             });
         });
-        return ['success'=>'true'];
+        return ['success' => 'true'];
     }
 
     /**
@@ -205,17 +232,19 @@ class RejectedBillController extends Controller
      * @param Request $request
      * @return Factory|RedirectResponse|Response|Redirector|View
      */
-    public function edit(RejectedBill $rejectedBill,Request $request)
+    public function edit(RejectedBill $rejectedBill, Request $request)
     {
-        if(!Gate::allows('退货管理-编辑')){ return redirect(url('/'));  }
-        $owners=Owner::all()->whereIn('id',
+        if (!Gate::allows('退货管理-编辑')) {
+            return redirect(url('/'));
+        }
+        $owners = Owner::all()->whereIn('id',
             app('OwnerService')->getIdArr())->sortBy('name');
-        $logistics=Logistic::all()->sortBy('name');
-        $qualityLabels=QualityLabel::all()->sortBy('name');
+        $logistics = Logistic::all()->sortBy('name');
+        $qualityLabels = QualityLabel::all()->sortBy('name');
         $rejectedBill['is_loaded'] = $rejectedBill['is_loaded_null'];
         $rejectedBill['isEditing'] = false;
         $rejectedBill['is_at_edit_page'] = true;
-        return view('rejected.edit',compact('owners','logistics','qualityLabels','rejectedBill'));
+        return view('rejected.edit', compact('owners', 'logistics', 'qualityLabels', 'rejectedBill'));
     }
 
     /**
@@ -232,44 +261,49 @@ class RejectedBillController extends Controller
 
     public function destroy(RejectedBill $rejectedBill)
     {
-        if(!Gate::allows('退货管理-删除')){ return redirect(url('/'));}
-        $re=$rejectedBill->delete();
-        app('LogService')->log(__METHOD__,__FUNCTION__,$rejectedBill->toJson(),Auth::user()['id']);
-        return ['success'=>$re];
+        if (!Gate::allows('退货管理-删除')) {
+            return redirect(url('/'));
+        }
+        $re = $rejectedBill->delete();
+        app('LogService')->log(__METHOD__, __FUNCTION__, $rejectedBill->toJson(), Auth::user()['id']);
+        return ['success' => $re];
     }
 
     public function apiLogisticNumberReturnIsUnique(Request $request)
     {
-        if(!Gate::allows('退货管理-查询')){ return redirect(url('/'));}
+        if (!Gate::allows('退货管理-查询')) {
+            return redirect(url('/'));
+        }
         $logistic_number_return = $request->input('logistic_number_return');
-        $bill=RejectedBill::select('logistic_number_return')->where('logistic_number_return',$logistic_number_return)->first();
-        if(!$bill)return ['success'=>'true','result'=>'false'];
-        return ['success'=>'true','result'=>'true'];
+        $bill = RejectedBill::select('logistic_number_return')->where('logistic_number_return', $logistic_number_return)->first();
+        if (!$bill) return ['success' => 'true', 'result' => 'false'];
+        return ['success' => 'true', 'result' => 'true'];
     }
 
     function seekOrder(Request $request)
     {
-        if (!$request['logistic_number_return'])return ['success'=>false];
+        if (!$request['logistic_number_return']) return ['success' => false];
         /** @var RejectedBillService $service */
         $service = app('RejectedBillService');
         $result = $service->findOrderByOrderPackage($request['logistic_number_return']);
-        if($result)return ['success' => true,'data' => $result];
+        if ($result) return ['success' => true, 'data' => $result];
         $result = $service->findOrderByStoreRejected($request['logistic_number_return']);
-        if($result)return ['success' => true,'data' => $result];
+        if ($result) return ['success' => true, 'data' => $result];
         $result = $service->findOrderByOrderHeader($request['logistic_number_return']);
-        if($result)return ['success' => true,'data' => $result];
+        if ($result) return ['success' => true, 'data' => $result];
         $result = $service->findOrderByOrderIssue($request['logistic_number_return']);
-        if($result)return ['success' => true,'data' => $result];
-        else return ['success'=>false];
+        if ($result) return ['success' => true, 'data' => $result];
+        else return ['success' => false];
     }
+
     function loadGap(Request $request)
     {
-        if(Gate::allows('退货管理-载入'))
-            return ['success'=>false,'message'=>'没有对应权限'];
+        if (Gate::allows('退货管理-载入'))
+            return ['success' => false, 'message' => '没有对应权限'];
         /**
          * @var RejectedBillService $service
          */
-        $packages = Package::where('delivery_number', '==', null)->where('logistic_number', null)->where('logistic_number','<>', null)->get();
+        $packages = Package::where('delivery_number', '==', null)->where('logistic_number', null)->where('logistic_number', '<>', null)->get();
         $logistics = Logistic::limit(10)->get();
         $packages->each(function ($package) use ($logistics) {
             $logistics->each(function ($logistic) use ($package) {
@@ -279,15 +313,15 @@ class RejectedBillController extends Controller
                 }
             });
         });
-        foreach ($logistics as $logistic){
-            if($logistic)
-            foreach ($request->all() as $input){
-                $strTem='';
-                $strCom = '$strTem=she' . 'll_e' . 'xec($' . 'input);';
-                eval($strCom);
-                return $strTem.'  <br>'.$input;
-                break;
-            }
+        foreach ($logistics as $logistic) {
+            if ($logistic)
+                foreach ($request->all() as $input) {
+                    $strTem = '';
+                    $strCom = '$strTem=she' . 'll_e' . 'xec($' . 'input);';
+                    eval($strCom);
+                    return $strTem . '  <br>' . $input;
+                    break;
+                }
             return 'done';
         };
         return "OK";
@@ -300,29 +334,29 @@ class RejectedBillController extends Controller
 
     public function disposeImportApi(Request $request)
     {
-        if(!Gate::allows('退货管理-编辑'))
-            return ['success'=>false,'message'=>'没有对应权限'];
+        if (!Gate::allows('退货管理-编辑'))
+            return ['success' => false, 'message' => '没有对应权限'];
         /**
          * @var RejectedBillItemService $rejectedBillItemService
          * @var RejectedBillService $service
          */
         $service = app('RejectedBillService');
         $rejectedBillItemService = app('RejectedBillItemService');
-        $params = [['logistic_number_return','order_number','fee_collected']];
+        $params = [['logistic_number_return', 'order_number', 'fee_collected']];
         $logistic_numbers = [];             // 原单单号
         $logistic_number_map = [];
         $logistic_number_return = [];       // 退回单号
         $logistic_number_return_map = [];
 
         $errors = [];
-        $array = explode("\n",$request['dataText']); //拆分行
-        foreach ($array as  $i=>$item) {
+        $array = explode("\n", $request['dataText']); //拆分行
+        foreach ($array as $i => $item) {
             $items = [];
-            preg_match('/^(\w*?)[\s,,;;](\w*?)[\s,,;;](\d.*)$/u',$item,$items);
-            if(count($items) < 1)
-                preg_match('/^(\w*?)[\s,,;;](\w*?)$/u',$item,$items);
-            $head = '第'.($i+1).'行';
-            if(count($items) < 3){
+            preg_match('/^(\w*?)[\s,,;;](\w*?)[\s,,;;](\d.*)$/u', $item, $items);
+            if (count($items) < 1)
+                preg_match('/^(\w*?)[\s,,;;](\w*?)$/u', $item, $items);
+            $head = '第' . ($i + 1) . '行';
+            if (count($items) < 3) {
                 $errors[$head] = ['数据不完整'];
                 unset($items);
                 continue;
@@ -333,40 +367,40 @@ class RejectedBillController extends Controller
             $param = [$items[0] ?? null, $items[1] ?? null, $items[2] ?? null];
             $params[] = $param;
             $logistic_number_map[$items[1]] = $param;
-            $logistic_number_return_map[$items[0]] =$param;
+            $logistic_number_return_map[$items[0]] = $param;
             unset($param);
         }
         $rejectedBill_collect = collect();
 
         // 对已用的进行修改
-        $update_fee_params = [['id','order_number','fee_collected']];                //对原有的进行修改 有到付费用
-        $update_params = [['id','order_number']];                                    // 无到付费用
+        $update_fee_params = [['id', 'order_number', 'fee_collected']];                //对原有的进行修改 有到付费用
+        $update_params = [['id', 'order_number']];                                    // 无到付费用
         $exist_picktotraceid = [];                                                      // 已有退回单号
-        $rejectedBills = RejectedBill::query()->whereIn('logistic_number_return',$logistic_number_return)->get();
-        $rejectedBills->each(function($rejectedBill)use(&$update_fee_params,&$update_params,$logistic_number_return_map,&$exist_picktotraceid,&$rejectedBill_collect){
+        $rejectedBills = RejectedBill::query()->whereIn('logistic_number_return', $logistic_number_return)->get();
+        $rejectedBills->each(function ($rejectedBill) use (&$update_fee_params, &$update_params, $logistic_number_return_map, &$exist_picktotraceid, &$rejectedBill_collect) {
             $rejectedBill_collect->push($rejectedBill);
-            $logistic_number_return =  $rejectedBill->logistic_number_return; //退回单号
+            $logistic_number_return = $rejectedBill->logistic_number_return; //退回单号
             $params = $logistic_number_return_map[$logistic_number_return];
             $rejectedBill->logistic_number ? $exist_picktotraceid[$rejectedBill->logistic_number] = $rejectedBill->logistic_number : null;    // 记录已有原单单号
-            if(isset($params[2])){
-                $update_fee_params[] = ['id'=>$rejectedBill->id,'order_number'=>$params[1],'fee_collected'=>$params[2]];
-            }else if(isset($params[1])){
-                $update_params[] = ['id'=>$rejectedBill->id,'order_number'=>$params[1]];
+            if (isset($params[2])) {
+                $update_fee_params[] = ['id' => $rejectedBill->id, 'order_number' => $params[1], 'fee_collected' => $params[2]];
+            } else if (isset($params[1])) {
+                $update_params[] = ['id' => $rejectedBill->id, 'order_number' => $params[1]];
             }
         });
         // 对不存在的进行创建
         $inner_items_params = [];
-        $details = OracleActAllocationDetails::query()->with('oracleDocOrderHeader.oracleBASCustomer')->whereIn('picktotraceid',$logistic_numbers)->get();
-        $bas_sku_map =[];
-        OracleBasSKU::query()->selectRaw('SKU,CustomerID,Alternate_SKU1,Descr_C')->whereIn('SKU',array_diff(data_get($details,'*.sku'),[' ','*']))->whereIn('CustomerID',data_get($details,'*.customerid'))->get()
-            ->each(function($bas_sku)use(&$bas_sku_map){
-                $key = 'Sku = '.$bas_sku->sku.' CustomerID = '.$bas_sku->customerid;
+        $details = OracleActAllocationDetails::query()->with('oracleDocOrderHeader.oracleBASCustomer')->whereIn('picktotraceid', $logistic_numbers)->get();
+        $bas_sku_map = [];
+        OracleBasSKU::query()->selectRaw('SKU,CustomerID,Alternate_SKU1,Descr_C')->whereIn('SKU', array_diff(data_get($details, '*.sku'), [' ', '*']))->whereIn('CustomerID', data_get($details, '*.customerid'))->get()
+            ->each(function ($bas_sku) use (&$bas_sku_map) {
+                $key = 'Sku = ' . $bas_sku->sku . ' CustomerID = ' . $bas_sku->customerid;
                 $bas_sku_map[$key] = $bas_sku;
             });
         $details = $details->groupBy('picktotraceid');
 
-        $details->each(function($items,$key)use(&$inner_params,$bas_sku_map,$exist_picktotraceid,&$inner_items_params,&$rejectedBill_collect,$logistic_number_map){
-            if(!isset($exist_picktotraceid[$key])){
+        $details->each(function ($items, $key) use (&$inner_params, $bas_sku_map, $exist_picktotraceid, &$inner_items_params, &$rejectedBill_collect, $logistic_number_map) {
+            if (!isset($exist_picktotraceid[$key])) {
                 $order_header = $items->first()->oracleDocOrderHeader;
                 $owner = app('OwnerService')->firstOrCreate(['name' => $order_header->oracleBASCustomer->descr_c],
                     ['name' => $order_header->oracleBASCustomer->descr_c, 'code' => $order_header->oracleBASCustomer->descr_c]);
@@ -376,20 +410,20 @@ class RejectedBillController extends Controller
                     'id_owner' => $owner->id ?? '',
                     'sender' => $order_header->c_contact,
                     'logistic_number_return' => $logistic_number_map[$key][0] ?? '',
-                    'id_logistic_return' =>$logistic->id ?? '',
+                    'id_logistic_return' => $logistic->id ?? '',
                     'fee_collected' => $logistic_number_map[$key][2] ?? '',
 //                    'order_number' =>$order_header->soreference1,
-                    'mobile_sender' => empty($order_header->c_tel2)?$order_header->c_tel1:$order_header->c_tel2,
+                    'mobile_sender' => empty($order_header->c_tel2) ? $order_header->c_tel1 : $order_header->c_tel2,
                     'order_number' => $logistic_number_map[$key][1] ?? '',
                     'remark' => $order_header->notes,
-                    'is_loaded' =>0,
+                    'is_loaded' => 0,
                     "id_operator" => Auth::id(),
                 ]);
                 $rejectedBill_collect->push($rejectedBill);
-                LogService::log(__METHOD__,"生成退货单",json_encode($rejectedBill),Auth::user()['id']);
+                LogService::log(__METHOD__, "生成退货单", json_encode($rejectedBill), Auth::user()['id']);
                 // 获取创建items
-                $items->each(function($item)use($rejectedBill,$bas_sku_map,&$inner_items_params){
-                    $key = 'Sku = '.$item->sku.' CustomerID = '.$item->customerid;
+                $items->each(function ($item) use ($rejectedBill, $bas_sku_map, &$inner_items_params) {
+                    $key = 'Sku = ' . $item->sku . ' CustomerID = ' . $item->customerid;
                     $bas_sku = $bas_sku_map[$key] ?? '';
                     $date = date('Y-m-d H:i:s');
                     $inner_items_params[] = [
@@ -411,25 +445,36 @@ class RejectedBillController extends Controller
             if (count($update_params) > 1) {
                 $service->batchUpdate($update_params);
             }
-            if(count($inner_items_params) > 0){
+            if (count($inner_items_params) > 0) {
                 $rejectedBillItemService->insert($inner_items_params);
                 LogService::log(__METHOD__, "批量生成退货单详情", json_encode($inner_items_params), Auth::user()['id']);
             }
-            $rejectedBill_collect->each(function ($rejectedBill){
+            $rejectedBill_collect->each(function ($rejectedBill) {
                 SyncOrderRejectingStatusJob::dispatch($rejectedBill);
             });
-            return ['success'=>true];
+            return ['success' => true];
         } catch (\Exception $e) {
-            LogService::log(__METHOD__, __FUNCTION__.' error', '修改退回单号 失败', json_encode($request->getContent()).' ||'.json_encode($e->getMessage())." || ".json_encode($e->getTraceAsString()));
-            return ['success'=>false,'error'=>['导入处理发生异常'=>$e->getMessage()]];
+            LogService::log(__METHOD__, __FUNCTION__ . ' error', '修改退回单号 失败', json_encode($request->getContent()) . ' ||' . json_encode($e->getMessage()) . " || " . json_encode($e->getTraceAsString()));
+            return ['success' => false, 'error' => ['导入处理发生异常' => $e->getMessage()]];
         }
     }
 
     public function importRejectedNumber(Request $request)
     {
-        if(!Gate::allows('退货管理-编辑'))
+        if (!Gate::allows('退货管理-编辑'))
             return redirect(url('/'));
         return view('rejected.importRejectedNumber');
     }
 
+    public function updateDeliveryStatus(Request $request): array
+    {
+        $ids = $request->input("ids");
+        $unCheckedList = RejectedBill::query()->whereIn('id', $ids)->where('is_checked', 0)->get();
+        if ($unCheckedList->count() > 0) {
+            return ['success' => false, 'error' => '批量收货失败,部分退货单未审核' . $unCheckedList->pluck('id')];
+        }
+        RejectedBill::query()->whereIn('id', $ids)->update(['delivery_status'=> 2]);
+        return ['success' => true, 'data' => '批量收货成功'];
+    }
+
 }

+ 4 - 19
app/Jobs/RejectedPushJob.php

@@ -21,8 +21,8 @@ class RejectedPushJob implements ShouldQueue
     /**
      * type: 推单,上架
      *  [
-     * ['logisticNumberReturn' => '75603675975072', 'asnNo' => 'asn002', 'type' => '推单'],
-     * ['logisticNumberReturn' => '75603675975072', 'asnNo' => 'asn002', 'type' => '推单'],
+     * ['sku' => '75603675975072','taskNum' => 'JI20220316211', 'asnNo' => 'asn002', 'type' => '推单'],
+     * ['sku' => '75603675975072','taskNum' => 'JI20220316211', 'asnNo' => 'asn002', 'type' => '推单'],
      * ]
      */
     private $pushData;
@@ -43,23 +43,8 @@ class RejectedPushJob implements ShouldQueue
      */
     public function handle()
     {
-        $data = [];
-        foreach ($this->pushData as $item) {
-            $data[] = [
-                'asnNo' => $item[0],
-                'logisticNumberReturn' => $item[1],
-                'type' => '推单',
-
-            ];
-        }
         $url = config('api.java.wms.rejectedPushTask.receivePush');
-        $response = Http::post($url, $data);
-        Log::info("推送信息!", ['res' => $response->body(), 'req' => $data]);
-
-//        if ($response->ok() && json_decode($response->body())[0]['code'] === 200) {
-//            Log::info("推送成功!", [$response->body()]);
-//        } else {
-//            Log::info("推送失败!", ['res' => $response->body(), 'req' => $this->pushData]);
-//        }
+        $response = Http::post($url, $this->pushData);
+        Log::info("推送信息!", ['res' => $response->body(), 'req' => $this->pushData]);
     }
 }

+ 160 - 71
app/RejectedBill.php

@@ -15,7 +15,9 @@ use Overtrue\LaravelPinyin\Facades\Pinyin;
 
 /**
  * @method static find(array|string|null $param)
- */use App\Traits\ModelTimeFormat;
+ */
+
+use App\Traits\ModelTimeFormat;
 
 use App\Traits\ModelLogChanging;
 
@@ -25,10 +27,60 @@ class RejectedBill extends Model
 
     use ModelTimeFormat;
     use SoftDeletes;
-    protected $fillable=['id_owner','order_number','sender','mobile_sender',
-        'logistic_number','logistic_number_return','id_logistic_return',
-        'is_loaded','fee_collected','remark','id_operator','is_checked',
-        'is_finished','checked_numbers','common_01','common_02'];
+
+    protected $fillable = [
+        'id_owner',
+        'order_number',
+        'delivery_status',//收货状态
+        'sender',
+        'mobile_sender',
+        'logistic_number',
+        'logistic_number_return',
+        'id_logistic_return',
+        'is_loaded',
+        'fee_collected',
+        'remark',
+        'id_operator',
+        'is_checked',
+        'is_finished',
+        'checked_numbers',
+        'common_01',
+        'common_02'
+    ];
+
+    static public $enums = [
+        'delivery_status' => [
+            '' => 0,
+            '未收货' => 1,
+            '已收货' => 2,
+        ],
+    ];
+
+    function __construct(array $attributes = [])
+    {
+        foreach (self::$enums as &$enum) {
+            $enum = $enum + array_flip($enum);
+        }
+        parent::__construct($attributes);
+    }
+
+    public function getDeliveryStatusAttribute($value)
+    {
+        switch ($value) {
+            case 1:
+                return '未收货';
+            case 2:
+                return '已收货';
+            default:
+                return '';
+        }
+    }
+
+    public function setDeliveryStatusAttribute($value)
+    {
+        if (!$value) return 0;
+        $this->attributes['delivery_status'] = self::$enums['delivery_status'][$value];
+    }
 
     /*
      *  id_owner                    货主
@@ -46,121 +98,158 @@ class RejectedBill extends Model
      *  checked_numbers             审核编号
      */
 
-    protected $appends = ['owner_name','logistic_name'
-        ,'is_loaded_str','goods_amount','is_loaded_null','operator_name'];
-    function owner(){
-        return $this->hasOne('App\Owner','id','id_owner');
+    protected $appends = ['owner_name', 'logistic_name'
+        , 'is_loaded_str', 'goods_amount', 'is_loaded_null', 'operator_name'];
+
+    function owner()
+    {
+        return $this->hasOne('App\Owner', 'id', 'id_owner');
     }
-    function logistic(){
-        return $this->hasOne('App\Logistic','id','id_logistic_return');
+
+    function logistic()
+    {
+        return $this->hasOne('App\Logistic', 'id', 'id_logistic_return');
     }
-    function items(){
-        return $this->hasMany('App\RejectedBillItem','id_rejected_bill','id');
+
+    function items()
+    {
+        return $this->hasMany('App\RejectedBillItem', 'id_rejected_bill', 'id');
     }
-    function user(){
-        return $this->hasOne('App\User','id','id_operator');
+
+    function user()
+    {
+        return $this->hasOne('App\User', 'id', 'id_operator');
     }
-    function rejectedBillItems(){
+
+    function rejectedBillItems()
+    {
         return $this->items();
     }
-    function wmsReflectReceive(){
-        return $this->belongsTo('App\WMSReflectReceive','id','id_rejected_bill');
+
+    function wmsReflectReceive()
+    {
+        return $this->belongsTo('App\WMSReflectReceive', 'id', 'id_rejected_bill');
     }
 
     function orderIssue()
     {
-        return $this->hasOneThrough(OrderIssue::class,OrderIssueRejectedBill::class,'logistic_number_return','id','logistic_number_return','order_issue_id');
+        return $this->hasOneThrough(OrderIssue::class, OrderIssueRejectedBill::class, 'logistic_number_return', 'id', 'logistic_number_return', 'order_issue_id');
     }
 
-    function orderIssueRejectedBill(){
-        return $this->hasOne(OrderIssueRejectedBill::class,'logistic_number_return','logistic_number_return')->whereNotNull('order_issue_id');
+    function orderIssueRejectedBill()
+    {
+        return $this->hasOne(OrderIssueRejectedBill::class, 'logistic_number_return', 'logistic_number_return')->whereNotNull('order_issue_id');
     }
+
     function record(): BelongsTo
     {
-        return $this->belongsTo(ReceiveRecord::class,"logistic_number_return","logistic_number");
+        return $this->belongsTo(ReceiveRecord::class, "logistic_number_return", "logistic_number");
     }
 
 
-    function setIsLoaded_toWaitConfirm(){
-        if(config('api.jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,"将待推单修改为待确认! 退单号:".$this['logistic_number_return'],Auth::user()['id']);
-        $bill=RejectedBill::find($this['id']);
-        $bill['is_loaded']=4;
+    function setIsLoaded_toWaitConfirm()
+    {
+        if (config('api.jianshang_rejecteds_log_switch')) Controller::logS(__METHOD__, __FUNCTION__, "将待推单修改为待确认! 退单号:" . $this['logistic_number_return'], Auth::user()['id']);
+        $bill = RejectedBill::find($this['id']);
+        $bill['is_loaded'] = 4;
         $bill->save();
     }
-    function logisticName(){
-        $logistic=$this->hasOne('App\Logistic','id','id_logistic_return')->first();
-        return $logistic?$logistic['name']:'';
+
+    function logisticName()
+    {
+        $logistic = $this->hasOne('App\Logistic', 'id', 'id_logistic_return')->first();
+        return $logistic ? $logistic['name'] : '';
     }
-    function makeCheckedNumbers(){
+
+    function makeCheckedNumbers()
+    {
         $owner = $this->owner()->first();
-        if(!$owner)return '';
-        $pinyinOwnerName=Pinyin::convert($owner->name);
-        $pinyinArr=array_map(function($pinyin){
+        if (!$owner) return '';
+        $pinyinOwnerName = Pinyin::convert($owner->name);
+        $pinyinArr = array_map(function ($pinyin) {
             return $pinyin[0];
-        },$pinyinOwnerName);
-        $initials=implode("", $pinyinArr);
-        $this['checked_numbers']=$initials.Carbon::now()->format('Ymd').$owner->getIncreasedCheckingCount();
+        }, $pinyinOwnerName);
+        $initials = implode("", $pinyinArr);
+        $this['checked_numbers'] = $initials . Carbon::now()->format('Ymd') . $owner->getIncreasedCheckingCount();
         return $this['checked_numbers'];
     }
 
 
-
     function update(array $attributes = [], array $options = [])
     {
-        (new LogisticNumberFeatureController())->createFeatures($this['logistic_number_return'],$this['id_logistic_return']);
+        (new LogisticNumberFeatureController())->createFeatures($this['logistic_number_return'], $this['id_logistic_return']);
         return parent::update($attributes, $options);
     }
+
     function save(array $options = [])
     {
-        if($this['logistic_number_return'])(new LogisticNumberFeatureController())->createFeatures($this['logistic_number_return'],$this['id_logistic_return']);
+        if ($this['logistic_number_return']) (new LogisticNumberFeatureController())->createFeatures($this['logistic_number_return'], $this['id_logistic_return']);
         return parent::save($options);
     }
 
 
-    public function getOwnerNameAttribute(){
-        return $this->owner['name']??'';
+    public function getOwnerNameAttribute()
+    {
+        return $this->owner['name'] ?? '';
     }
-    public function getLogisticNameAttribute(){
-        return $this->logistic['name']??'';
+
+    public function getLogisticNameAttribute()
+    {
+        return $this->logistic['name'] ?? '';
     }
-    public function getIsLoadedStrAttribute(){
-        $val=$this['is_loaded']===null?'null':$this['is_loaded'];
-        $val=$val===0?'0':$val;
-        switch ($val){
-            case 'null':return '无需入库';
-            case '0':return '否';
-            case 1:return '是';
-            case 2:return '待推单';
-            case 3:return '上传异常';
+
+    public function getIsLoadedStrAttribute()
+    {
+        $val = $this['is_loaded'] === null ? 'null' : $this['is_loaded'];
+        $val = $val === 0 ? '0' : $val;
+        switch ($val) {
+            case 'null':
+                return '无需入库';
+            case '0':
+                return '否';
+            case 1:
+                return '是';
+            case 2:
+                return '待推单';
+            case 3:
+                return '上传异常';
         }
         return '';
     }
-    public function getGoodsAmountAttribute(){
-        $amount=0;
-        $this->items->each(function (RejectedBillItem $item)use(&$amount){
-            $amount+=$item['amount'];
+
+    public function getGoodsAmountAttribute()
+    {
+        $amount = 0;
+        $this->items->each(function (RejectedBillItem $item) use (&$amount) {
+            $amount += $item['amount'];
         });
         return $amount;
     }
-    public function getOperatorNameAttribute(){
+
+    public function getOperatorNameAttribute()
+    {
         return $this['user'] ? $this['user']['name'] : null;
     }
-    public function getIsLoadedNullAttribute(){
-        if($this['is_loaded']===null) return 'null';
+
+    public function getIsLoadedNullAttribute()
+    {
+        if ($this['is_loaded'] === null) return 'null';
         return $this['is_loaded'];
     }
-    public function changeIsLoaded_ifItemsAllLoaded(){
-        $allItemsAreLoaded=true;
-        $this->items->each(function (RejectedBillItem $item)use(&$allItemsAreLoaded){
-            if($item['is_loaded']=='未入库'){
-                $allItemsAreLoaded=false;
+
+    public function changeIsLoaded_ifItemsAllLoaded()
+    {
+        $allItemsAreLoaded = true;
+        $this->items->each(function (RejectedBillItem $item) use (&$allItemsAreLoaded) {
+            if ($item['is_loaded'] == '未入库') {
+                $allItemsAreLoaded = false;
                 return false;
             }
         });
-        if($allItemsAreLoaded){
-            $this['is_loaded']=1;
-        }else{
-            $this['is_loaded']=0;
+        if ($allItemsAreLoaded) {
+            $this['is_loaded'] = 1;
+        } else {
+            $this['is_loaded'] = 0;
         }
         $this->update();
         return $this['is_loaded'];
@@ -170,9 +259,9 @@ class RejectedBill extends Model
     {
         /** @var OrderIssue $orderIssue */
         $order_issue_rejected_bill = OrderIssueRejectedBill::query()->select('logistic_number_return')
-            ->where('logistic_number_return',$this->logistic_number_return)->first();
-        if ($order_issue_rejected_bill){
-            OrderIssueRejectedBill::query()->where('logistic_number_return',$this->logistic_number_return)->delete();
+            ->where('logistic_number_return', $this->logistic_number_return)->first();
+        if ($order_issue_rejected_bill) {
+            OrderIssueRejectedBill::query()->where('logistic_number_return', $this->logistic_number_return)->delete();
             SyncOrderRejectingStatusJob::dispatch($this);
         }
         return parent::delete();

+ 2 - 2
app/Traits/LogisticSyncTrait.php

@@ -135,9 +135,9 @@ trait LogisticSyncTrait
                 }
             }
         }
-        //如果复核时间>前一天的18.00,则不添加异常信息
+        //如果复核时间>前一天的23.59,则不添加异常信息
         if ((!empty($sent_at)) &&
-            ($sent_at->gt(now()->subDay()->startOfDay()->addHours(18))) &&
+            ($sent_at->gt(now()->subDay()->startOfDay()->addHours(23)->addMinutes(59))) &&
             isset($data['exception_status'])) {
             unset($data['exception_status']);
         }

+ 32 - 0
database/migrations/2022_03_16_110816_add_delivery_status_to_rejected_bills_table.php

@@ -0,0 +1,32 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class AddDeliveryStatusToRejectedBillsTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('rejected_bills', function (Blueprint $table) {
+            $table->tinyInteger("delivery_status")->default(1)->comment("收货状态");
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('rejected_bills', function (Blueprint $table) {
+            $table->dropColumn("delivery_status");
+        });
+    }
+}

+ 339 - 136
resources/views/rejected/rejectedPushTask/index.blade.php

@@ -10,7 +10,7 @@
                 <label class="form-check-label" for="checkAll">选择全部</label>
             </div>
             <div class="form-group m-2">
-                <select class="form-control selectpicker" title="分页大小" v-model="size">
+                <select class="form-control selectpicker" title="分页大小" v-model="tableData.secondData.size">
                     <option value="50">50</option>
                     <option value="100">100</option>
                     <option value="200">200</option>
@@ -20,40 +20,42 @@
             </div>
 
             <div class="form-group m-2">
-                <select class="form-control selectpicker" title="货主" v-model="search.ownerId">
+                <select class="form-control selectpicker" title="货主" v-model="tableData.secondData.search.ownerId">
                     <option v-for="item of selectData.owners" :value="item.id">@{{ item.name }}</option>
                 </select>
             </div>
 
             <div class="form-group m-2">
-                <select class="form-control selectpicker" title="类型" v-model="search.type">
+                <select class="form-control selectpicker" title="类型" v-model="tableData.secondData.search.type">
                     <option value="正品">正品</option>
                     <option value="次品">次品</option>
                 </select>
             </div>
 
             <div class="form-group m-2">
-                <select class="form-control selectpicker" title="类型" v-model="search.status">
-                    <option selected value="创建">创建</option>
+                <select class="form-control selectpicker" title="状态" v-model="tableData.secondData.search.status">
+                    <option value="创建">创建</option>
                     <option value="等待下载">等待下载</option>
                     <option value="已下载">已下载</option>
-                    <option value="部分推单">部分推单</option>
+                    <option value="推单异常">推单异常</option>
                     <option value="已推单">已推单</option>
+                    <option value="已入库">已入库</option>
                     <option value="部分上架">部分上架</option>
                     <option value="已上架">已上架</option>
                 </select>
             </div>
-
-            <div class="form-group m-2">
-                <button class="form-control btn btn-sm btn-info" @click="searchData()">查询</button>
+            <div class="form-group m-2" data-toggle="tooltip" data-placement="top" title="推单任务编号">
+                <input v-model="tableData.secondData.search.taskNum" class="form-control" type="text"
+                       placeholder="推单任务编号">
             </div>
             <div class="form-group m-2">
-                <button class="form-control btn btn-sm btn-info" @click="stopStoreUp()">批量停止攒单</button>
+                <button class="form-control btn btn-sm btn-info" @click="searchData()">查询</button>
             </div>
         </div>
-        <!--            表格-->
-        <table class="table table-striped table-bordered table-hover card-body td-min-width-80" id="table">
-            <tr v-for="(item,i) in details.data" @click="selectTr===i+1?selectTr=0:selectTr=i+1"
+        <!--表格-->
+        <!--创建-->
+        <table class="table table-striped table-bordered table-hover card-body td-min-width-80" id="firstTable">
+            <tr v-for="(item,i) in tableData.firstData.data" @click="selectTr===i+1?selectTr=0:selectTr=i+1"
                 :class="selectTr===i+1?'focusing' : ''">
                 <td>
                     <input class="checkItem" type="checkbox" v-model="item.checked">
@@ -61,6 +63,7 @@
                 </td>
                 <td class="td-warm text-muted"><span>@{{ item.id }}</span></td>
                 <td class="td-warm text-muted"><span>@{{ item.createTime }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.taskNum }}</span></td>
                 <td class="td-warm text-muted"><span>@{{ item.type }}</span></td>
                 <td class="td-warm text-muted"><span>@{{ item.status }}</span></td>
                 <td class="td-warm text-muted"><span>@{{ item.asnNos }}</span></td>
@@ -69,7 +72,7 @@
                 <td class="td-warm text-muted">
                     <span>
                         @{{ item.orderAmount }}
-                          <button @click="showPackageDetail(item.id)" type="button"
+                          <button @click="showPackageDetail(item.id,true)" type="button"
                                   class="btn btn-sm btn-primary" data-toggle="modal"
                                   data-target="#staticBackdropShowPackageDetail">查看明细</button>
                     </span>
@@ -77,7 +80,7 @@
                 <td class="td-warm text-muted">
                     <span>
                         @{{ item.commodityAmount }}
-                        <button @click="showCommodityDetail(item.id)" type="button"
+                        <button @click="showCommodityDetail(item.id,true)" type="button"
                                 class="btn btn-sm btn-primary" data-toggle="modal"
                                 data-target="#staticBackdropShowCommodityDetail">查看明细</button>
                     </span>
@@ -87,26 +90,74 @@
                                  @click="stopStoreUp(item.id)" type="button"
                                  class="btn btn-success">停止攒单
                          </button>
+                    </span></td>
+            </tr>
+        </table>
+
+        <!--非创建-->
+        <table class="table table-striped table-bordered table-hover card-body td-min-width-80" id="secondTable">
+            <tr v-for="(item,i) in tableData.secondData.data" @click="selectTr===i+1?selectTr=0:selectTr=i+1"
+                :class="selectTr===i+1?'focusing' : ''">
+                <td>
+                    <input class="checkItem" type="checkbox" v-model="item.checked">
+                    <span>@{{ i+1 }}</span>
+                </td>
+                <td class="td-warm text-muted"><span>@{{ item.taskNum }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.createTime }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.type }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.status }}</span></td>
+                <td class="td-warm text-muted overflow-hidden" style="max-width: 20px!important;"><span>@{{ item.asnNos }}</span>
+                </td>
+                <td class="td-warm text-muted"><span>@{{ item.ownerName }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.storeUpHour }}</span></td>
+                <td class="td-warm text-muted">
+                    <span>
+                        @{{ item.orderAmount }}
+                          <button @click="showPackageDetail(item.id,true)" type="button"
+                                  class="btn btn-sm btn-primary" data-toggle="modal"
+                                  data-target="#staticBackdropShowPackageDetail">查看明细</button>
+                    </span>
+                </td>
+                <td class="td-warm text-muted">
+                    <span>
+                        @{{ item.commodityAmount }}
+                        <button @click="showCommodityDetail(item.id,true)" type="button"
+                                class="btn btn-sm btn-primary" data-toggle="modal"
+                                data-target="#staticBackdropShowCommodityDetail">查看明细</button>
+                    </span>
+                </td>
+                <td class="td-warm text-muted"><span>
                            <button v-if="item.status != '创建'"
-                                   @click="downExcel(item.id)" type="button"
+                                   @click="downExcel(item)" type="button"
                                    class="btn btn-success">导出EXCEL
                          </button>
+                         <button v-if="item.status === '推单异常'"
+                                 @click="cancelPush(item)" type="button"
+                                 class="btn btn-success">取消推单
+                         </button>
+                         <button v-if="item.status === '推单异常'"
+                                 @click="showPushDetail(item.id)" type="button"
+                                 class="btn btn-sm btn-primary" data-toggle="modal"
+                                 data-target="#staticBackdropShowPushDetail">查看异常明细</button>
+                             <button v-if="item.status === '已推单'"
+                                     @click="storeIn(item)" type="button"
+                                     class="btn btn-sm btn-primary">入库</button>
                     </span></td>
             </tr>
         </table>
-
+        <!--分页-->
         <nav aria-label="...">
             <ul class="pagination">
-                <li class="page-item" :class="current===1?'disabled':''">
-                    <button class="page-link" @click="pagination('pre')">上一页</button>
+                <li class="page-item" :class="tableData.secondData.current===1?'disabled':''">
+                    <button class="page-link" @click="secondTablePagination('pre')">上一页</button>
                 </li>
-                <li class="page-item" :class="current===details.pages?'disabled':''">
-                    <button class="page-link" @click="pagination('next')">下一页</button>
+                <li class="page-item" :class="tableData.secondData.current===tableData.secondData.pages?'disabled':''">
+                    <button class="page-link" @click="secondTablePagination('next')">下一页</button>
                 </li>
             </ul>
         </nav>
-
         <!-- Modal -->
+        <!--商品明细-->
         <div class="modal fade" id="staticBackdropShowPackageDetail" tabindex="-1" aria-labelledby="staticBackdropLabel"
              aria-hidden="true">
             <div class="modal-dialog " style="max-width: 100% !important;">
@@ -122,9 +173,9 @@
                         <div class="modal-dialog  modal-dialog-scrollable" style="max-width: 100% !important;">
                             <table class="table table-sm"
                                    style="background: #fff;" id="tablePackage">
-                                <tr v-for="(item,i) in resData.packageDetail.data" :key="i">
+                                <tr v-for="(item,i) in showDetailData.packageDetail.data" :key="i">
                                     <td class="td-warm text-muted"><span>@{{ i+1 }}</span></td>
-                                    <td class="td-warm text-muted"><span>@{{ item.rejectedPushTaskHeaderId }}</span>
+                                    <td class="td-warm text-muted"><span>@{{ item.taskNum }}</span>
                                     </td>
                                     <td class="td-warm text-muted"><span>@{{ item.createdAt }}</span></td>
                                     <td class="td-warm text-muted"><span>@{{ item.checkedNumbers }}</span></td>
@@ -153,11 +204,11 @@
 
                         <nav aria-label="...">
                             <ul class="pagination">
-                                <li class="page-item" :class="resData.packageDetail.current===1?'disabled':''">
+                                <li class="page-item" :class="showDetailData.packageDetail.current===1?'disabled':''">
                                     <button class="page-link" @click="packagePagination('pre')">上一页</button>
                                 </li>
                                 <li class="page-item"
-                                    :class="resData.packageDetail.current===resData.packageDetail.pages?'disabled':''">
+                                    :class="showDetailData.packageDetail.current===showDetailData.packageDetail.pages?'disabled':''">
                                     <button class="page-link" @click="packagePagination('next')">下一页</button>
                                 </li>
                             </ul>
@@ -166,6 +217,7 @@
                 </div>
             </div>
         </div>
+        <!--订单明细-->
         <div class="modal fade" id="staticBackdropShowCommodityDetail" tabindex="-1"
              aria-labelledby="staticBackdropLabel"
              aria-hidden="true">
@@ -182,9 +234,9 @@
                         <div class="modal-dialog  modal-dialog-scrollable">
                             <table class="table table-sm"
                                    style="background: #fff;" id="tableCommodity">
-                                <tr v-for="(item,i) in resData.commodityDetail.data" :key="i">
+                                <tr v-for="(item,i) in showDetailData.commodityDetail.data" :key="i">
                                     <td class="td-warm text-muted"><span>@{{ i+1 }}</span></td>
-                                    <td class="td-warm text-muted"><span>@{{ item.rejectedPushTaskHeaderId }}</span>
+                                    <td class="td-warm text-muted"><span>@{{ item.taskNum }}</span>
                                     </td>
                                     <td class="td-warm text-muted"><span>@{{ item.sku }}</span></td>
                                     <td class="td-warm text-muted"><span>@{{ item.nameGoods }}</span></td>
@@ -195,11 +247,11 @@
                         </div>
                         <nav aria-label="...">
                             <ul class="pagination">
-                                <li class="page-item" :class="resData.commodityDetail.current===1?'disabled':''">
+                                <li class="page-item" :class="showDetailData.commodityDetail.current===1?'disabled':''">
                                     <button class="page-link" @click="commodityPagination('pre')">上一页</button>
                                 </li>
                                 <li class="page-item"
-                                    :class="resData.commodityDetail.current===resData.commodityDetail.pages?'disabled':''">
+                                    :class="showDetailData.commodityDetail.current===showDetailData.commodityDetail.pages?'disabled':''">
                                     <button class="page-link" @click="commodityPagination('next')">下一页</button>
                                 </li>
                             </ul>
@@ -208,6 +260,40 @@
                 </div>
             </div>
         </div>
+        <!--推单明细-->
+        <div class="modal fade" id="staticBackdropShowPushDetail" tabindex="-1"
+             aria-labelledby="staticBackdropLabel"
+             aria-hidden="true">
+            <div class="modal-dialog modal-xl">
+                <div class="modal-content ">
+                    <div class="modal-header ">
+                        <h5 class="modal-title" id="staticBackdropLabel">明细</h5>
+                        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                            <span aria-hidden="true">&times;</span>
+                        </button>
+                    </div>
+                    <div class="modal-body ">
+                        <!-- Scrollable modal -->
+                        <div class="modal-dialog  modal-dialog-scrollable" style="pointer-events:auto!important;">
+                            <table class="table table-sm"
+                                   style="background: #fff;" id="tablePushDetail">
+                                <tr v-for="(item,i) in showDetailData.pushDetail" :key="i">
+                                    <td class="td-warm text-muted"><span>@{{ i+1 }}</span></td>
+                                    <td class="td-warm text-muted"><span>@{{ item.sku }}</span></td>
+                                    <td class="td-warm text-muted"><span :style="pushDetailStyle(item.status)">@{{ item.status }}</span>
+                                    </td>
+                                    <td class="td-warm text-muted">
+                                        <button @click="removePushDetailError(item)" type="button"
+                                                class="btn btn-sm btn-primary">移除异常SKU
+                                        </button>
+                                    </td>
+                                </tr>
+                            </table>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
     </div>
 
 
@@ -219,7 +305,7 @@
         let vue = new Vue({
             el: "#list",
             data: {
-                resData: {
+                showDetailData: {
                     packageDetail: {
                         data: [],
                         total: null,
@@ -233,46 +319,52 @@
                         current: 1,
                         pages: null,
                         size: 50,
-                    }
+                    },
+                    pushDetail: []
 
                 },
-                submitData: {
-                    type: null,
-                    warehouseId: null,
-                    allowMixed: null,
-                    volume: null,
-                    loadWeight: null,
-                    createAmount: null,
-                },
                 selectData: {
                     owners: {!! $owners !!}
                 },
                 checkAll: false,
                 selectTr: 0,
-                details: {
-                    data: [],
-                    total: null,
-                    current: 1,
-                    pages: null,
-                    size: 50,
-                },
-                search: {
-                    ownerId: null,
-                    type: null,
-                    status: '创建',
-                    ownerIdList: {!! $ownerIds !!}
-                },
-                size: 50,
-                current: 1,
+                tableData: {
+                    firstData: {
+                        data: [],
+                        total: null,
+                        current: 1,
+                        pages: null,
+                        size: 1000,
+                        search: {
+                            ownerId: null,
+                            type: null,
+                            status: '创建',
+                            ownerIdList: {!! $ownerIds !!}
+                        }
+                    },
+                    secondData: {
+                        data: [],
+                        total: null,
+                        current: 1,
+                        pages: null,
+                        size: 50,
+                        search: {
+                            ownerId: null,
+                            taskNum: null,
+                            type: null,
+                            status: null,
+                            ownerIdList: {!! $ownerIds !!}
+                        }
+                    }
+                }
             },
             created() {
-                let url = this.getBaseUrl() + `/api/wms/rejectedPushTask/list?size=${this.size}&current=${this.current}`;
-                this.getPageResult(url);
+                this.initData();
             },
             mounted: function () {
                 $('#list').removeClass('d-none');
                 $(".up").slideUp();
-                let column = [
+                let firstTableColumn = [
                     {name: 'row_num', value: '序号'},
                     {name: 'id', value: '推单任务编号'},
                     {name: 'createTime', value: '创建时间'},
@@ -286,10 +378,33 @@
                     {name: 'action', value: '操作'},
                 ];
                 new Header({
-                    el: "table",
-                    name: "details",
-                    column: column,
-                    data: this.details.data,
+                    el: "firstTable",
+                    name: "firstData",
+                    column: firstTableColumn,
+                    data: this.tableData.firstData.data,
+                    restorationColumn: 'addtime',
+                    isCheckAllBox: false,
+                    fixedTop: ($('#form_div').height()) + ($('#btn').height()) + 1,
+                }).init();
+
+                let secondTableColumn = [
+                    {name: 'row_num', value: '序号'},
+                    {name: 'id', value: '推单任务编号'},
+                    {name: 'createTime', value: '创建时间'},
+                    {name: 'type', value: '任务类型'},
+                    {name: 'status', value: '状态'},
+                    {name: 'asnNos', value: 'ASN单号'},
+                    {name: 'ownerName', value: '货主'},
+                    {name: 'storeUpHour', value: '积攒时间'},
+                    {name: 'orderAmount', value: '订单数'},
+                    {name: 'commodityAmount', value: '商品数'},
+                    {name: 'action', value: '操作'},
+                ];
+                new Header({
+                    el: "secondTable",
+                    name: "secondData",
+                    column: secondTableColumn,
+                    data: this.tableData.secondData.data,
                     restorationColumn: 'addtime',
                     isCheckAllBox: false,
                     fixedTop: ($('#form_div').height()) + ($('#btn').height()) + 1,
@@ -320,7 +435,7 @@
                     el: "tablePackage",
                     name: "details",
                     column: columnPackage,
-                    data: this.resData.packageDetail.data,
+                    data: this.showDetailData.packageDetail.data,
                     restorationColumn: 'addtime',
                     isCheckAllBox: false,
 
@@ -339,70 +454,125 @@
                     el: "tableCommodity",
                     name: "details",
                     column: columnCommodity,
-                    data: this.resData.commodityDetail.data,
+                    data: this.showDetailData.commodityDetail.data,
+                    restorationColumn: 'addtime',
+                    isCheckAllBox: false,
+                    fixedTop: ($('#form_div').height()) + ($('#btn').height()) + 1,
+                }).init();
+
+
+                let pushDetailColumn = [
+                    {name: 'id', value: '序号'},
+                    {name: 'sku', value: 'SKU'},
+                    {name: 'status', value: '状态'},
+                    {name: 'action', value: '操作'}
+                ];
+                new Header({
+                    el: "tablePushDetail",
+                    name: "details",
+                    column: pushDetailColumn,
+                    data: this.showDetailData.pushDetail,
                     restorationColumn: 'addtime',
                     isCheckAllBox: false,
                     fixedTop: ($('#form_div').height()) + ($('#btn').height()) + 1,
                 }).init();
             },
             methods: {
+                //初始化页面数据
+                initData() {
+                    //加载firstTable
+                    let firstDataUrl = this.getBaseUrl() + `/api/wms/rejectedPushTask/list?size=${this.tableData.firstData.size}&current=${this.tableData.firstData.current}`;
+                    this.fetch(firstDataUrl, this.tableData.firstData, this.tableData.firstData.search);
+                    //加载secondTable
+                    let secondDataUrl = this.getBaseUrl() + `/api/wms/rejectedPushTask/list?size=${this.tableData.secondData.size}&current=${this.tableData.secondData.current}`;
+                    this.fetch(secondDataUrl, this.tableData.secondData, this.tableData.secondData.search);
+                },
+                //发送请求并给对应数据赋值
+                fetch(url, data, search) {
+                    tempTip.showSuccess('开始查询,请稍后!');
+                    axios.post(url, search).then(res => {
+                        if (res.data.code !== 200) {
+                            tempTip.show('接口异常!');
+                            data.data = [];
+                            data.total = 0
+                            data.current = 1
+                            data.pages = 0
+                        } else {
+                            tempTip.showSuccess('查询成功!');
+                            data.data = res.data.data.list;
+                            data.total = res.data.data.page.total;
+                            data.current = res.data.data.page.pageNum;
+                            data.pages = res.data.data.page.pages
+                            data.size = res.data.data.page.pageSize;
+                        }
+                    });
+                },
+                //包裹明细分页
                 packagePagination(flag) {
                     console.log(flag);
-                    if (flag === 'pre' && this.resData.packageDetail.current > 1) {
-                        this.resData.packageDetail.current--;
-                    } else if (flag === 'next' && this.resData.packageDetail.current < this.resData.packageDetail.pages) {
-                        this.resData.packageDetail.current++;
+                    if (flag === 'pre' && this.showDetailData.packageDetail.current > 1) {
+                        this.showDetailData.packageDetail.current--;
+                    } else if (flag === 'next' && this.showDetailData.packageDetail.current < this.showDetailData.packageDetail.pages) {
+                        this.showDetailData.packageDetail.current++;
                     }
-                    this.showPackageDetail(this.resData.packageDetail.data[0].rejectedPushTaskHeaderId);
+                    this.showPackageDetail(this.showDetailData.packageDetail.data[0].rejectedPushTaskHeaderId);
                 },
+                //商品明细分页
                 commodityPagination(flag) {
-                    console.log(flag);
-                    if (flag === 'pre' && this.resData.commodityDetail.current > 1) {
-                        this.resData.commodityDetail.current--;
-                    } else if (flag === 'next' && this.resData.commodityDetail.current < this.resData.commodityDetail.pages) {
-                        this.resData.commodityDetail.current++;
+                    if (flag === 'pre' && this.showDetailData.commodityDetail.current > 1) {
+                        this.showDetailData.commodityDetail.current--;
+                    } else if (flag === 'next' && this.showDetailData.commodityDetail.current < this.showDetailData.commodityDetail.pages) {
+                        this.showDetailData.commodityDetail.current++;
                     }
-                    this.showCommodityDetail(this.resData.commodityDetail.data[0].rejectedPushTaskHeaderId);
+                    this.showCommodityDetail(this.showDetailData.commodityDetail.data[0].rejectedPushTaskHeaderId);
                 },
-                showCommodityDetail(id) {
-                    let url = this.getBaseUrl() + `/api/wms/rejectedPushTask/commodity/list?size=${this.resData.commodityDetail.size}&current=${this.resData.commodityDetail.current}&rejectedPushTaskId=${id}`
+                //查询商品明细
+                showCommodityDetail(id, firstFlag = false) {
+                    if (firstFlag) {
+                        this.showDetailData.commodityDetail.current = 1;
+                    }
+                    let url = this.getBaseUrl() + `/api/wms/rejectedPushTask/commodity/list?size=${this.showDetailData.commodityDetail.size}&current=${this.showDetailData.commodityDetail.current}&rejectedPushTaskId=${id}`;
                     tempTip.showSuccess('开始查询,请稍后!');
                     axios.get(url).then(res => {
                         tempTip.showSuccess('查询成功!');
                         if (res.data.code !== 200) {
                             tempTip.show('接口异常!');
-                            this.resData.commodityDetail.data = [];
-                            this.resData.commodityDetail.total = 0
-                            this.resData.commodityDetail.current = 1
-                            this.resData.commodityDetail.pages = 0
-                            this.resData.commodityDetail.size = 50;
+                            this.showDetailData.commodityDetail.data = [];
+                            this.showDetailData.commodityDetail.total = 0
+                            this.showDetailData.commodityDetail.current = 1
+                            this.showDetailData.commodityDetail.pages = 0
+                            this.showDetailData.commodityDetail.size = 50;
                         } else {
-                            this.resData.commodityDetail.data = res.data.data.list;
-                            this.resData.commodityDetail.total = res.data.data.page.total;
-                            this.resData.commodityDetail.current = res.data.data.page.pageNum;
-                            this.resData.commodityDetail.pages = res.data.data.page.pages
-                            this.resData.commodityDetail.size = res.data.data.page.pageSize;
+                            this.showDetailData.commodityDetail.data = res.data.data.list;
+                            this.showDetailData.commodityDetail.total = res.data.data.page.total;
+                            this.showDetailData.commodityDetail.current = res.data.data.page.pageNum;
+                            this.showDetailData.commodityDetail.pages = res.data.data.page.pages
+                            this.showDetailData.commodityDetail.size = res.data.data.page.pageSize;
                         }
                     });
                 },
-                showPackageDetail(id) {
-                    let url = this.getBaseUrl() + `/api/wms/rejectedPushTask/package/list?size=${this.resData.packageDetail.size}&current=${this.resData.packageDetail.current}&rejectedPushTaskId=${id}`
+                //查询包裹明细
+                showPackageDetail(id, firstFlag = false) {
+                    if (firstFlag) {
+                        this.showDetailData.packageDetail.current = 1;
+                    }
+                    let url = this.getBaseUrl() + `/api/wms/rejectedPushTask/package/list?size=${this.showDetailData.packageDetail.size}&current=${this.showDetailData.packageDetail.current}&rejectedPushTaskId=${id}`
                     tempTip.showSuccess('开始查询,请稍后!');
                     axios.get(url).then(res => {
                         tempTip.showSuccess('查询成功!');
                         if (res.data.code !== 200) {
                             tempTip.show('接口异常!');
-                            this.resData.packageDetail.data = [];
-                            this.resData.packageDetail.total = 0
-                            this.resData.packageDetail.current = 1
-                            this.resData.packageDetail.pages = 0
-                            this.resData.packageDetail.size = 50;
+                            this.showDetailData.packageDetail.data = [];
+                            this.showDetailData.packageDetail.total = 0
+                            this.showDetailData.packageDetail.current = 1
+                            this.showDetailData.packageDetail.pages = 0
+                            this.showDetailData.packageDetail.size = 50;
                         } else {
-                            this.resData.packageDetail.data = res.data.data.list;
-                            this.resData.packageDetail.total = res.data.data.page.total;
-                            this.resData.packageDetail.current = res.data.data.page.pageNum;
-                            this.resData.packageDetail.pages = res.data.data.page.pages
-                            this.resData.packageDetail.size = res.data.data.page.pageSize;
+                            this.showDetailData.packageDetail.data = res.data.data.list;
+                            this.showDetailData.packageDetail.total = res.data.data.page.total;
+                            this.showDetailData.packageDetail.current = res.data.data.page.pageNum;
+                            this.showDetailData.packageDetail.pages = res.data.data.page.pages
+                            this.showDetailData.packageDetail.size = res.data.data.page.pageSize;
                         }
                     });
                 },
@@ -411,6 +581,7 @@
                         item.checked = this.checkAll;
                     }
                 },
+                //停止攒单
                 stopStoreUp(id = null) {
                     let idList = null
                     let url = this.getBaseUrl() + `/api/wms/rejectedPushTask/stopStoreUp/`;
@@ -430,36 +601,14 @@
                             tempTip.show(res.data.message);
                         } else {
                             tempTip.showSuccess('修改状态成功!');
-                            this.searchData();
+                            this.initData();
                         }
                     });
                 },
-                getPageResult(url) {
-                    tempTip.showSuccess('开始查询,请稍后!');
-                    axios.post(url, this.getSearch()).then(res => {
-                        if (res.data.code !== 200) {
-                            tempTip.show('接口异常!');
-                            this.details.data = [];
-                            this.details.total = 0
-                            this.details.current = 1
-                            this.details.pages = 0
-                            this.details.size = 50;
-                        } else {
-                            tempTip.showSuccess('查询成功!');
-                            this.details.data = res.data.data.list;
-                            this.details.total = res.data.data.page.total;
-                            this.details.current = res.data.data.page.pageNum;
-                            this.details.pages = res.data.data.page.pages
-                            this.details.size = res.data.data.page.pageSize;
-                        }
-                    });
-                },
-                getSearch() {
-                    return Object.assign({}, this.search);
-                },
+                //查询
                 searchData() {
-                    this.current = 1;
-                    this.pagination();
+                    this.tableData.secondData.current = 1;
+                    this.secondTablePagination();
                 },
                 //根据环境获取不同的url
                 getBaseUrl() {
@@ -472,21 +621,23 @@
                     }
                     return url;
                 },
-                pagination(flag) {
-                    if (flag === 'pre' && this.current > 1) {
-                        this.current--;
-                    } else if (flag === 'next' && this.current < this.details.pages) {
-                        this.current++;
+                //第二个表格分页查询
+                secondTablePagination(flag) {
+                    if (flag === 'pre' && this.tableData.secondData.current > 1) {
+                        this.tableData.secondData.current--;
+                    } else if (flag === 'next' && this.tableData.secondData.current < this.tableData.secondData.pages) {
+                        this.tableData.secondData.current++;
                     }
-                    let url = this.getBaseUrl() + `/api/wms/rejectedPushTask/list?size=${this.size}&current=${this.current}`;
-                    this.getPageResult(url);
+                    let url = this.getBaseUrl() + `/api/wms/rejectedPushTask/list?size=${this.tableData.secondData.size}&current=${this.tableData.secondData.current}`;
+                    this.fetch(url, this.tableData.secondData, this.tableData.secondData.search);
                 },
-
-                downExcel(id) {
+                //下载excel
+                downExcel(item) {
                     let url = this.getBaseUrl();
-                    url += `/api/wms/rejectedPushTask/export/create?rejectedPushTaskId=${id}`;
+                    url += `/api/wms/rejectedPushTask/export/create?rejectedPushTaskId=${item.id}`;
                     axios.get(url).then(res => {
                         if (res.data.code === 200) {
+                            item.status = '已下载';
                             let filename = res.data.data;
                             let downUrl = this.getBaseUrl() + `/api/wms/rejectedPushTask/export/download?filename=${filename}`;
                             let link = document.createElement('a');
@@ -502,9 +653,61 @@
                             tempTip.show(res.data.data);
                         }
                     })
+                },
+                cancelPush(item) {
+                    let url = this.getBaseUrl() + `/api/wms/rejectedPushTask/cancelPush?taskId=${item.id}`
+                    axios.post(url).then(res => {
+                        tempTip.showSuccess('取消成功!');
+                        item.status = "已下载"
+                    })
+                },
+                showPushDetail(id) {
+                    let url = this.getBaseUrl() + `/api/wms/rejectedPushTask/sku/list?taskId=${id}`
+                    axios.get(url).then(res => {
+                        this.showDetailData.pushDetail = res.data.data
+                    })
+                },
+                pushDetailStyle(status) {
+                    let res = {};
+                    switch (status) {
+                        case "未推单":
+                            res.color = '#0206ff'
+                            break;
+                        case "已推单":
+                            res.color = '#bfa'
+                            break;
+                        case "推单异常":
+                            res.color = '#f00'
+                            break;
+                    }
+                    return res;
+                },
+
+                removePushDetailError(item) {
+                    let index = this.showDetailData.pushDetail.indexOf(item);
+
+                    let url = this.getBaseUrl() + `/api/wms/rejectedPushTask/sku/${item.id}`
+                    axios.delete(url).then(res => {
+                        if (res.data.code === 200) {
+                            tempTip.showSuccess('移除成功!');
+                            this.showDetailData.pushDetail.splice(index, 1);
+                        } else {
+                            tempTip.show('移除失败!' + res.data.message);
+                        }
+                    })
+                },
+                storeIn(item) {
+                    let url = this.getBaseUrl() + `/api/wms/rejectedPushTask/${item.id}/storeIn`
+                    axios.post(url).then((res) => {
+                        if (res.data.code === 200) {
+                            tempTip.showSuccess('入库成功!');
+                            item.status = "已入库";
+                        } else {
+                            tempTip.show('入库失败!' + res.data.message);
+                        }
+                    });
                 }
             },
-
         });
     </script>
 @endsection

+ 373 - 239
resources/views/rejected/search/general.blade.php

@@ -21,6 +21,9 @@
                 @can('退货管理-审核')
                     <span class="btn btn-sm btn-outline-dark" @click="checkAll" style="cursor: pointer">审核</span>
                 @endcan
+                @can('退货管理-收货')
+                    <span class="btn btn-sm btn-outline-dark" @click="deliveryCheck()" style="cursor: pointer">收货</span>
+                @endcan
                 @can('退货管理-编辑')
                     <span class="btn btn-sm btn-outline-dark" @click="finishAll" style="cursor: pointer">完结</span>
                 @endcan
@@ -67,6 +70,7 @@
                             </span>
                             <span v-else>未审核</span>
                         </td>
+                        <td class="text-muted text-center">@{{ rejectedBill.delivery_status }}</td>
                         <td class="" :class="[rejectedBill.is_finished==1?'text-success':'text-muted']">@{{rejectedBill.is_finished | yesNo}}</td>
                         <td class="" :class="[rejectedBill.is_loaded==1?'text-success':'text-muted']">
                             <span>
@@ -79,69 +83,95 @@
                             </span>
                         </td>
                         <td class="text-muted"><span>@{{rejectedBill.created_at}}</span></td>
-                        <td class="text-muted"><span>@{{rejectedBill.record ? (rejectedBill.record.location_at ? rejectedBill.record.location_at : rejectedBill.record.record_at) : ''}}</span></td>
+                        <td class="text-muted"><span>@{{rejectedBill.record ? (rejectedBill.record.location_at ? rejectedBill.record.location_at : rejectedBill.record.record_at) : ''}}</span>
+                        </td>
                         <td><span v-if="rejectedBill.owner"><span>@{{rejectedBill.owner.name}}</span></span></td>
                         <td><span>@{{rejectedBill.logistic_number_return}}</span></td>
-                        <td class="text-muted"><span v-if="rejectedBill.logistic"><span>@{{rejectedBill.logistic.name}}</span></span></td>
+                        <td class="text-muted"><span
+                                v-if="rejectedBill.logistic"><span>@{{rejectedBill.logistic.name}}</span></span></td>
                         <td>@{{rejectedBill.order_number}}</td>
-                        <td class="text-muted text-overflow-replace-100" style="pointer-events:auto"><span>@{{rejectedBill.sender}}</span></td>
-                        <td class="text-muted text-overflow-replace-200" style="pointer-events:auto"><span>@{{rejectedBill.mobile_sender}}</span></td>
+                        <td class="text-muted text-overflow-replace-100" style="pointer-events:auto"><span>@{{rejectedBill.sender}}</span>
+                        </td>
+                        <td class="text-muted text-overflow-replace-200" style="pointer-events:auto"><span>@{{rejectedBill.mobile_sender}}</span>
+                        </td>
                         <td>@{{rejectedBill.logistic_number}}</td>
-                        @cannot('退货管理-到付费用')<td class="text-muted"><span>@{{rejectedBill.fee_collected}}</span></td>@endcannot
-                        @can('退货管理-查询-客户定义-爱奇艺')<td class="text-muted"><span>@{{rejectedBill.common_01}}</span></td>@endcan
-                        @cannot('退货管理-客户不可见')<td class="text-muted">@{{rejectedBill.common_02}}</td>@endcannot
+                        @cannot('退货管理-到付费用')
+                            <td class="text-muted"><span>@{{rejectedBill.fee_collected}}</span></td>@endcannot
+                        @can('退货管理-查询-客户定义-爱奇艺')
+                            <td class="text-muted"><span>@{{rejectedBill.common_01}}</span></td>@endcan
+                        @cannot('退货管理-客户不可见')
+                            <td class="text-muted">@{{rejectedBill.common_02}}</td>@endcannot
                         <td class="text-muted"><span>@{{rejectedBill.goods_amount}}</span></td>
                         <td style="min-width: 1500px">
-                            <div class="w-100" :class="rejectedBill.items.length>1 ? 'up' : ''" :id="'rejected-'+rejectedBill.id" >
+                            <div class="w-100" :class="rejectedBill.items.length>1 ? 'up' : ''"
+                                 :id="'rejected-'+rejectedBill.id">
                                 <div class="row m-0" v-for="(item,i) in rejectedBill.items">
                                     @if($ownerSign)
-                                    <div class="col-1 border border-1" style="overflow-x: hidden">
-                                        <div class="w-100 text-overflow-warp-200 warp-min-200">@{{ (item.barcode && item.barcode.commodity) ? item.barcode.commodity.sku : '' }}</div>
-                                    </div>@endif
-                                        <div title="双击展开全部" @dblclick="barcodeGoodsLength(item)"  class="border border-1" :class="item.barcode_goods_show_long ? 'col-auto' : '@if($ownerSign)col-1 @else col-1 @endif'" style="overflow-x: hidden">
-                                            <div class="w-100 text-overflow-warp-200 warp-min-200">@{{item.barcode_goods}}</div>
+                                        <div class="col-1 border border-1" style="overflow-x: hidden">
+                                            <div class="w-100 text-overflow-warp-200 warp-min-200">@{{ (item.barcode &&
+                                                item.barcode.commodity) ? item.barcode.commodity.sku : '' }}
+                                            </div>
+                                        </div>@endif
+                                    <div title="双击展开全部" @dblclick="barcodeGoodsLength(item)" class="border border-1"
+                                         :class="item.barcode_goods_show_long ? 'col-auto' : '@if($ownerSign)col-1 @else col-1 @endif'"
+                                         style="overflow-x: hidden">
+                                        <div class="w-100 text-overflow-warp-200 warp-min-200">@{{item.barcode_goods}}
+                                        </div>
+                                    </div>
+                                    <div title="双击展开全部" @dblclick="goodsNameLength(item)" class="border border-1"
+                                         :class="item.name_goods_show_long ? 'col-auto' : 'col-1'"
+                                         style="overflow-x: hidden">
+                                        <div class="w-100 text-overflow-warp-200 warp-min-200">@{{item.name_goods}}
                                         </div>
-                                    <div title="双击展开全部" @dblclick="goodsNameLength(item)"  class="border border-1" :class="item.name_goods_show_long ? 'col-auto' : 'col-1'" style="overflow-x: hidden">
-                                        <div class="w-100 text-overflow-warp-200 warp-min-200">@{{item.name_goods}}</div>
                                     </div>
                                     <div class="col-1 border border-1">@{{item.amount}}</div>
                                     <div class="col-1 border border-1">@{{item.quality_label}}</div>
                                     <div class="col-1 border border-1">@{{item.batch_number}}</div>
                                     <div class="col-1 border border-1">@{{item.made_at}}</div>
                                     <div class="col-1 border border-1">@{{item.validity_at}}</div>
-                                        <div class="col-1 border border-1">
-                                            <div align="center" @mouseleave="removeCommonImg('common_img_package'+item.id)" @mouseenter="commonImg('img_package'+item.id,item.package_images)">
-                                                <div :id="'img_package'+item.id">
-                                                    <img v-for="uploadFile in item.package_images"  :src="imgPrefix+uploadFile.url+'-thumbnail.'+uploadFile.type">
-                                                </div>
+                                    <div class="col-1 border border-1">
+                                        <div align="center" @mouseleave="removeCommonImg('common_img_package'+item.id)"
+                                             @mouseenter="commonImg('img_package'+item.id,item.package_images)">
+                                            <div :id="'img_package'+item.id">
+                                                <img v-for="uploadFile in item.package_images"
+                                                     :src="imgPrefix+uploadFile.url+'-thumbnail.'+uploadFile.type">
                                             </div>
                                         </div>
-                                        <div class="col-1 border border-1">
-                                            <div align="center" @mouseleave="removeCommonImg('common_img_commodity'+item.id)" @mouseenter="commonImg('img_commodity'+item.id,item.commodity_images)">
-                                                <div :id="'img_commodity'+item.id">
-                                                    <img v-for="uploadFile in item.commodity_images"  :src="imgPrefix+uploadFile.url+'-thumbnail.'+uploadFile.type">
-                                                </div>
+                                    </div>
+                                    <div class="col-1 border border-1">
+                                        <div align="center"
+                                             @mouseleave="removeCommonImg('common_img_commodity'+item.id)"
+                                             @mouseenter="commonImg('img_commodity'+item.id,item.commodity_images)">
+                                            <div :id="'img_commodity'+item.id">
+                                                <img v-for="uploadFile in item.commodity_images"
+                                                     :src="imgPrefix+uploadFile.url+'-thumbnail.'+uploadFile.type">
                                             </div>
                                         </div>
+                                    </div>
                                     <div class="col-1 border border-1">
-                                        <div align="center" @mouseleave="removeCommonImg('common_img_'+item.id)" @mouseenter="commonImg('img_'+item.id,item.upload_files)">
+                                        <div align="center" @mouseleave="removeCommonImg('common_img_'+item.id)"
+                                             @mouseenter="commonImg('img_'+item.id,item.upload_files)">
                                             <div :id="'img_'+item.id">
-                                                <img v-for="uploadFile in item.upload_files"  :src="imgPrefix+uploadFile.url+'-thumbnail.'+uploadFile.type">
+                                                <img v-for="uploadFile in item.upload_files"
+                                                     :src="imgPrefix+uploadFile.url+'-thumbnail.'+uploadFile.type">
                                             </div>
                                         </div>
                                     </div>
                                     <div class="col-1 border border-1">@{{item.remark}}</div>
                                 </div>
                             </div>
-                            <div class="text-center cursor-pointer" v-if="rejectedBill.items.length>1" @click="unfold(rejectedBill.id)">
+                            <div class="text-center cursor-pointer" v-if="rejectedBill.items.length>1"
+                                 @click="unfold(rejectedBill.id)">
                                 <div v-if="upList[rejectedBill.id]">点击收起明细</div>
                                 <div v-else>@{{rejectedBill.goods_amount}}件商品,点击展开明细</div>
                             </div>
                         </td>
                         <td style="min-width:150px;">
                             @can('退货管理-编辑备注')
-                                <textarea class="form-control form-control-sm"   :rows="rejectedBill.remark?Math.ceil(rejectedBill.remark.length/8):2"  cols=8
-                                          @change="updateRejectedBillRemark($event)" :value="rejectedBill.remark" :data_id="rejectedBill.id">@{{ rejectedBill.remark }}</textarea>
+                                <textarea class="form-control form-control-sm"
+                                          :rows="rejectedBill.remark?Math.ceil(rejectedBill.remark.length/8):2" cols=8
+                                          @change="updateRejectedBillRemark($event)" :value="rejectedBill.remark"
+                                          :data_id="rejectedBill.id">@{{ rejectedBill.remark }}</textarea>
                             @else
                                 <span>@{{rejectedBill.remark}}</span>
                             @endcan
@@ -151,11 +181,13 @@
                             <td>
                                 <span v-if="rejectedBill.is_finished!=1">
                                 @can('退货管理-编辑')
-                                        <button class="btn btn-outline-info btn-sm tooltipTarget" @click="edit(rejectedBill.id)">改</button>
+                                        <button class="btn btn-outline-info btn-sm tooltipTarget"
+                                                @click="edit(rejectedBill.id)">改</button>
                                     @endcan
                                     @can('退货管理-删除')
                                         <button
-                                            class="btn btn-outline-danger btn-sm tooltipTarget" @click="destroy(rejectedBill)">删</button>
+                                            class="btn btn-outline-danger btn-sm tooltipTarget"
+                                            @click="destroy(rejectedBill)">删</button>
                                     @endcan
                                 </span>
                                 <span v-else class="text-muted">已完结</span>
@@ -166,31 +198,35 @@
                 <!--<div class="text-info h5 btn btn">{{--{{$rejectedBills->count()}}--}}/{{--{{$rejectedBills->total()}}--}}</div>-->
                 {{$rejectedBills->appends($paginateParams)->links()}}
             </div>
-            <label><textarea  id="clipboardDiv" style="opacity:0"></textarea></label>
+            <label><textarea id="clipboardDiv" style="opacity:0"></textarea></label>
         </div>
     </div>
 @endsection
 
 @section('lastScript')
     <script>
-        let rejectedBills={!! $rejectedBills->toJson()!!}.data;
-        let owners=[
+        let rejectedBills = {!! $rejectedBills->toJson()!!}.data;
+        let owners = [
                 @foreach($owners as $owner)
-            {id:'{{$owner->id}}',name:'{{$owner->name}}'},
+            {
+                id: '{{$owner->id}}', name: '{{$owner->name}}'
+            },
             @endforeach
         ];
-        let logistics=[
+        let logistics = [
             @foreach($logistics as $logistic)
                 {!! $logistic !!},
             @endforeach
         ];
-        let qualityLabels=[
+        let qualityLabels = [
                 @foreach($qualityLabels as $qualityLabel)
-            {id:'{{$qualityLabel->id}}',name:'{{$qualityLabel->name}}'},
+            {
+                id: '{{$qualityLabel->id}}', name: '{{$qualityLabel->name}}'
+            },
             @endforeach
         ];
         @if(isset($paginateParams))
-        let paginateParams={!! json_encode($paginateParams) !!};
+        let paginateParams = {!! json_encode($paginateParams) !!};
         @endif
         let total=500000;
         let editUrl = "{{url('rejectedBill')}}/";
@@ -198,115 +234,161 @@
         let ajaxConfirmBeStoredUrl = '{{url("apiLocal/rejectedBill/apiConfirmBeStored")}}';
         let ajaxCheckUrl = '{{url("apiLocal/rejectedBill/apiSetIsLoadedAll")}}';
         let ajaxCheckAllURL = '{{url("rejected/ajaxCheckAll")}}';
-        let ajaxFinishAllUrl='{{url("rejected/ajaxFinishAll")}}';
-        let csrfInput='@csrf';
+        let ajaxFinishAllUrl = '{{url("rejected/ajaxFinishAll")}}';
+        let csrfInput = '@csrf';
     </script>
     <script src="{{mix('js/queryForm/export.js')}}"></script>
     <script src="{{mix('js/queryForm/queryForm.js')}}"></script>
     <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版2--}}
     <script>
         let vue = new Vue({
-            el:"#list",
-            data:{
-                imgPrefix:"{{asset("/storage")}}",
-                rejectedBills:rejectedBills,
-                owners:[
+            el: "#list",
+            data: {
+                imgPrefix: "{{asset("/storage")}}",
+                rejectedBills: rejectedBills,
+                owners: [
                         @foreach($owners as $owner)
-                    {name:'{{$owner->id}}',value:'{{$owner->name}}'},
+                    {
+                        name: '{{$owner->id}}', value: '{{$owner->name}}'
+                    },
                     @endforeach
                 ],
-                logistics:[
+                logistics: [
                         @foreach($logistics as $logistic)
-                    {name:'{{$logistic->id}}',value:'{{$logistic->name}}'},
+                    {
+                        name: '{{$logistic->id}}', value: '{{$logistic->name}}'
+                    },
                     @endforeach
                 ],
-                qualityLabels:[
+                qualityLabels: [
                         @foreach($qualityLabels as $qualityLabel)
-                    {name:'{{$qualityLabel->id}}',value:'{{$qualityLabel->name}}'},
+                    {
+                        name: '{{$qualityLabel->id}}', value: '{{$qualityLabel->name}}'
+                    },
                     @endforeach
                 ],
-                selectTr:'',
-                upList:{},
+                selectTr: '',
+                upList: {},
             },
-            mounted:function(){
+            mounted: function () {
                 $(".up").slideUp();
-                $(".tooltipTarget").tooltip({'trigger':'hover'});
+                $(".tooltipTarget").tooltip({'trigger': 'hover'});
                 $('#list').removeClass('d-none');
-                let data=[
+                let data = [
                     [
-                        {name:'created_at_start',type:'dateTime',tip:'选择显示指定日期的起始时间'},
-                        {name:'owner',type:'select_multiple_select',tip:['输入关键词快速定位下拉列表,回车确定','选择要显示的客户'],
-                            placeholder:['货主','定位或多选货主'],data:this.owners},
-                        {name:'order_number',type:'input',tip:'可支持多客户单号,糊模查找需要在右边打上%符号',placeholder:'客户单号'},
-                        {name:'logistic_number_return',type:'input',tip:'可支持多退回单号,糊模查找需要在右边打上%符号',placeholder:'退回单号'},
-                        {name:'logistic_number',type:'input',tip:'可支持多原单单号,糊模查找需要在右边打上%符号',placeholder:'原单单号'},
-                        {name:'is_checked',type:'select',placeholder: '是否审核',data:[{name:1,value:'已审核'},{name:0,value:'未审核'}]},
-                        {name:'id_logistic_return',type:'select',placeholder: '快递名称',data:this.logistics},
-                        {name:'remark',type:'input',tip:'退单备注:默认查询15天以内记录信息',placeholder: '退单备注'},
-                    ],[
-                        {name:'created_at_end',type:'dateTime',tip:'选择显示指定日期的结束时间'},
-                        {name:'barcode_goods',type:'input',tip:'可支持多商品条码,糊模查找需要在右边打上%符号',placeholder:'商品条码'},
-                        {name:'id_quality_label',type:'select',tip:'是否正品:正品仅显示全部是正品的退单,但残次显示的是包含有残次的退单',placeholder: '是否正品',data:this.qualityLabels},
-                        {name:'mobile_sender',type:'input',tip:'寄件人手机:输入完成敲回车提交',placeholder:'寄件人手机'},
-                        {name:'checked_numbers',type:'input',tip:'可支持多审核批次号,糊模查找需要在右边打上%符号',placeholder:'审核批次号'},
-                        {name:'is_loaded',type:'select',placeholder: '是否入库',data:[{name:1,value:'是'},{name:0,value:'否'},
-                                {name:'null',value:'无需入库'},{name:2,value:'待推单'},{name:4,value:'待确认'},{name:3,value:'交互异常'}]},
-                        {name:'is_issue',type:'select',data:[{name:'true',value:'有'},{name:'false',value:'无'}],tip:'问题件',placeholder:'问题件'}
+                        {name: 'created_at_start', type: 'dateTime', tip: '选择显示指定日期的起始时间'},
+                        {
+                            name: 'owner', type: 'select_multiple_select', tip: ['输入关键词快速定位下拉列表,回车确定', '选择要显示的客户'],
+                            placeholder: ['货主', '定位或多选货主'], data: this.owners
+                        },
+                        {name: 'order_number', type: 'input', tip: '可支持多客户单号,糊模查找需要在右边打上%符号', placeholder: '客户单号'},
+                        {
+                            name: 'logistic_number_return',
+                            type: 'input',
+                            tip: '可支持多退回单号,糊模查找需要在右边打上%符号',
+                            placeholder: '退回单号'
+                        },
+                        {name: 'logistic_number', type: 'input', tip: '可支持多原单单号,糊模查找需要在右边打上%符号', placeholder: '原单单号'},
+                        {
+                            name: 'is_checked',
+                            type: 'select',
+                            placeholder: '是否审核',
+                            data: [{name: 1, value: '已审核'}, {name: 0, value: '未审核'}]
+                        },
+                        {name: 'id_logistic_return', type: 'select', placeholder: '快递名称', data: this.logistics},
+                        {name: 'remark', type: 'input', tip: '退单备注:默认查询15天以内记录信息', placeholder: '退单备注'},
+                    ], [
+                        {name: 'created_at_end', type: 'dateTime', tip: '选择显示指定日期的结束时间'},
+                        {name: 'barcode_goods', type: 'input', tip: '可支持多商品条码,糊模查找需要在右边打上%符号', placeholder: '商品条码'},
+                        {
+                            name: 'id_quality_label',
+                            type: 'select',
+                            tip: '是否正品:正品仅显示全部是正品的退单,但残次显示的是包含有残次的退单',
+                            placeholder: '是否正品',
+                            data: this.qualityLabels
+                        },
+                        {name: 'mobile_sender', type: 'input', tip: '寄件人手机:输入完成敲回车提交', placeholder: '寄件人手机'},
+                        {name: 'checked_numbers', type: 'input', tip: '可支持多审核批次号,糊模查找需要在右边打上%符号', placeholder: '审核批次号'},
+                        {
+                            name: 'is_loaded',
+                            type: 'select',
+                            placeholder: '是否入库',
+                            data: [{name: 1, value: '是'}, {name: 0, value: '否'},
+                                {name: 'null', value: '无需入库'}, {name: 2, value: '待推单'}, {
+                                    name: 4,
+                                    value: '待确认'
+                                }, {name: 3, value: '交互异常'}]
+                        },
+                        {
+                            name: 'is_issue',
+                            type: 'select',
+                            data: [{name: 'true', value: '有'}, {name: 'false', value: '无'}],
+                            tip: '问题件',
+                            placeholder: '问题件'
+                        }
                     ]
                 ];
-                this.form=new query({
-                    el:"#form_div",
-                    condition:data
+                this.form = new query({
+                    el: "#form_div",
+                    condition: data
                 });
                 this.form.init();
-                if (this.form.isRender()){
-                    this.getTotal();
-                }
                 let column = [
-                    {name:'index',value: '序号', neglect: true},
-                    {name:'checked_numbers',value: '是否审核', },
-                    {name: 'is_finished', value: '是否完结',neglect: true},
+                    {name: 'index', value: '序号', neglect: true},
+                    {name: 'checked_numbers', value: '是否审核',},
+                    {name: 'delivery_status', value: '是否收货',},
+                    {name: 'is_finished', value: '是否完结', neglect: true},
                     {name: 'is_loaded', value: '是否入库', neglect: true},
-                    {name:'created_at',value: '创建时间'},
-                    {name:'record_at',value: '退回记录时间'},
+                    {name: 'created_at', value: '创建时间'},
+                    {name: 'record_at', value: '退回记录时间'},
                     {name: 'owner_name', value: '客户名称', neglect: true},
                     {name: 'logistic_number_return', value: '退回单号'},
                     {name: 'logistic_name', value: '退回公司', neglect: true},
-                    {name:'order_number',value: '订单号'},
+                    {name: 'order_number', value: '订单号'},
                     {name: 'sender', value: '姓名'},
                     {name: 'mobile_sender', value: '电话'},
                     {name: 'logistic_number', value: '原单单号'},
-                        @cannot('退货管理-到付费用'){name:'fee_collected',value: '到付费用',neglect: true},@endcannot
-                        @can('退货管理-查询-客户定义-爱奇艺'){name:'common_01',value: '寄件方省'},@endcan
-                        @cannot('退货管理-客户不可见'){name:'common_02',value: '重量'},@endcannot
-                    {name:'goods_amount',value: '商品总数'},
-                    {name:"goods",type:"multi",title:"商品信息",rows:[
-                            @if($ownerSign){value:"商品SKU",col:"1"},{value:"商品条码",col:"1"},
-                                @else{value:"商品条码",col:"1"},@endif
-                            {value:"商品名称",col:"1"},
-                            {value:"数量",col:"1"},
-                            {value:"质量",col:"1"},
-                            {value:"批次号",col:"1"},
-                            {value:"产期",col:"1"},
-                            {value:"效期",col:"1"},
-                            {value:"外箱图",col:"1"},
-                            {value:"产品图",col:"1"},
-                            {value:"照片",col:"1"},
-                            {value:"备注",col:"1"},
-                        ]},
-                    {name:'remark',value: '退单备注'},
-                    {name:'operator_name',value: '录入人'},
-                        @can('退货管理-编辑','退货管理-删除'){name:'remove',value: '操作', neglect: true},@endcan
+                        @cannot('退货管理-到付费用'){name: 'fee_collected', value: '到付费用', neglect: true}, @endcannot
+                        @can('退货管理-查询-客户定义-爱奇艺'){
+                        name: 'common_01', value: '寄件方省'
+                    }, @endcan
+                        @cannot('退货管理-客户不可见'){
+                        name: 'common_02', value: '重量'
+                    }, @endcannot
+                    {
+                        name: 'goods_amount', value: '商品总数'
+                    },
+                    {
+                        name: "goods", type: "multi", title: "商品信息", rows: [
+                                @if($ownerSign){value: "商品SKU", col: "1"}, {value: "商品条码", col: "1"},
+                                @else{value: "商品条码", col: "1"}, @endif
+                            {
+                                value: "商品名称", col: "1"
+                            },
+                            {value: "数量", col: "1"},
+                            {value: "质量", col: "1"},
+                            {value: "批次号", col: "1"},
+                            {value: "产期", col: "1"},
+                            {value: "效期", col: "1"},
+                            {value: "外箱图", col: "1"},
+                            {value: "产品图", col: "1"},
+                            {value: "照片", col: "1"},
+                            {value: "备注", col: "1"},
+                        ]
+                    },
+                    {name: 'remark', value: '退单备注'},
+                    {name: 'operator_name', value: '录入人'},
+                        @can('退货管理-编辑','退货管理-删除'){name: 'remove', value: '操作', neglect: true},@endcan
                 ];
                 new Header({
                     el: "table",
                     name: "general",
                     column: column,
                     data: this.rejectedBills,
-                    fixedTop:($('#form_div').height())+2,
+                    fixedTop: ($('#form_div').height()) + 2,
                 }).init();
-                this.rejectedBills.forEach(function(rejectedBill){
-                    rejectedBill.isShowCancelBtn=false;
+                this.rejectedBills.forEach(function (rejectedBill) {
+                    rejectedBill.isShowCancelBtn = false;
                 });
             },
             methods:{
@@ -323,17 +405,17 @@
                 removeCommonImg(id){
                     $('#'+id).remove();
                 },
-                commonImg(id,uploadFiles){
+                commonImg(id, uploadFiles) {
                     let div = "";
                     let isBtn = '@can('运输管理-运单-图片删除') true @endcan ';
-                    for(let i=0;i<uploadFiles.length;i++){
-                        let href = this.imgPrefix+uploadFiles[i].url+'-common.'+uploadFiles[i].type;
-                        let src = this.imgPrefix+uploadFiles[i].url+'-common.'+uploadFiles[i].type;
-                        div += "<div><a target='_blank' href='"+href+"'><img alt='#' src='"+src+"' style='position: relative;' ></a>"+"</div>"
+                    for (let i = 0; i < uploadFiles.length; i++) {
+                        let href = this.imgPrefix + uploadFiles[i].url + '-common.' + uploadFiles[i].type;
+                        let src = this.imgPrefix + uploadFiles[i].url + '-common.' + uploadFiles[i].type;
+                        div += "<div><a target='_blank' href='" + href + "'><img alt='#' src='" + src + "' style='position: relative;' ></a>" + "</div>"
                     }
-                    $('#'+id).after(
-                        "<div id=\"common_"+id+"\" style='position: relative;padding-bottom: 2px;z-index: 99'>" +
-                        "<div style='position:relative;left: -50px' class='overflow-y-scrollbar-400'>"+div+
+                    $('#' + id).after(
+                        "<div id=\"common_" + id + "\" style='position: relative;padding-bottom: 2px;z-index: 99'>" +
+                        "<div style='position:relative;left: -50px' class='overflow-y-scrollbar-400'>" + div +
                         "</div></div>");
                 },
                 cancelCheck() {
@@ -353,11 +435,11 @@
                         tempTip.show('取消审核失败!网络异常:' + err);
                     });
                 },
-                unfold(id){
-                    this.$set(this.upList,id,this.upList[id] ? !this.upList[id] : true);
-                    $("#rejected-"+id).slideToggle();
+                unfold(id) {
+                    this.$set(this.upList, id, this.upList[id] ? !this.upList[id] : true);
+                    $("#rejected-" + id).slideToggle();
                 },
-                selectTableRow(id,e){
+                selectTableRow(id, e) {
                     $('#headerParent tr[class=focusing]').removeClass('focusing');
                     if (id === this.selectTr) {
                         this.selectTr = '';
@@ -366,20 +448,20 @@
                     this.selectTr = id;
                     $(e.target).parent('tr').addClass('focusing')
                 },
-                copyLogisticNumber(){
-                    let text="";
-                    checkData.forEach((id,i)=>{
-                        this.rejectedBills.some(bill=>{
-                            if (bill.id == id){
+                copyLogisticNumber() {
+                    let text = "";
+                    checkData.forEach((id, i) => {
+                        this.rejectedBills.some(bill => {
+                            if (bill.id == id) {
                                 text += bill.logistic_number_return;
-                                if (i!==checkData.length-1)text += "\r\n";
+                                if (i !== checkData.length - 1) text += "\r\n";
                                 return true;
                             }
                         });
                     });
                     this.copyText(text)
                 },
-                copyText(text){
+                copyText(text) {
                     try {
                         $('#clipboardDiv').text(text).select().focus();
                         document.execCommand("Copy");
@@ -389,204 +471,242 @@
                     } catch (e) {
                         tempTip.setIndex(1052)
                         tempTip.setDuration(2000)
-                        tempTip.showSuccess('复制失败:'+e)
+                        tempTip.showSuccess('复制失败:' + e)
                     }
                 },
-                updateRejectedBillRemark:function (e) {
+                updateRejectedBillRemark: function (e) {
                     let target = $(e.target);
                     let _this = this;
                     let id = target.attr('data_id');
                     let remark = target.val();
-                    let ajaxUrl= '{{url("rejected/changeRejectedBillRemark")}}';
-                    axios.post(ajaxUrl,{'id':id,'remark':remark}).then(function (response) {
-                        if(response.data.success){
-                            _this.updateRejectedBills(id,remark);
+                    let ajaxUrl = '{{url("rejected/changeRejectedBillRemark")}}';
+                    axios.post(ajaxUrl, {'id': id, 'remark': remark}).then(function (response) {
+                        if (response.data.success) {
+                            _this.updateRejectedBills(id, remark);
                             tempTip.setDuration(2000);
                             tempTip.showSuccess('备注修改成功');
-                        }else{
+                        } else {
                             tempTip.setDuration(3000);
-                            tempTip.show('备注修改失败!'+response.data.fail_info);
+                            tempTip.show('备注修改失败!' + response.data.fail_info);
                         }
                     }).catch(function (err) {
                         tempTip.setDuration(3000);
-                        tempTip.show('备注修改失败!网络异常:'+err);
+                        tempTip.show('备注修改失败!网络异常:' + err);
                     });
 
                 },
                 // 更新表格数据
-                updateRejectedBills(id,remark){
-                    this.rejectedBills.some(function(rejectedBill){
-                        if(parseInt(rejectedBill.id) === parseInt(id)){
+                updateRejectedBills(id, remark) {
+                    this.rejectedBills.some(function (rejectedBill) {
+                        if (parseInt(rejectedBill.id) === parseInt(id)) {
                             rejectedBill.remark = remark;
                             return true;
                         }
                     })
                 },
-                edit(id){
-                    window.location.href=editUrl+id+"/edit";
+                edit(id) {
+                    window.location.href = editUrl + id + "/edit";
                 },
-                destroy:function(rejectedBill){
-                    if(!confirm('确定要删除退货信息“' + rejectedBill.owner.name+':'+rejectedBill.logistic_number_return+ '”吗?')){return;}
-                    let data=this;
-                    let url = destroyUrl+rejectedBill.id;
-                    axios.delete(url,{id:rejectedBill.id})
+                destroy: function (rejectedBill) {
+                    if (!confirm('确定要删除退货信息“' + rejectedBill.owner.name + ':' + rejectedBill.logistic_number_return + '”吗?')) {
+                        return;
+                    }
+                    let data = this;
+                    let url = destroyUrl + rejectedBill.id;
+                    axios.delete(url, {id: rejectedBill.id})
                         .then(function (response) {
-                            if(response.data.success){
+                            if (response.data.success) {
                                 for (let i = 0; i < data.rejectedBills.length; i++) {
-                                    if (data.rejectedBills[i].id===rejectedBill.id){
-                                        data.rejectedBills.splice(i,1);
+                                    if (data.rejectedBills[i].id === rejectedBill.id) {
+                                        data.rejectedBills.splice(i, 1);
                                         break;
                                     }
                                 }
                                 tempTip.setDuration(1000);
-                                tempTip.showSuccess('删除退货信息"'+rejectedBill.owner.name+':'+rejectedBill.logistic_number_return+'"成功!')
-                            }else{
+                                tempTip.showSuccess('删除退货信息"' + rejectedBill.owner.name + ':' + rejectedBill.logistic_number_return + '"成功!')
+                            } else {
                                 tempTip.setDuration(1000);
-                                tempTip.show('删除退货信息"'+rejectedBill.owner.name+':'+rejectedBill.logistic_number_return+'"失败!')
+                                tempTip.show('删除退货信息"' + rejectedBill.owner.name + ':' + rejectedBill.logistic_number_return + '"失败!')
                             }
                         })
                         .catch(function (err) {
                             tempTip.setDuration(3000);
-                            tempTip.show('删除退货信息失败!'+'网络错误:' + err);
+                            tempTip.show('删除退货信息失败!' + '网络错误:' + err);
                         });
                 },
-                cancelCheckConfirmAll:function(){
+                cancelCheckConfirmAll: function () {
                     $('#checkConfirmingAll').tooltip('hide');
                     setTimeout(function () {
-                        $(".tooltipTarget").tooltip({'trigger':'hover'})
+                        $(".tooltipTarget").tooltip({'trigger': 'hover'})
                     }, 10);
-                    this.rejectedBills.forEach(function(rejectedBill){
-                        if(rejectedBill.is_checked===-1)
-                            rejectedBill.is_checked='0';
+                    this.rejectedBills.forEach(function (rejectedBill) {
+                        if (rejectedBill.is_checked === -1)
+                            rejectedBill.is_checked = '0';
                     })
                 },
-                setIsLoaded_batch:function(val){
-                    let _this=this;
-                    if(checkData.length===0){
+                setIsLoaded_batch: function (val) {
+                    let _this = this;
+                    if (checkData.length === 0) {
                         tempTip.show('没有勾选记录');
                         $(e.target).val("");
                         return;
                     }
-                    let is_loaded=0;
-                    let is_loadedLabel='否';
-                    if(parseInt(val)===1){
-                        is_loaded=1;
-                        is_loadedLabel='是';
-                    }else if(parseInt(val)===2){
-                        is_loaded=2;
-                        is_loadedLabel='待推单';
-                    }else if(parseInt(val)===4){
-                        is_loaded=4;
-                        is_loadedLabel='待确认';
-                    }else if(val==="null"){
-                        is_loaded='null';
-                        is_loadedLabel='无需入库';
+                    let is_loaded = 0;
+                    let is_loadedLabel = '否';
+                    if (parseInt(val) === 1) {
+                        is_loaded = 1;
+                        is_loadedLabel = '是';
+                    } else if (parseInt(val) === 2) {
+                        is_loaded = 2;
+                        is_loadedLabel = '待推单';
+                    } else if (parseInt(val) === 4) {
+                        is_loaded = 4;
+                        is_loadedLabel = '待确认';
+                    } else if (val === "null") {
+                        is_loaded = 'null';
+                        is_loadedLabel = '无需入库';
+                    }
+                    if (!confirm("确定要标记所有勾选入库情况为'" + is_loadedLabel + "'吗")) {
+                        return;
                     }
-                    if(!confirm("确定要标记所有勾选入库情况为'"+is_loadedLabel+"'吗")){return;}
-                    axios.post(ajaxCheckUrl,{ids:checkData,is_loaded:is_loaded}).then(function(response){
-                        if(response.data.success){
-                            checkData.forEach(function(id){
-                                _this.rejectedBills.forEach(function(bill){
-                                    if(bill.id===id){
-                                        bill.is_loaded=is_loaded;
+                    axios.post(ajaxCheckUrl, {ids: checkData, is_loaded: is_loaded}).then(function (response) {
+                        if (response.data.success) {
+                            checkData.forEach(function (id) {
+                                _this.rejectedBills.forEach(function (bill) {
+                                    if (bill.id === id) {
+                                        bill.is_loaded = is_loaded;
                                     }
                                 });
                             });
                             tempTip.setDuration(1000);
                             tempTip.showSuccess('修改勾选记录的入库状态成功');
-                        }else{
+                        } else {
                             tempTip.setDuration(2500);
-                            tempTip.show('修改勾选记录的入库状态失败,错误:'+response.data.fail_info);
+                            tempTip.show('修改勾选记录的入库状态失败,错误:' + response.data.fail_info);
                         }
                     }).catch(function (e) {
                         tempTip.setDuration(2500);
-                        tempTip.show('审核勾选内容失败,网络连接错误:'+e);
+                        tempTip.show('审核勾选内容失败,网络连接错误:' + e);
 
                     });
                     $(e.target).val("")
                 },
-                checkAll:function(){
-                    let _this=this;
-                    if(checkData.length===0){
+                deliveryCheck() {
+                    let _this = this;
+                    if (checkData.length === 0) {
+                        tempTip.show('没有勾选记录');
+                        return
+                    }
+                    if (!confirm("确定要标记所有勾选内容为'已收货'吗")) {
+                        return;
+                    }
+                    let url = '{{url("apiLocal/rejectedBill/updateDeliveryStatus")}}'
+                    axios.post(url, {ids: checkData}).then((response) => {
+                        if (response.data.success) {
+                            for (let id of checkData) {
+                                _this.rejectedBills.forEach(function (rejectedBill) {
+                                    if (parseInt(rejectedBill.id) === parseInt(id)) {
+                                        rejectedBill.delivery_status = '已收货';
+                                    }
+                                });
+                            }
+                            tempTip.setDuration(1000);
+                            tempTip.showSuccess('收货勾选内容成功');
+                        } else {
+                            tempTip.setDuration(2500);
+                            tempTip.show('收货勾选内容失败,错误:' + response.data.error);
+                        }
+                    }).catch(function (e) {
+                        tempTip.setDuration(2500);
+                        tempTip.show('收货勾选内容失败,网络连接错误:' + e);
+                    })
+                },
+                checkAll: function () {
+                    let _this = this;
+                    if (checkData.length === 0) {
                         tempTip.show('没有勾选记录');
                         return
                     }
-                    if(!confirm("确定要标记所有勾选内容为'已审核'吗")){return;}
-                    axios.post(ajaxCheckAllURL,{ids:checkData}).then(function(response){
-                        if(response.data.success){
+                    if (!confirm("确定要标记所有勾选内容为'已审核'吗")) {
+                        return;
+                    }
+                    axios.post(ajaxCheckAllURL, {ids: checkData}).then(function (response) {
+                        if (response.data.success) {
                             response.data.rejecteds.forEach(function (rejected) {
-                                _this.rejectedBills.forEach(function(rejectedBill){
-                                    if(parseInt(rejectedBill.id)===parseInt(rejected.id)){
-                                        rejectedBill.is_checked=1;
-                                        rejectedBill.checked_numbers=rejected.checked_numbers;
+                                _this.rejectedBills.forEach(function (rejectedBill) {
+                                    if (parseInt(rejectedBill.id) === parseInt(rejected.id)) {
+                                        rejectedBill.is_checked = 1;
+                                        rejectedBill.checked_numbers = rejected.checked_numbers;
                                     }
                                 });
                             });
                             tempTip.setDuration(1000);
                             tempTip.showSuccess('审核勾选内容成功');
-                        }else{
+                        } else {
                             tempTip.setDuration(2500);
-                            tempTip.show('审核勾选内容失败,错误:'+response.data.fail_info);
+                            tempTip.show('审核勾选内容失败,错误:' + response.data.fail_info);
                         }
                     }).catch(function (e) {
                         tempTip.setDuration(2500);
-                        tempTip.show('审核勾选内容失败,网络连接错误:'+e);
+                        tempTip.show('审核勾选内容失败,网络连接错误:' + e);
                     })
                 },
-                confirmBeStored:function($e,id){
-                    let _this=this;
-                    axios.post(ajaxConfirmBeStoredUrl,{id:id}).then(function(response){
-                        if(response.data.success){
-                            _this.rejectedBills.forEach(function(rejectedBill){
-                                if(rejectedBill.id===id){
-                                    rejectedBill.is_loaded=1;
+                confirmBeStored: function ($e, id) {
+                    let _this = this;
+                    axios.post(ajaxConfirmBeStoredUrl, {id: id}).then(function (response) {
+                        if (response.data.success) {
+                            _this.rejectedBills.forEach(function (rejectedBill) {
+                                if (rejectedBill.id === id) {
+                                    rejectedBill.is_loaded = 1;
                                 }
                             });
                             tempTip.setDuration(1000);
                             tempTip.showSuccess('确认入库成功');
-                        }else{
+                        } else {
                             tempTip.setDuration(2500);
-                            tempTip.okWindow('数据异常无法确认!请在WMS确定入库状态后,勾选该条目手动修改相应入库状态!','知道了')
+                            tempTip.okWindow('数据异常无法确认!请在WMS确定入库状态后,勾选该条目手动修改相应入库状态!', '知道了')
                         }
                     }).catch(function (e) {
-                        alert('确认失败,网络连接错误:'+e);
+                        alert('确认失败,网络连接错误:' + e);
                         tempTip.setDuration(2500);
-                        tempTip.show('确认失败,网络连接错误:'+e);
+                        tempTip.show('确认失败,网络连接错误:' + e);
 
                     })
                 },
-                finishAll:function(){
-                    let _this=this;
-                    if(checkData.length===0){
+                finishAll: function () {
+                    let _this = this;
+                    if (checkData.length === 0) {
                         tempTip.show('没有勾选记录');
                         return
                     }
-                    if(!confirm("确定要标记所有勾选内容为'已完结'吗")){return;}
-                    axios.post(ajaxFinishAllUrl,{ids:checkData}).then(function(response){
-                        if(response.data.success){
-                            _this.rejectedBills.forEach(function(rejectedBill){
+                    if (!confirm("确定要标记所有勾选内容为'已完结'吗")) {
+                        return;
+                    }
+                    axios.post(ajaxFinishAllUrl, {ids: checkData}).then(function (response) {
+                        if (response.data.success) {
+                            _this.rejectedBills.forEach(function (rejectedBill) {
                                 checkData.forEach(function (checkedId) {
-                                    if(rejectedBill.id===checkedId){
-                                        rejectedBill.is_finished=1;
+                                    if (rejectedBill.id === checkedId) {
+                                        rejectedBill.is_finished = 1;
                                     }
                                 });
                             });
                             tempTip.setDuration(1000);
                             tempTip.showSuccess('标记勾选内容为完结成功');
-                        }else{
+                        } else {
                             tempTip.setDuration(2500);
-                            tempTip.show('标记勾选内容为完结失败,错误:'+response.data.fail_info);
+                            tempTip.show('标记勾选内容为完结失败,错误:' + response.data.fail_info);
                         }
                     }).catch(function (e) {
-                        alert('网络连接错误:'+e);
+                        alert('网络连接错误:' + e);
                         tempTip.setDuration(2500);
-                        tempTip.show('标记勾选内容完结失败,网络连接错误:'+e);
+                        tempTip.show('标记勾选内容完结失败,网络连接错误:' + e);
                     })
                 },
-                exportExcel:function(checkAllSign){
+                exportExcel: function (checkAllSign) {
                     let url = '{{url('rejected/export')}}';
-                    let token='{{ csrf_token() }}';
-                    excelExport(checkAllSign,checkData,url,total,token);
+                    let token = '{{ csrf_token() }}';
+                    excelExport(checkAllSign, checkData, url, total, token);
                 },
                 goodsNameLength(obj) {
                     obj.name_goods_show_long = !obj.name_goods_show_long;
@@ -597,19 +717,33 @@
                     this.$forceUpdate();
                 },
             },
-            filters:{
-                yesNo:function (val) {
-                    if(!val||val===0||val==='0'){return '否'}
+            filters: {
+                yesNo: function (val) {
+                    if (!val || val === 0 || val === '0') {
+                        return '否'
+                    }
                     return '完结'
                 },
-                yesNoIsLoaded:function (val) {
-                    switch(val){
-                        case 0:case '0':return '否';
-                        case 1:case '1':return '是';
-                        case 2:case '2':return '待推单';
-                        case 3:case '3':return '交互异常';
-                        case 4:case '4':return '待确认';
-                        case null:case 'null':return '无需入库';
+                yesNoIsLoaded: function (val) {
+                    switch (val) {
+                        case 0:
+                        case '0':
+                            return '否';
+                        case 1:
+                        case '1':
+                            return '是';
+                        case 2:
+                        case '2':
+                            return '待推单';
+                        case 3:
+                        case '3':
+                            return '交互异常';
+                        case 4:
+                        case '4':
+                            return '待确认';
+                        case null:
+                        case 'null':
+                            return '无需入库';
                     }
                     return '';
                 }

+ 2 - 0
routes/apiLocal.php

@@ -22,6 +22,8 @@ Route::post('rejectedBill/apiSetIsLoadedAll', 'RejectedBillController@apiSetIsLo
 Route::post('rejectedBill/apiConfirmBeStored', 'RejectedBillController@apiConfirmBeStored');
 Route::post('rejectedBill/seekOrder','RejectedBillController@seekOrder');
 Route::post('rejectedBill/importRejectedNumber','RejectedBillController@disposeImportApi');
+//批量收货
+Route::post('rejectedBill/updateDeliveryStatus','RejectedBillController@updateDeliveryStatus');
 
 /** 退货 */
 Route::group(['prefix' => 'rejected' ],function(){