Zhouzhendong 5 лет назад
Родитель
Сommit
12d62f152c

+ 8 - 0
app/DeliveryAppointment.php

@@ -39,6 +39,10 @@ class DeliveryAppointment extends Model
         0 => "待收",
         1 => "取消",
         2 => "完成",
+        3 => "未送达",
+    ];
+    protected $appends=[
+        "period"
     ];
 
     public function cars()
@@ -61,4 +65,8 @@ class DeliveryAppointment extends Model
     {   //仓库
         return $this->belongsTo(Warehouse::class);
     }
+
+    public function getPeriodAttribute(){
+        return self::PERIOD[$this["date_period"]];
+    }
 }

+ 38 - 31
app/Http/Controllers/DeliveryAppointmentController.php

@@ -39,12 +39,14 @@ class DeliveryAppointmentController extends Controller
      */
     public function getCapacity()
     {
+        $model = request("model");
+        $errors = $this->appointmentValidator($model)->errors();
+        if (count($errors)>0)$this->success(["errors"=>$errors]);
         /** @var \stdClass $warehouse */
         $warehouse = Warehouse::query()->find(request("warehouse_id"));
-        $tonne = request("tonne");
-        $cubicMeter = request("cubic_meter");
+        $tonne = $model["tonne"];
+        $cubicMeter = $model["cubic_meter"];
         $amount = request("detail_amount");
-        if (!$warehouse || (!$tonne && !$cubicMeter))$this->error("非法参数");
         $need = app("DeliveryAppointmentService")->calculateCapacity($tonne,$cubicMeter,$amount,$warehouse->reduced_production_capacity_coefficient);//所需产能
         $start = Carbon::tomorrow();
         $end = Carbon::today()->addDays(7);
@@ -83,32 +85,7 @@ class DeliveryAppointmentController extends Controller
         $model = request("model");
         $selectDate = request("selectDate");
         $details = request("details");
-        $errors = Validator::make($model,[
-            "owner_id" => ["required","integer"],
-            "warehouse_id" => ["required","integer"],
-            "tonne" => ["required_without:cubic_meter","numeric"],
-            "cubic_meter" => ["required_without:tonne","numeric"],
-            "box_amount" => ["nullable","integer"],
-            "cars.*.license_plate_number" => ["required","size:7"],
-            "cars.*.car_id" => ["nullable","integer"],
-            "cars.*.driver_phone" => ["nullable"],
-            "cars.*.driver_name" => ["nullable"],
-        ],[
-            'required'=>':attribute 不应为空',
-            'integer'=>':attribute 应为数值',
-            'required_without'=>':attribute 不应为空',
-            'numeric'=>':attribute 必须为数字',
-            'size'=>':attribute 非法',
-        ],[
-            'owner_id'=>'货主',
-            'warehouse_id'=>'仓库',
-            'tonne'=>'吨',
-            'cubic_meter'=>'立方',
-            'cars.*.license_plate_number'=>'车牌号',
-            'cars.*.car_id'=>'车型',
-            'cars.*.driver_phone'=>'司机电话',
-            'cars.*.driver_name'=>'司机姓名',
-        ])->errors();
+        $errors = $this->appointmentValidator($model)->errors();
         if (count($errors)>0)$this->success(["errors"=>$errors]);
         $errors = Validator::make($selectDate,[
             "date" => ["required","date","after:today"],
@@ -132,7 +109,7 @@ class DeliveryAppointmentController extends Controller
             if ($result){
                 $total = $warehouse->production_capacity*DeliveryAppointment::HOUR[$selectDate["time"]];
                 $available = $total-$result->capacity;
-                if ($available < $need)$this->success(["isFail"=>false]);
+                if ($available < $need)$this->success(["isFail"=>true]);
             }
             /** @var \stdClass $appointment */
             $appointment = DeliveryAppointment::query()->create([
@@ -173,6 +150,36 @@ class DeliveryAppointmentController extends Controller
         });
     }
 
+    private function appointmentValidator(array $model)
+    {
+        return Validator::make($model,[
+            "owner_id" => ["required","integer"],
+            "warehouse_id" => ["required","integer"],
+            "tonne" => ["required_without:cubic_meter","numeric"],
+            "cubic_meter" => ["required_without:tonne","numeric"],
+            "box_amount" => ["nullable","integer"],
+            "cars.*.license_plate_number" => ["required","size:7"],
+            "cars.*.car_id" => ["nullable","integer"],
+            "cars.*.driver_phone" => ["nullable"],
+            "cars.*.driver_name" => ["nullable"],
+        ],[
+            'required'=>':attribute 不应为空',
+            'integer'=>':attribute 应为数值',
+            'required_without'=>':attribute 不应为空',
+            'numeric'=>':attribute 必须为数字',
+            'size'=>':attribute 非法',
+        ],[
+            'owner_id'=>'货主',
+            'warehouse_id'=>'仓库',
+            'tonne'=>'吨',
+            'cubic_meter'=>'立方',
+            'cars.*.license_plate_number'=>'车牌号',
+            'cars.*.car_id'=>'车型',
+            'cars.*.driver_phone'=>'司机电话',
+            'cars.*.driver_name'=>'司机姓名',
+        ]);
+    }
+
     /**
      * 根据key取id 鉴权数据
      */
@@ -186,6 +193,6 @@ class DeliveryAppointmentController extends Controller
         /** @var \stdClass $appointment */
         $appointment = DeliveryAppointment::query()->with("cars")->find($id);
         if (!$appointment || $appointment->user_id != Auth::id())return view("exception.404");
-        return $appointment->cars;
+        return view("store.deliveryAppointment.success",compact("appointment"));
     }
 }

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

