Jelajahi Sumber

需求ID213
入库预约新需求,页面样式改变,预约号增加仓库前缀

dream 4 tahun lalu
induk
melakukan
adbd4b64ef

+ 14 - 0
app/Events/DeliveryAppointmentEvent.php

@@ -2,6 +2,7 @@
 
 namespace App\Events;
 
+use App\DeliveryAppointment;
 use App\DeliveryAppointmentCar;
 use Illuminate\Broadcasting\Channel;
 use Illuminate\Contracts\Broadcasting\ShouldBroadcastNow;
@@ -27,10 +28,23 @@ class DeliveryAppointmentEvent implements ShouldBroadcastNow
             /** @var Builder $query */
             $query->withCount("cars");
         }]);
+
+        $owner = $car->deliveryAppointment->owner->name ?? "";
+        $len = mb_strlen($owner);
+        $ownerName = "";
+        for($i=0;$i<$len-1;$i++)$ownerName .= "*";
+        $ownerName .= mb_substr($owner,$len-1,1);
+
         $count = $delivery->deliveryAppointment->cars_count ?? 0;
         $delivery->warehouse = $delivery->deliveryAppointment->warehouse_id ?? "";
         $delivery->cubic_meter = isset($delivery->deliveryAppointment->cubic_meter) && $delivery->deliveryAppointment->cubic_meter>0 ? ($count>1 ? $delivery->deliveryAppointment->cubic_meter."/".$count : $delivery->deliveryAppointment->cubic_meter) : "";
         $delivery->tonne = isset($delivery->deliveryAppointment->tonne) && $delivery->deliveryAppointment->tonne>0 ? ($count>1 ? $delivery->deliveryAppointment->tonne."/".$count : $delivery->deliveryAppointment->tonne) : "";
+        $delivery->license_plate_number = $delivery->license_plate_number ? $delivery->license_plate_number : substr($delivery->appointment_number,0,5)."****".substr($delivery->appointment_number,9,1);
+        $delivery->owner_name = $ownerName;
+        $delivery->status = DeliveryAppointmentCar::STATUS[$delivery->status];
+        $delivery->type = DeliveryAppointment::TYPE[$delivery->deliveryAppointment->type_mark] ?? '';
+        $delivery->period = isset($delivery->deliveryAppointment->date_period) ? ($delivery->deliveryAppointment->date_period==0 ? '上午' : '下午') : '';
+        $delivery->delivery_time = $delivery->delivery_time ? substr($delivery->delivery_time,11,5) : '';
         $this->delivery = $delivery->withoutRelations();
     }
 

+ 14 - 5
app/Http/Controllers/DeliveryAppointmentController.php

@@ -174,8 +174,8 @@ class DeliveryAppointmentController extends Controller
                 $len = strlen($appointment->id);
                 $ten = $len < 2 ? "0" : substr($appointment->id,$len-2,1);
                 $one = substr($appointment->id,$len-1,1);