@@ -158,16 +158,7 @@ class TestController extends Controller
         dd(Region::query()->where("id",">=",404)->where("id","<=",432)->delete());
     }
     public function tt1(){
-       $owner = Owner::query()->withCount(["ownerStoragePriceModels","ownerPriceOperations","ownerPriceExpresses","ownerPriceLogistics","ownerPriceDirectLogistics"])->get();
-       foreach ($owner as $o){
-           $arr = [];
-           if ($o->owner_storage_price_models_count)$arr[] = 0;
-           if ($o->owner_price_operations_count)$arr[] = 1;
-           if ($o->owner_price_expresses_count)$arr[] = 2;
-           if ($o->owner_price_logistics_count)$arr[] = 3;
-           if ($o->owner_price_direct_logistics_count)$arr[] = 4;
-           $o->update(["relevance"=>$arr]);
-       }
+       return view("store.deliveryAppointment.success");
     }
     public function zzd(){
         ini_set('max_execution_time',2500);

+ 6 - 6
resources/views/customer/project/create.blade.php

@@ -473,13 +473,13 @@
                         if (res.owner_storage_price_models.length>0)this.selectedModel.storage = res.owner_storage_price_models;
                         if (res.owner_price_operations.length>0){
                             this._loadOperation();
-                            res.owner_price_operations.forEach(operation=>{operation = this._overrideOperation(operation);});
+                            res.owner_price_operations.forEach((operation,i)=>{res.owner_price_operations[i] = this._overrideOperation(operation);});
                             this.selectedModel.operation = res.owner_price_operations;
                         }
                         if (res.owner_price_expresses.length>0){
                             this._loadExpress();
                             res.owner_price_expresses.forEach((express,i)=>{
-                                express = this._overrideExpress(express);
+                                res.owner_price_expresses[i] = this._overrideExpress(express);
                                 this.upList['express-item-'+i] = true;
                             });
                             this.selectedModel.express = res.owner_price_expresses;
@@ -488,7 +488,7 @@
                             if (res.owner_price_expresses.length===0)this._loadLogistic();
                             else {this._getUnits();this._getCities();}
                             res.owner_price_logistics.forEach((logistic,i)=>{
-                                logistic = this._overrideLogistic(logistic);
+                                res.owner_price_logistics[i] = this._overrideLogistic(logistic);
                                 this.upList['logistic-item-'+i] = true;
                             });
                             this.selectedModel.logistic = res.owner_price_logistics;
@@ -1602,13 +1602,13 @@
                                     break;
                                 case "operation":
                                     this._loadOperation();
-                                    res.forEach(operation=>{operation = this._overrideOperation(operation);});
+                                    res.forEach((operation,i)=>{res[i] = this._overrideOperation(operation);});
                                     this.selectedModel.operation = res;
                                     break;
                                 case "express":
                                     this._loadExpress();
                                     res.forEach((express,i)=>{
-                                        express = this._overrideExpress(express);
+                                        res[i] = this._overrideExpress(express);
                                         this.upList['express-item-'+i] = true;
                                     });
                                     this.selectedModel.express = res;
@@ -1616,7 +1616,7 @@
                                 case "logistic":
                                     this._loadLogistic();
                                     res.forEach((logistic,i)=>{
-                                        logistic = this._overrideLogistic(logistic);
+                                        res[i] = this._overrideLogistic(logistic);
                                         this.upList['logistic-item-'+i] = true;
                                     });
                                     this.selectedModel.logistic = res;

+ 11 - 8
resources/views/store/deliveryAppointment/appointment.blade.php

@@ -26,7 +26,7 @@
                             <div class="row" v-for="(car,i) in model.cars">
                                 <label class="col-2">车辆-@{{ i+1 }}</label>
                                 <label class="col-2">
-                                    <input type="text" class="form-control" v-model="car.license_plate_number" :class="errors[i+'.license_plate_number'] ? 'is-invalid' : ''">
+                                    <input type="text" class="form-control" v-model="car.license_plate_number" :class="errors['cars.'+i+'.license_plate_number'] ? 'is-invalid' : ''">
                                 </label>
                                 <label class="col-2">
                                     <div class="dropdown">
@@ -46,8 +46,8 @@
                                 <label class="col-1" v-if="i!==0">
                                     <span class="h4 font-weight-bold cursor-pointer text-danger" @click="delCar(i)">&times;</span>
                                 </label>
-                                <label v-if="errors[i+'.license_plate_number']" class="col-2 offset-2 text-danger font-weight-bold small">
-                                    @{{ errors[i+'.license_plate_number'][0] }}
+                                <label v-if="errors['cars.'+i+'.license_plate_number']" class="col-2 offset-2 text-danger font-weight-bold small">
+                                    @{{ errors['cars.'+i+'.license_plate_number'][0] }}
                                 </label>
                             </div>
                         </div>
@@ -230,7 +230,7 @@
                     let change = [];
                     let insert = [];
                     this.model.cars.forEach((car,i)=>{
-                        if (!car.license_plate_number) errors[i+".license_plate_number"] = ["不得为空"];
+                        if (!car.license_plate_number) errors["cars."+i+".license_plate_number"] = ["不得为空"];
                         if (!car.car_id && car.car_name){
                             if (this.cars.every(c=>{
                                if (c.name === car.car_name){
@@ -251,12 +251,14 @@
                     }
                     if (change.length>0)this._addCars(insert,change);
                     let param = {
-                        warehouse_id:this.model.warehouse_id,
-                        tonne:this.model.tonne,
-                        cubic_meter:this.model.cubic_meter,
+                        model:this.model,
                         detail_amount:this.details.length,
                     };
                     window.tempTip.postBasicRequest("{{url('store/deliveryAppointment/getCapacity')}}",param,res=>{
+                        if (res.errors) {
+                            this.errors = res.errors;
+                            return;
+                        }
                         this.capacities = res;
                         $("#modal").modal("show");
                     });
@@ -288,7 +290,7 @@
                     };
                     window.tempTip.postBasicRequest(url,param,res=>{
                         if (res.errors){
-                            this.errors = errors;
+                            this.errors = res.errors;
                             return;
                         }
                         if (res.isFail){
@@ -306,6 +308,7 @@
                             window.tempTip.show("该预约时段已经被抢占了,请选择其他时段");
                             return;
                         }
+                        window.open("{{url('store/deliveryAppointment/showAppointmentInfo?k=')}}"+res.key);
                     },true);
                 },
             },

+ 43 - 15
resources/views/store/deliveryAppointment/success.blade.php

@@ -1,17 +1,45 @@
-@extends('layouts.app')
-@section('title')客户预约-盘收一体@endsection
+<!DOCTYPE html>
+<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
+<head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <link rel="icon" href="{{asset('icon/faviconc.ico')}}" type="image/x-icon"/>
 
-@section('content')
-    <span id="nav2">
-    @component('store.menu')@endcomponent
-    @component('store.deliveryAppointment.menu')@endcomponent
-    </span>
-    <div class="text-center h1">
-        <span></span>
+    <title>预约成功</title>
+    <link href="{{ mix('css/app.css') }}" rel="stylesheet">
+    <style>
+        .font{
+            margin-top: 15%;
+            font-size: 6em;
+        }
+    </style>
+</head>
+<body>
+    <div class="container-fluid h-100 text-center">
+        <div class="text-success h1 font w-100">
+            <span class="fa fa-check-circle"></span>
+        </div>
+        <span class="h2 font-weight-bold">预约成功</span>
+        <div class="mt-5">
+            @foreach($appointment->cars as $car)
+            <div>
+                <span class="h4 font-weight-bold">{{$car->license_plate_number}}&nbsp;</span>
+                <span class="h4" style="color: RGB(177,39,56);">预约码:</span>
+                <span class="h3">
+                    <span class="badge badge-pill badge-info">{{$car->appointment_number}}</span>
+                </span><br>
+                <span class="mt-1">预约时间:{{$appointment->appointment_date}}&nbsp;&nbsp;{{$appointment->period}}</span>
+                <span class="ml-4 mt-1">司机:{{$appointment->driver_name}}</span>
+            </div>
+            @endforeach
+            <div class="mt-5">
+                <div class="mt-5 mb-4 row">
+                    <div class="col-6 text-right h5 font-weight-bold"><a href="#">查看预约列表</a></div>
+                    <div class="col-6 text-left h5 font-weight-bold"><a href="{{url('store/deliveryAppointment/appointment')}}">继续预约车辆</a></div>
+                </div>
+                <span class="fa fa-diamond text-primary"></span>&nbsp;请牢记您的预约码,预约码仅预约当天有效!
+            </div>
+        </div>
     </div>
-@stop
-
-@section("lastScript")
-    <script>
-    </script>
-@stop
+</body>
+</html>

+ 1 - 0
routes/web.php

@@ -422,6 +422,7 @@ Route::group(['prefix'=>'store'],function(){
         Route::get('appointment','DeliveryAppointmentController@appointment');
         Route::post('getCapacity','DeliveryAppointmentController@getCapacity');
         Route::post('submitAppointment','DeliveryAppointmentController@submitAppointment');
+        Route::get('showAppointmentInfo','DeliveryAppointmentController@showAppointmentInfo');
         Route::group(['prefix'=>'appointment'],function(){
             Route::post('import','DeliveryAppointmentController@import');
         });