-                //唯一码 随机数+十位+当前下标+个位+日期
-                $number = $rand.$ten.$index.$one.date("d");
+                //唯一码 仓库CODE+随机数+十位+当前下标+个位+日期
+                $number = $warehouse->code.$rand.$ten.$index.$one.date("d");
                 $insert[] = [
                     "delivery_appointment_id" => $appointment->id,
                     "license_plate_number"    => $car["license_plate_number"],
@@ -362,7 +362,7 @@ class DeliveryAppointmentController extends Controller
         $list = [];
         DeliveryAppointmentCar::query()->with(["deliveryAppointment"=>function($query){
             /** @var Builder $query */
-            $query->withCount("cars");
+            $query->withCount("cars")->with("owner");
         }])->whereHas("deliveryAppointment",function ($query)use($period,$warehouse,$date){
             /** @var Builder $query */
             $query->where("appointment_date",$date)
@@ -376,15 +376,24 @@ class DeliveryAppointmentController extends Controller
             ->limit(10)->get()->each(function ($car)use(&$list){
                 //$diff = $car->delivery_time ? (strtotime($car->delivery_time)+1799)-time() : 0;
                 $count = $car->deliveryAppointment->cars_count ?? 0;
+                $owner = $car->deliveryAppointment->owner->name ?? "";
+                $len = mb_strlen($owner);
+                $ownerName = "";
+                for($i=0;$i<$len-1;$i++)$ownerName .= "*";
+                $ownerName .= mb_substr($owner,$len-1,1);
                 $list[] = [
                     "id" => $car->id,
-                    "license_plate_number" => $car->license_plate_number,
+                    "license_plate_number" => $car->license_plate_number ? $car->license_plate_number : substr($car->appointment_number,0,5)."****".substr($car->appointment_number,9,1),
                     "driver_name" => $car->driver_name,
                     "driver_phone" => $car->driver_phone,
-                    "status" => $car->status,
+                    "status" => DeliveryAppointmentCar::STATUS[$car->status],
                     "cubic_meter" => isset($car->deliveryAppointment->cubic_meter) && $car->deliveryAppointment->cubic_meter>0 ? ($count>1 ? $car->deliveryAppointment->cubic_meter."/".$count : $car->deliveryAppointment->cubic_meter) : "",
                     "tonne" => isset($car->deliveryAppointment->tonne) && $car->deliveryAppointment->tonne>0 ? ($count>1 ? $car->deliveryAppointment->tonne."/".$count : $car->deliveryAppointment->tonne) : "",
                     //"diff" => $diff>0 ? $diff*1000 : 0,
+                    "owner_name" => $ownerName,
+                    "type" => DeliveryAppointment::TYPE[$car->deliveryAppointment->type_mark] ?? '',
+                    "period"=>isset($car->deliveryAppointment->date_period) ? ($car->deliveryAppointment->date_period==0 ? '上午' : '下午') : '',
+                    "delivery_time" => $car->delivery_time ? substr($car->delivery_time,11,5) : '',
                 ];
             });
         return $list;

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

@@ -179,6 +179,11 @@ class TestController extends Controller
     }
     public function test()
     {
+        $len = mb_strlen("汤恩贝");
+        $a = mb_substr("汤恩贝",$len-1,1);
+        dd( substr("2021-05-13 11:01:22",11,5));
+        $a = substr('汤恩贝',-1,5);
+        dd($a);
        $owners = Owner::query()->get();
        foreach ($owners as $owner){
            if (Cache::has(date("Y-m")."|A|".$owner->id)){

+ 1 - 1
resources/views/store/deliveryAppointment/delivery.blade.php

@@ -105,7 +105,7 @@
 <div class="center">
     <div>
         <div class="label">下方填写您的预约码</div>
-        <label><input type="number" class="input" id="appointment_number" oninput="if(value.length>6)value=value.slice(0,6)"></label>
+        <label><input type="text" class="input" id="appointment_number" oninput="if(value.length>10)value=value.slice(0,10)"></label>
     </div>
     <div>
         <button type="button" class="btn" onclick="submit()"> 确 认 </button>

+ 87 - 64
resources/views/store/deliveryAppointment/exhibition.blade.php

@@ -18,8 +18,8 @@
         .h-90{
             height: 90%;
         }
-        .h-5{
-            height: 5%;
+        .h-10{
+            height: 10%;
         }
         .h-9{
             height: 9%;
@@ -100,11 +100,17 @@
             margin-left:10%;
             width: 80%;
         }
+        .br-1{
+            border-right:2px solid #aaaaaa;
+        }
+        table{
+            border-top: 3px solid #1b1e21;
+        }
     </style>
 </head>
 <body onload="initLoad()" class="h-100">
     <div class="container-fluid h-100 d-none" id="container">
-        <div class="offset-1 h1 font-weight-bold h-100">
+        <div class="ml-5 h1 font-weight-bold mt-2 mb-0 h-10">
             <div class="h-5"></div>
             <div class="h-5 h6">
                 <div class="font-weight-bold row">
@@ -119,66 +125,56 @@
                 </div>
                 <hr class="font-weight-bold">
             </div>
-            <div class="w-100 h-90">
-                <div class="h-9 mt-1 row" v-for="(data,i) in list" :class="data.status==1 ? 'text-primary' : (data.status==2 ? 'text-success' : 'text-dark')" v-if="i<5">
-                    <div class="col-3 text-line">@{{ data.license_plate_number ? data.license_plate_number : '*******' }}
-                        <span class="badge" :class="data.status==1 ? 'badge-primary' : (data.status==2 ? 'badge-success' : 'badge-secondary')" style="font-size: 20px" v-if="data.tonne || data.cubic_meter">
-                            <span v-if="data.tonne">吨&nbsp;&nbsp;&nbsp;:@{{ data.tonne }}<br></span>
-                            <span v-if="data.cubic_meter">立方:@{{ data.cubic_meter }}</span>
-                        </span>
-                        <small class="h3 m-0"><span class="badge badge-pill badge-primary">质检</span></small>
-                    </div>
-                    <div class="col-2 text-line">@{{ data.driver_name }}</div>
-                    <div class="col-3 text-line">@{{ data.driver_phone }}</div>
-                    <div class="col-2 text-line">
-                        <span class="badge badge-pill badge-primary" {{--v-if="data.is_delivery"--}} v-if="data.status == 1">{{--已送达--}}作业中</span>
-                    </div>
-                </div>
-                <div class="row h-50 position-fixed w-100" style="bottom: 1px;">
-                    <div class="col-7">
-                        <div class="row" style="height: 20%" v-for="(data,i) in list" :class="data.status==1 ? 'text-primary' : (data.status==2 ? 'text-success' : 'text-dark')" v-if="i>5">
-                            <div class="col-8 text-line">@{{ data.license_plate_number ? data.license_plate_number : '*******' }}
-                                <span class="badge" :class="data.status==1 ? 'badge-primary' : (data.status==2 ? 'badge-success' : 'badge-secondary')" style="font-size: 20px" v-if="data.tonne || data.cubic_meter">
-                                    <span v-if="data.tonne">吨&nbsp;&nbsp;&nbsp;:@{{ data.tonne }}<br></span>
-                                    <span v-if="data.cubic_meter">立方:@{{ data.cubic_meter }}</span>
-                                </span>
-                                <small class="h3 m-0"><span class="badge badge-pill badge-primary">质检</span></small>
-                            </div>
-                            <div class="col-4 text-line">@{{ data.driver_name }}</div>
-                        </div>
-                    </div>
-                    <div class="col-5" style="border: 3px solid #6c757d;border-radius: 5px">
-                        <div class="w-100 text-center h1 font-weight-bold">次日预约</div>
-                        <div class="mt-2 text-muted row" v-for="(data,i) in nextList">
-                            <div class="col-5">@{{ data.license_plate_number ? data.license_plate_number : '*******' }}
-                                <span class="badge badge-secondary" style="font-size: 14px" v-if="data.tonne || data.cubic_meter">
-                                    <span v-if="data.tonne">吨&nbsp;&nbsp;&nbsp;:@{{ data.tonne }}<br></span>
-                                    <span v-if="data.cubic_meter">立方:@{{ data.cubic_meter }}</span>
-                                </span>
-                                <small class="h3 m-0"><span class="badge badge-pill badge-primary">质检</span></small>
-                            </div>
-                            <div class="col-3">@{{ data.driver_name }}</div>
-                            <div class="col-3">@{{ data.driver_phone }}</div>
-                        </div>
-                        <div class="media h-100" v-if="nextList.length==0">
-                            <div class="align-self-center mx-auto text-secondary font-weight-bold h1" style="transform:scale(1.6) ">暂无</div>
-                        </div>
-                    </div>
+        </div>
+        <div class="row h-90 mt-0">
+            <div class="col-8 br-1">
+                <div class="w-100 text-center">
+                    <h1 class="font-weight-bold">当日预约</h1>
                 </div>
+                <table class="table w-100 h3">
+                    <tr>
+                        <th>货主</th>
+                        <th>车牌/预约号</th>
+                        <th>吨位/立方</th>
+                        <th>特殊要求</th>
+                        <th>预约时间</th>
+                        <th>到场时间</th>
+                        <th>状态</th>
+                    </tr>
+                    <tr v-for="data in list">
+                        <td class="text-secondary">@{{ data.owner_name }}</td>
+                        <td class="text-danger">@{{ data.license_plate_number }}</td>
+                        <td class="text-secondary"><i v-if="data.tonne">@{{ data.tonne }}吨</i><br><i v-if="data.cubic_meter">@{{ data.cubic_meter }}立方</i></td>
+                        <td class="text-primary">@{{ data.type }}</td>
+                        <td class="text-secondary">@{{ data.period }}</td>
+                        <td class="text-secondary">@{{ data.delivery_time }}</td>
+                        <td :class="data.status == '未送达' ? 'text-dark' : (data.status=='作业中' ? 'text-primary' : 'text-success')">@{{ data.status }}</td>
+                    </tr>
+                </table>
             </div>
-            {{--<div class="row h-40 mt-0">
-                <div class="col-5">
-                    <div class="h-20 mt-0 row" v-for="(data,i) in list" :class="data.is_delivery ? 'text-success' : 'text-primary'" v-if="i>4">
-                        <div class="col-7 text-line">@{{ data.license_plate_number }}</div>
-                        <div class="col-5 text-line">
-                            <span class="ml-3">@{{ data.driver_name }}</span>
-                        </div>
-                    </div>
-                </div>
-                <div class="col-6">
-                    <div class="mt-4" id="code"></div>
+            <div class="col-4">
+                <div class="w-100 text-center">
+                    <h2 class="font-weight-bold">次日预约</h2>
                 </div>
-            </div>--}}
+                <table class="table w-100 h4">
+                    <tr>
+                        <th>货主</th>
+                        <th>车牌/预约号</th>
+                        <th>吨位/立方</th>
+                        <th>特殊要求</th>
+                        <th>预约时间</th>
+                    </tr>
+                    <tr v-for="data in nextList">
+                        <td class="text-secondary">@{{ data.owner_name }}</td>
+                        <td class="text-danger">@{{ data.license_plate_number }}</td>
+                        <td class="text-secondary"><i v-if="data.tonne">@{{ data.tonne }}吨</i><br><i v-if="data.cubic_meter">@{{ data.cubic_meter }}立方</i></td>
+                        <td class="text-primary">@{{ data.type }}</td>
+                        <td class="text-secondary">@{{ data.period }}</td>
+                        <td class="text-secondary">@{{ data.delivery_time }}</td>
+                        <td :class="data.status == '未送达' ? 'text-dark' : (data.status=='作业中' ? 'text-primary' : 'text-success')">@{{ data.status }}</td>
+                    </tr>
+                </table>
+            </div>
         </div>
         <div class="modal fade" id="modal" tabindex="-1" role="dialog" aria-hidden="true" data-backdrop="static">
             <div class="modal-dialog modal-dialog-centered modal-xl" role="document">
@@ -283,7 +279,7 @@
         mounted(){
             $("#container").removeClass("d-none");
             if (warehouse) this._initData();
-            //this._broadcast();
+            this._broadcast();
             /*this._getKey();
             setTimeout(()=>{
                 //刷新密匙
@@ -298,10 +294,33 @@
                 initEcho();
                 window.Echo.channel('{{config('database.redis.options.prefix')}}delivery').listen('.car',(res)=>{this._sortData(res.delivery)})
             },
+            _countChange(oldStatus,newStatus){
+                switch (oldStatus) {
+                    case '未送达':
+                        this.count.notReached--;
+                        break;
+                    case '作业中':
+                        this.count.work--;
+                        break;
+                }
+                if (!oldStatus && newStatus)this.count.total++;
+                switch (newStatus) {
+                    case '未送达':
+                        this.count.notReached++;
+                        break;
+                    case '作业中':
+                        this.count.work++;
+                        break;
+                    case '已完成':
+                        this.count.success++;
+                        break;
+                }
+            },
             _sortData(res){
                 if (res.warehouse!=warehouse)return;
                 if (this.list.every((data,i)=>{
                     if (data.id === res.id){
+                        this._countChange(data.status,res.status);
                         //this.$set(this.list[i],"is_delivery",true);
                         data.status = res.status;
                         this.list.splice(i,1);
@@ -318,14 +337,19 @@
                     }
                     return true;
                 })){
+                    this._countChange(null,res.status);
                     if (this.list.length>=10) this.list = this.list.splice(0,9);
                     let obj = {
                         "id"                    : res.id,
                         "license_plate_number"  : res.license_plate_number,
                         "driver_name"           : res.driver_name,
                         "driver_phone"          : res.driver_phone,
-                        "cubic_meter"           : res.driver_phone,
-                        "tonne"                 : res.driver_phone,
+                        "cubic_meter"           : res.cubic_meter,
+                        "tonne"                 : res.tonne,
+                        "owner_name"            : res.owner_name,
+                        "type"                  : res.type,
+                        "period"                : res.period,
+                        "delivery_time"         : res.delivery_time,
                         "status"                : res.status,
                         /*"is_delivery"           : true,*/
                     };
@@ -347,7 +371,6 @@
                         }
                     });
                 },1800000);*/
-                this.count.success++;
             },
             //初始化数据
             _initData(){