Browse Source

Merge branch 'master' into Haozi

# Conflicts:
#	app/Http/Controllers/TestController.php
hu hao 5 years ago
parent
commit
b5109e3f50
100 changed files with 2177 additions and 734 deletions
  1. 1 1
      app/DeliveryAppointment.php
  2. 38 0
      app/Events/AddOrUpdateOrderIssues.php
  3. 11 2
      app/Events/DeliveryAppointmentEvent.php
  4. 1 1
      app/Exceptions/Exception.php
  5. 1 1
      app/Exceptions/Handler.php
  6. 6 6
      app/Feature.php
  7. 5 1
      app/Filters/OrderPackageFilters.php
  8. 3 2
      app/Http/Controllers/CustomerController.php
  9. 107 42
      app/Http/Controllers/DeliveryAppointmentController.php
  10. 1 1
      app/Http/Controllers/MeasureMonitorController.php
  11. 8 1
      app/Http/Controllers/PackageLogisticController.php
  12. 37 26
      app/Http/Controllers/TestController.php
  13. 4 4
      app/Http/Controllers/WaybillController.php
  14. 1 2
      app/Http/Controllers/api/thirdPart/flux/ProcessController.php
  15. 16 14
      app/Http/Controllers/api/thirdPart/haiq/StorageController.php
  16. 33 12
      app/Http/Controllers/api/thirdPart/hengli/PackageController.php
  17. 73 6
      app/Http/Controllers/api/thirdPart/weight/WeightBaseController.php
  18. 41 0
      app/Jobs/DeliveryAppointmentCheck.php
  19. 223 53
      app/Jobs/LogisticZopSync.php
  20. 2 0
      app/Jobs/OrderCreateInstantBill.php
  21. 2 0
      app/Jobs/ProcessCreateInstantBill.php
  22. 2 0
      app/Jobs/RejectedBillCreateInstantBill.php
  23. 30 41
      app/Jobs/ResetInstantBill.php
  24. 2 0
      app/Jobs/StoreCreateInstantBill.php
  25. 2 0
      app/Jobs/WaybillCreateInstantBill.php
  26. 41 0
      app/Listeners/AddOrUpdateOrderIssuesListener.php
  27. 1 1
      app/Listeners/ModelChangedListener.php
  28. 1 1
      app/LogisticNumberFeature.php
  29. 1 0
      app/Observers/OwnerObserver.php
  30. 2 2
      app/OrderPackage.php
  31. 3 3
      app/Owner.php
  32. 1 1
      app/OwnerFeeDetail.php
  33. 3 0
      app/Providers/EventServiceProvider.php
  34. 1 2
      app/Services/ForeignHaiRoboticsService.php
  35. 126 2
      app/Services/LogisticSFService.php
  36. 1 0
      app/Services/LogisticZopService.php
  37. 16 0
      app/Services/OrderCommodityService.php
  38. 7 2
      app/Services/OrderPackageReceivedSyncService.php
  39. 42 5
      app/Services/OrderPackageService.php
  40. 5 4
      app/Services/OrderService.php
  41. 9 8
      app/Services/OwnerAreaReportService.php
  42. 9 4
      app/Services/OwnerPriceOperationService.php
  43. 2 1
      app/Services/StationService.php
  44. 1 1
      app/Services/StationTaskBatchService.php
  45. 4 0
      app/Services/StationTaskMaterialBoxService.php
  46. 6 4
      app/Services/StoreService.php
  47. 2 2
      config/api_logistic.php
  48. 1 1
      config/logging.php
  49. 13 0
      database/factories/OrderIssueTypeFactory.php
  50. 33 0
      database/migrations/2021_04_06_155509_add_exception_message_to_order_packages_table.php
  51. 41 0
      database/migrations/2021_04_07_155234_add_exception_type_order_packages_table.php
  52. 35 0
      database/migrations/2021_04_09_141901_add_authority_to_rejected.php
  53. 36 0
      database/migrations/2021_04_12_144644_add_authority_update_order_packages_exception_type.php
  54. 36 0
      database/migrations/2021_04_13_112852_add_authority_data_delivery.php
  55. 30 0
      database/migrations/2021_04_13_140044_add_authority_data_delivery_terminal.php
  56. 3 6
      public/t.php
  57. 324 9
      resources/js/queryForm/header.js
  58. 42 0
      resources/sass/text.scss
  59. 14 14
      resources/views/customer/project/area.blade.php
  60. 25 28
      resources/views/customer/project/create.blade.php
  61. 11 11
      resources/views/customer/project/index.blade.php
  62. 5 5
      resources/views/customer/project/part/_two.blade.php
  63. 9 9
      resources/views/finance/billConfirmation.blade.php
  64. 22 22
      resources/views/finance/instantBill.blade.php
  65. 13 13
      resources/views/inventory/statement/changeInventory.blade.php
  66. 15 15
      resources/views/inventory/statement/dailyLog.blade.php
  67. 12 31
      resources/views/inventory/statement/inventoryCompare.blade.php
  68. 3 5
      resources/views/inventory/stockInventory/inventoryMission.blade.php
  69. 17 17
      resources/views/inventory/stockInventory/mission.blade.php
  70. 4 4
      resources/views/maintenance/role/index.blade.php
  71. 5 5
      resources/views/maintenance/user/index.blade.php
  72. 24 28
      resources/views/order/index/delivering.blade.php
  73. 12 12
      resources/views/order/index/index.blade.php
  74. 7 7
      resources/views/order/issue/workload.blade.php
  75. 74 21
      resources/views/package/logistic/index.blade.php
  76. 1 1
      resources/views/package/menu.blade.php
  77. 17 17
      resources/views/package/weigh/index.blade.php
  78. 20 20
      resources/views/package/weightExcepted/index.blade.php
  79. 1 1
      resources/views/personnel/discharge/task/_table.blade.php
  80. 16 16
      resources/views/personnel/laborReport/index.blade.php
  81. 1 1
      resources/views/personnel/menu.blade.php
  82. 35 36
      resources/views/personnel/report.blade.php
  83. 2 2
      resources/views/process/index.blade.php
  84. 12 12
      resources/views/process/statistic.blade.php
  85. 12 12
      resources/views/procurement/finance/checkBill.blade.php
  86. 6 6
      resources/views/procurement/finance/monthlyBillReport.blade.php
  87. 12 12
      resources/views/procurement/finance/procurementBill.blade.php
  88. 6 6
      resources/views/procurement/procurement/index.blade.php
  89. 8 8
      resources/views/rejected/search/analyze.blade.php
  90. 25 21
      resources/views/rejected/search/general.blade.php
  91. 3 1
      resources/views/rejected/search/menu.blade.php
  92. 9 9
      resources/views/store/checkingReceive/mission.blade.php
  93. 14 16
      resources/views/store/checkingReceive/show.blade.php
  94. 1 1
      resources/views/store/deliveryAppointment/appointment.blade.php
  95. 47 0
      resources/views/store/deliveryAppointment/capacityMaintenance.blade.php
  96. 1 1
      resources/views/store/deliveryAppointment/delivery.blade.php
  97. 1 1
      resources/views/store/deliveryAppointment/deliverySuccess.blade.php
  98. 113 4
      resources/views/store/deliveryAppointment/exhibition.blade.php
  99. 3 3
      resources/views/store/deliveryAppointment/list.blade.php
  100. 11 5
      resources/views/store/deliveryAppointment/menu.blade.php

+ 1 - 1
app/DeliveryAppointment.php

@@ -41,7 +41,7 @@ class DeliveryAppointment extends Model
         0 => "待收",
         1 => "取消",
         2 => "完成",
-        3 => "未送达",
+        3 => "已逾期",
     ];
     protected $appends=[
         "period"

+ 38 - 0
app/Events/AddOrUpdateOrderIssues.php

@@ -0,0 +1,38 @@
+<?php
+
+namespace App\Events;
+
+use Illuminate\Broadcasting\Channel;
+use Illuminate\Broadcasting\InteractsWithSockets;
+use Illuminate\Broadcasting\PresenceChannel;
+use Illuminate\Broadcasting\PrivateChannel;
+use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
+use Illuminate\Foundation\Events\Dispatchable;
+use Illuminate\Queue\SerializesModels;
+
+class AddOrUpdateOrderIssues
+{
+    use Dispatchable, InteractsWithSockets, SerializesModels;
+
+    public $order_ids;
+
+    /**
+     * AddOrderIssues constructor.
+     * @param $logisticNumbers
+     */
+    public function __construct($logisticNumbers)
+    {
+        $this->order_ids = $logisticNumbers;
+    }
+
+
+    /**
+     * Get the channels the event should broadcast on.
+     *
+     * @return \Illuminate\Broadcasting\Channel|array
+     */
+    public function broadcastOn()
+    {
+        return new PrivateChannel('channel-name');
+    }
+}

+ 11 - 2
app/Events/DeliveryAppointmentEvent.php

@@ -5,6 +5,7 @@ namespace App\Events;
 use App\DeliveryAppointmentCar;
 use Illuminate\Broadcasting\Channel;
 use Illuminate\Contracts\Broadcasting\ShouldBroadcastNow;
+use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Foundation\Events\Dispatchable;
 use Illuminate\Queue\SerializesModels;
 
@@ -16,13 +17,21 @@ class DeliveryAppointmentEvent implements ShouldBroadcastNow
     /**
      * Create a new event instance.
      *
-     * @param DeliveryAppointmentCar $delivery
+     * @param DeliveryAppointmentCar|\stdClass $delivery
      *
      * @return void
      */
     public function __construct(DeliveryAppointmentCar $delivery)
     {
-        $this->delivery = $delivery;
+        $delivery->load(["deliveryAppointment"=>function($query){
+            /** @var Builder $query */
+            $query->withCount("cars");
+        }]);
+        $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) : "";
+        $this->delivery = $delivery->withoutRelations();
     }
 
     /**

+ 1 - 1
app/Exceptions/Exception.php

@@ -37,7 +37,7 @@ class Exception extends \Exception
             $className,
             $functionName,
             ($exception->getMessage()??'')
-            .'调用堆栈:'.$tracesAll,
+            .'调用堆栈e:'.$tracesAll,
             Auth::id()??'',
             $this->type
         );

+ 1 - 1
app/Exceptions/Handler.php

@@ -122,7 +122,7 @@ class Handler extends ExceptionHandler
                 $functionName,
                 ($errMsg??'')
                 .'请求:'.json_encode($request->all())
-                .'调用堆栈:'.$tracesAll,
+                .'调用堆栈r:'.$tracesAll,
                 Auth::id()??'',
                 $type
             );

+ 6 - 6
app/Feature.php

@@ -32,14 +32,14 @@ class Feature extends Model
     const TYPE_NODE = [0,5,6,8,9,10]; //标注二级类型
     const MAPPING = [
         "store" => [
-            0 => "storeItems.name",
+            0 => "store_items.name",
             1 => "stored_method",
-            5 => "storeItems.commodity.remark",
-            6 => "storeItems.commodity.length",
+            5 => "store_items.commodity.remark",
+            6 => "store_items.commodity.length",
             7 => "remark",
-            8 => "storeItems.amount",
-            9 => "storeItems.commodity",
-            10=> "storeItems.total",
+            8 => "store_items.amount",
+            9 => "store_items.commodity",
+            10=> "store_items.total",
             11=> "warehouse.name",
         ],
         "order" => [

+ 5 - 1
app/Filters/OrderPackageFilters.php

@@ -13,7 +13,7 @@ class OrderPackageFilters
     protected $request;
     protected $queryBuilder;
     protected $filters = ['logistic_number', 'status', 'received_at_start',
-        'received_at_end', 'is_weighed', 'logistic_id', 'owner_id', 'sent_at_start', 'sent_at_end', 'is_exception','default_date'];
+        'received_at_end', 'is_weighed', 'logistic_id', 'owner_id', 'sent_at_start', 'sent_at_end', 'is_exception','exception_type','default_date'];
 
     public function __construct(Request $request)
     {
@@ -37,6 +37,10 @@ class OrderPackageFilters
     {
         $this->queryBuilder->where('logistic_number', $logistic_number);
     }
+    private function exception_type($exception_type)
+    {
+        $this->queryBuilder->where('exception_type', $exception_type);
+    }
 
     private function status($status)
     {

+ 3 - 2
app/Http/Controllers/CustomerController.php

@@ -246,8 +246,9 @@ class CustomerController extends Controller
             "area_on_flat" => request("areaOnFlat"),
             "accounting_area" => intval($total*1000)/1000,
         ];
-        app('OwnerAreaReportService')->update(["id"=>request("id")],$obj);
-        $this->success($obj);
+        $re = app('OwnerAreaReportService')->update(["id"=>request("id")],$obj);
+        if ($re===true)$this->success($obj);
+        else $this->error($re);
     }
 
     //面积报表审核

+ 107 - 42
app/Http/Controllers/DeliveryAppointmentController.php

@@ -8,6 +8,7 @@ use App\DeliveryAppointment;
 use App\DeliveryAppointmentCar;
 use App\Events\DeliveryAppointmentEvent;
 use App\Imports\AppointmentDetail;
+use App\Jobs\DeliveryAppointmentCheck;
 use App\Services\common\ExportService;
 use App\Warehouse;
 use Carbon\Carbon;
@@ -24,7 +25,7 @@ class DeliveryAppointmentController extends Controller
 
     public function list()
     {
-        if(!Gate::allows('入库管理-客户预约-预约管理')){ return view("exception.authority");  }
+        if(!Gate::allows('入库管理-入库预约-预约管理')){ return view("exception.authority");  }
         $list = app("DeliveryAppointmentService")->query(request()->input())
             ->paginate(request("paginate") ?? 50);
 
@@ -35,7 +36,7 @@ class DeliveryAppointmentController extends Controller
 
     public function appointment()
     {
-        if(!Gate::allows('入库管理-客户预约-预约')){ return view("exception.authority");  }
+        if(!Gate::allows('入库管理-入库预约-预约')){ return view("exception.authority");  }
         $owners = app("OwnerService")->getIntersectPermitting();
         $cars = CarType::query()->get();
         $warehouses = Warehouse::query()->select("id","name")->get();
@@ -53,7 +54,7 @@ class DeliveryAppointmentController extends Controller
      */
     public function getCapacity()
     {
-        $this->gate("入库管理-客户预约-预约");
+        $this->gate("入库管理-入库预约-预约");
         $model = request("model");
         $errors = $this->appointmentValidator($model)->errors();
         if (count($errors)>0)$this->success(["errors"=>$errors]);
@@ -63,12 +64,12 @@ class DeliveryAppointmentController extends Controller
         $cubicMeter = $model["cubic_meter"] ?? 0;
         $amount = request("detail_amount");
         $need = app("DeliveryAppointmentService")->calculateCapacity($tonne,$cubicMeter,$amount,$warehouse->reduced_production_capacity_coefficient);//所需产能
-        $start = Carbon::tomorrow();
-        $end = Carbon::today()->addDays(7);
+        $start = Carbon::today();
+        $end = Carbon::today()->addDays(6);
         $map = [];
         DeliveryAppointment::query()->selectRaw("appointment_date,date_period,SUM(capacity) AS capacity")
             ->whereBetween("appointment_date",[$start->toDateString(),$end->toDateString()])
-            ->where("status",0)
+            ->whereIn("status",[0,2])
             ->where("warehouse_id",$warehouse->id)
             ->groupBy(["appointment_date","date_period"])->get()
             ->each(function ($appointment)use(&$map){
@@ -80,14 +81,30 @@ class DeliveryAppointmentController extends Controller
             /** @var $date Carbon */
             $date = $date->format("Y-m-d");
             $periods = [];
-            foreach (DeliveryAppointment::PERIOD as $key=>$period){
-                $total = $capacity*DeliveryAppointment::HOUR[$key];//仓库该时段产能总量
-                $used = $map[$date."-".$key] ?? 0; //已使用产能
-                $available = $total-$used; //可用产能
-                $period = explode("-",$period);
-                $period = $period[0].":00 - ".$period[1].":00";
-                if ($available < $need)$periods[] = ["time"=>$period,"index"=>$key,"isAvailable"=>false];
-                else $periods[] = ["time"=>$period,"index"=>$key,"isAvailable"=>true];
+            if ($date==date("Y-m-d")){
+                $hour = date("H");
+                foreach (DeliveryAppointment::PERIOD as $key=>$period){
+                    $period = explode("-",$period);
+                    $periodArr = ["time"=>$period[0].":00 - ".$period[1].":00","index"=>$key,"isAvailable"=>false];
+                    if ($hour<$period[1]-1){
+                        $total = $capacity*DeliveryAppointment::HOUR[$key];//仓库该时段产能总量
+                        $used = $map[$date."-".$key] ?? 0; //已使用产能
+                        $available = $total-$used; //可用产能
+                        if ($available > $need)$periodArr["isAvailable"] = true;
+                    }
+                    $periods[] = $periodArr;
+                }
+            }else{
+                foreach (DeliveryAppointment::PERIOD as $key=>$period){
+                    $period = explode("-",$period);
+                    $period = $period[0].":00 - ".$period[1].":00";
+                    $periodArr = ["time"=>$period,"index"=>$key,"isAvailable"=>false];
+                    $total = $capacity*DeliveryAppointment::HOUR[$key];//仓库该时段产能总量
+                    $used = $map[$date."-".$key] ?? 0; //已使用产能
+                    $available = $total-$used; //可用产能
+                    if ($available > $need)$periodArr["isAvailable"] = true;
+                    $periods[] = $periodArr;
+                }
             }
             $list[] = ["date"=>$date,"period"=>$periods];
         }
@@ -99,7 +116,7 @@ class DeliveryAppointmentController extends Controller
      */
     public function submitAppointment()
     {
-        $this->gate("入库管理-客户预约-预约");
+        $this->gate("入库管理-入库预约-预约");
         $model = request("model");
         $selectDate = request("date");
         $details = request("details");
@@ -163,6 +180,7 @@ class DeliveryAppointmentController extends Controller
             }
             DeliveryAppointmentCar::query()->insert($insert);
         });
+        dispatch(new DeliveryAppointmentCheck($appointment->id))->delay(Carbon::parse($appointment->appointment_date." ".(explode("-",DeliveryAppointment::PERIOD[$appointment->date_period])[1]).":00:01"));
         //md5加密在密文第五位后插入
         $md5 = substr_replace(md5(date("m-d")),$appointment->id,5,0);
         $this->success(["key"=>$md5]);
@@ -203,7 +221,7 @@ class DeliveryAppointmentController extends Controller
      */
     public function showAppointmentInfo()
     {
-        if(!Gate::allows('入库管理-客户预约-预约')){ return view("exception.authority");  }
+        if(!Gate::allows('入库管理-入库预约-预约')){ return view("exception.authority");  }
         $key = request("k");
         $len = strlen($key);
         $id = substr($key,5,$len-32);
@@ -221,7 +239,7 @@ class DeliveryAppointmentController extends Controller
      */
     public function cancel()
     {
-        $this->gate("入库管理-客户预约-预约");
+        $this->gate("入库管理-入库预约-预约");
         $id = request("id");
         if (!$id)$this->error("非法参数");
         DeliveryAppointment::query()->where("status",0)->where("id",$id)->update(["status"=>1]);
@@ -233,7 +251,7 @@ class DeliveryAppointmentController extends Controller
      */
     public function export()
     {
-        if(!Gate::allows('入库管理-客户预约-预约管理')){ return view("exception.authority");  }
+        if(!Gate::allows('入库管理-入库预约-预约管理')){ return view("exception.authority");  }
         if (request("checkAllSign")){
             $params = request()->input();
             unset($params["checkAllSign"]);
@@ -288,14 +306,46 @@ class DeliveryAppointmentController extends Controller
         return app(ExportService::class)->json($row,$list,"预约记录");
     }
 
+    private function carList($period,$date,$warehouse)
+    {
+        $list = [];
+        DeliveryAppointmentCar::query()->with(["deliveryAppointment"=>function($query){
+            /** @var Builder $query */
+            $query->withCount("cars");
+        }])->whereHas("deliveryAppointment",function ($query)use($period,$warehouse,$date){
+            /** @var Builder $query */
+            $query->where("appointment_date",$date)
+                ->where("warehouse_id",$warehouse)->whereIn("status",[0,2]);
+        })->where(function ($query)use($period){
+            /** @var Builder $query */
+            $query->where("status",1)->orWhereHas("deliveryAppointment",function (Builder $query)use($period){
+                $query->where("date_period",">=",$period);
+            });
+        })->orderByRaw("(CASE WHEN status=0 THEN 2 WHEN status=2 THEN 3 END),IF(ISNULL(delivery_time),1,0),delivery_time")
+            ->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;
+                $list[] = [
+                    "id" => $car->id,
+                    "license_plate_number" => $car->license_plate_number,
+                    "driver_name" => $car->driver_name,
+                    "driver_phone" => $car->driver_phone,
+                    "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,
+                ];
+            });
+        return $list;
+    }
     /**
      *  获取展览数据
      */
     public function getExhibitionList()
     {
-        $this->gate("入库管理-客户预约-预约管理");
-        $list = [];
+        $this->gate("入库管理-入库预约-入库区终端");
         $hour = date("H");
+        $warehouse = request("warehouse");
         $index = null;
         foreach (DeliveryAppointment::PERIOD as $key=>$period){
             $arr = explode("-",$period);
@@ -306,27 +356,10 @@ class DeliveryAppointmentController extends Controller
             }
         }
         if ($index===null)$this->success();
-        DeliveryAppointmentCar::query()->whereHas("deliveryAppointment",function (Builder $query)use($index){
-            $query->where("appointment_date",date("Y-m-d"))->whereIn("status",[0,2]);
-        })->where(function ($query)use($index){
-            /** @var Builder $query */
-            $query->where("status",1)->orWhereHas("deliveryAppointment",function (Builder $query)use($index){
-                $query->where("date_period",">=",$index);
-            });
-        })->orderByRaw("(CASE WHEN status=0 THEN 2 WHEN status=2 THEN 3 END),IF(ISNULL(delivery_time),1,0),delivery_time")
-            ->limit(10)->get()->each(function ($car)use(&$list){
-            //$diff = $car->delivery_time ? (strtotime($car->delivery_time)+1799)-time() : 0;
-            $list[] = [
-                "id" => $car->id,
-                "license_plate_number" => $car->license_plate_number,
-                "driver_name" => $car->driver_name,
-                "driver_phone" => $car->driver_phone,
-                "status" => $car->status,
-                //"diff" => $diff>0 ? $diff*1000 : 0,
-            ];
-        });
-        $counts = DeliveryAppointmentCar::query()->whereHas("deliveryAppointment",function (Builder $query)use($index){
-            $query->where("appointment_date",date("Y-m-d"))->whereIn("status",[0,2]);
+        $list = $this->carList($index,date("Y-m-d"),$warehouse);
+        $counts = DeliveryAppointmentCar::query()->whereHas("deliveryAppointment",function (Builder $query)use($index,$warehouse){
+            $query->where("appointment_date",date("Y-m-d"))
+                ->where("warehouse_id",$warehouse)->whereIn("status",[0,2]);
         })->selectRaw("status, COUNT(1) AS c")->groupByRaw("status")->get();
         $success = 0;
         $work = 0;
@@ -344,7 +377,7 @@ class DeliveryAppointmentController extends Controller
                     break;
             }
         }
-        $result = ["list"=>$list,"success"=>$success,"work"=>$work,"notReached"=>$notReached];
+        $result = ["list"=>$list,"success"=>$success,"work"=>$work,"notReached"=>$notReached,"nextDay"=>$this->carList(0,date("Y-m-d",strtotime("+1 day")),$warehouse)];
         $nextTime = DeliveryAppointment::PERIOD[$index+1] ?? null;
         if ($nextTime){
             $nextTime = explode("-",$nextTime)[0];
@@ -453,4 +486,36 @@ html;
         event(new DeliveryAppointmentEvent($car));
         $this->success();
     }
+
+    /**
+     * 产能维护
+     * */
+    public function capacityMaintenance()
+    {
+        if(!Gate::allows('入库管理-入库预约-产能维护')){ return view("exception.authority");  }
+        $warehouses = Warehouse::query()->select("name","id","production_capacity","reduced_production_capacity_coefficient")->get();
+        return view("store.deliveryAppointment.capacityMaintenance",compact("warehouses"));
+    }
+
+    /**
+     * 修改产能
+     */
+    public function updateCapacity()
+    {
+        $this->gate("入库管理-入库预约-产能维护");
+        $id = request("id");
+        $capacity = request("production_capacity");
+        Warehouse::query()->where("id",$id)->update(["production_capacity"=>$capacity]);
+        $this->success();
+    }
+
+    /**
+     * 入库区终端界面
+     */
+    public function exhibition()
+    {
+        if(!Gate::allows('入库管理-入库预约-入库区终端')){ return view("exception.authority");  }
+        if (!request("warehouse"))$warehouses = Warehouse::query()->select("name","id")->get();
+        return view("store.deliveryAppointment.exhibition",["warehouses"=>$warehouses??[],"id"=>request("warehouse")]);
+    }
 }

+ 1 - 1
app/Http/Controllers/MeasureMonitorController.php

@@ -25,7 +25,7 @@ class MeasureMonitorController extends Controller
         if ($measuring_machine_id){
             $package=OrderPackage::with(['order'=>function($query){
                 $query->with('owner','logistic');
-            },'paperBox','measuringMachine'])->where('measuring_machine_id',$measuring_machine_id)->orderBy('id','DESC')->first();
+            },'paperBox','measuringMachine'])->where('measuring_machine_id',$measuring_machine_id)->orderByDesc('weighed_at')->first();
             if (!$package){
                 $measuringMachine=MeasuringMachine::query()->where('id',$measuring_machine_id)->first();
                 $package=new OrderPackage();

+ 8 - 1
app/Http/Controllers/PackageLogisticController.php

@@ -27,9 +27,16 @@ class PackageLogisticController extends Controller
         $paginateParams = $request->input();
         $orderPackages = OrderPackage::query()
             ->filter($filters)
-            ->whereIn('owner_id', $owner_ids)->with(['order.logistic', 'order.owner'])->orderByDesc('id')->paginate($request->paginate ?? 50);
+            ->whereIn('owner_id', $owner_ids)->with(['order.logistic', 'order.owner', 'order.issue' => function ($query) {
+                $query->with(['issueType', 'logs.user']);
+            }])->orderByDesc('id')->paginate($request->paginate ?? 50);
         $logistics = Logistic::all();
         $owners = Owner::find($owner_ids);
         return view('package.logistic.index', compact('orderPackages', 'logistics', 'owners', 'paginateParams'));
     }
+
+    public function update(Request $request)
+    {
+        OrderPackage::query()->where('id', $request['id'])->update($request->only('exception_type'));
+    }
 }

+ 37 - 26
app/Http/Controllers/TestController.php

@@ -61,6 +61,8 @@ use App\OrderPackageCommodities;
 use App\OrderPackageCountingRecord;
 use App\OrderTracking;
 use App\Owner;
+use App\OwnerAreaReport;
+use App\OwnerBillReport;
 use App\OwnerFeeDetail;
 use App\OwnerFeeDetailLogistic;
 use App\OwnerMaterial;
@@ -93,6 +95,7 @@ use App\Services\InventoryCompareService;
 use App\Services\LogisticService;
 use App\Services\LogisticZopService;
 use App\Services\LogService;
+use App\Services\OracleActAllocationDetailService;
 use App\Services\OracleBasSkuService;
 use App\Services\OracleDocAsnHerderService;
 use App\Services\OracleDOCOrderHeaderService;
@@ -168,8 +171,29 @@ class TestController extends Controller
 
     public function test()
     {
+        $ows = OwnerAreaReport::query()->select("owner_id")->where("counting_month",'like',"2021-03%")->get();
+        $owners = Owner::query()->whereNotIn("id",array_column($ows->toArray(),"owner_id"))->get();
+        dd($owners);
         return view("test");
     }
+    public function supplementMarchOwnerReport()
+    {
+        $ows = OwnerAreaReport::query()->select("owner_id")->where("counting_month",'like',"2021-03%")->get();
+        $owners = Owner::query()->whereNotIn("id",array_column($ows->toArray(),"owner_id"))->get();
+        foreach ($owners as $owner){
+            if (!$owner->ownerStoragePriceModels)continue;
+            foreach ($owner->ownerStoragePriceModels as $model){
+                $key = $owner->id."_".$model->id;
+                if (!isset($sign[$key])) $createOwnerAreaReport[] = [
+                    "owner_id"              => $owner->id,
+                    "counting_month"        => 1,
+                    "user_owner_group_id"   => $owner->user_owner_group_id,
+                    "created_at"            => 1,
+                    "owner_storage_price_model_id"  => $model->id,
+                ];
+            }
+        }
+    }
 
     public function assignBatch()
     {
@@ -340,30 +364,17 @@ class TestController extends Controller
 
     public function tj2(Request $request)
     {
-        $numbersesOfBatch = OracleDOCWaveDetails::select('picktotraceid as logistic_number', 'act_allocation_details.orderno')->where('doc_wave_details.waveno', 'W190630000042')
-            ->leftJoin('act_allocation_details', 'doc_wave_details.orderno', 'act_allocation_details.orderno')->get();
-
-        $oneIdxAsrsReceive = OracleDocOrderPackingSummary::where('traceid', $numbersesOfBatch[0]['logistic_number'])->first();
-        if (!$oneIdxAsrsReceive) {
-            $inserts = '';
-            $values = [];
-            foreach ($numbersesOfBatch as $numbers) {
-                $inserts .= " into doc_order_packing_summary (traceid,orderno,grossweight,addwho,addtime,editwho,edittime)values(?,?,?,?,?,?,?) ";
-                $values[] = $numbers['logistic_number'] ?? '';
-                $values[] = $numbers['orderno'] ?? '';
-                $values[] = 12;
-                $values[] = 'WAS';
-                $values[] = Carbon::now();
-                $values[] = 'WAS';
-                $values[] = Carbon::now();
-            }
-            DB::connection('oracle')->insert("insert all {$inserts} select * from dual", $values);
-        } else {
-            $logisticNumbers = $numbersesOfBatch->map(function ($numbers) {
-                return $numbers['logistic_number'];
-            });
-            OracleDocOrderPackingSummary::whereIn('traceid', $logisticNumbers)->update(['grossweight' => 32]);
-        }
+
+        /** @var OrderCommodityService $orderCommodityService */
+        $orderCommodityService=app('OrderCommodityService');
+        $orderCommodities=$orderCommodityService->get(
+            ['location'=>
+                ['IDE0005676','IDE0005714']
+            ]);
+        $orderCommodityService->correctLocation_fromWMS($orderCommodities);
+
+
+
     }
 
     public function mergerPackageData()
@@ -744,7 +755,7 @@ class TestController extends Controller
 
     public function reNewBatches3()
     {
-        $batches = Batch::query()->where('id', '>', 95812)->get('code');
+        $batches = Batch::query()->where('id', '>', 97397)->get('code');
         $batchCodes = $batches->map(function ($batch) {
             return $batch['code'];
         })->toArray();
@@ -771,7 +782,7 @@ class TestController extends Controller
 //        dd($logs);
         foreach ($batchCodes as $code) {
 //            $request=Cache::get('temp'.$code)['description'];
-            $request = Log::query()->select('description')->where('CREATED_AT', '>=', '2021-04-09')
+            $request = Log::query()->select('description')->where('CREATED_AT', '>=', '2021-04-14')
                 ->where('method', "issued_newBatch")
                 ->where('description', 'like', "%{$code}%")
                 ->first();

+ 4 - 4
app/Http/Controllers/WaybillController.php

@@ -26,6 +26,7 @@ use Carbon\Carbon;
 use Exception;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Database\Eloquent\Collection;
+use Illuminate\Database\Eloquent\Model;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\DB;
@@ -377,12 +378,11 @@ class WaybillController extends Controller
     public function waybillRetreatAudit(Request $request){
         if(!Gate::allows('运输管理-运单-调度')){ return redirect(url('/'));  }
         $id=$request->input('id');
+        /** @var Model|\stdClass $waybill */
         $waybill=app('waybillService')->find($id);
-        WaybillAuditLog::query()->whereRaw('waybill_id = ? and audit_stage = ?',[$id,"运单阶段"])->delete();
+        $waybillLog = WaybillAuditLog::query()->whereRaw('waybill_id = ? and audit_stage = ?',[$id,"运单阶段"])->delete();
         $waybill->status='待重审';
-        $result=$waybill->save();
-        app('LogService')->log(__METHOD__,__FUNCTION__,json_encode($waybill),Auth::user()['id']);
-        return ['success'=>$result,'status'=>$waybill->status];
+        return ['success'=>$waybill->save(),'status'=>$waybill->status,"log"=>$waybillLog];
     }
     public function waybillEndAudit(Request $request){
         if(!Gate::allows('运输管理-运单-调度审核')){ return redirect(url('/'));  }

+ 1 - 2
app/Http/Controllers/api/thirdPart/flux/ProcessController.php

@@ -31,8 +31,7 @@ class ProcessController extends Controller
                 $basCodeMap[$basCode->code] = $basCode->codename_c;
             }
             $docASNs=OracleDOCASNDetail::query()->where("ASNNo",$wms_code)->get();   //入库单
-        }
-        catch (\Exception $e){
+        }catch (\Exception $e){
             return ['error'=>'数据库连接失败'];
         }
         if (count($docASNs)>0){

+ 16 - 14
app/Http/Controllers/api/thirdPart/haiq/StorageController.php

@@ -68,20 +68,22 @@ class StorageController
             "taskMode"      => 6,
             "bins"=>[[
                 "taskCode"  =>'t1'.microtime(true),
-                "binCode"   => "IDE0000036",
+                "binCode"   => "IDE0005682",
                 "fromLocCode" => "HAIB1-01-03", //B1是面对架货右手,从右往左数列,第三个数字从下往上数行
                 "toLocCode" => "",
-            ],[
-                "taskCode"  =>'t2'.microtime(true),
-                "binCode"   => "IDE0004973",
-                "fromLocCode" =>  "HAIB1-02-03", //B1是面对架货右手,从右往左数列,第三个数字从下往上数行
-                "toLocCode" => "",
-            ],[
-                "taskCode"  =>'t3'.microtime(true),
-                "binCode"   => "IDE0005716",
-                "fromLocCode" =>  "HAIB1-03-02", //B1是面对架货右手,从右往左数列,第三个数字从下往上数行
-                "toLocCode" => "",
-            ],
+            ]
+//                ,[
+//                "taskCode"  =>'t2'.microtime(true),
+//                "binCode"   => "IDE0004973",
+//                "fromLocCode" =>  "HAIB1-02-03", //B1是面对架货右手,从右往左数列,第三个数字从下往上数行
+//                "toLocCode" => "",
+//            ]
+//                ,[
+//                "taskCode"  =>'t3'.microtime(true),
+//                "binCode"   => "IDE0005716",
+//                "fromLocCode" =>  "HAIB1-03-02", //B1是面对架货右手,从右往左数列,第三个数字从下往上数行
+//                "toLocCode" => "",
+//            ],
                 ],
             "groupCode"     => 'g'.microtime(true),
             "priority"      => 20,
@@ -170,7 +172,7 @@ class StorageController
         ]];
         $this->lightOn = [
             "areaCode"=> "1004",
-            "PTLAction"=> 1,
+            "PTLAction"=> 1, //1是开,0是关
             "PTLSettings"=> [
                 "color"=> 1,
                 "frequency"=> 1
@@ -187,7 +189,7 @@ class StorageController
                 "uomDesc01"=> "uo",
                 "uomDesc02"=> "uo"
             ],
-            "locCode"=> "HAIB2-02-03"
+            "locCode"=> "HAIB2-02-03"//灯条口,B1\B2=设备编号,中间号码代表从右往左数的列,右边号码时从下往上数
         ];
         $this->lightOff = [
             "PTLAction"=> 0,

+ 33 - 12
app/Http/Controllers/api/thirdPart/hengli/PackageController.php

@@ -4,7 +4,6 @@
 namespace App\Http\Controllers\api\thirdPart\hengli;
 
 use App\Http\Controllers\api\thirdPart\weight\WeightBaseController;
-use App\Log;
 use Illuminate\Http\Request;
 
 class PackageController extends WeightBaseController
@@ -21,6 +20,7 @@ class PackageController extends WeightBaseController
 
     public function new_(Request $request)
     {
+        app('LogService')->log(__METHOD__, $this->name, "记录上传日志:" . json_encode($request->all()) , null);
         return $this->new($request);
     }
 
@@ -29,17 +29,18 @@ class PackageController extends WeightBaseController
         $params = [];
         $arr = $request->all();
         $data = array_key_first($arr);
-        $data = explode(',',$data);
-        foreach ($data as $key=>$value){
-            switch ($key){
+        $data = explode(',', $data);
+        foreach ($data as $key => $value) {
+            switch ($key) {
                 case '0':
                     $params['hid'] = $value;
                     break;
                 case '1':
                     $params['code'] = $value;
+//                    $params['code'] = $this->processCode($value);
                     break;
                 case '2':
-                    $params['weight'] =  $value;
+                    $params['weight'] = $value;
                     break;
                 case '3':
                     $params['weight_at'] = $value;
@@ -53,8 +54,8 @@ class PackageController extends WeightBaseController
 
     public function getWeightValue($params)
     {
-        $value = $this->getValue($this->weight,$params);
-        return str_replace('_','.',$value);
+        $value = $this->getValue($this->weight, $params);
+        return str_replace('_', '.', $value);
     }
 
     // 信息返回
@@ -68,19 +69,39 @@ class PackageController extends WeightBaseController
     // 返回包裹未找到异常
     public function getNotFindOrderPackageMessage($params, $orderPackage): string
     {
-        return json_encode(['success'=>false,'message'=>'未找打包裹信息',JSON_UNESCAPED_UNICODE]);
+        return json_encode(['success' => false, 'message' => '未找打包裹信息', JSON_UNESCAPED_UNICODE]);
     }
 
     // 返回富勒信息未找到异常
-    public function getNotFindOrderHeaderMessage($params, $orderPackage):string
+    public function getNotFindOrderHeaderMessage($params, $orderPackage): string
     {
-        return json_encode(['success'=>false,'message'=> '富勒信息未找到'],JSON_UNESCAPED_UNICODE);
+        return json_encode(['success' => false, 'message' => '富勒信息未找到'], JSON_UNESCAPED_UNICODE);
     }
 
     // 返回称重下发错误
-    public function getWeightMessage($orderPackage,$e)
+    public function getWeightMessage($orderPackage, $e)
     {
-        return json_encode(['success'=>false,'message'=> $e->getMessage],JSON_UNESCAPED_UNICODE);
+        return json_encode(['success' => false, 'message' => $e->getMessage], JSON_UNESCAPED_UNICODE);
+    }
+
+    public function validator(Request $request): array
+    {
+        $params = $this->conversionRequest($request);
+        $errors = [];
+        $weight = $this->getWeightValue($params);
+        if (empty($weight) || $weight == '') {
+            $errors['weight'] = '称重重量为空';
+        }
+        $code = $this->getCodeValue($params);
+        $code = trim($code, "'");
+        if (empty($code) || $code == '') {
+            $errors['code'] = '快递单号为空';
+        }
+        $hid = $this->getValue($this->hid, $params);
+        if (empty($hid) || $hid == '') {
+            $errors['hid'] = '称重设备号不能为空';
+        }
+        return $errors;
     }
 
 }

+ 73 - 6
app/Http/Controllers/api/thirdPart/weight/WeightBaseController.php

@@ -11,9 +11,10 @@ use App\OracleActAllocationDetails;
 use App\OracleDOCOrderHeader;
 use App\OrderPackage;
 use App\Services\OrderService;
-use Carbon\Carbon;
+use Illuminate\Support\Carbon;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Http\Request;
+use Illuminate\Http\Response;
 
 class WeightBaseController
 {
@@ -29,9 +30,10 @@ class WeightBaseController
 
     public function new(Request $request)
     {
-        app('LogService')->log(__METHOD__, $this->name, "记录上传日志:" . json_encode($request->getContent()) . '||' , null);
+//        app('LogService')->log(__METHOD__, $this->name, "记录上传日志:" . json_encode($request->all()) . '||' , null);
         $errors = $this->validator($request);
         if(count($errors)){
+            app('LogService')->log(__METHOD__, $this->name, "上传校验Error:" . json_encode($request->all()) , null);
             return $this->validatorErrors($errors);
         }
         return $this->weightOrderPackage($request);
@@ -56,12 +58,14 @@ class WeightBaseController
             /** @var OracleDOCOrderHeader $orderHeader */
             $orderHeader = $this->findOrderHeaderByLogisticNumber($logistic_number);
             if (is_null($orderHeader)) {
+                app('LogService')->log(__METHOD__, $this->name, 'WMSOrderHeaderNotFind (Error)',$logistic_number , null);
                 return $this->getNotFindOrderHeaderMessage($params, $orderPackage);
             }
             try {
                 $order = $this->createOrderByOrderHeader($orderHeader);
                 $orderPackage = $this->createOrderPackage($params, $measuringMachine, $order);
             } catch (\Exception $e) {
+                app('LogService')->log(__METHOD__, $this->name, '写入WAS失败! (Error)',$logistic_number , null);
                 return json_encode(["success" => false, "message" => "写入WAS失败!"], JSON_UNESCAPED_UNICODE);
             }
         }
@@ -72,7 +76,7 @@ class WeightBaseController
         try {
             $this->activityWaveNoProcessing($orderPackage);
         } catch (\Exception $e) {
-            app('LogService')->log(__METHOD__, $this->name, ' weightApi (Error)', json_encode($orderPackage) . '||' . json_encode($e), null);
+            app('LogService')->log(__METHOD__, $this->name, 'weightApi (Error)', json_encode($orderPackage) . '||' . json_encode($e), null);
             return $this->getWeightMessage($orderPackage, $e);
         }
         // 7、称重完成之后操作
@@ -159,7 +163,7 @@ class WeightBaseController
     // 重量
     public function  getWeightValue($params)
     {
-        return $this->getValue($this->width, $params);
+        return $this->getValue($this->weight, $params);
     }
 
     // 高
@@ -290,8 +294,12 @@ class WeightBaseController
     // 获取orderHeader
     public function findOrderHeaderByLogisticNumber($code)
     {
-        $query = OracleActAllocationDetails::query()->select('order_no')->where('picktotraceid', $code);
-        return OracleDOCOrderHeader::query()->with('actAllocationDetails', 'oracleBASCode')->whereIn('Order_No', $query)->first();
+        $query = OracleActAllocationDetails::query()->select('OrderNO')->where('PickToTraceId', $code);
+        $orderHeader =  OracleDOCOrderHeader::query()->with('actAllocationDetails', 'oracleBASCode')->whereIn('OrderNO', $query)->first();
+        if($orderHeader == null){
+            $orderHeader = OracleDOCOrderHeader::query()->with('actAllocationDetails', 'oracleBASCode')->where('SOReference5', $code)->first();
+        }
+        return $orderHeader;
     }
 
     // 根据WMS订单信息创建订单信息
@@ -340,4 +348,63 @@ class WeightBaseController
         return $orderPackage->save();
     }
 // endregion
+
+// region ---上传快递单号处理
+
+    /**
+     * 快递单号处理
+     *
+     * @param $code
+     * @return string
+     */
+    public function processCode($code): string
+    {
+
+        /** 如果是$code 是数组处理 */
+        if(is_array($code)){
+            return $this->processCodeArr($code);
+        }
+        return $this->processCodeStr($code);
+    }
+
+    /**
+     *  快递单号 array 处理
+     *
+     * @param array $code
+     * @return mixed|string
+     */
+    public function processCodeArr(array $code): string
+    {
+        usort($code,function($codeA,$codeB){
+            if(strlen($codeA) == strlen($codeB))return 0;
+            return strlen($codeA) > strlen($codeB) ? 1 : -1;
+        });
+        return $code[0];
+    }
+
+    /**
+     * 快递单号 string 处理
+     *
+     * @param $code
+     * @return string
+     */
+    public function processCodeStr($code): string
+    {
+        /**  双条码处理  */
+        $codes =  preg_split('/[,,@ ]+/is',$code);
+
+        if(count($codes)>0){
+            foreach ($codes as $item) {
+                $item = trim($item,"'");
+                if(mb_strpos($item,'-'))continue;
+                if(strlen(trim($item,' ')) < 5)continue;
+                return $item;
+            }
+        }
+        $arr = [];
+        preg_match('/[A-Z|a-z|\d]+/',$code,$arr);
+        return $arr[0];
+    }
+
+// endregion
 }

+ 41 - 0
app/Jobs/DeliveryAppointmentCheck.php

@@ -0,0 +1,41 @@
+<?php
+
+namespace App\Jobs;
+
+use App\DeliveryAppointment;
+use Illuminate\Bus\Queueable;
+use Illuminate\Contracts\Queue\ShouldQueue;
+use Illuminate\Foundation\Bus\Dispatchable;
+use Illuminate\Queue\InteractsWithQueue;
+use Illuminate\Queue\SerializesModels;
+
+class DeliveryAppointmentCheck implements ShouldQueue
+{
+    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
+
+
+    protected $int;
+    /**
+     * Create a new job instance.
+     *
+     * @param int $int
+     *
+     * @return void
+     */
+    public function __construct(int $int)
+    {
+        $this->int = $int;
+    }
+
+    /**
+     * Execute the job.
+     *
+     * @return void
+     */
+    public function handle()
+    {
+        /** @var DeliveryAppointment|\stdClass $appointment */
+        $appointment = DeliveryAppointment::query()->find($this->int);
+        if ($appointment && $appointment->status!=2)$appointment->update(["status"=>3]);
+    }
+}

+ 223 - 53
app/Jobs/LogisticZopSync.php

@@ -5,6 +5,7 @@ namespace App\Jobs;
 use App\library\zop\ZopClient;
 use App\library\zop\ZopProperties;
 use App\library\zop\ZopRequest;
+use App\OrderPackage;
 use App\Services\OrderPackageReceivedSyncService;
 use Illuminate\Bus\Queueable;
 use Illuminate\Contracts\Queue\ShouldQueue;
@@ -39,18 +40,7 @@ class LogisticZopSync implements ShouldQueue
         //
         ini_set('max_execution_time', 10);
         $zopResult = [];
-        $url = config('api_logistic.ZTO.url');
-        $xAppKey = config('api_logistic.ZTO.x-appKey');
-        $appSecret = config('api_logistic.ZTO.appSecret');
-        $properties = new ZopProperties($xAppKey, $appSecret);
-        $client = new ZopClient($properties);
-        $request = new ZopRequest();
-
-        $request->setUrl($url);
-        $request->setBody(json_encode([
-            'billCode' => $this->logistic_number,
-        ]));
-        $response = json_decode($client->execute($request));
+        $response = $this->sentRequestToZT();
         if ($response->status) {
             $zopResult[] = [
                 'routes' => $response->result,
@@ -58,12 +48,9 @@ class LogisticZopSync implements ShouldQueue
             ];
         }
         $result = $this->transformRoutes($zopResult);
-
-        /**
-         * @var $orderPackageReceivedSyncService OrderPackageReceivedSyncService
-         */
+        /* @var $orderPackageReceivedSyncService OrderPackageReceivedSyncService */
         $orderPackageReceivedSyncService = app('OrderPackageReceivedSyncService');
-        $orderPackageReceivedSyncService->update($result);
+        !empty($result) && $orderPackageReceivedSyncService->update($result);
     }
 
     /**
@@ -75,46 +62,229 @@ class LogisticZopSync implements ShouldQueue
     {
         $result = [];
         foreach ($routs as $route) {
-            $resultItem = [];
-            $resultItem['logistic_number'] = $route['logisticNum'];
-            $itemRoutes = $route['routes'];
-            if (empty($itemRoutes)) {
-                continue;
-            }
+            $result = $this->transformRouteItem($route, $result);
+        }
+        return $result;
+    }
+
+    /**
+     * @param $route
+     * @param array $result
+     * @return array
+     */
+    private function transformRouteItem($route, array $result): array
+    {
+        $resultItem = [];
+        $resultItem['logistic_number'] = $route['logisticNum'];
+        $itemRoutes = $route['routes'];
+        $lastRoute = null;
+        if (!empty($itemRoutes)) {
             $lastRoute = $itemRoutes[count($itemRoutes) - 1];
-            switch ($lastRoute->scanType) {
-                case '收件':
-                    $resultItem['status'] = '已揽收';
-                    break;
-                case '到件':
-                case '发件':
-                    $resultItem['status'] = '在途';
-                    break;
-                case 'ARRIVAL':
-                case '派件':
-                    $resultItem['status'] = '派送中';
-                    break;
-                case 'SIGNED':
-                case '签收':
-                    $resultItem['status'] = '已收件';
-                    $resultItem['received_at'] = Carbon::parse($lastRoute->scanDate / 1000)->toDateTimeString();
-                    break;
+            $resultItem = $this->getNormalStatusAndReceivedAt($lastRoute, $resultItem);
+            $resultItem['transfer_status'] = $this->getTransferStatus($itemRoutes);
+        } else {
+            $resultItem['status'] = null;
+            $resultItem['transfer_status'] = [];
+        }
+        if (!array_key_exists('status', $resultItem)) {
+            $resultItem['status'] = null;
+            $resultItem['transfer_status'] = [];
+        }
+        try {
+            $resultItem = $this->setExceptionType($resultItem, $lastRoute ? $lastRoute->scanDate / 1000 : null);
+        } catch (\Exception $e) {
+        }
+        if ($resultItem['status'] == null) {
+            unset($resultItem['status']);
+            unset($resultItem['transfer_status']);
+        }
+        $result[] = $resultItem;
+        return $result;
+    }
+
+    /**
+     * @param array $data
+     * @param $lastRouteDate
+     * @return array
+     */
+    private function setExceptionType(array $data, $lastRouteDate = null): array
+    {
+        $logistic_number = $data['logistic_number'];
+        /** @var OrderPackage $orderPackage */
+        $orderPackage = OrderPackage::query()->with('order')->where('logistic_number', $logistic_number)->first();
+        $delivered_duration = now()->diffInHours(Carbon::parse($orderPackage['sent_at']));
+        $last_routed_duration = now()->diffInHours(Carbon::parse($lastRouteDate));
+        $VALID_HOURS = 4;
+        $SHORT_RESPONSE_HOURS = 24;
+        $LONG_RESPONSE_HOURS = (function ($province) {
+            switch ($province) {
+                case '浙江省':
+                case '江苏省':
+                case '上海':
+                case '安徽省':
+                    return 72;
+                case '北京':
+                case '天津':
+                case '江西省':
+                case '湖北省':
+                case '湖南省':
+                case '广东省':
+                case '福建省':
+                case '山东省':
+                case '河北省':
+                case '河南省':
+                case '山西省':
+                case '四川省':
+                case '陕西省':
+                case '重庆':
+                case '广西壮族自治区':
+                case '贵州省':
+                case '云南省':
+                case '海南省':
+                case '吉林省':
+                case '黑龙江省':
+                case '辽宁省':
+                    return 120;
+                case '青海省':
+                case '宁夏回族自治区':
+                case '甘肃省':
+                case '内蒙古自治区':
+                case '新疆维吾尔自治区':
+                case '西藏自治区':
+                    return 168;
                 default:
-                    break;
+                    return 72;
             }
-            $transfer_status = [];
-            foreach ($itemRoutes as $item) {
-                $data = [];
-                $data['accept_time'] = Carbon::parse($item->scanDate / 1000)->toDateTimeString();
-                $scanSite = $item->scanSite;
-                $data['accept_address'] = $scanSite->prov . '-' . $scanSite->name;
-                $data['remark'] = $item->scanType;
+        })($orderPackage->order->province);
+        $SENDING_RESPONSE_HOURS = 48;
+        $IS_ROUTED = 1;               //0000 0001 有路由信息
+        $IS_IN_VALID_TIME = 2;        //0000 0010 大于4小时
+        $IS_WEIGHED = 4;              //0000 0100 称重过
+        $IS_RECEIVED = 8;          //0000 1000 已经收货
+        $IS_SENDING = 16;             //0001 0000 正在派送
+        $IS_SHORT_NO_RESPONSE = 32;     //0010 0000 中转异常
+        $IS_LONG_NO_RESPONSE = 64;     //0010 0000 疑似丢件
+        $IS_SENDING_NO_RESPONSE = 128;     //0010 0000 派送异常
+        $conclusion = (function () use (
+            $data, $delivered_duration, $last_routed_duration,
+            $VALID_HOURS, $IS_ROUTED, $IS_IN_VALID_TIME, $IS_WEIGHED, $IS_RECEIVED, $IS_SENDING, $IS_SHORT_NO_RESPONSE, $IS_LONG_NO_RESPONSE, $IS_SENDING_NO_RESPONSE,
+            $SHORT_RESPONSE_HOURS, $LONG_RESPONSE_HOURS, $SENDING_RESPONSE_HOURS,
+            $orderPackage
+        ) {
+            $conclusion = 0;
+            $conclusion |= !empty($data['transfer_status']) ? $IS_ROUTED : 0;
+            $conclusion |= ($delivered_duration > $VALID_HOURS) ? $IS_IN_VALID_TIME : 0;
+            $conclusion |= ($orderPackage->weighed_at) ? $IS_WEIGHED : 0;
+            $conclusion |= ($data['status'] == '已收件') ? $IS_RECEIVED : 0;
+            $conclusion |= ($data['status'] == '派送中') ? $IS_SENDING : 0;//
+            $conclusion |= ($last_routed_duration > $SHORT_RESPONSE_HOURS && $last_routed_duration < $LONG_RESPONSE_HOURS) ? $IS_SHORT_NO_RESPONSE : 0;
+            $conclusion |= ($last_routed_duration > $LONG_RESPONSE_HOURS) ? $IS_LONG_NO_RESPONSE : 0;
+            $conclusion |= ($last_routed_duration > $SENDING_RESPONSE_HOURS && $data['status'] == '派送中') ? $IS_SENDING_NO_RESPONSE : 0;
+            return $conclusion;
+        })();
+        switch ($conclusion) {
+            case $IS_IN_VALID_TIME:
+                $data['exception_type'] = '疑似库内丢件';
+                break;
+            case $IS_IN_VALID_TIME | $IS_WEIGHED:
+                $data['exception_type'] = '揽件异常';
+                break;
+            case $IS_ROUTED | $IS_IN_VALID_TIME | $IS_SHORT_NO_RESPONSE:
+            case $IS_ROUTED | $IS_IN_VALID_TIME | $IS_SHORT_NO_RESPONSE | $IS_WEIGHED:
+                $data['exception_type'] = '中转异常';
+                break;
+            case $IS_ROUTED | $IS_IN_VALID_TIME | $IS_LONG_NO_RESPONSE:
+            case $IS_ROUTED | $IS_IN_VALID_TIME | $IS_LONG_NO_RESPONSE | $IS_WEIGHED:
+                $data['exception_type'] = '疑似丢件';
+                break;
+            default:
+                break;
+        }
+        if($conclusion
+            ==($conclusion | $IS_ROUTED | $IS_IN_VALID_TIME | $IS_SENDING | $IS_SENDING_NO_RESPONSE)){
+            $data['exception_type'] = '派件异常';
+        }
+        switch ($conclusion) {
+            case $IS_IN_VALID_TIME:
+            case $IS_IN_VALID_TIME | $IS_WEIGHED:
+            case $IS_ROUTED | $IS_SHORT_NO_RESPONSE:
+            case $IS_LONG_NO_RESPONSE:
+                $data['exception'] = '是';
+                break;
+            default:
+                break;
+        }
+        return $data;
+    }
 
-                $transfer_status[] = $data;
-            }
-            $resultItem['transfer_status'] = $transfer_status;
-            $result[] = $resultItem;
+    /**
+     * 正常的状态与签收时间
+     * @param $lastRoute
+     * @param array $resultItem
+     * @return array
+     */
+    private function getNormalStatusAndReceivedAt($lastRoute, array $resultItem): array
+    {
+        switch ($lastRoute->scanType) {
+            case '收件':
+                $resultItem['status'] = '已揽收';
+                break;
+            case '到件':
+            case '发件':
+                $resultItem['status'] = '在途';
+                break;
+            case 'ARRIVAL':
+            case '派件':
+                $resultItem['status'] = '派送中';
+                break;
+            case 'SIGNED':
+            case '签收':
+                $resultItem['status'] = '已收件';
+                $resultItem['received_at'] = Carbon::parse($lastRoute->scanDate / 1000)->toDateTimeString();
+                break;
+            default:
+                $resultItem['status'] = '无';
+                break;
         }
-        return $result;
+        return $resultItem;
+    }
+
+    /**
+     * @param $itemRoutes
+     * @return array
+     */
+    private function getTransferStatus($itemRoutes): array
+    {
+        $transfer_status = [];
+        foreach ($itemRoutes as $item) {
+            $data = [];
+            $data['accept_time'] = Carbon::parse($item->scanDate / 1000)->toDateTimeString();
+            $scanSite = $item->scanSite;
+            $data['accept_address'] = $scanSite->prov . '-' . $scanSite->name;
+            $data['remark'] = $item->scanType;
+
+            $transfer_status[] = $data;
+        }
+        return $transfer_status;
+    }
+
+    /**
+     * 发送请求到中通
+     * @return mixed
+     */
+    private function sentRequestToZT()
+    {
+        $url = config('api_logistic.ZTO.url');
+        $xAppKey = config('api_logistic.ZTO.x-appKey');
+        $appSecret = config('api_logistic.ZTO.appSecret');
+        $properties = new ZopProperties($xAppKey, $appSecret);
+        $client = new ZopClient($properties);
+        $request = new ZopRequest();
+
+        $request->setUrl($url);
+        $request->setBody(json_encode([
+            'billCode' => $this->logistic_number,
+        ]));
+        return json_decode($client->execute($request));
     }
 }

+ 2 - 0
app/Jobs/OrderCreateInstantBill.php

@@ -32,6 +32,7 @@ class OrderCreateInstantBill implements ShouldQueue
      *
      * @param OrderService $service
      * @return void
+     * @throws
      */
     public function handle(OrderService $service)
     {
@@ -40,6 +41,7 @@ class OrderCreateInstantBill implements ShouldQueue
                 LogService::log(__METHOD__,"ERROR-订单生成即时账单",$this->order->toJson());
         }catch (\Exception $e){
             LogService::log(__METHOD__,"ERROR-订单生成即时账单",$this->order->toJson()." | ".$e->getMessage());
+            throw new \Exception($e->getMessage());
         }
     }
 }

+ 2 - 0
app/Jobs/ProcessCreateInstantBill.php

@@ -32,6 +32,7 @@ class ProcessCreateInstantBill implements ShouldQueue
      *
      * @param ProcessService $service
      * @return void
+     * @throws
      */
     public function handle(ProcessService $service)
     {
@@ -39,6 +40,7 @@ class ProcessCreateInstantBill implements ShouldQueue
             $service->createInstantBill($this->process);
         }catch (\Exception $e){
             LogService::log(__METHOD__,"ERROR-入库生成即时账单",$this->process->toJson()." | ".$e->getMessage());
+            throw new \Exception($e->getMessage());
         }
     }
 }

+ 2 - 0
app/Jobs/RejectedBillCreateInstantBill.php

@@ -31,6 +31,7 @@ class RejectedBillCreateInstantBill implements ShouldQueue
      * Execute the job.
      *
      * @return void
+     * @throws
      */
     public function handle()
     {
@@ -38,6 +39,7 @@ class RejectedBillCreateInstantBill implements ShouldQueue
             app("RejectedBillService")->buildInstantBill($this->rejected);
         }catch(\Exception $exception){
             LogService::log(__CLASS__,"退货单建立即时账单",$exception->getMessage()." | ".json_encode($this->rejected));
+            throw new \Exception($e->getMessage());
         }
     }
 }

+ 30 - 41
app/Jobs/ResetInstantBill.php

@@ -2,6 +2,7 @@
 
 namespace App\Jobs;
 
+use App\Feature;
 use App\Order;
 use App\OwnerFeeDetail;
 use App\OwnerFeeDetailLogistic;
@@ -49,40 +50,28 @@ class ResetInstantBill implements ShouldQueue
         switch ($this->detail->outer_table_name){
             case "orders":
                 /** @var \stdClass $order */
+                //检查订单对象
                 $order = Order::query()->find($this->detail->outer_id);
-                $key = date("Y-m")."_".$order->owner_id;
-                if (Cache::has($key))Cache::increment($key);
-                else Cache::put($key,1,2678400);
-
+                if (!$order || $order->wms_status != "订单完成")break;
                 $order->loadMissing(["logistic","shop","packages.commodities.commodity","batch"]);
-
                 /** @var OwnerPriceExpressService $service */
                 $service = app("OwnerPriceExpressService");
                 $logistic_fee = 0;
-                $commodities = [];
                 $amount = 0;
                 $volume = 0;
                 $weight = 0;
                 $logistic_bill = "";
-
-                if (!$order->logistic || $order->logistic->type != "快递")$logistic_fee = null;
-
+                if (!$order->logistic || $order->logistic->type == "物流")$logistic_fee = null;
                 $items = [];
                 foreach ($order->packages as &$package){
                     $logistic_bill .= $package->logistic_number.",";
                     $volume += $package->bulk;
                     $weight += $package->weight;
-
-                    // 四维转二维
                     $partAmount = 0;
-                    foreach($package->commodities as &$commodity){
-                        $commodity["commodity_name"] = $commodity->commodity ? $commodity->commodity->name : '';
-                        $commodity["sku"] = $commodity->commodity ? $commodity->commodity->sku : '';
+                    foreach($package->commodities as $commodity){
                         $partAmount += $commodity->amount;
                     }
                     $amount += $partAmount;
-                    $commodities = array_merge($commodities,$package->commodities->toArray());
-
                     $provinceName = mb_substr($order->province,0,2);
                     $province = app(CacheService::class)->getOrExecute("province_".$provinceName,function ()use($provinceName){
                         return Province::query()->where("name","like",$provinceName."%")->first();
@@ -93,7 +82,6 @@ class ResetInstantBill implements ShouldQueue
                         $logistic_fee = null;
                         $fee = null;
                     }
-
                     $items[] = [
                         "amount" => $partAmount,
                         "logistic_bill" => $package->logistic_number,
@@ -107,32 +95,31 @@ class ResetInstantBill implements ShouldQueue
                     }
                 }
                 if ($logistic_fee!==null && $logistic_fee<0)$logistic_fee = null;
-
-                $object = ["commodities"=>$commodities,
-                    "logistic_name"=>($order->logistic ? $order->logistic->name : ''),
-                    "shop_name"=>($order->shop ? $order->shop->name : ''),
-                    "order_type"=>$order->order_type,
-                    "batch_type" => $order->batch ? $order->batch->wms_type : '',
-                    "owner_id"=>$order->owner_id];
-                $mapping = ["packages"=>"commodities","商品名称"=>"commodity_name",
-                    "承运商"=>"logistic_name","店铺类型"=>"shop_name","订单类型"=>"order_type",
-                    "波次类型"=>"batch_type"];
-
                 /** @var OwnerPriceOperationService $service */
                 $service = app("OwnerPriceOperationService");
-                $result = $service->matching($object,$mapping,$order->owner_id,"出库");
-
+                $result = $service->matching($order,Feature::MAPPING["order"],$order->owner_id,"出库");
 
                 $detail = $this->detail->update([
+                    "owner_id"          => $order->owner_id,
+                    "worked_at"         => $order->wms_edittime ?? $order->updated_at,
+                    "shop_id"           => $order->shop_id,
+                    "operation_bill"    => $order->code,
+                    "consignee_name"    => $order->consignee_name,
+                    "consignee_phone"   => $order->consignee_phone,
+                    "commodity_amount"  => $amount,
+                    "logistic_bill"     => rtrim($logistic_bill,","),
+                    "volume"            => $volume,
+                    "weight"            => $weight,
+                    "logistic_id"       => $order->logistic_id,
                     "work_fee"          => is_array($result) ? ($result["money"]>0 ? $result["money"] : null) : null,
+                    "owner_price_operation_id"  => is_array($result) ? $result["id"] : null,
                     "logistic_fee"      => $logistic_fee,
                 ]);
                 if ($detail){
-                    foreach ($items as $item){
-                        OwnerFeeDetailLogistic::query()->where("owner_fee_detail_id",$detail->id)
-                            ->where("logistic_bill",$item["logistic_bill"])
-                            ->update($item);
-                    }
+                    OwnerFeeDetailLogistic::query()->where("owner_fee_detail_id",$detail->id)->delete();
+                    foreach ($items as &$item)$item["owner_fee_detail_id"] = $detail->id;
+                    if (count($items)>1)OwnerFeeDetailLogistic::query()->insert($items);
+                    app("OrderService")->setOrderQuantity($order->owner_id,$order->logistic_id);
                 }
                 break;
             case "processes":
@@ -168,17 +155,19 @@ class ResetInstantBill implements ShouldQueue
             case "stores":
                 /** @var \stdClass $store */
                 $store = Store::query()->find($this->detail->outer_id);
-                $store->loadMissing("storeItems");
+                if (!$store || $store->status != "已入库") break;
+                $store->loadMissing(["storeItems","warehouse"]);
 
                 /** @var OwnerPriceOperationService $service */
                 $service = app("OwnerPriceOperationService");
-
-                $mapping = ["packages" => "storeItems", "商品名称" => "name", "订单类型" => "stored_method", "订单数"=>"amount"];
-
-                $result = $service->matching($store, $mapping, $store->owner_id, "入库");
-
+                $result = $service->matching($store, Feature::MAPPING["store"], $store->owner_id, "入库");
                 $this->detail->update([
+                    "owner_id" => $store->owner_id,
+                    "worked_at" => $store->created_at,
+                    "operation_bill" => $store->asn_code,
+                    "commodity_amount" => array_sum(array_column($store->storeItems->toArray(), "amount")),
                     "work_fee" => is_array($result) ? ($result["money"]>0 ? $result["money"] : null) : null,
+                    "owner_price_operation_id" => is_array($result) ? $result["id"] : null,
                 ]);
                 break;
         }

+ 2 - 0
app/Jobs/StoreCreateInstantBill.php

@@ -33,6 +33,7 @@ class StoreCreateInstantBill implements ShouldQueue
      *
      * @param StoreService $service
      * @return void
+     * @throws
      */
     public function handle(StoreService $service)
     {
@@ -40,6 +41,7 @@ class StoreCreateInstantBill implements ShouldQueue
             $service->createInstantBill($this->store);
         }catch (\Exception $e){
             LogService::log(__METHOD__,"ERROR-入库生成即时账单",$this->store->toJson()." | ".$e->getMessage());
+            throw new \Exception($e->getMessage());
         }
     }
 }

+ 2 - 0
app/Jobs/WaybillCreateInstantBill.php

@@ -33,6 +33,7 @@ class WaybillCreateInstantBill implements ShouldQueue
      *
      * @param WaybillService $service
      * @return void
+     * @throws
      */
     public function handle(WaybillService $service)
     {
@@ -40,6 +41,7 @@ class WaybillCreateInstantBill implements ShouldQueue
             $service->createInstantBill($this->waybill);
         }catch (\Exception $e){
             LogService::log(__METHOD__,"ERROR-运输计算运费失败",$this->waybill->toJson()." | ".$e->getMessage());
+            throw new \Exception($e->getMessage());
         }
     }
 }

+ 41 - 0
app/Listeners/AddOrUpdateOrderIssuesListener.php

@@ -0,0 +1,41 @@
+<?php
+
+namespace App\Listeners;
+
+use App\Events\AddOrUpdateOrderIssues;
+use App\OrderPackage;
+use Illuminate\Contracts\Queue\ShouldQueue;
+use Illuminate\Queue\InteractsWithQueue;
+
+class AddOrUpdateOrderIssuesListener
+{
+    /**
+     * Create the event listener.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        //
+    }
+
+    /**
+     * Handle the event.
+     *
+     * @param AddOrUpdateOrderIssues $event
+     * @return void
+     */
+    public function handle(AddOrUpdateOrderIssues $event)
+    {
+        $order_ids = $event->order_ids;
+        OrderPackage::query()
+            ->whereIn('order_id', $order_ids)
+            ->whereHas('order.issue.issueType', function ($query) {
+                $query->whereNotIn('name', ['拦截', '信息更改', '其他', '错漏发', '仓库问题', '二次加工', '全检问题', '系统问题', '快递方式更改']);
+            })
+            ->update([
+                'exception_type' => '其他',
+                'exception' => '是',
+            ]);
+    }
+}

+ 1 - 1
app/Listeners/ModelChangedListener.php

@@ -25,7 +25,7 @@ class ModelChangedListener
             get_class($event->model),
             $methodName,
             '对象:'.$event->model->toJson()
-            .'调用堆栈:'.$traces
+            .'调用堆栈h:'.$traces
         );
     }
 

+ 1 - 1
app/LogisticNumberFeature.php

@@ -9,7 +9,7 @@ use App\Traits\ModelLogChanging;
 
 class LogisticNumberFeature extends Model
 {
-    use ModelLogChanging;
+//    use ModelLogChanging;
 
     use ModelTimeFormat;
     protected $fillable=['logistic_id','name','value','weight'];

+ 1 - 0
app/Observers/OwnerObserver.php

@@ -14,6 +14,7 @@ class OwnerObserver
      */
     public function created(Owner $owner)
     {
+        app("OwnerAreaReportService")->notExistToInsert([$owner]);
         if(env('APP_ENV')=='production')
             app("OwnerService")->syncPush($owner);
             app("OwnerService")->createAuthority($owner);

+ 2 - 2
app/OrderPackage.php

@@ -18,12 +18,12 @@ use App\Traits\ModelLogChanging;
 
 class OrderPackage extends Model
 {
-    use ModelLogChanging;
+//    use ModelLogChanging;
 
     use ModelTimeFormat;
 
     protected $fillable = ['order_id','logistic_number','batch_number',
-        'batch_rule','bulk','weight','length','width','height','paper_box_id','measuring_machine_id','weighed_at','status','sent_at','received_at','exception','transfer_status','remark','owner_id','uploaded_to_wms'];
+        'batch_rule','bulk','weight','length','width','height','paper_box_id','measuring_machine_id','weighed_at','status','sent_at','received_at','exception','transfer_status','remark','owner_id','uploaded_to_wms','exception_type'];
 
     public function order(){
         return $this->belongsTo('App\Order','order_id','id');

+ 3 - 3
app/Owner.php

@@ -102,7 +102,7 @@ class Owner extends Model
     }
     public function ownerStoragePriceModels()
     {   //仓储计费
-        $query = OwnerPriceExpress::query()->select("target_id")
+        $query = OwnerStoragePriceModel::query()->select("target_id")
             ->whereNotNull("operation")->where("operation","!=","")
             ->whereNotNull("target_id")->where("target_id","!=","");
         return $this->belongsToMany(OwnerStoragePriceModel::class,"owner_storage_price_model_owner","owner_id","owner_storage_price_model_id")
@@ -132,7 +132,7 @@ class Owner extends Model
     }
     public function ownerPriceLogistics()
     {   //物流计费
-        $query = OwnerPriceExpress::query()->select("target_id")
+        $query = OwnerPriceLogistic::query()->select("target_id")
             ->whereNotNull("operation")->where("operation","!=","")
             ->whereNotNull("target_id")->where("target_id","!=","");
         return $this->belongsToMany(OwnerPriceLogistic::class,"owner_price_logistic_owner","owner_id","owner_price_logistic_id")
@@ -142,7 +142,7 @@ class Owner extends Model
     }
     public function ownerPriceDirectLogistics()
     {   //直发车计费
-        $query = OwnerPriceExpress::query()->select("target_id")
+        $query = OwnerPriceDirectLogistic::query()->select("target_id")
             ->whereNotNull("operation")->where("operation","!=","")
             ->whereNotNull("target_id")->where("target_id","!=","");
         return $this->belongsToMany(OwnerPriceDirectLogistic::class,"owner_price_direct_logistic_owner","owner_id","owner_price_direct_logistic_id")

+ 1 - 1
app/OwnerFeeDetail.php

@@ -9,7 +9,7 @@ use App\Traits\ModelLogChanging;
 
 class OwnerFeeDetail extends Model
 {
-    use ModelLogChanging;
+//    use ModelLogChanging;
 
     protected $fillable = [
         "owner_id",         //货主ID

+ 3 - 0
app/Providers/EventServiceProvider.php

@@ -35,6 +35,9 @@ class EventServiceProvider extends ServiceProvider
         'App\Events\SendEmailEvent' => [
             'App\Listeners\SendEmailListener'
         ],
+        'App\Events\AddOrUpdateOrderIssues' => [
+            'App\Listeners\AddOrUpdateOrderIssuesListener',
+        ],
     ];
 
     /**

+ 1 - 2
app/Services/ForeignHaiRoboticsService.php

@@ -225,7 +225,6 @@ class ForeignHaiRoboticsService
             $this->stationTaskMaterialBoxService->set($stationTaskMaterialBox,[
                 'id' => $stationTaskMaterialBox['id'],
                 'status' => $stationTaskMaterialBox['status']='处理中',
-                'station_id' => 4,
             ]);
         }
         return $controlSuccess;
@@ -360,7 +359,7 @@ class ForeignHaiRoboticsService
         LogService::log(__METHOD__, __FUNCTION__,
             $errMsg ?? ''
             . '请求:' . json_encode($dataToPost)
-            . '调用堆栈:' . json_encode(array_slice(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS), 0, 3))
+            . '调用堆栈c:' . json_encode(array_slice(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS), 0, 3))
         );
         return $isSuccess = !$errMsg;
     }

+ 126 - 2
app/Services/LogisticSFService.php

@@ -5,8 +5,10 @@ namespace App\Services;
 
 
 use App\Exceptions\WarningException;
+use App\OrderPackage;
 use Exception;
 use Illuminate\Http\Client\Response;
+use Illuminate\Support\Carbon;
 use Illuminate\Support\Facades\Http;
 
 class LogisticSFService
@@ -92,12 +94,15 @@ xml;
      */
     public function transformSFOneToArr(array $routeResponse, array $data): array
     {
+
         $data['logistic_number'] = $routeResponse['@attributes'][$this->protected_switch['logistic_number']];
         try {
             $lastRoute = get_object_vars($routeResponse['Route'][count($routeResponse['Route']) - 1])['@attributes'];//获取最新的路由信息
             $data = $this->switchOpCodeToStatus($lastRoute, $data);
             $data['transfer_status'] = $this->transformRoutes($routeResponse['Route']);
-
+            if (!array_key_exists('exception', $data)) {//当顺丰返回异常时,不需要再根据时间判断是否异常,直接用顺丰的异常就好
+                $data = $this->setExceptionType($data, $lastRoute['accept_time']);
+            }
         } catch (Exception $e) {
             throw new WarningException("单号没有查询到快递路由信息','LogisticSFService->transformSFOneToArr->{$data['logistic_number']}");
         } finally {
@@ -145,6 +150,7 @@ xml;
                 case 70:
                 case 33:
                     $data['status'] = '派送异常';
+                    $data['exception_type'] = '派件异常';
                     $data['exception'] = '是';
                     break;
                 case 204:
@@ -169,7 +175,7 @@ xml;
             }
         } catch (WarningException $e) {
             $data['status'] = '其他异常';
-        }finally {
+        } finally {
             return $data;
         }
     }
@@ -209,4 +215,122 @@ xml;
         }
         return $result;
     }
+
+
+    /**
+     * @param array $data
+     * @param $lastRouteDate
+     * @return array
+     */
+    private function setExceptionType(array $data, $lastRouteDate = null): array
+    {
+        $logistic_number = $data['logistic_number'];
+        /** @var OrderPackage $orderPackage */
+        $orderPackage = OrderPackage::query()->with('order')->where('logistic_number', $logistic_number)->first();
+        $delivered_duration = now()->diffInHours(Carbon::parse($orderPackage['sent_at']));
+        $last_routed_duration = now()->diffInHours(Carbon::parse($lastRouteDate));
+        $VALID_HOURS = 4;
+        $SHORT_RESPONSE_HOURS = 24;
+        $LONG_RESPONSE_HOURS = (function ($province) {
+            switch ($province) {
+                case '浙江省':
+                case '江苏省':
+                case '上海':
+                case '安徽省':
+                    return 72;
+                case '北京':
+                case '天津':
+                case '江西省':
+                case '湖北省':
+                case '湖南省':
+                case '广东省':
+                case '福建省':
+                case '山东省':
+                case '河北省':
+                case '河南省':
+                case '山西省':
+                case '四川省':
+                case '陕西省':
+                case '重庆':
+                case '广西壮族自治区':
+                case '贵州省':
+                case '云南省':
+                case '海南省':
+                case '吉林省':
+                case '黑龙江省':
+                case '辽宁省':
+                    return 120;
+                case '青海省':
+                case '宁夏回族自治区':
+                case '甘肃省':
+                case '内蒙古自治区':
+                case '新疆维吾尔自治区':
+                case '西藏自治区':
+                    return 168;
+                default:
+                    break;
+            }
+        })($orderPackage->order->province);
+        $SENDING_RESPONSE_HOURS = 48;
+        $IS_ROUTED = 1;               //0000 0001 有路由信息
+        $IS_IN_VALID_TIME = 2;        //0000 0010 大于4小时
+        $IS_WEIGHED = 4;              //0000 0100 称重过
+        $IS_RECEIVED = 8;          //0000 1000 已经收货
+        $IS_SENDING = 16;             //0001 0000 正在派送
+        $IS_SHORT_NO_RESPONSE = 32;     //0010 0000 中转异常
+        $IS_LONG_NO_RESPONSE = 64;     //0010 0000 疑似丢件
+        $IS_SENDING_NO_RESPONSE = 128;     //0010 0000 派送异常
+        $conclusion = (function () use (
+            $data, $delivered_duration, $last_routed_duration,
+            $VALID_HOURS, $IS_ROUTED, $IS_IN_VALID_TIME, $IS_WEIGHED, $IS_RECEIVED, $IS_SENDING, $IS_SHORT_NO_RESPONSE, $IS_LONG_NO_RESPONSE, $IS_SENDING_NO_RESPONSE,
+            $SHORT_RESPONSE_HOURS, $LONG_RESPONSE_HOURS, $SENDING_RESPONSE_HOURS,
+            $orderPackage
+        ) {
+            $conclusion = 0;
+            $conclusion |= !empty($data['transfer_status']) ? $IS_ROUTED : 0;
+            $conclusion |= ($delivered_duration > $VALID_HOURS) ? $IS_IN_VALID_TIME : 0;
+            $conclusion |= ($orderPackage->weighed_at) ? $IS_WEIGHED : 0;
+            $conclusion |= ($data['status'] == '已收件') ? $IS_RECEIVED : 0;
+            $conclusion |= ($data['status'] == '派送中') ? $IS_SENDING : 0;//
+            $conclusion |= ($last_routed_duration > $SHORT_RESPONSE_HOURS && $last_routed_duration < $LONG_RESPONSE_HOURS) ? $IS_SHORT_NO_RESPONSE : 0;
+            $conclusion |= ($last_routed_duration > $LONG_RESPONSE_HOURS) ? $IS_LONG_NO_RESPONSE : 0;
+            $conclusion |= ($last_routed_duration > $SENDING_RESPONSE_HOURS && $data['status'] == '派送中') ? $IS_SENDING_NO_RESPONSE : 0;
+            return $conclusion;
+        })();
+        switch ($conclusion) {
+            case $IS_IN_VALID_TIME:
+                $data['exception_type'] = '疑似库内丢件';
+                break;
+            case $IS_IN_VALID_TIME | $IS_WEIGHED:
+                $data['exception_type'] = '揽件异常';
+                break;
+            case $IS_ROUTED | $IS_IN_VALID_TIME | $IS_SHORT_NO_RESPONSE:
+            case $IS_ROUTED | $IS_IN_VALID_TIME | $IS_SHORT_NO_RESPONSE | $IS_WEIGHED:
+                $data['exception_type'] = '中转异常';
+                break;
+            case $IS_ROUTED | $IS_IN_VALID_TIME | $IS_LONG_NO_RESPONSE:
+            case $IS_ROUTED | $IS_IN_VALID_TIME | $IS_LONG_NO_RESPONSE | $IS_WEIGHED:
+                $data['exception_type'] = '疑似丢件';
+                break;
+            default:
+                break;
+        }
+
+        if($conclusion
+            ==($conclusion | $IS_ROUTED | $IS_IN_VALID_TIME | $IS_SENDING | $IS_SENDING_NO_RESPONSE)){
+            $data['exception_type'] = '派件异常';
+        }
+
+        switch ($conclusion) {
+            case $IS_IN_VALID_TIME:
+            case $IS_IN_VALID_TIME | $IS_WEIGHED:
+            case $IS_ROUTED | $IS_SHORT_NO_RESPONSE:
+            case $IS_LONG_NO_RESPONSE:
+                $data['exception'] = '是';
+                break;
+            default:
+                break;
+        }
+        return $data;
+    }
 }

+ 1 - 0
app/Services/LogisticZopService.php

@@ -36,6 +36,7 @@ class LogisticZopService
                 'billCode' => $logisticNum,
             ]));
             $response = json_decode($client->execute($request));
+
             if ($response->status) {
                 $result[] = [
                     'routes' => $response->result,

+ 16 - 0
app/Services/OrderCommodityService.php

@@ -2,6 +2,8 @@
 
 namespace App\Services;
 
+use App\Batch;
+use App\OracleActAllocationDetails;
 use App\Order;
 use App\OrderCommodity;
 use App\Services\common\BatchUpdateService;
@@ -29,6 +31,20 @@ class OrderCommodityService
         }
     }
 
+    public function correctLocation_fromWMS($orderCommodities){
+        $orderCommodities->loadMissing('order.batch');
+        $details=OracleActAllocationDetails::query()
+            ->where('orderno',data_get($orderCommodities,'*.order.code')??[])
+            ->where('waveno',data_get($orderCommodities,'*.order.batch.code')??[])
+            ->get(['orderno','location','waveno']);
+        foreach($orderCommodities as &$orderCommodity){
+            $orderCommodity['location'] ==$details
+                ->where('orderno',$orderCommodity['order']['code'])
+                ->where('waveno',$orderCommodity['order']['batch']['code'])
+                ->first()['location']??'';
+        }
+        return $orderCommodities;
+    }
     public function batchUpdate($updateParams){
         return app(BatchUpdateService::class)->batchUpdate('order_commodities',$updateParams);
     }

+ 7 - 2
app/Services/OrderPackageReceivedSyncService.php

@@ -78,6 +78,10 @@ class OrderPackageReceivedSyncService
         return array_merge($resultSF, $resultYD, $resultYT, $resultOther);
     }
 
+    /**
+     * 根据快递单号更新状态
+     * @param array $orderPackages
+     */
     public function update(array $orderPackages)
     {
         foreach ($orderPackages as $data) {
@@ -86,6 +90,7 @@ class OrderPackageReceivedSyncService
             if (isset($data['received_at'])) $orderPackage->received_at = $data['received_at'];
             if (isset($data['exception'])) $orderPackage->exception = $data['exception'];
             if (isset($data['transfer_status'])) $orderPackage->transfer_status = $data['transfer_status'];
+            if (isset($data['exception_type'])) $orderPackage->exception_type = $data['exception_type'];
             $orderPackage->save();
         }
     }
@@ -105,11 +110,11 @@ class OrderPackageReceivedSyncService
         if (Carbon::now()->lte($initDate)) {//当前时间小于等于初始化时间
             //初始化查询一个月的数据,exception为否
             $query = $query->where('created_at', '>=', $initDate->subDays((int)config('api_logistic.days'))->toDateTimeString())
-                ->where('exception', '否')
+//                ->where('exception', '否')
                 ->whereNull('received_at');
         } else {//当前时间大于初始化时间,exception为否且未收货
             $query = $query->where('created_at', '>=', $initDate->toDateTimeString())
-                ->where('exception', '否')
+//                ->where('exception', '否')
                 ->whereNull('received_at');
         }
         return $this->buildData($query->get(), $data);

+ 42 - 5
app/Services/OrderPackageService.php

@@ -2,6 +2,7 @@
 
 namespace App\Services;
 
+use App\Logistic;
 use App\OracleActAllocationDetails;
 use App\OracleDOCOrderDetail;
 use App\OracleDOCOrderHeader;
@@ -125,18 +126,25 @@ class OrderPackageService
         if(!$orderHeaders)return;
         /**
          * @var DataHandlerService $dataHandlerService
+         * @var LogisticService $logsitcService
          */
+        $logisticService = app(LogisticService::class);
         $dataHandlerService = app(DataHandlerService::class);
         $orderHeaders_map = $dataHandlerService->dataHeader(['orderno'],$orderHeaders);
         $packages_maps = $dataHandlerService->dataHeader(['logistic_number'],$packages);
         $inner_params = [];
+
+        /** 定制京东快递的订单 */
+        $logistic = $logisticService->getLogisticByCodes(['JDKD'])->first();
         foreach ($orders as $order){
             $orderHeader = $dataHandlerService->getKeyValue(['orderno'=>$order->code],$orderHeaders_map);
             if(!$orderHeader)continue;
             if($orderHeader->sotatus == 90)continue;
-            $params = $this->getInnerParams($orderHeader,$order,$packages_maps);
+            $params = $this->getInnerParams($orderHeader,$order,$packages_maps,$logistic);
             $inner_params = array_merge($inner_params,$params);
         }
+
+        /** 批量添加 */
         if(count($inner_params)>0){
             try {
                 $inner_array = array_chunk($inner_params,5000);
@@ -150,31 +158,43 @@ class OrderPackageService
         }
     }
 
-    public function getInnerParams($orderHeader,$order,$packages_maps)
+    public function getInnerParams($orderHeader,$order,$packages_maps,$logistic): array
     {
         /**
         * @var DataHandlerService $dataHandlerService
         */
         $dataHandlerService = app('DataHandlerService');
         $logistic_numbers = array_diff(array_unique(data_get($orderHeader->actAllocationDetails,'*.picktotraceid')),['','*']);
+        $date = Carbon::now()->format('Y-m-d H:i:s');
         $inner_params = [];
+        $sentAtMap = [];
+
         if($orderHeader['sostatus'] == '90'){
             if($orderHeader['soreference5']=='')$logistic_numbers = [$orderHeader['orderno']];
             else $logistic_numbers = [$orderHeader['soreference5']];
         }
-        $date = Carbon::now()->format('Y-m-d H:i:s');
-        $sentAtMap = [];
+
+        /** sent_at checktime */
         foreach ($orderHeader->actAllocationDetails as $item){
             $sentAtMap[$item->picktotraceid] = $item;
         }
+
+        /** 承运商是京东时的定制操作 */
+        if($order['id'] == $logistic['id'] && count($logistic_numbers) == 1){
+            $logistic_numbers = [$orderHeader['soreference5']];
+            $sentAtMap[$orderHeader['soreference5']] = $orderHeader->actAllocationDetails->first() ?? null;
+        }
+
         foreach ($logistic_numbers as $logistic_number){
             $package = $dataHandlerService->getKeyValue(['logistic_number'=>$logistic_number],$packages_maps);
+
             if(isset($package))continue;
             try {
                 $data = $sentAtMap[$logistic_number];
             } catch (\Exception $e) {
                 $data = null;
             }
+
             $inner_params[] = [
                 'order_id' => $order->id,
                 'logistic_number' => $logistic_number,
@@ -188,6 +208,7 @@ class OrderPackageService
         return $inner_params;
     }
 
+
     public function deleteUnnecessaryPackage($orderHeaders,$packages)
     {
         /**
@@ -197,23 +218,39 @@ class OrderPackageService
          */
         $dataHandlerService = app(DataHandlerService::class);
         $orderPackageCommoditiesService = app('OrderPackageCommoditiesService');
-        $logistic_numbers = data_get($orderHeaders,'*.actAllocationDetails.*.picktotraceid');     // 获取picktotraceid (运单的快递单号)
+
+        /** 获取所有的 picktotraceid WMS快递单号*/
+        $logistic_numbers = data_get($orderHeaders,'*.actAllocationDetails.*.picktotraceid');
+
+         /** WMS定制化操作 订单取消 和 京东快递*/
         foreach ($orderHeaders as $orderHeader) {
             if($orderHeader['sostatus'] == '90'){
                 if($orderHeader['soreference5']=='')$logistic_numbers[] =$orderHeader['orderno'];
                 else $logistic_numbers[] = $orderHeader['soreference5'];
             }
+            if($orderHeader['userdefine1'] == 'JDKD'){
+                $logistic_numbers[] = $orderHeader['soreference5'];
+            }
         }
+
+        /** WMS快递单号唯一化 剔除 '',' ','*'*/
         $logistic_numbers = array_unique(array_values($logistic_numbers));
         $logistic_numbers = array_diff($logistic_numbers,['',' ','*']);
+
+        /** WAS数据库中已有的快递单号*/
         $packages_maps = $dataHandlerService->dataHeader(['logistic_number'],$packages);
         $exits_number = data_get($packages,'*.logistic_number');
+
+        /** WMS快递单号 和 WAS的快递单号 的差集*/
         $packages = [];
         $diff_number = array_diff($exits_number,$logistic_numbers);
+        /** 记录差集对应的OrderPackage的id*/
         foreach ($diff_number as $number) {
             $package = $dataHandlerService->getKeyValue(['logistic_number'=>$number],$packages_maps);
             if($package ?? false)$packages[]=$package->id;
         }
+
+        /** 删除 OrderPackage 和 OrderPackageCommodities*/
         if(count($packages)==0)return;
         try {
             $bool = OrderPackage::query()->whereIn('id', $packages)->delete();

+ 5 - 4
app/Services/OrderService.php

@@ -619,6 +619,7 @@ class OrderService
         $logisticService = app("LogisticService");
         $shopService = app('ShopService');
         $warehouseService = app('WarehouseService');
+
         $owner_codes = [];$logistic_codes = [];$warehouse_codes = [];$shop_names = [];$batch_codes = [];
         foreach ($orderHeaders as $orderHeader) {
             if(!empty($orderHeader['waveno']))
@@ -635,6 +636,7 @@ class OrderService
                 $shop_names[$key] = $value;
             }
         }
+
         $owners = $ownerService->getOwnerByCodes($owner_codes);
         $logistics = $logisticService->getLogisticByCodes($logistic_codes);
         $shops = $shopService->getShopByCodeMap($shop_names);
@@ -1065,7 +1067,7 @@ sql
         if ($isToB)$type = "|B|";
         else $type = "|C|";
         if (!Cache::has($date.$type.$owner))$this->orderQuantityCompensationLogic($owner);
-        return Cache::get($date.$type.$owner);
+        return Cache::get($date.$type.$owner)+1;//+1是算本单
     }
 
     /**
@@ -1081,8 +1083,6 @@ sql
         if (!$order || $order->wms_status != "订单完成")return true;
         if (OwnerFeeDetail::query()->where("outer_table_name","orders")->where("outer_id",$order->id)->first())return true;
 
-        $this->setOrderQuantity($order->owner_id,$order->logistic_id);
-
         $order->loadMissing(["logistic","shop","packages.commodities.commodity","batch"]);
 
         /** @var OwnerPriceExpressService $service */
@@ -1159,6 +1159,7 @@ sql
        if ($detail){
             foreach ($items as &$item)$item["owner_fee_detail_id"] = $detail->id;
             if (count($items)>1)OwnerFeeDetailLogistic::query()->insert($items);
+            $this->setOrderQuantity($order->owner_id,$order->logistic_id);
             return true;
        }
        return false;
@@ -1272,7 +1273,7 @@ sql
                     return Province::query()->where("name","like",$provinceName."%")->first();
                 },86400);
                 if (!$province)$logistic_fee = null;
-                $fee = app("OwnerPriceExpressService")->matching($package->weight, $order->owner_id, $order->logistic_id, $province->id);
+                else $fee = app("OwnerPriceExpressService")->matching($package->weight, $order->owner_id, $order->logistic_id, $province->id);
             }
 
             OwnerFeeDetailLogistic::query()->where("owner_fee_detail_id",$feeBill->id)->where("logistic_bill",$package->logistic_number)->update([

+ 9 - 8
app/Services/OwnerAreaReportService.php

@@ -6,6 +6,7 @@ use App\OwnerAreaReport;
 use App\OwnerBillReport;
 use App\Services\common\QueryService;
 use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\DB;
 use App\Traits\ServiceAppAop;
 
@@ -38,7 +39,7 @@ class OwnerAreaReportService
 
     public function paginate(array $params, array $withs = null)
     {
-        $areas = OwnerAreaReport::query()->orderByDesc('id');
+        $areas = OwnerAreaReport::query()->whereIn("owner_id",Auth::user()['permittingOwnerIds'])->orderByDesc('id');
         if ($withs)$areas->with($withs);
         return $this->query($areas,$params)->paginate($params["paginate"] ?? 50);
     }
@@ -49,9 +50,9 @@ class OwnerAreaReportService
      *
      * @param array $params
      * @param array $values
-     * @return bool
+     * @return bool|string
      */
-    public function update(array $params, array $values):bool
+    public function update(array $params, array $values)
     {
         DB::beginTransaction();
         $area = $this->query(OwnerAreaReport::query(),$params)->with("ownerStoragePriceModel")->lockForUpdate()->first();
@@ -61,12 +62,12 @@ class OwnerAreaReportService
                     ->where("counting_month",'like',$area->counting_month."%")->first();
                 if ($report){
                     if (!$area->ownerStoragePriceModel)return false;
-                    $diff = $area->accounting_area - $values["accounting_area"];
+                    $diff = $area->accounting_area>0 ? $area->accounting_area - $values["accounting_area"] : $values["accounting_area"];
                     $diffAmount = app("OwnerStoragePriceModelService")->calculationAmount($area->ownerStoragePriceModel, $diff, $area->owner_id, $area->counting_month);
                     if ($diffAmount != 0){
                         $up = ["storage_fee"=>$report->storage_fee - $diffAmount];
-                        $report->initial_fee -= $report->storage_fee - $diffAmount;
-                        if ($report->confirm_fee !== null)$up["difference"] = $report->initial_fee - $report->confirm_fee;
+                        $initial = $report->initial_fee - ($report->storage_fee - $diffAmount);
+                        if ($report->confirm_fee !== null)$up["difference"] = $initial - $report->confirm_fee;
                         $report->update($up);
                     }
                 }
@@ -76,7 +77,7 @@ class OwnerAreaReportService
             return true;
         }catch (\Exception $e){
             DB::rollBack();
-            return false;
+            return $e->getMessage();
         }
     }
 
@@ -104,7 +105,7 @@ class OwnerAreaReportService
         if (!$owners)return;
         $reports = OwnerAreaReport::query()
             ->where("counting_month",">=",date("Y-m")."-01")
-            ->whereIn("owner_id",array_column($owners->toArray(),"id"))->get();
+            ->whereIn("owner_id",array_column(is_array($owners) ? $owners : $owners->toArray(),"id"))->get();
         $sign = [];
         foreach ($reports as $report)$sign[$report->owner_id."_".$report->owner_storage_price_model_id] = true;
         $month = date('Y-m-d');

+ 9 - 4
app/Services/OwnerPriceOperationService.php

@@ -316,8 +316,12 @@ class OwnerPriceOperationService
         $units = app("UnitService")->getUnitMapping(["件","箱"]); //获取单位映射集
         $rules = $this->getOwnerPriceOperation($ownerId,$type,$typeMark);//货主下的全部规则
         if (!$rules)return -2;  //规则不存在跳出
-        if ($type == '出库') $total = app("OrderService")->getOrderQuantity($ownerId);//获取该货主本月C端单量
-        else $total = app("StoreService")->getStoreAmount($ownerId);//获取该货主本月入库件数
+        if ($type == '出库')$total = app("OrderService")->getOrderQuantity($ownerId);//获取该货主本月C端单量
+        else {
+            $total = 0;
+            if ($matchObject->storeItems)foreach ($matchObject->storeItems as $item)$total += $item->amount;
+            $total += app("StoreService")->getStoreAmount($ownerId);//获取该货主本月入库件数
+        }
         foreach ($rules as $rule){
             if (!$rule->items)continue; //不存在子规则跳出
 
@@ -375,7 +379,7 @@ class OwnerPriceOperationService
         if ($first && is_array($first))$first = reset($first);
         else return $matchObject;
         if (!$first)return $matchObject;
-        if (is_array($first[$nextObj])){
+        if ($nextObj && is_array($first[$nextObj])){
             $result = [];
             foreach ($matchObject[$need] as $arr)$result = array_merge($result,$arr[$nextObj]);
             return $this->resetChildNodeMapping($result,$columnMapping);
@@ -411,9 +415,10 @@ class OwnerPriceOperationService
             if ($result)$rule->unit_price = explode(",",$rule->discount_price)[key($result)]; //满足满减条件,单价调整为满减单价
 
             if ($rule->strategy=='起步'){
-                if ($unitName && $unitName != $units[$rule->unit_id])return -3; //校验单位是否一致
                 $money = $rule->unit_price;
                 $startNumber = $rule->amount;
+                if ($unitName && $startNumber && $unitName != $units[$rule->unit_id])return -3; //校验单位是否一致
+
                 if ($startNumber)$matchObject=$this->settingCount($matchObject,$columnMapping[8],$startNumber);
                 if ($matchObject)foreach ($matchObject as $package)$money += $package[$columnMapping[8]] * $package["price"];
                 if (!$startNumber && $money<$rule->unit_price)$money = $rule->unit_price;

+ 2 - 1
app/Services/StationService.php

@@ -59,7 +59,7 @@ class StationService
     }
 
 
-    function broadcast($station_id, StationTask $stationTask){
+    function broadcast($station_id, ?StationTask $stationTask){
         if($stationTask)
             $json = $stationTask->toJson();
         else
@@ -70,6 +70,7 @@ class StationService
     }
 
     function broadcastBinMonitor($station_id, ?StationTask $stationTask){
+        if(!$stationTask)return;
         $this->instant($this->stationTaskService,'StationTaskService');
         if($stationTask['status']=='完成')
             $stationTask=$this->stationTaskService->getCurrent_shouldProcess_ByStationId($stationTask['station_id']);

+ 1 - 1
app/Services/StationTaskBatchService.php

@@ -157,7 +157,7 @@ class StationTaskBatchService
                 $retry_after_sec = config('task.batchTask.retry_after_sec');
                 LogService::log(__METHOD__, __FUNCTION__,
                     '任务波次没有执行完的,' . $retry_after_sec . '秒后准备重试:' . $stationTaskBatches_failed->toJson()
-                    . '调用堆栈:' . json_encode(array_slice(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS), 0, 3))
+                    . '调用堆栈r:' . json_encode(array_slice(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS), 0, 3))
                 );
                 LogService::log(__METHOD__,'runMany','波次任务分配6.9:'.json_encode($stationTaskBatches_failed));
                 sleep($retry_after_sec);

+ 4 - 0
app/Services/StationTaskMaterialBoxService.php

@@ -31,6 +31,8 @@ class StationTaskMaterialBoxService
     private $stationTaskBatchService;
     /** @var StationTaskCommodityService $stationTaskCommodityService */
     private $stationTaskCommodityService;
+    /** @var OrderCommodityService $orderCommodityService */
+    private $orderCommodityService;
     /** @var MaterialBoxService $materialBoxService */
     private $materialBoxService;
     public function __construct(){
@@ -69,9 +71,11 @@ class StationTaskMaterialBoxService
         $this->instant($this->stationTypeService,'StationTypeService');
         $this->instant($this->stationService,'StationService');
         $this->instant($this->stationTaskBatchService,'StationTaskBatchService');
+        $this->instant($this->orderCommodityService,'OrderCommodityService');
         $stationMaterialBoxes_toCreate=new Collection();
         $order_ids=data_get($batch['orders'],'*.id');
         $orderCommodities=OrderCommodity::query()->with('orderBin')->whereIn('order_id',$order_ids)->get();
+        $orderCommodities=$this->orderCommodityService->correctLocation_fromWMS($orderCommodities);
         if($orderCommodities->isEmpty())return $stationMaterialBoxes_toCreate;
         $stationType=$this->stationTypeService->getForMaterialBox_onBatchProcess();
         $stationTaskBatch=$this->stationTaskBatchService->get(['batch_id'=>$batch['id']])->first();

+ 6 - 4
app/Services/StoreService.php

@@ -325,9 +325,6 @@ class StoreService
         if (OwnerFeeDetail::query()->where("outer_table_name","stores")->where("outer_id",$store->id)->first())return false;
         $store->loadMissing(["storeItems","warehouse"]);
 
-        $amount = 0;
-        if ($store->storeItems)foreach ($store->storeItems as $item)$amount += $item->amount;
-        $this->setStoreAmount($store->owner_id,$amount);
         /** @var OwnerPriceOperationService $service */
         $service = app("OwnerPriceOperationService");
 
@@ -344,7 +341,12 @@ class StoreService
             "created_at" => date('Y-m-d H:i:s'),
             "outer_id" => $store->id,
             "outer_table_name" => "stores",
-        ])) return true;
+        ])){
+            $amount = 0;
+            if ($store->storeItems)foreach ($store->storeItems as $item)$amount += $item->amount;
+            $this->setStoreAmount($store->owner_id,$amount);
+            return true;
+        }
         return false;
     }
     public function createStoreRejected($asnHerders){

+ 2 - 2
config/api_logistic.php

@@ -106,6 +106,6 @@ return [
         'x-appKey' => 'c51c718eb899e9f706979',
         'appSecret' => '9f664e3ab08049874aa417720840161a',
     ],
-    'init_date' => '2021-04-07 23:59:59',
-    'days' => 2,
+    'init_date' => '2021-04-14 23:59:59',
+    'days' => 4,
 ];

+ 1 - 1
config/logging.php

@@ -9,7 +9,7 @@ return [
         'finishSave',
     ],
 
-    'expire_duration'=>'60', //天数,日志超过时长的就在服务中删除
+    'expire_duration'=>'20', //天数,日志超过时长的就在服务中删除
     /*
     |--------------------------------------------------------------------------
     | Default Log Channel

+ 13 - 0
database/factories/OrderIssueTypeFactory.php

@@ -0,0 +1,13 @@
+<?php
+
+/** @var Factory $factory */
+
+use App\OrderIssueType;
+use Faker\Generator as Faker;
+use Illuminate\Database\Eloquent\Factory;
+
+$factory->define(OrderIssueType::class, function (Faker $faker) {
+    return [
+        'name' => $faker->name,
+    ];
+});

+ 33 - 0
database/migrations/2021_04_06_155509_add_exception_message_to_order_packages_table.php

@@ -0,0 +1,33 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class AddExceptionMessageToOrderPackagesTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('order_packages', function (Blueprint $table) {
+            $table->string('exception_message', 191);
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('order_packages', function (Blueprint $table) {
+            //
+            $table->dropColumn('exception_message');
+        });
+    }
+}

+ 41 - 0
database/migrations/2021_04_07_155234_add_exception_type_order_packages_table.php

@@ -0,0 +1,41 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class AddExceptionTypeOrderPackagesTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('order_packages', function (Blueprint $table) {
+            //
+            $table->enum('exception_type', [
+                '疑似库内丢件',
+                '揽件异常',
+                '中转异常',
+                '疑似丢件',
+                '派件异常',
+                '其他',
+                '无',
+            ])->default('无');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('order_packages', function (Blueprint $table) {
+            $table->dropColumn('exception_type');
+        });
+    }
+}

+ 35 - 0
database/migrations/2021_04_09_141901_add_authority_to_rejected.php

@@ -0,0 +1,35 @@
+<?php
+
+use App\Authority;
+use Illuminate\Database\Migrations\Migration;
+
+class AddAuthorityToRejected extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        if(!Authority::query()->where('alias_name','退货管理-客户不可见')->exists()){
+            Authority::query()->create([
+                'name' => '退货管理-客户不可见',
+                'alias_name' => '退货管理-客户不可见',
+                'permission' => '禁止',
+            ]);
+        }
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        if(Authority::query()->where('alias_name','退货管理-客户不可见')->exists()){
+            Authority::query()->where('alias_name' ,'退货管理-客户不可见')->delete();
+        }
+    }
+}

+ 36 - 0
database/migrations/2021_04_12_144644_add_authority_update_order_packages_exception_type.php

@@ -0,0 +1,36 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class AddAuthorityUpdateOrderPackagesExceptionType extends Migration
+{
+
+    protected $authorities = [
+        "包裹管理-快递-异常类型-编辑",
+    ];
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        foreach ($this->authorities as $authority){
+            \App\Authority::query()->firstOrCreate(["name"=>$authority],["name"=>$authority,"alias_name"=>$authority]);
+        }
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        foreach ($this->authorities as $authority){
+            \App\Authority::query()->where('name', $authority)->delete();
+        }
+    }
+}

+ 36 - 0
database/migrations/2021_04_13_112852_add_authority_data_delivery.php

@@ -0,0 +1,36 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class AddAuthorityDataDelivery extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        $authorities = \App\Authority::query()->where("alias_name","like","%客户预约%")->get();
+        foreach ($authorities as $authority){
+            $name = str_replace("客户预约","入库预约",$authority->alias_name);
+            $authority->update(["name"=>$name,"alias_name"=>$name]);
+        }
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        $authorities = \App\Authority::query()->where("alias_name","like","%客户预约%")->get();
+        foreach ($authorities as $authority){
+            $name = str_replace("入库预约","客户预约",$authority->alias_name);
+            $authority->update(["name"=>$name,"alias_name"=>$name]);
+        }
+    }
+}

+ 30 - 0
database/migrations/2021_04_13_140044_add_authority_data_delivery_terminal.php

@@ -0,0 +1,30 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class AddAuthorityDataDeliveryTerminal extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        \App\Authority::query()->firstOrCreate(["name"=>"入库管理-入库预约-入库区终端"],["name"=>"入库管理-入库预约-入库区终端","alias_name"=>"入库管理-入库预约-入库区终端"]);
+        \App\Authority::query()->firstOrCreate(["name"=>"入库管理-入库预约-二维码"],["name"=>"入库管理-入库预约-入库区终端","alias_name"=>"入库管理-入库预约-二维码"]);
+        \App\Authority::query()->firstOrCreate(["name"=>"入库管理-入库预约-产能维护"],["name"=>"入库管理-入库预约-产能维护","alias_name"=>"入库管理-入库预约-产能维护"]);
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        \App\Authority::query()->whereIn("alias_name",["入库管理-入库预约-入库区终端","入库管理-入库预约-二维码","入库管理-入库预约-产能维护"])->delete();
+    }
+}

+ 3 - 6
public/t.php

@@ -1,9 +1,6 @@
 <?php
 
-$as = 'asdfsdf-234_1_2x';
-
-preg_match('/_(\d)$/',$as,$arr);
-var_dump(isset($arr[1]));
-var_dump(isset($arr[2]));
-var_dump($arr);
+$a=128;
+$a|=256;
+var_dump($a);
 

+ 324 - 9
resources/js/queryForm/header.js

@@ -9,7 +9,7 @@ window.Header = function getHeader(object) {
     let _restorationColumn = object.restorationColumn || 'id'; //恢复原数据基准字段
     let _is_restorationColumn_asc = object.is_restorationColumn_asc || false;    //恢复原数据基准字段的排序类型 true:asc false:desc
     let _before = object.before;//前置元素
-    let _name = object.name ? object.name+"." : "";//唯一名称 用于区别模块 本地存储
+    let _name = "header:"+(object.name ? object.name+"." : "");//唯一名称 用于区别模块 本地存储
     let _isForbidDrag = object.isForbidDrag;
 
     let sortType = {}; //排序类型
@@ -18,6 +18,12 @@ window.Header = function getHeader(object) {
     let moveTd = {}; //移动列
     let isNested = _targetDom.getElementsByTagName("table").length>0;
 
+    let setting = "setting-column";
+    let settingInfo = localStorage.getItem("settingInfo") ? JSON.parse(localStorage.getItem("settingInfo")) : {
+        isCopyWrap : true
+    };
+    let settingCheck = true;
+
     function getTargetChildNode(dom) { //递归获取input子节点
         if (!dom || dom.tagName==='INPUT')return dom;
         return getTargetChildNode(dom.firstElementChild);
@@ -37,7 +43,7 @@ window.Header = function getHeader(object) {
             if (be.class)th.className = be.class;
             tr.appendChild(th);
         });
-        _targetDom.insertBefore(tr, _targetDom.firstChild);
+        _targetDom.insertBefore(tr, _targetDom.firstElementChild);
     }
     function appendFloat(div,cla="") {
         div.style.overflowX = "hidden";
@@ -78,7 +84,7 @@ window.Header = function getHeader(object) {
                 while(trs[0] && trs[0].tagName !== 'TR')trs = trs[0].children;
                 if (trs[0]){
                     for (let j=0;j<trs.length;j++){
-                        trs[j].children[i].firstChild.style.width = wid+"px";
+                        trs[j].children[i].firstElementChild.style.width = wid+"px";
                         trs[j].children[i].style.minWidth = wid+"px";
                     }
                 }
@@ -90,7 +96,7 @@ window.Header = function getHeader(object) {
             tr.appendChild(th);
         }
         bindMove(tr);
-        if (_targetDom.firstChild)_targetDom.insertBefore(tr, _targetDom.firstChild);
+        if (_targetDom.firstElementChild)_targetDom.insertBefore(tr, _targetDom.firstElementChild);
         else _targetDom.appendChild(tr);
     }
 
@@ -243,7 +249,7 @@ window.Header = function getHeader(object) {
                 moveTd.dom.style.cursor = 'default';
                 moveTd.oldX = undefined;
                 setTimeout(function () {
-                    let column = _columns[(_isCheckAllBox && _targetDom.firstChild) ? moveTd.index-1 : moveTd.index];
+                    let column = _columns[(_isCheckAllBox && _targetDom.firstElementChild) ? moveTd.index-1 : moveTd.index];
                     if (column) localStorage.setItem(_name+column.name, moveTd.dom.offsetWidth);
                 });
             }
@@ -252,7 +258,7 @@ window.Header = function getHeader(object) {
             if (moveTd.oldX){
                 event.stopPropagation();
                 let diff = event.clientX-moveTd.oldX;
-                let newWidth = moveTd.dom.firstChild.offsetWidth+diff+"px";
+                let newWidth = moveTd.dom.firstElementChild.offsetWidth+diff+"px";
                 if (diff!==0){
                     let trs = _targetDom.getElementsByTagName("tr");
                     for (let j=(_before ? 1 : 0);j<trs.length;j++){
@@ -261,7 +267,7 @@ window.Header = function getHeader(object) {
                             while (table.tagName!=='TABLE') table = table.parentElement;
                             if (table.id!==object.el)continue;
                         }
-                        trs[j].children[moveTd.index].firstChild.style.width = newWidth;
+                        trs[j].children[moveTd.index].firstElementChild.style.width = newWidth;
                         trs[j].children[moveTd.index].style.minWidth = newWidth;
                     }
                     moveTd.oldX = event.clientX;
@@ -279,19 +285,328 @@ window.Header = function getHeader(object) {
             }
             let tds = trs[i].children;
             for (let j=0;j<tds.length;j++){
+                let count = tds[j].children.length;
                 let div = document.createElement("div");
                 div.style.overflowX = "hidden";
-                let count = tds[j].childNodes.length;
-                for (let k=0;k<count;k++){div.appendChild(tds[j].childNodes[0]);}
+                for (let k=0;k<count;k++){div.appendChild(tds[j].children[0]);}
                 tds[j].appendChild(div);
                 tds[j].className += " pl-2 pr-2";
             }
         }
     }
+    function showSetting(type) {
+        return function (){
+            let type2 = type === "setting-1" ? "setting-2" : "setting-1";
+            document.getElementById(type2).style.display = "";
+            document.getElementById(type).style.display = "none";
+        };
+    }
+    function _createSetting1() {
+        /*
+        * <div id="setting-1" onclick="tt()" style="position: fixed;bottom: 0;left: 0;background-color: #1b1e21;width: 50px;height: 50px;cursor: pointer;text-align: center;border-radius: 3px">
+            <h1><span class="fa fa-spin fa-gear" style="color: white;"></span></h1>
+        </div>
+        * */
+        let div = document.createElement("div");
+        div.id = "setting-1";
+        div.style.position = "fixed";
+        div.style.bottom = 0;
+        div.style.left = 0;
+        div.style.backgroundColor = "#1b1e21";
+        div.style.width = "50px";
+        div.style.height = "50px";
+        div.style.cursor = "pointer";
+        div.style.textAlign = "center";
+        div.style.borderRadius = "3px";
+        let h1 = document.createElement("h1");
+        let span = document.createElement("span");
+        span.className = "fa fa-gear";
+        span.style.color = "white";
+        div.onclick = showSetting("setting-1");
+        h1.appendChild(span);
+        div.appendChild(h1);
+        document.body.appendChild(div);
+    }
+    function _createSettingHeader(text,id) {
+        let div = document.createElement("div");
+        div.style.width = "5%";
+        div.style.display = "inline-block";
+        div.style.borderLeft = "1px solid #aaaaaa";
+        div.style.textAlign = "center";
+        div.style.cursor = "pointer";
+        div.innerText = text;
+        div.id = id;
+        div.onclick = function () {
+            if (event.target.id===setting)return;
+            let old = document.getElementById(setting);
+            old.style.backgroundColor = "";
+            old.style.color = "";
+            document.getElementById(setting+"-body").style.display = "none";
+            event.target.style.backgroundColor ="#3490dc";
+            event.target.style.color ="white";
+            document.getElementById(event.target.id+"-body").style.display = "";
+            setting = event.target.id;
+        };
+        return div;
+    }
+    function bindColumnEvent() {
+        return function(){
+            let storage = localStorage.getItem("column:"+object.name);
+            let arr = storage ? storage.split(',') : [];
+            localStorage.setItem("column:"+object.name,_exeHid(arr).toString());
+        };
+    }
+    function _exeHid(arr) {
+        let nodes = document.getElementById("setting-column-body").getElementsByTagName("input");
+        let show = [];
+        let hid = [];
+        let newArr = [];
+        for (let i=0;i<nodes.length;i++){
+            let value = nodes[i].value;
+            let index = nodes[i].dataset.index;
+            let checked = nodes[i].checked;
+            if (checked && arr.indexOf(value)!==-1) show.push(index);
+            if (!checked){
+                newArr.push(value);
+                if (arr.indexOf(value)===-1)hid.push(index);
+            }
+        }
+        let trs = _targetDom.getElementsByTagName("tr"); //所有行
+        let total = trs[_before ? 1 : 0].children.length; //最大列
+        for (let i=0;i<trs.length;i++){
+            if (isNested){ //排除表格嵌套
+                let table = trs[i].parentElement;
+                while (table.tagName!=='TABLE') table = table.parentElement;
+                if (table.id!==object.el)continue;
+            }
+            if (total!==trs[i].children.length){ //存在合并行/列
+                let pointer = [];//建立一个指针数组 用于存储下标指向真实element
+                for (let j=0;j<trs[i].children.length;j++){
+                    if (trs[i].children[j] && trs[i].children[j].colSpan>1){
+                        for (let k=0;k<trs[i].children[j].colSpan;k++)pointer.push(j);
+                    }else pointer.push(j);
+                }
+                for (let j=0;j<show.length;j++)showOrHiddenDom(trs[i].children[pointer[show[j]]]);
+                for (let j=0;j<hid.length;j++)showOrHiddenDom(trs[i].children[pointer[hid[j]]],"hid");
+            }else {
+                for (let j=0;j<show.length;j++)showOrHiddenDom(trs[i].children[show[j]]);
+                for (let j=0;j<hid.length;j++)showOrHiddenDom(trs[i].children[hid[j]],"hid");
+            }
+        }
+        return newArr;
+    }
+    function showOrHiddenDom(dom,type="show") {
+        if (!dom)return;
+        if (type==="show"){
+            if (dom.colSpan>1)dom.colSpan++;
+            else dom.style.display = "";
+        }else{
+            if (dom.colSpan>1)dom.colSpan--;
+            else dom.style.display = "none";
+        }
+    }
+    function appendCheckboxList(div) {
+        let storage = localStorage.getItem("column:"+object.name);
+        let arr = storage ? storage.split(',') : [];
+        _columns.forEach(function (column,index) {
+            let key = "setting-column-"+column.name;
+            let label = document.createElement("label");
+            label.style.float = "left";
+            let input = document.createElement("input");
+            input.type="checkbox";
+            input.id=key;
+            input.className = "fixed-checkbox";
+            input.dataset.index = _isCheckAllBox ? index+1 : index;
+            input.value = column.name;
+            if (arr.indexOf(column.name)===-1)input.checked = true;
+            label.appendChild(input);
+            let la = document.createElement("label");
+            la.setAttribute("for",key);
+            label.appendChild(la);
+            label.appendChild(document.createTextNode(column.type ? column.title : column.value));
+            let prentLabel = document.createElement("label");
+            prentLabel.style.width = "10%";
+            prentLabel.appendChild(label);
+            div.appendChild(prentLabel);
+        });
+    }
+    function bindClearEvent(need) {
+        return function() {
+            for (let i = 0; i < localStorage.length; i++) {
+                let key = localStorage.key(i);
+                if (need === key.substring(0,need.length))localStorage.removeItem(key);
+            }
+        };
+    }
+    function bindCheckAllEvent() {
+        return function () {
+            settingCheck = !settingCheck;
+            let nodes = document.getElementById("setting-column-body").getElementsByTagName("input");
+            for (let i=0;i<nodes.length;i++){
+                if (nodes[i].checked!==settingCheck) nodes[i].checked=settingCheck;
+            }
+        }
+    }
+    function bindReverseEvent() {
+        return function () {
+            let nodes = document.getElementById("setting-column-body").getElementsByTagName("input");
+            for (let i=0;i<nodes.length;i++)nodes[i].checked=!nodes[i].checked;
+        }
+    }
+    function _createSetting2() {
+        /*
+        * <div id="setting-2"  style="background-color: white;position: fixed;bottom: 0;left: 0;width: 100%;display: none">
+            <div style="width: 100%;background-color: RGB(245,245,200);border-top: 1px solid #1b1e21">
+                <div style="width: 30px;display:inline-block;text-align: center"><span class="fa fa-gear w-100 h-100"></span></div>
+                <div style="width: 5%;display:inline-block;border-left: 1px solid #aaaaaa;text-align: center;cursor: pointer;background-color: #3490dc;color: white">显示列</div>
+                <div style="width: 5%;display:inline-block;border-left: 1px solid #aaaaaa;text-align: center;cursor: pointer">表头设置</div>
+                <b style="float: right;margin-right:10px;cursor: pointer;font-size: 18px">&times;</b>
+            </div>
+            <div style="width: 100%;min-height: 50px;">
+                <div style="margin: 10px 50px 20px 50px;width: 100%;" id="setting-data">
+                    <div id="setting-column">
+                        <label style="margin-right: 10px">
+                            测试<input type="checkbox" id="column-x" class="fixed-checkbox" value="1" onclick="test()">
+                            <label for="column-x"></label>
+                        </label>
+                        <div>
+                            <button class="btn btn-sm btn-success">保存</button>
+                        </div>
+                    </div>
+                    <div id="setting-header">
+                        清除本地列宽设置:
+                        <button type="button" class="btn btn-sm btn-outline-danger">清除全部</button>
+                        <button type="button" class="btn btn-sm btn-outline-danger">清除本页</button>
+                    </div>
+                </div>
+            </div>
+        </div>
+        * */
+        let div = document.createElement("div");
+        div.id = "setting-2";
+        div.style.backgroundColor = "white";
+        div.style.position = "fixed";
+        div.style.bottom = 0;
+        div.style.left = 0;
+        div.style.width = "100%";
+        div.style.display = "none";
+        let div1 = document.createElement("div");
+        div1.style.width = "100%";
+        div1.style.backgroundColor = "RGB(245,245,220)";
+        div1.style.borderTop = "1px solid #1b1e21";
+        let div11 = document.createElement("div");
+        div11.style.width = "30px";
+        div11.style.display = "inline-block";
+        div11.style.textAlign = "center";
+        let span = document.createElement("span");
+        span.className = "fa fa-gear";
+        span.style.cursor = "pointer";
+        span.onclick = showSetting("setting-2");
+        div11.appendChild(span);
+        div1.appendChild(div11);
+        let div12 = _createSettingHeader("显示列","setting-column");
+        div12.style.backgroundColor = "#3490dc";
+        div12.style.color = "white";
+        div1.appendChild(div12);
+        div1.appendChild(_createSettingHeader("表头设置","setting-header"));
+        let b = document.createElement("b");
+        b.style.float="right";
+        b.style.marginRight="10px";
+        b.style.cursor="pointer";
+        b.style.fontSize="18px";
+        b.innerHTML="&times;";
+        b.onclick = showSetting("setting-2");
+        div1.appendChild(b);
+        div.appendChild(div1);
+        //body
+        let div2 = document.createElement("div");
+        div2.style.width = "100%";
+        div2.style.minHeight = "50px";
+        div2.style.margin = "10px 50px 20px 50px";
+        let div21 = document.createElement("div");
+        div21.id = "setting-column-body";
+        appendCheckboxList(div21);
+        let btn = document.createElement("button");
+        btn.className = "btn btn-sm btn-success";
+        btn.type = "button";
+        btn.innerText="保存设置";
+        btn.onclick = bindColumnEvent();
+        let div211 = document.createElement("div");
+        div211.appendChild(btn);
+        let btn1 = document.createElement("button");
+        btn1.className = "btn btn-sm btn-outline-info ml-1";
+        btn1.type = "button";
+        btn1.innerText = "全选/取消";
+        btn1.onclick = bindCheckAllEvent();
+        div211.appendChild(btn1);
+        let btn2 = document.createElement("button");
+        btn2.className = "btn btn-sm btn-outline-info ml-1";
+        btn2.type = "button";
+        btn2.innerText = "反选";
+        btn2.onclick = bindReverseEvent();
+        div211.appendChild(btn2);
+        div21.appendChild(div211);
+        div2.appendChild(div21);
+        let div22 = document.createElement("div");
+        div22.id = "setting-header-body";
+        div22.style.display="none";
+        let div221 = document.createElement("div");
+        div221.className = "row";
+        let text = document.createElement("label");
+        text.innerText = "清除本地列宽设置:";
+        text.className = "text-right col-3";
+        div221.appendChild(text);
+        let btnA = document.createElement("button");
+        btnA.className = "btn btn-sm btn-outline-danger";
+        btnA.innerText = "清除全部";
+        btnA.onclick = bindClearEvent("header:");
+        div221.appendChild(btnA);
+        let btnB = document.createElement("button");
+        btnB.className = "ml-1 btn btn-sm btn-outline-danger";
+        btnB.innerText = "清除本页";
+        btnB.onclick = bindClearEvent(_name);
+        div221.appendChild(btnB);
+        let div222 = document.createElement("div");
+        div222.className = "row mt-2";
+        let text2 = document.createElement("label");
+        text2.innerText = "禁止复制换行:";
+        text2.className = "text-right col-3";
+        div222.appendChild(text2);
+        let input = document.createElement("input");
+        input.type = "checkbox";
+        input.className = "switch";
+        input.checked = settingInfo.isCopyNoWrap;
+        input.onchange = function(){
+            settingInfo.isCopyNoWrap = event.target.checked;
+            localStorage.setItem("settingInfo",JSON.stringify(settingInfo));
+        };
+        div222.appendChild(input);
+        div22.appendChild(div221);
+        div22.appendChild(div222);
+        div2.appendChild(div22);
+        div.appendChild(div2);
+        document.body.appendChild(div);
+    }
+    function createSetting() {
+        _createSetting1();
+        _createSetting2();
+    }
+    function bindGlobalEvent() {
+        document.oncopy = () => {
+            if (settingInfo.isCopyNoWrap){
+                event.preventDefault();
+                let content = window.getSelection().toString();
+                event.clipboardData.setData("text", content.replace(/[\n\r]/g,' '));
+            }
+        };
+    }
     //初始化
     this.init = function() {
         if (!_isForbidDrag)repaintDom();
         createHeader();
         if (_before)createHeaderBefore();
+        createSetting();
+        _exeHid([]);
+        bindGlobalEvent();
     };
 };

+ 42 - 0
resources/sass/text.scss

@@ -233,4 +233,46 @@
     position: -webkit-sticky;
     background-color: white;
     z-index: 50;
+}
+
+//td颜色
+.td-red td{
+   color: red !important;
+}
+
+.td-green td{
+    color: green !important;
+}
+
+//复选框
+.fixed-checkbox{
+    display: none;
+    +label{
+        background-color: white;
+        border-radius: 5px;
+        border: 1px solid #d3d3d3;
+        width: 20px;
+        height: 20px;
+        margin-bottom: 0;
+        display: inline-block;
+        text-align: center;
+        vertical-align: bottom;
+        line-height: 20px;
+        :hover {
+            cursor: pointer;
+            border: 1px solid #2783FB;
+        }
+    }
+}
+.fixed-checkbox:checked+label{
+    background: #2783FB;
+}
+.fixed-checkbox:checked+label:after {
+    content: "\2714";
+    color: white;
+}
+
+//tr选中效果
+.tr-select td{
+    background-color: rgb(170, 199, 234) !important;
 }

+ 14 - 14
resources/views/customer/project/area.blade.php

@@ -27,7 +27,7 @@
                     <td>
                         <label><input type="checkbox" :value="area.id"></label>
                     </td>
-                    <td>@{{ i+1 }}</td>
+                    <td><span>@{{ i+1 }}</span></td>
                     <td>
                         <span v-if="area.status=='编辑中'">
                             <button class="btn btn-sm btn-outline-info" @click="edit(area,i)">编辑</button>
@@ -36,17 +36,17 @@
                         <span v-if="area.status=='已完成'" class="text-success font-weight-bold">@{{ area.status }}</span>
                         <span v-if="area.status=='已审核'" class="text-primary font-weight-bold">@{{ area.status }}</span>
                     </td>
-                    <td style="min-width: 50px">@{{ area.userOwnerGroupName }}</td>
-                    <td style="min-width: 50px">@{{ area.customerName }}</td>
-                    <td>@{{ area.ownerName }}</td>
-                    <td>@{{ area.countingMonth }}</td>
-                    <td>@{{ area.updatedAt }}</td>
-                    <td>@{{ area.ownerStoragePriceModel }}</td>
-                    <td>@{{ area.unitName }}</td>
-                    <td>@{{ area.areaOnTray }}</td>
-                    <td>@{{ area.areaOnHalfTray }}</td>
-                    <td>@{{ area.areaOnFlat }}</td>
-                    <td>@{{ area.accountingArea }}</td>
+                    <td style="min-width: 50px"><span>@{{ area.userOwnerGroupName }}</span></td>
+                    <td style="min-width: 50px"><span>@{{ area.customerName }}</span></td>
+                    <td><span>@{{ area.ownerName }}</span></td>
+                    <td><span>@{{ area.countingMonth }}</span></td>
+                    <td><span>@{{ area.updatedAt }}</span></td>
+                    <td><span>@{{ area.ownerStoragePriceModel }}</span></td>
+                    <td><span>@{{ area.unitName }}</span></td>
+                    <td><span>@{{ area.areaOnTray }}</span></td>
+                    <td><span>@{{ area.areaOnHalfTray }}</span></td>
+                    <td><span>@{{ area.areaOnFlat }}</span></td>
+                    <td><span>@{{ area.accountingArea }}</span></td>
                 </tr>
             </table>
         </div>
@@ -143,7 +143,7 @@
 
 @section('lastScript')
     <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/header.js')}}"></script>{{--新版--}}
+    <script type="text/javascript" src="{{asset('js/queryForm/header.js')}}"></script>{{--新版2--}}
     <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
     <script>
         let vue = new Vue({
@@ -196,7 +196,7 @@
                 $('#container').removeClass('d-none');
                 let data=[
                     [
-                        {name:'owner_group_id',type:'select',tip:'项目小组',placeholder: '项目小组',data:this.ownerGroups},
+                        {name:'user_owner_group_id',type:'select',tip:'项目小组',placeholder: '项目小组',data:this.ownerGroups},
                         {name:'counting_month_start',type:'dateMonth',tip:'起始结算月'},
                         {name:'owner_id',type:'select_multiple_select',tip:['输入关键词快速定位下拉列表,回车确定','选择要显示的项目'],
                             placeholder:['项目','定位或多选项目'],data:this.owners},

+ 25 - 28
resources/views/customer/project/create.blade.php

@@ -201,10 +201,7 @@
                 searchItem:{},//搜索子项集
                 searchBase:5,//搜索基数
                 hover:{},//可悬浮列表
-                audit:{},
-                filterCustomers:[],
-                filterOwnerGroups:[],
-                filterUserGroups:[],
+                audit:{},//审核按钮
             },
             created(){
                 this.filterCustomers = JSON.parse(JSON.stringify(this.customers));
@@ -1837,34 +1834,34 @@
                     }
                 },
                 filterCustomer(e){
-                    let value = $(e.target).val();
-                    if (value===""){
-                        this.filterCustomers=JSON.parse(JSON.stringify(this.customers));
-                        return;
-                    }
-                    this.filterCustomers = this.customers.filter(function(item){
-                        return item.name.includes(value);
-                    })
+                    let value = e.target.value;
+                    if (!value)this.owner.customer_id = "";
+                    this.customers.some(customer=>{
+                        if (customer.name.indexOf(value)!==-1){
+                            this.owner.customer_id = customer.id;
+                            return true;
+                        }
+                    });
                 },
                 filterOwnerGroup(e){
-                    let value = $(e.target).val();
-                    if (value===""){
-                        this.filterOwnerGroups=JSON.parse(JSON.stringify(this.ownerGroups));
-                        return;
-                    }
-                    this.filterOwnerGroups = this.ownerGroups.filter(function(item){
-                        return item.name.includes(value);
-                    })
+                    let value = e.target.value;
+                    if (!value)this.owner.owner_group_id = "";
+                    this.ownerGroups.some(ownerGroup=>{
+                        if (ownerGroup.name.indexOf(value)!==-1){
+                            this.owner.owner_group_id = ownerGroup.id;
+                            return true;
+                        }
+                    });
                 },
                 filterUserGroup(e){
-                    let value = $(e.target).val();
-                    if (value===""){
-                        this.filterCustomers=JSON.parse(JSON.stringify(this.customers));
-                        return;
-                    }
-                    this.filterCustomers = this.customers.filter(function(item){
-                        return item.name.includes(value);
-                    })
+                    let value = e.target.value;
+                    if (!value)this.owner.user_workgroup_id = "";
+                    this.userGroups.some(userGroup=>{
+                        if (userGroup.name.indexOf(value)!==-1){
+                            this.owner.user_workgroup_id = userGroup.id;
+                            return true;
+                        }
+                    });
                 },
             },
         });

+ 11 - 11
resources/views/customer/project/index.blade.php

@@ -61,16 +61,16 @@
                     <td>
                         <label><input type="checkbox" :value="owner.id"></label>
                     </td>
-                    <td>@{{ i+1 }}</td>
-                    <td>@{{ owner.name }}</td>
-                    <td>@{{ owner.customer_name }}</td>
-                    <td>@{{ owner.user_owner_group_name }}</td>
-                    <td>@{{ owner.user_work_group_name }}</td>
-                    <td><b>@{{owner.relevance ? owner.relevance.length : 0}}</b>/5</td>
-                    <td>@{{ owner.created_at }}</td>
-                    <td>@{{ owner.customer_company_name }}</td>
-                    <td>@{{ ownerSubjection[owner.subjection] }}</td>
-                    <td>@{{ owner.is_activation }}</td>
+                    <td><span>@{{ i+1 }}</span></td>
+                    <td><span>@{{ owner.name }}</span></td>
+                    <td><span>@{{ owner.customer_name }}</span></td>
+                    <td><span>@{{ owner.user_owner_group_name }}</span></td>
+                    <td><span>@{{ owner.user_work_group_name }}</span></td>
+                    <td><span><b>@{{owner.relevance ? owner.relevance.length : 0}}</b>/5</span></td>
+                    <td><span>@{{ owner.created_at }}</span></td>
+                    <td><span>@{{ owner.customer_company_name }}</span></td>
+                    <td><span>@{{ ownerSubjection[owner.subjection] }}</span></td>
+                    <td><span>@{{ owner.is_activation }}</span></td>
                     <td>
                         <button class="btn btn-sm btn-info text-white" @click="showModal(owner)">各项计价</button>
                     </td>
@@ -88,7 +88,7 @@
 @endsection
 
 @section('lastScript')
-    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版--}}
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版2--}}
     <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
     <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
     <script>

+ 5 - 5
resources/views/customer/project/part/_two.blade.php

@@ -1,9 +1,9 @@
 <div class="row mt-3">
     <label for="customer_id" class="col-2 text-info">客户</label>
     <select id="customer_id" v-model="owner.customer_id" @change="selectOwner()" class="form-control form-control-sm col-4 mb-0" :class="errors.customer_id ? 'is-invalid' : ''">
-        <option v-for="customer in filterCustomers" :value="customer.id">@{{ customer.name }}</option>
+        <option v-for="customer in customers" :value="customer.id">@{{ customer.name }}</option>
     </select>
-    <label class="col-2"><input type="text" class="form-control form-control-sm rounded-pill" placeholder="输入关键字定位客户" @change="filterCustomer($event)"></label>
+    <label class="col-2"><input type="text" class="form-control form-control-sm rounded-pill" placeholder="输入关键字定位客户" @input="filterCustomer($event)"></label>
     <span class="invalid-feedback mt-0 offset-2" role="alert" v-if="errors.customer_id">
         <strong>@{{ errors.customer_id[0] }}</strong>
     </span>
@@ -11,9 +11,9 @@
 <div class="row mt-3">
     <label for="owner_group_id" class="col-2 text-info">项目小组</label>
     <select id="owner_group_id" v-model="owner.owner_group_id" @change="selectGroup()" class="form-control form-control-sm col-4 mb-0" :class="errors.owner_group_id ? 'is-invalid' : ''" >
-        <option v-for="ownerGroup in filterOwnerGroups" :value="ownerGroup.id">@{{ ownerGroup.name }}</option>
+        <option v-for="ownerGroup in ownerGroups" :value="ownerGroup.id">@{{ ownerGroup.name }}</option>
     </select>
-    <label class="col-2"><input type="text" class="form-control form-control-sm rounded-pill" placeholder="输入关键字项目小组" @change="filterOwnerGroup($event)"></label>
+    <label class="col-2"><input type="text" class="form-control form-control-sm rounded-pill" placeholder="输入关键字项目小组" @input="filterOwnerGroup($event)"></label>
     <span class="invalid-feedback offset-2 mt-0" role="alert" v-if="errors.owner_group_id">
         <strong>@{{ errors.owner_group_id[0] }}</strong>
     </span>
@@ -30,7 +30,7 @@
 <div class="row mt-3">
     <label for="user_workgroup_id" class="col-2 text-info">仓库小组</label>
     <select id="user_workgroup_id" v-model="owner.user_workgroup_id" @change="selectGroup()" class="form-control form-control-sm col-4 mb-0" :class="errors.user_workgroup_id ? 'is-invalid' : ''" >
-        <option v-for="userGroup in filterUserGroups" :value="userGroup.id" v-if="userGroup.warehouse_id == owner.warehouse_id">@{{ userGroup.name }}</option>
+        <option v-for="userGroup in userGroups" :value="userGroup.id" v-if="userGroup.warehouse_id == owner.warehouse_id">@{{ userGroup.name }}</option>
     </select>
     <label class="col-2"><input type="text" class="form-control form-control-sm rounded-pill" placeholder="输入关键字项目小组" @change="filterUserGroup($event)"></label>
     <span class="invalid-feedback offset-2 mt-0" role="alert" v-if="errors.user_workgroup_id">

+ 9 - 9
resources/views/finance/billConfirmation.blade.php

@@ -23,13 +23,13 @@
                     <td>
                         <label><input type="checkbox" :value="bill.id"></label>
                     </td>
-                    <td>@{{ i+1 }}</td>
-                    <td>@{{ bill.ownerGroupName }}</td>
-                    <td>@{{ bill.customerName }}</td>
-                    <td>@{{ bill.ownerName }}</td>
-                    <td>@{{ bill.countingMonth }}</td>
-                    <td>@{{ bill.updatedAt }}</td>
-                    <td class="font-weight-bold">@{{ bill.initialFee }}</td>
+                    <td><span>@{{ i+1 }}</span></td>
+                    <td><span>@{{ bill.ownerGroupName }}</span></td>
+                    <td><span>@{{ bill.customerName }}</span></td>
+                    <td><span>@{{ bill.ownerName }}</span></td>
+                    <td><span>@{{ bill.countingMonth }}</span></td>
+                    <td><span>@{{ bill.updatedAt }}</span></td>
+                    <td class="font-weight-bold"><span>@{{ bill.initialFee }}</span></td>
                     <td>
                         <label><input :id="'confirmFee-'+bill.id" @click="thisIndex=i" :readonly="thisIndex==i ? false : true" type="number" min="0" class="form-control form-control-sm" :value="bill.confirmFee"></label>
                         <div v-if="thisIndex==i">
@@ -37,7 +37,7 @@
                             <button class="btn btn-sm btn-danger" @click="thisIndex='-1'">取消</button>
                         </div>
                     </td>
-                    <td>@{{ bill.difference }}</td>
+                    <td><span>@{{ bill.difference }}</span></td>
                     <td>
                         <button class="btn btn-sm btn-outline-success" v-if="bill.confirmed == '否'" @click="billConfirm(bill)">确认</button>
                         <label v-else class="text-success">已确认</label>
@@ -49,7 +49,7 @@
 @stop
 
 @section("lastScript")
-    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版--}}
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版2--}}
     <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
     <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
     <script>

+ 22 - 22
resources/views/finance/instantBill.blade.php

@@ -42,36 +42,36 @@
                     <td :rowspan="bill.rowspan">
                         <label><input type="checkbox" :value="bill.id"></label>
                     </td>
-                    <td :rowspan="bill.rowspan">@{{ i+1 }}</td>
-                    <td :rowspan="bill.rowspan">@{{ bill.customerName }}</td>
-                    <td :rowspan="bill.rowspan">@{{ bill.ownerName }}</td>
-                    <td :rowspan="bill.rowspan">@{{ bill.workedAt }}</td>
+                    <td :rowspan="bill.rowspan"><span>@{{ i+1 }}</span></td>
+                    <td :rowspan="bill.rowspan"><span>@{{ bill.customerName }}</span></td>
+                    <td :rowspan="bill.rowspan"><span>@{{ bill.ownerName }}</span></td>
+                    <td :rowspan="bill.rowspan"><span>@{{ bill.workedAt }}</span></td>
                     <td :rowspan="bill.rowspan">
-                        <label v-if="bill.type == '增值服务'">服务<span class="badge badge-primary">@{{ bill.methodName }}</span></label>
+                        <label v-if="bill.type == '增值服务'">服务<span class="badge badge-primary"><span>@{{ bill.methodName }}</span></span></label>
                         <label v-else>@{{ bill.type }}</label>
                     </td>
-                    <td :rowspan="bill.rowspan">@{{ bill.shopName }}</td>
-                    <td :rowspan="bill.rowspan">@{{ bill.operationBill }}</td>
-                    <td :rowspan="bill.rowspan">@{{ bill.consigneeName }}</td>
-                    <td :rowspan="bill.rowspan">@{{ bill.consigneePhone }}</td>
-                    <td>@{{ bill.commodityAmount }}</td>
+                    <td :rowspan="bill.rowspan"><span>@{{ bill.shopName }}</span></td>
+                    <td :rowspan="bill.rowspan"><span>@{{ bill.operationBill }}</span></td>
+                    <td :rowspan="bill.rowspan"><span>@{{ bill.consigneeName }}</span></td>
+                    <td :rowspan="bill.rowspan"><span>@{{ bill.consigneePhone }}</span></td>
+                    <td><span>@{{ bill.commodityAmount }}</span></td>
                     <td>
                         <span v-if="bill.rowspan <= 1">@{{ bill.logisticBill }}</span>
                         <span v-else class="font-weight-bold text-secondary">分箱:</span>
                     </td>
-                    <td>@{{ bill.volume }}</td>
-                    <td>@{{ bill.weight }}</td>
-                    <td :rowspan="bill.rowspan">@{{ bill.logisticName }}</td>
-                    <td :rowspan="bill.rowspan">@{{ bill.workFee }}</td>
-                    <td>@{{ bill.logisticFee }}</td>
-                    <td :rowspan="bill.rowspan">@{{ bill.total }}</td>
+                    <td><span>@{{ bill.volume }}</span></td>
+                    <td><span>@{{ bill.weight }}</span></td>
+                    <td :rowspan="bill.rowspan"><span>@{{ bill.logisticName }}</span></td>
+                    <td :rowspan="bill.rowspan"><span>@{{ bill.workFee }}</span></td>
+                    <td><span>@{{ bill.logisticFee }}</span></td>
+                    <td :rowspan="bill.rowspan"><span>@{{ bill.total }}</span></td>
                 </tr>
                 <tr v-for="item in bill.items">
-                    <td>@{{ item.amount }}</td>
-                    <td>@{{ item.logistic_bill }}</td>
-                    <td>@{{ item.volume }}</td>
-                    <td>@{{ item.weight }}</td>
-                    <td>@{{ item.logistic_fee }}</td>
+                    <td><span>@{{ item.amount }}</span></td>
+                    <td><span>@{{ item.logistic_bill }}</span></td>
+                    <td><span>@{{ item.volume }}</span></td>
+                    <td><span>@{{ item.weight }}</span></td>
+                    <td><span>@{{ item.logistic_fee }}</span></td>
                 </tr>
                 </tbody>
             </table>
@@ -81,7 +81,7 @@
 @stop
 
 @section("lastScript")
-    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版--}}
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版2--}}
     <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
     <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
     <script>

+ 13 - 13
resources/views/inventory/statement/changeInventory.blade.php

@@ -19,18 +19,18 @@
             <td>
                 <input class="checkItem" type="checkbox" :value="oracleActTransactingLog">
             </td>
-            <td>@{{ i+1 }}</td>
-            <td class="text-primary">@{{ oracleActTransactingLog.货主 }}</td>
-            <td class="text-muted">@{{ oracleActTransactingLog.库位 }}</td>
-            <td class="text-muted">@{{ oracleActTransactingLog.产品编码 }}</td>
-            <td class="text-muted">@{{ oracleActTransactingLog.产品条码 }}</td>
-            <td :title="oracleActTransactingLog.商品名称" class="tooltipTarget" style="max-width: 200px;overflow:hidden">@{{ oracleActTransactingLog.商品名称 }}</td>
-            <td class="text-muted">@{{ oracleActTransactingLog.属性仓 }}</td>
-            <td class="text-muted">@{{ oracleActTransactingLog.质量状态 }}</td>
-            <td class="text-muted">@{{ oracleActTransactingLog.失效日期 }}</td>
-            <td class="text-muted">@{{ oracleActTransactingLog.批号 }}</td>
-            <td v-if="!isTotalStock">@{{ oracleActTransactingLog.移出数量 }}</td>
-            <td v-if="!isTotalStock">@{{ oracleActTransactingLog.移入数量 }}</td>
+            <td><span>@{{ i+1 }}</span></td>
+            <td class="text-primary"><span>@{{ oracleActTransactingLog.货主 }}</span></td>
+            <td class="text-muted"><span>@{{ oracleActTransactingLog.库位 }}</span></td>
+            <td class="text-muted"><span>@{{ oracleActTransactingLog.产品编码 }}</span></td>
+            <td class="text-muted"><span>@{{ oracleActTransactingLog.产品条码 }}</span></td>
+            <td :title="oracleActTransactingLog.商品名称" class="tooltipTarget" style="max-width: 200px;overflow:hidden"><span>@{{ oracleActTransactingLog.商品名称 }}</span></td>
+            <td class="text-muted"><span>@{{ oracleActTransactingLog.属性仓 }}</span></td>
+            <td class="text-muted"><span>@{{ oracleActTransactingLog.质量状态 }}</span></td>
+            <td class="text-muted"><span>@{{ oracleActTransactingLog.失效日期 }}</span></td>
+            <td class="text-muted"><span>@{{ oracleActTransactingLog.批号 }}</span></td>
+            <td v-if="!isTotalStock"><span>@{{ oracleActTransactingLog.移出数量 }}</span></td>
+            <td v-if="!isTotalStock"><span>@{{ oracleActTransactingLog.移入数量 }}</span></td>
             <td><span v-if="oracleActTransactingLog.在库数量">@{{ oracleActTransactingLog.在库数量 }}</span><span v-else>0</span></td>
             <td><span v-if="oracleActTransactingLog.占用数量">@{{ oracleActTransactingLog.占用数量 }}</span><span v-else>0</span></td>
         </tr>
@@ -50,7 +50,7 @@
 @section('lastScript')
     <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
     <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
-    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版--}}
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版2--}}
     <script>
         let vue=new Vue({
             el:"#list",

+ 15 - 15
resources/views/inventory/statement/dailyLog.blade.php

@@ -43,13 +43,13 @@
             <table class="table table-sm text-nowrap table-striped table-bordered m-0 td-min-width-80" id="table">
                 <tr v-for="(inventoryDailyLog,i) in inventoryDailyLogs" @click="selectedColor(i,$event)">
                    <td>
-                       <input type="checkbox" :value="inventoryDailyLog.id">
+                       <label><input type="checkbox" :value="inventoryDailyLog.id"></label>
                    </td>
-                    <td>@{{ i+1 }}</td>
-                    <td>@{{ inventoryDailyLog.owner_name }}</td>
-                    <td>@{{ inventoryDailyLog.created_at }}</td>
-                    <td>@{{ inventoryDailyLog.commodity_name }}</td>
-                    <td>@{{ inventoryDailyLog.commodity_sku }}</td>
+                    <td><span>@{{ i+1 }}</span></td>
+                    <td><span>@{{ inventoryDailyLog.owner_name }}</span></td>
+                    <td><span>@{{ inventoryDailyLog.created_at }}</span></td>
+                    <td><span>@{{ inventoryDailyLog.commodity_name }}</span></td>
+                    <td><span>@{{ inventoryDailyLog.commodity_sku }}</span></td>
                     <td>
                         <span v-if="inventoryDailyLog.commodity_barcodes && inventoryDailyLog.commodity_barcodes.length>0">
                             <span v-if="inventoryDailyLog.commodity_barcodes.length==1">
@@ -60,14 +60,14 @@
                             </span>
                         </span>
                     </td>
-                    <td>@{{ inventoryDailyLog.depository_name }}</td>
-                    <td>@{{ inventoryDailyLog.amount }}</td>
-                    <td>@{{ inventoryDailyLog.commodity_length }}</td>
-                    <td>@{{ inventoryDailyLog.commodity_width }}</td>
-                    <td>@{{ inventoryDailyLog.commodity_height }}</td>
-                    <td>@{{ inventoryDailyLog.commodity_volumn }}</td>
-                    <td>@{{ inventoryDailyLog.volumn_occupied }}</td>
-                    <td>@{{ inventoryDailyLog.gross_weight }}</td>
+                    <td><span>@{{ inventoryDailyLog.depository_name }}</span></td>
+                    <td><span>@{{ inventoryDailyLog.amount }}</span></td>
+                    <td><span>@{{ inventoryDailyLog.commodity_length }}</span></td>
+                    <td><span>@{{ inventoryDailyLog.commodity_width }}</span></td>
+                    <td><span>@{{ inventoryDailyLog.commodity_height }}</span></td>
+                    <td><span>@{{ inventoryDailyLog.commodity_volumn }}</span></td>
+                    <td><span>@{{ inventoryDailyLog.volumn_occupied }}</span></td>
+                    <td><span>@{{ inventoryDailyLog.gross_weight }}</span></td>
                 </tr>
             </table>
             {{$inventoryDailyLogs->appends($param)->links()}}
@@ -78,7 +78,7 @@
 @section('lastScript')
     <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
     <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
-    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版--}}
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版2--}}
     <script>
         let vue = new Vue({
             el:"#container",

+ 12 - 31
resources/views/inventory/statement/inventoryCompare.blade.php

@@ -40,24 +40,6 @@
                                     </div>
                                 </div>
                             </div>
-
-{{--                            <div class="form-group row">--}}
-{{--                                <label for="sku" class="col-2 col-form-label text-right">选择货主</label>--}}
-{{--                                <div class="col-3">--}}
-{{--                                    <select name="owner_id" id="owner_id" class="form-control @error('owner_id') is-invalid @enderror">--}}
-{{--                                        <option value="">货主</option>--}}
-{{--                                        <option v-for="owner in fakeOwners" :value="owner.name">@{{ owner.value }}</option>--}}
-{{--                                    </select>--}}
-{{--                                    @error('owner_id')--}}
-{{--                                    <span class="invalid-feedback" role="alert">--}}
-{{--                                    <strong>{{ $message }}</strong>--}}
-{{--                                    </span>--}}
-{{--                                    @enderror--}}
-{{--                                </div>--}}
-{{--                                <div class="col-5">--}}
-{{--                                    <input placeholder="定位货主" id="ownerName" autocomplete="off" class="form-control" @change="定位货主($event)">--}}
-{{--                                </div>--}}
-{{--                            </div>--}}
                             <div class="form-group row">
                                 <div class="col-8 offset-2">
                                     <input type="submit" class="btn btn-success form-control" @click="submitFrom" value="执行导入">
@@ -92,19 +74,18 @@
                 <button class="btn btn-outline-info btn-sm form-control-sm  tooltipTarget" title="导入Excel生成库存对比" @click="importExcel">导入</button>
             </span>
         </div>
-    </span>
         <div class="card-body pt-1">
             <table class="table table-sm text-nowrap table-striped table-bordered m-0 td-min-width-80" id="table">
                 <tr v-for="(inventoryCompare,i) in inventoryCompares">
                    <td>
                        <input type="checkbox" :value="inventoryCompare.id">
                    </td>
-                    <td>@{{ i+1 }}</td>
-                    <td>@{{ inventoryCompare.owner_name }}</td>
-                    <td>@{{ inventoryCompare.mission_code }}</td>
-                    <td>@{{ inventoryCompare.created_at }}</td>
-                    <td>@{{ inventoryCompare.commodity_name }}</td>
-                    <td>@{{ inventoryCompare.commodity_sku }}</td>
+                    <td><span>@{{ i+1 }}</span></td>
+                    <td><span>@{{ inventoryCompare.owner_name }}</span></td>
+                    <td><span>@{{ inventoryCompare.mission_code }}</span></td>
+                    <td><span>@{{ inventoryCompare.created_at }}</span></td>
+                    <td><span>@{{ inventoryCompare.commodity_name }}</span></td>
+                    <td><span>@{{ inventoryCompare.commodity_sku }}</span></td>
                     <td>
                         <span v-if="inventoryCompare.commodity_barcodes && inventoryCompare.commodity_barcodes.length>0">
                             <span v-if="inventoryCompare.commodity_barcodes.length==1">
@@ -115,11 +96,11 @@
                             </span>
                         </span>
                     </td>
-                    <td>@{{ inventoryCompare.custom_location }}</td>
-                    <td>@{{ inventoryCompare.quality }}</td>
-                    <td>@{{ inventoryCompare.amount_in_sys }}</td>
-                    <td>@{{ inventoryCompare.amount_in_compare }}</td>
-                    <td>@{{ inventoryCompare.differ }}</td>
+                    <td><span>@{{ inventoryCompare.custom_location }}</span></td>
+                    <td><span>@{{ inventoryCompare.quality }}</span></td>
+                    <td><span>@{{ inventoryCompare.amount_in_sys }}</span></td>
+                    <td><span>@{{ inventoryCompare.amount_in_compare }}</span></td>
+                    <td><span>@{{ inventoryCompare.differ }}</span></td>
                 </tr>
             </table>
             <div class="text-info h5 btn btn">{{$inventoryCompares->count()}}/@{{ sum }}</div>
@@ -131,7 +112,7 @@
 @section('lastScript')
     <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
     <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
-    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版--}}
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版2--}}
     <script>
         let vue = new Vue({
             el:"#container",

+ 3 - 5
resources/views/inventory/stockInventory/inventoryMission.blade.php

@@ -311,8 +311,6 @@
                 </table>
             </div>
         </form>
-
-
         <div class="card-body pt-1">
             <table class="table table-sm table-striped d-none d-xl-block p-0 text-nowrap table-bordered td-min-width-80"
                    id="table" ref="boxPc">
@@ -330,8 +328,8 @@
                         <input type="checkbox" :value="inventoryMission">
                         <span :id="'lockLine'+(i+1)"></span>
                     </td>
-                    <td>@{{ i+1 }}</td>
-                    <td>@{{ inventoryMission.location }}</td>
+                    <td><span>@{{ i+1 }}</span></td>
+                    <td><span>@{{ inventoryMission.location }}</span></td>
                     <td v-if="inventoryMission.commodity"><span
                             v-if="inventoryMission.checked==='是'||inventoryMission.checked==='确认差异'||inventoryMission.checked==='跳过'||inventory.status==='复盘中'||listMode">@{{ inventoryMission.commodity.name }}</span>
                     </td>
@@ -583,7 +581,7 @@
 
 @section('lastScript')
     <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
-    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版--}}
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版2--}}
     <script>
         let hideHeaderTitle = function () {
             let $listOnPad = $('#listOnPad');

+ 17 - 17
resources/views/inventory/stockInventory/mission.blade.php

@@ -57,26 +57,26 @@
                             <span v-else>未审核</span>
                         @endcan
                     </td>
-                    <td >@{{ i+1 }}</td>
-                    <td >@{{ inventory.status }}</td>
-                    <td >@{{ inventory.id }}</td>
-                    <td >@{{ inventory.created_at }}</td>
-                    <td >@{{ inventory.owner_name }}</td>
+                    <td ><span>@{{ i+1 }}</span></td>
+                    <td ><span>@{{ inventory.status }}</span></td>
+                    <td ><span>@{{ inventory.id }}</span></td>
+                    <td ><span>@{{ inventory.created_at }}</span></td>
+                    <td ><span>@{{ inventory.owner_name }}</span></td>
                     <td style="width: 200px;word-wrap: break-word">
                         <small>@{{ inventory.type }}</small>
                         <span v-if="inventory.remark" class="text-wrap"><small>@{{ inventory.remark }}</small></span>
                     </td>
-                    <td >@{{ inventory.start_at }}</td>
-                    <td class="text-muted">@{{ inventory.end_at }}</td>
-                    <td >@{{ inventory.total }}</td>
-                    <td >@{{ inventory.processed }}</td>
-                    <td >@{{ inventory.surplus }}</td>
-                    <td >@{{ inventory.ignored?inventory.ignored:0 }}</td>
-                    <td>@{{ inventory.difference }}</td>
-                    <td>@{{ inventory.returned }}</td>
-                    <td v-if="inventory.processed">@{{ inventory.processed }}/@{{ inventory.total }}</td>
-                    <td>@{{ inventory.auditor }}</td>
-                    <td class="text-muted">@{{ inventory.creator }}</td>
+                    <td ><span>@{{ inventory.start_at }}</span></td>
+                    <td class="text-muted"><span>@{{ inventory.end_at }}</span></td>
+                    <td ><span>@{{ inventory.total }}</span></td>
+                    <td ><span>@{{ inventory.processed }}</span></td>
+                    <td ><span>@{{ inventory.surplus }}</span></td>
+                    <td ><span>@{{ inventory.ignored?inventory.ignored:0 }}</span></td>
+                    <td><span>@{{ inventory.difference }}</span></td>
+                    <td><span>@{{ inventory.returned }}</span></td>
+                    <td v-if="inventory.processed"><span>@{{ inventory.processed }}/@{{ inventory.total }}</span></td>
+                    <td><span>@{{ inventory.auditor }}</span></td>
+                    <td class="text-muted"><span>@{{ inventory.creator }}</span></td>
                     <td>
                         <span v-if="inventory.status!='已完成'&&inventory.status!='已审核'" class="btn  btn-sm btn-outline-danger" @click="deleteStockInventoryMission(inventory.id)">删</span>
                     </td>
@@ -92,7 +92,7 @@
 @section('lastScript')
     <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
     <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
-    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版--}}
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版2--}}
     <script>
         let vue = new Vue({
             el: "#list",

+ 4 - 4
resources/views/maintenance/role/index.blade.php

@@ -15,8 +15,8 @@
                 @endif
                 <table class="table table-striped table-sm td-min-width-80" id="table">
                     <tr v-for="(role,i) in roles"  @click="selectTr===i+1?selectTr=0:selectTr=i+1" :class="selectTr===i+1?'focusing' : ''">
-                        <td class="text-muted">@{{role.id}}</td>
-                        <td>@{{role.name}}</td>
+                        <td class="text-muted"><span>@{{role.id}}</span></td>
+                        <td><span>@{{role.name}}</span></td>
                         <td>
                             <div style="max-height: 130px;overflow-y: scroll;border: solid 1px #ddd;" v-if="role.authorities.length>0">
                                 <ul class="list-group">
@@ -31,7 +31,7 @@
                                 </ul>
                             </div>
                         </td>
-                        <td class="text-muted">@{{role.created_at}}</td>
+                        <td class="text-muted"><span>@{{role.created_at}}</span></td>
                         <td>
                             @can('角色-编辑')
                             <button class="btn btn-sm btn-outline-primary" @click="edit(role.id)">改</button> @endcan
@@ -48,7 +48,7 @@
 
 @section('lastScript')
     <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
-    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版--}}
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版2--}}
     <script>
         new Vue({
             el:"#list",

+ 5 - 5
resources/views/maintenance/user/index.blade.php

@@ -16,8 +16,8 @@
                 <div id="list">
                     <table class="table table-striped table-sm td-min-width-80" id="table">
                         <tr v-for="(user,i) in users"  @click="selectTr===i+1?selectTr=0:selectTr=i+1" :class="selectTr===i+1?'focusing' : ''">
-                            <td class="text-muted">@{{user.id}}</td>
-                            <td>@{{user.name}}</td>
+                            <td class="text-muted"><span>@{{user.id}}</span></td>
+                            <td><span>@{{user.name}}</span></td>
                             <td>
                                 <span class="text-danger" v-if="user.isSuperAdmin">超级管理员</span>
                                 <ul v-if="user.roles.length>0" class="list-group">
@@ -35,8 +35,8 @@
                                     <li v-for="supplier in user.suppliers" style="list-style: none">@{{ supplier.name }}</li>
                                 </ul>
                             </td>
-                            <td>@{{user.email}}</td>
-                            <td class="text-muted">@{{user.created_at}}</td>
+                            <td><span>@{{user.email}}</span></td>
+                            <td class="text-muted"><span>@{{user.created_at}}</span></td>
                             <td>
                                 @can('用户-编辑')
                                 <button class="btn btn-sm btn-outline-primary" @click="edit(user.id)">改</button> @endcan
@@ -57,7 +57,7 @@
 
     </script>
     <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
-    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版--}}
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版2--}}
     <script>
         new Vue({
             el:"#list",

+ 24 - 28
resources/views/order/index/delivering.blade.php

@@ -8,7 +8,7 @@
             <div id="list" class="d-none">
                 <div id="form_div"></div>
                 <div class="ml-3 form-inline" id="btn">
-                    <span class="dropdown">
+                    <div class="dropdown">
                         <button type="button" class="btn btn-outline-dark btn-sm form-control-sm dropdown-toggle tooltipTarget"
                                 data-toggle="dropdown" title="导出所有页将会以搜索条件得到的筛选结果,将其全部记录(每一页)导出">
                             导出Excel
@@ -17,7 +17,7 @@
                             <a class="dropdown-item" @click="orderExport(false)" href="javascript:">导出勾选内容</a>
                             <a class="dropdown-item" @click="orderExport(true)" href="javascript:">导出所有页</a>
                         </div>
-                    </span>
+                    </div>
                     <div class="custom-control custom-checkbox ml-1">
                         <input type="checkbox" class="custom-control-input" id="customCheck" name="is_merge" v-model="is_merge">
                         <label class="custom-control-label" for="customCheck">导出是否格式化</label>
@@ -58,17 +58,15 @@
                             <input class="checkItem" type="checkbox" :value="order.orderno">
                         </td>
                         <td class="text-nowrap">
-                            @{{ i+1 }}<span v-if="orderIssueNos.includes(order.orderno)" class="badge badge-pill badge-danger">问题件</span>
-                        </td>
-                        <td class="text-dark font-weight-bold text-nowrap">
-                            @{{ order.orderno }}
+                            <span>@{{ i+1 }}</span><span v-if="orderIssueNos.includes(order.orderno)" class="badge badge-pill badge-danger">问题件</span>
                         </td>
-                        <td class="text-muted text-nowrap">@{{ order.ordercodename }}</td>
-                        <td class="text-nowrap">@{{ order.addtime }}</td>
-                        <td class="text-nowrap">@{{ order.issuepartyname }}</td>
-                        <td class="text-nowrap">@{{ order.customer_descr_c }}</td>
-                        <td class="text-nowrap">@{{ order.soreference1 }}</td>
-                        <td class="text-muted text-nowrap">@{{ order.carriername }}</td>
+                        <td class="text-dark font-weight-bold text-nowrap"><span>@{{ order.orderno }}</span></td>
+                        <td class="text-muted text-nowrap"><span>@{{ order.ordercodename }}</span></td>
+                        <td class="text-nowrap"><span>@{{ order.addtime }}</span></td>
+                        <td class="text-nowrap"><span>@{{ order.issuepartyname }}</span></td>
+                        <td class="text-nowrap"><span>@{{ order.customer_descr_c }}</span></td>
+                        <td class="text-nowrap"><span>@{{ order.soreference1 }}</span></td>
+                        <td class="text-muted text-nowrap"><span>@{{ order.carriername }}</span></td>
                         <td class="text-nowrap">
                             <div v-if="picktotraceidMap[order.orderno] && picktotraceidMap[order.orderno].length>1" class="text-center">
                                 <span v-for="picktotraceid in picktotraceidMap[order.orderno]" v-if="order.is_unfold">
@@ -87,14 +85,14 @@
                         <td class="text-muted text-wrap text-letter">
                             <div class="text-overflow-warp-200 w-100">@{{ order.c_tel2?order.c_tel2:order.c_tel1 }}</div>
                         </td>
-                        <td class="text-nowrap"> @{{ order.c_province }}</td>
-                        <td class="text-nowrap"> @{{ order.c_city }}</td>
+                        <td class="text-nowrap"><span> @{{ order.c_province }}</span></td>
+                        <td class="text-nowrap"><span> @{{ order.c_city }}</span></td>
                         <td class="text-nowrap"><div class="text-overflow-warp-200">@{{ order.c_district }}</div></td>
-                        <td class="text-muted text-wrap text-letter"><div class="text-overflow-warp-200" style="max-width: 100%">@{{ order.c_address1 }}</div></td>
-                        <td class="text-nowrap">@{{ order.waveno }}</td>
-                        <td class="text-nowrap"> @{{ order.warehouseid }}</td>
+                        <td class="text-muted text-wrap text-letter"><div class="text-overflow-warp-200"><span>@{{ order.c_address1 }}</span></div></td>
+                        <td class="text-nowrap"><span>@{{ order.waveno }}</span></td>
+                        <td class="text-nowrap"><span> @{{ order.warehouseid }}</span></td>
                         <td class="text-nowrap"><span v-if="order.edisendflag2=='Y'">是</span><span v-if="order.edisendflag2=='N'">否</span><span v-if="order.edisendflag2=='W'">错误</span></td>
-                        <td class="text-nowrap">@{{ order.edisendtime2 }}</td>
+                        <td class="text-nowrap"><span>@{{ order.edisendtime2 }}</span></td>
                         <td class="text-center" style="min-width: 900px">
                             <div :class="commodities[order.orderno]&&commodities[order.orderno].length==1 ? '' : 'up'" :id="'order-'+i">
                                 <div v-for="oracleDOCOrderDetail in commodities[order.orderno]" class="row">
@@ -114,11 +112,11 @@
                                 <b class="col-12" @click="unfold(i)" v-else>点击收起明细</b>
                             </div>
                         </td>
-                        <td>@{{ order.notes }}</td>
-                        <td>@{{ order.erpcancelflag }}</td>
-                        <td>@{{ order.picking_print_flag }}</td>
-                        <td>@{{ order.edisendflag }}</td>
-                        <td>@{{ order.ediremarks2}}</td>
+                        <td><span>@{{ order.notes }}</span></td>
+                        <td><span>@{{ order.erpcancelflag }}</span></td>
+                        <td><span>@{{ order.picking_print_flag }}</span></td>
+                        <td><span>@{{ order.edisendflag }}</span></td>
+                        <td><span>@{{ order.ediremarks2}}</span></td>
                         <td>
                             @can('订单管理-编辑')
                                 <button v-if="order.releasestatus!=='H'" @click="freeze(order.orderno,order.waveno)" class="btn btn-sm btn-outline-dark text-nowrap"
@@ -126,19 +124,17 @@
                                 <button v-else @click="thaw(order.orderno,false,order)" class="btn btn-sm btn-outline-danger text-nowrap"
                                         :disabled="!(order.ordercodename==='创建订单'||order.ordercodename==='分配完成'||order.ordercodename==='拣货完成'||order.ordercodename==='播种完成')">解冻</button>
                             @else
-                                @{{ order.releasestatus }}
+                                <span>@{{ order.releasestatus }}</span>
                             @endcan
                         </td>
                         <td>
                             @can('订单管理-编辑')
                                 <button v-if="order.sostatus=='40'||'30'"  @click="deAllocation(order.orderno,order.waveno)" class="btn btn-sm btn-outline-dark text-nowrap"
-                                        {{--                                        :disabled="!(order.codename_c==='分配完成'||order.codename_c==='部分分配')">取消分配</button>--}}
                                         :disabled="!(order.sostatus==='40'|| order.sostatus==='30')">取消分配</button>
                             @else
-                                @{{ order.sostatus }}
+                                <span>@{{ order.sostatus }}</span>
                             @endcan
                         </td>
-
                     </tr>
                 </table>
                 <button type="button" @click="pageUp()" :readonly="page>1?false:true" class="btn btn-sm " :class="page>1?'btn-outline-info':''">上一页</button>
@@ -231,7 +227,7 @@
 @section('lastScript')
     <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
     <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
-    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版--}}
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版2--}}
     <script>
         let vue=new Vue({
             el:"#list",

+ 12 - 12
resources/views/order/index/index.blade.php

@@ -10,17 +10,17 @@
             <button class="btn  btn-outline-info mb-1" data-toggle="modal" data-target="#importModal">导入</button>
             <table class="table table-striped table-hover td-min-width-80" id="table">
                 <tr v-for="(model,i) in models"  @click="selectTr===i+1?selectTr=0:selectTr=i+1" :class="selectTr===i+1?'focusing' : ''">
-                    <td>@{{ i+1 }}</td>
-                    <td>@{{ model.orderNumber }}</td>
-                    <td>@{{ model.barcode }}</td>
-                    <td>@{{ model.amount }}</td>
-                    <td>@{{ model.producedAt }}</td>
-                    <td>@{{ model.validAt }}</td>
-                    <td>@{{ model.batchNumber }}</td>
-                    <td>@{{ model.location }}</td>
-                    <td>@{{ model.region }}</td>
-                    <td>@{{ model.createdAt }}</td>
-                    <td>@{{ model.userName }}</td>
+                    <td><span>@{{ i+1 }}</span></td>
+                    <td><span>@{{ model.orderNumber }}</span></td>
+                    <td><span>@{{ model.barcode }}</span></td>
+                    <td><span>@{{ model.amount }}</span></td>
+                    <td><span>@{{ model.producedAt }}</span></td>
+                    <td><span>@{{ model.validAt }}</span></td>
+                    <td><span>@{{ model.batchNumber }}</span></td>
+                    <td><span>@{{ model.location }}</span></td>
+                    <td><span>@{{ model.region }}</span></td>
+                    <td><span>@{{ model.createdAt }}</span></td>
+                    <td><span>@{{ model.userName }}</span></td>
                 </tr>
             </table>
         </div>
@@ -30,7 +30,7 @@
 @endsection
 
 @section('lastScript')
-<script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版--}}
+<script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版2--}}
 <script>
     new Vue({
         el:"#container",

+ 7 - 7
resources/views/order/issue/workload.blade.php

@@ -21,14 +21,14 @@
             <table class="table table-sm table-striped table-bordered table-hover card-body mt-2 td-min-width-80" id="table">
                 <tr v-for="(workLoad,index) in workLoads" class="text-center">
                     <td><input type="checkbox" :value="workLoad.id"></td>
-                    <td>@{{ index+1 }}</td>
-                    <td>@{{ workLoad.id }}</td>
-                    <td>@{{ workLoad.created_at }}</td>
+                    <td><span>@{{ index+1 }}</span></td>
+                    <td><span>@{{ workLoad.id }}</span></td>
+                    <td><span>@{{ workLoad.created_at }}</span></td>
                     <td>
                         <template v-if="workLoad.endLog">@{{ workLoad.endLog.created_at }}</template>
                     </td>
-                    <td>@{{ workLoad.createUser }}</td>
-                    <td >@{{ workLoad.endUser }}</td>
+                    <td><span>@{{ workLoad.createUser }}</span></td>
+                    <td><span>@{{ workLoad.endUser }}</span></td>
                     <td>
                         <template v-if="workLoad.order.owner">@{{ workLoad.order.owner.name }}</template>
                     </td>
@@ -41,7 +41,7 @@
                             <b style="cursor:pointer;text-decoration: underline;color: #4aa0e6;" @click="unfold(workLoad.id)" v-if="!isBtn[workLoad.id] && workLoad.order.packages.length >2">点击展开</b>
                         </div>
                     </td>
-                    <td>@{{ workLoad.processingTime }}</td>
+                    <td><span>@{{ workLoad.processingTime }}</span></td>
                 </tr>
             </table>
             <button  class="btn btn-sm" :class="page.curPage === 1 ?'':'btn-outline-primary'"
@@ -60,7 +60,7 @@
 @section('lastScript')
     <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
     <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
-    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版--}}
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版2--}}
     <script>
         let workLoadVue = new Vue({
             el: "#workLoad_div",

+ 74 - 21
resources/views/package/logistic/index.blade.php

@@ -5,11 +5,13 @@
     <span id="nav2">
         @component('package.menu')@endcomponent
     </span>
-    <div id="list">
+    <div id="list" class="d-none">
         <div class="container-fluid">
             <div id="form_div"></div>
             <table class="table table-striped table-sm text-nowrap table-hover">
                 <tr>
+                    <th>异常类型</th>
+                    <th>序号</th>
                     <th>单号</th>
                     <th>状态</th>
                     <th>快递公司</th>
@@ -17,11 +19,22 @@
                     <th>发出日期</th>
                     <th>收货日期</th>
                     <th>称重日期</th>
-                    <th>异常标记</th>
                     <th>快递路由</th>
-                    <th>客服备注</th>
+                    <th>情况说明</th>
+                    <th>问题类别</th>
+                    <th>说明</th>
+                    <th>操作者</th>
+                    <th>时间</th>
                 </tr>
                 <tr v-for="(package,i) in packages" @click="selectTr===i+1?selectTr=0:selectTr=i+1" :class="selectTr===i+1?'focusing' : ''">
+                    <td>
+                        <select class="form-control-sm" v-model="package.exception_type" @change="package.showEditButton = true">
+                            <option :disabled="!exception_editable" v-for="(value,index) in exception_types" :value="value" :name="value" :key="index">@{{ value }}</option>
+                        </select>
+                        <button class="btn btn-info btn-sm text-white mr-1" @click="updateExceptionType(package)" v-if="package.showEditButton">
+                            更新状态</button>
+                    </td>
+                    <td>@{{ i+1 }}</td>
                     <td>@{{ package.logistic_number }}</td>
                     <td>@{{ package.status }}</td>
                     <td>@{{ package.order != null  ? package.order.logistic.name : '#' }}</td>
@@ -29,7 +42,6 @@
                     <td>@{{ package.sent_at }}</td>
                     <td>@{{ package.received_at }}</td>
                     <td>@{{ package.weighed_at }}</td>
-                    <td>@{{ package.exception }}</td>
                     <td>
                         <div v-if="package.transfer_status && package.transfer_status.length>0" class="text-overflow-warp-200 up" :id="'route-'+i">
                             <p v-for="route in package.transfer_status">
@@ -41,12 +53,16 @@
                         </div>
                         <div @click="showRoute(i)" v-if="package.transfer_status && package.transfer_status.length > 1">
                             <label class="text-center mt-0 p-0 cursor-pointer pull-left">
-                                <span class="fa" :class="package.isShowRoute ? 'fa-angle-double-down' : 'fa-angle-double-right'"></span>
+                                 <span class="fa" :class="package.isShowRoute ? 'fa-angle-double-down' : 'fa-angle-double-right'"></span>
                                 &nbsp;<span v-if="package.transfer_status && showList[i]">收起</span><span v-else>展开</span>&nbsp;@{{ package.transfer_status.length }} 条
                             </label>
                         </div>
                     </td>
-                    <td>@{{ package.remark }}</td>
+                    <td class="text-overflow-warp-200 " v-if="package.order && package.order.issue">@{{ package.order.issue.result_explain }}</td>
+                    <td class="text-overflow-warp-200 " v-if="package.order && package.order.issue && package.order.issue.issue_type">@{{ package.order.issue.issue_type.name }}</td>
+                    <td class="text-overflow-warp-200 " v-if="package.order && package.order.issue && package.order.issue.logs.length >0"><span v-for="log in package.order.issue.logs">@{{ log.content }}<br></span></td>
+                    <td class="text-overflow-warp-200 " v-if="package.order && package.order.issue && package.order.issue.logs.length >0"><span v-for="log in package.order.issue.logs">@{{ log.user.name }}<br></span></td>
+                    <td class="text-overflow-warp-200 " v-if="package.order && package.order.issue && package.order.issue.logs.length >0"><span v-for="log in package.order.issue.logs">@{{ log.created_at }}<br></span></td>
                 </tr>
             </table>
             <div class="text-info h5 btn btn">{{$orderPackages->count()}}/{{$orderPackages->total()}}</div>
@@ -80,12 +96,23 @@
                     },
                     @endforeach
                 ],
-                showList:{},
-                selectTr:0
+                showList: {},
+                selectTr: 0,
+                exception_types: [
+                    '疑似库内丢件',
+                    '揽件异常',
+                    '中转异常',
+                    '疑似丢件',
+                    '派件异常',
+                    '其他',
+                    '无',
+                ],
+                exception_editable: @can('包裹管理-快递-异常类型-编辑') true @else false  @endcan,
+                selectedExceptionType: '修改异常类型'
             },
-            created(){
-                $.each(this.packages,function (index,item){
-                    if (item.transfer_status!=null&&item.transfer_status.length>1) {
+            created() {
+                $.each(this.packages, function (index, item) {
+                    if (item.transfer_status != null && item.transfer_status.length > 1) {
                         item.transfer_status.sort(function (item1, item2) {
                             let date1 = new Date(item1.accept_time);
                             let date2 = new Date(item2.accept_time);
@@ -97,6 +124,7 @@
                 });
             },
             mounted() {
+                $('#list').removeClass('d-none');
                 let _this = this;
                 $(".up").slideUp();
                 let data = [
@@ -114,6 +142,9 @@
                             }, {name: '在途', value: '在途'}, {name: '在途异常', value: '在途异常'}, {
                                 name: '派送中',
                                 value: '派送中'
+                            }, {
+                                name: '已收件',
+                                value: '已收件'
                             }, {name: '派送异常', value: '派送异常'}, {name: '返回中', value: '返回中'}, {
                                 name: '返回异常',
                                 value: '返回异常'
@@ -159,6 +190,21 @@
                             placeholder: '是否有异常',
                             data: [{name: '是', value: '是'}, {name: '否', value: '否'}]
                         },
+                        {
+                            name: 'exception_type',
+                            type: 'select',
+                            tip: ['输入关键词快速定位下拉列表,回车确定', '选择要显示的状态'],
+                            placeholder: '异常类型',
+                            data: [
+                                {name: '疑似库内丢件', value: '疑似库内丢件'},
+                                {name: '揽件异常', value: '揽件异常'},
+                                {name: '中转异常', value: '中转异常'},
+                                {name: '疑似丢件', value: '疑似丢件'},
+                                {name: '派件异常', value: '派件异常'},
+                                {name: '其他', value: '其他'},
+                                {name: '无', value: '无'}
+                                ]
+                        },
                     ]
                 ];
                 _this.form = new query({
@@ -167,20 +213,27 @@
                 });
                 _this.form.init();
             },
-            methods:{
-                showRoute(id){
-                    if (this.showList[id]){
-                        this.$set(this.showList,id,false);
-                        $("#route-"+id).slideUp();
-                    }else{
-                        this.$set(this.showList,id,true);
-                        $("#route-"+id).slideDown();
+            methods: {
+                showRoute(id) {
+                    if (this.showList[id]) {
+                        this.$set(this.showList, id, false);
+                        $("#route-" + id).slideUp();
+                    } else {
+                        this.$set(this.showList, id, true);
+                        $("#route-" + id).slideDown();
                     }
                     this.$forceUpdate();
                 },
+                updateExceptionType(orderPackages) {
+                    let  url = '{{ url("package/logistic") }}' +'/'+ orderPackages.id;
+                    let data =  {id:orderPackages['id'],exception_type: orderPackages.exception_type}
+                    axios.patch(url, data).then((res)=>{
+                        window.tempTip.showSuccess('异常状态修改成功');
+                    });
+                }
             },
-            filters:{
-                toObjected:function(value){
+            filters: {
+                toObjected: function (value) {
                     return JSON.parse(value);
                 }
             },

+ 1 - 1
resources/views/package/menu.blade.php

@@ -8,7 +8,7 @@
                 </li>@endcan
             @can('称重管理-快递')
                 <li class="nav-item">
-                    <a target="package/logistic" class="nav-link" href="{{url('package/logistic')}}" :class="{active:isActive('logistic',2)}">快递</a>
+                    <a target="package/logistic" class="nav-link" href="{{url('package/logistic?is_exception=%25E6%2598%25AF&default_date=ture')}}" :class="{active:isActive('logistic',2)}">快递</a>
                 </li>@endcan
             @can('称重管理-查看异常')
             <li class="nav-item">

+ 17 - 17
resources/views/package/weigh/index.blade.php

@@ -27,22 +27,22 @@
                         <td>
                             <input class="checkItem" type="checkbox" :value="package.id">
                         </td>
-                        <td>@{{ i+1  }}</td>
-                        <td>@{{package.ownerName}}</td>
-                        <td>@{{package.logisticNumber}}</td>
-                        <td class="text-muted">@{{package.batchNumber}}</td>
-                        <td>@{{package.orderCode}}</td>
-                        <td class="text-muted">@{{package.logisticName}}</td>
-                        <td class="text-muted">@{{package.measuringMachineName}}</td>
-                        <td>@{{package.weight}}</td>
-                        <td>@{{package.length|upDigit}}<a v-if="package.length" class="text-primary">*</a>@{{package.width|upDigit}}<a class="text-primary" v-if="package.width">*</a>@{{package.height|upDigit}}</td>
-                        <td>@{{package.bulk|upCubic}}</td>
-                        <td>@{{package.paperBoxName}}</td>
-                        <td :class="[package.uploaded_to_wms==='是'?'text-success':'']">@{{package.status}}</td>
-                        <td class="text-muted">@{{package.batchRule}}</td>
-                        <td class="text-muted">@{{package.weighed_at}}</td>
-                        <td class="text-muted">@{{package.recipient}}</td>
-                        <td class="text-muted">@{{package.recipientMobile}}</td>
+                        <td><span>@{{ i+1  }}</span></td>
+                        <td><span>@{{package.ownerName}}</span></td>
+                        <td><span>@{{package.logisticNumber}}</span></td>
+                        <td class="text-muted"><span>@{{package.batchNumber}}</span></td>
+                        <td><span>@{{package.orderCode}}</span></td>
+                        <td class="text-muted"><span>@{{package.logisticName}}</span></td>
+                        <td class="text-muted"><span>@{{package.measuringMachineName}}</span></td>
+                        <td><span>@{{package.weight}}</span></td>
+                        <td><span>@{{package.length|upDigit}}</span><a v-if="package.length" class="text-primary">*</a>@{{package.width|upDigit}}<a class="text-primary" v-if="package.width">*</a>@{{package.height|upDigit}}</td>
+                        <td><span>@{{package.bulk|upCubic}}</span></td>
+                        <td><span>@{{package.paperBoxName}}</span></td>
+                        <td :class="[package.uploaded_to_wms==='是'?'text-success':'']"><span>@{{package.status}}</span></td>
+                        <td class="text-muted"><span>@{{package.batchRule}}</span></td>
+                        <td class="text-muted"><span>@{{package.weighed_at}}</span></td>
+                        <td class="text-muted"><span>@{{package.recipient}}</span></td>
+                        <td class="text-muted"><span>@{{package.recipientMobile}}</span></td>
                     </tr>
                 </table>
                 <div class="text-info h5 btn btn">{{$packages->count()}}/{{$packages->total()}}</div>
@@ -55,7 +55,7 @@
 @section('lastScript')
     <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
     <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
-    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版--}}
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版2--}}
     <script>
             @if(isset($request))
         let request={!! json_encode($request) !!};

+ 20 - 20
resources/views/package/weightExcepted/index.blade.php

@@ -49,27 +49,27 @@
                         <td>
                             <input class="checkItem" type="checkbox" :value="weightExcepted.id">
                         </td>
-                        <td>@{{ i+1 }}</td>
-                        <td>@{{weightExcepted.logisticNumber}}</td>
-                        <td>@{{weightExcepted.carrierName}}</td>
-                        <td>@{{weightExcepted.batchNumber}}</td>
-                        <td>@{{weightExcepted.batchRule}}</td>
+                        <td><span>@{{ i+1 }}</span></td>
+                        <td><span>@{{weightExcepted.logisticNumber}}</span></td>
+                        <td><span>@{{weightExcepted.carrierName}}</span></td>
+                        <td><span>@{{weightExcepted.batchNumber}}</span></td>
+                        <td><span>@{{weightExcepted.batchRule}}</span></td>
                         @if($view=="indexIssued")
-                            <td>@{{weightExcepted.ownerName}}</td>
-                            <td>@{{weightExcepted.deliveryNumber}}</td>
-                            <td class="text-muted">@{{weightExcepted.createdAt}}</td>
-                            <td>@{{weightExcepted.recipient}}</td>
-                            <td>@{{weightExcepted.recipientMobile}}</td>
+                            <td><span>@{{weightExcepted.ownerName}}</span></td>
+                            <td><span>@{{weightExcepted.deliveryNumber}}</span></td>
+                            <td class="text-muted"><span>@{{weightExcepted.createdAt}}</span></td>
+                            <td><span>@{{weightExcepted.recipient}}</span></td>
+                            <td><span>@{{weightExcepted.recipientMobile}}</span></td>
                         @else
-                            <td>@{{weightExcepted.measuringMachineName}}</td>
-                            <td class="text-muted">@{{weightExcepted.weighedAt}}</td>
-                            <td>@{{weightExcepted.weight}}</td>
-                            <td>@{{weightExcepted.length}}</td>
-                            <td>@{{weightExcepted.width}}</td>
-                            <td>@{{weightExcepted.height}}</td>
-                            <td>@{{weightExcepted.bulk}}</td>
-                            <td>@{{weightExcepted.paperBoxName}}</td>
-                            <td>@{{weightExcepted.status}}</td>
+                            <td><span>@{{weightExcepted.measuringMachineName}}</span></td>
+                            <td class="text-muted"><span>@{{weightExcepted.weighedAt}}</span></td>
+                            <td><span>@{{weightExcepted.weight}}</span></td>
+                            <td><span>@{{weightExcepted.length}}</span></td>
+                            <td><span>@{{weightExcepted.width}}</span></td>
+                            <td><span>@{{weightExcepted.height}}</span></td>
+                            <td><span>@{{weightExcepted.bulk}}</span></td>
+                            <td><span>@{{weightExcepted.paperBoxName}}</span></td>
+                            <td><span>@{{weightExcepted.status}}</span></td>
                         @endif
                     </tr>
                 </table>
@@ -82,7 +82,7 @@
 @endsection
 
 @section('lastScript')
-    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版--}}
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版2--}}
     <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
     <script>
         let vue = new Vue({

+ 1 - 1
resources/views/personnel/discharge/task/_table.blade.php

@@ -106,7 +106,7 @@
     </template>
     <template v-else>
         <tr>
-            <td colspan="13">
+            <td colspan="15">
                 <div class="alert alert-info text-lg-center">卸货任务数据为空</div>
             </td>
         </tr>

+ 16 - 16
resources/views/personnel/laborReport/index.blade.php

@@ -20,9 +20,9 @@
         <table class="table table-sm table-hover table-striped d-none d-xl-block p-0 text-nowrap table-bordered td-min-width-80" id="table">
             <tr v-for="(laborReport,i) in laborReports"  @click="selectedColor(laborReport.id)" :style="{'font-weight': laborReport.id==selectedStyle?'bold':''}" @click="selectTableRow(i,$event)">
                 <td>
-                    <input class="checkItem" type="checkbox" :value="laborReport.id"/>
+                    <label><input class="checkItem" type="checkbox" :value="laborReport.id"/></label>
                 </td>
-                <td>@{{ i+1  }}</td>
+                <td><span>@{{ i+1  }}</span></td>
                 <td >
                     @can('人事管理-门卫审核')
                         <span >
@@ -54,10 +54,10 @@
                     @endcan
                 </td>
                 <td><span v-if="laborReport.thisRoundRecordWorkingTime">@{{laborReport.thisRoundRecordWorkingTime}}</span></td>
-                <td>@{{laborReport.userWorkGroupName}}</td>
-                <td >@{{laborReport.name}}</td>
-                <td class="text-muted">@{{laborReport.mobile_phone}}</td>
-                <td class="text-muted">@{{laborReport.identity_number}}</td>
+                <td><span>@{{laborReport.userWorkGroupName}}</span></td>
+                <td><span>@{{laborReport.name}}</span></td>
+                <td class="text-muted"><span>@{{laborReport.mobile_phone}}</span></td>
+                <td class="text-muted"><span>@{{laborReport.identity_number}}</span></td>
                 @can('人事管理-临时工报表-修改劳务所')
                     <td class="text-muted">
                         <select  class="form-control-sm" name="labor_company" id="labor_company"  @change="updateLaborCompany(laborReport.labor_company_id,laborReport.enter_number)" v-model="laborReport.labor_company_id">
@@ -65,20 +65,20 @@
                         </select>
                     </td>
                 @else
-                    <td class="text-muted">@{{laborReport.labor_company}}</td>
+                    <td class="text-muted"><span>@{{laborReport.labor_company}}</span></td>
                 @endcan
-                <td class="text-muted">@{{laborReport.enter_at}}</td>
-                <td>@{{laborReport.checkInAt}}</td>
-                <td class="text-muted">@{{laborReport.checkOutAt}}</td>
-                <td class="text-muted">@{{laborReport.round_check_in_at}}</td>
-                <td class="text-muted">@{{laborReport.round_check_out_at}}</td>
-                <td >@{{ laborReport.exit_at }}</td>
-                <td class="text-muted">@{{laborReport.verifyAt}}</td>
+                <td class="text-muted"><span>@{{laborReport.enter_at}}</span></td>
+                <td><span>@{{laborReport.checkInAt}}</span></td>
+                <td class="text-muted"><span>@{{laborReport.checkOutAt}}</span></td>
+                <td class="text-muted"><span>@{{laborReport.round_check_in_at}}</span></td>
+                <td class="text-muted"><span>@{{laborReport.round_check_out_at}}</span></td>
+                <td><span>@{{ laborReport.exit_at }}</span></td>
+                <td class="text-muted"><span>@{{laborReport.verifyAt}}</span></td>
                 <td class="text-muted"><span v-if="laborReport.verifyPerson">@{{laborReport.verifyPerson}}</span></td>
                 <td class="text-muted"><span v-if="laborReport.relax_time">@{{laborReport.relax_time}}</span></td>
                 {{--                        <td class="text-muted"><span v-if="laborReport.onlineDuration">@{{laborReport.onlineDuration}}</span></td>--}}
                 <td class="text-muted"><span v-if="laborReport.thisRecordOnlineTime">@{{laborReport.thisRecordOnlineTime}}</span></td>
-                <td class="text-muted">@{{laborReport.enter_number}}</td>
+                <td class="text-muted"><span>@{{laborReport.enter_number}}</span></td>
                 {{--                        <td><span v-if="laborReport.workingDuration">@{{laborReport.workingDuration}}</span></td>--}}
                 <td>
                     @can('人事管理-临时工报表-编辑备注')
@@ -238,7 +238,7 @@
 @section('lastScript')
     <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
     <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
-    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版--}}
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版2--}}
     <script>
         let today=(new Date());
         function isTomorrow(){

+ 1 - 1
resources/views/personnel/menu.blade.php

@@ -6,7 +6,7 @@
                 <li class="nav-item">
                     <a target="personnel/laborReport" class="nav-link" href="{{url('personnel/laborReport')}}" :class="{active:isActive('laborReport',2)}">临时工报表</a>
                 </li> @endcan
-            @can('装卸队')
+            @can('人事管理-卸货')
                 <li class="nav-item">
                     <a target="personnel/discharge" class="nav-link" href="{{url('personnel/discharge/task/index')}}" :class="{active:isActive('discharge',2)}">卸货</a>
                 </li>@endcan

+ 35 - 36
resources/views/personnel/report.blade.php

@@ -36,51 +36,43 @@
         </div>
         <div>
             <table class="table table-sm table-striped table-hover td-min-width-80" id="table">
-                <tr class="text-center">
-                    <td colspan="2"></td>
-                    <td colspan="2" class="bg-light-purple">日期信息</td>
-                    <td :colspan="type==0 ? '8' : (type==1 ? '7' : '8')" class="bg-light-khaki">项目信息</td>
-                    <td :colspan="type==0 ? '3' : (type==1 ? '3' : '3')" class="bg-light-info">盘点信息</td>
-                    <td :colspan="type==0 ? '4' : (type==1 ? '2' : '3')" class="bg-light-cyanogen">账单信息</td>
-                </tr>
-                <tr class="text-nowrap" id="header"></tr>
                 <tr v-for="(report,i) in reports">
                     <td>
                         <label><input type="checkbox" :value="report.id"></label>
                     </td>
-                    <td>@{{ i+1 }}</td>
-                    <td>@{{ report.countingMonth }}</td>
-                    <td>@{{ report.ownerStorageDuration }}</td>
-                    <td v-if="type == 0">@{{ report.ownerGroupName }}</td>
+                    <td><span>@{{ i+1 }}</span></td>
+                    <td><span>@{{ report.countingMonth }}</span></td>
+                    <td><span>@{{ report.ownerStorageDuration }}</span></td>
+                    <td v-if="type == 0"><span>@{{ report.ownerGroupName }}</span></td>
                     <td v-if="type == 0">
                         <small v-for="user in report.ownerGroupUserList">@{{ user }}</small><br>
                     </td>
-                    <td v-if="type == 0">@{{ report.ownerName }}</td>
-                    <td v-if="type == 0">@{{ report.warehouseName }}</td>
-                    <td v-if="type == 0">@{{ report.userWorkGroupName }}</td>
-                    <td v-if="type == 0 || type == 1">@{{ report.sell }}</td>
-                    <td v-if="type == 1">@{{ report.ownerName }}</td>
-                    <td v-if="type == 1">@{{ report.warehouseName }}</td>
-                    <td v-if="type == 1 || type == 2">@{{ report.userWorkGroupName }}</td>
-                    <td v-if="type == 1">@{{ report.ownerGroupName }}</td>
+                    <td v-if="type == 0"><span>@{{ report.ownerName }}</span></td>
+                    <td v-if="type == 0"><span>@{{ report.warehouseName }}</span></td>
+                    <td v-if="type == 0"><span>@{{ report.userWorkGroupName }}</span></td>
+                    <td v-if="type == 0 || type == 1"><span>@{{ report.sell }}</span></td>
+                    <td v-if="type == 1"><span>@{{ report.ownerName }}</span></td>
+                    <td v-if="type == 1"><span>@{{ report.warehouseName }}</span></td>
+                    <td v-if="type == 1 || type == 2"><span>@{{ report.userWorkGroupName }}</span></td>
+                    <td v-if="type == 1"><span>@{{ report.ownerGroupName }}</span></td>
                     <td v-if="type == 2">
                         <small v-for="user in report.userWorkGroupUserList">@{{ user }}</small><br>
                     </td>
-                    <td v-if="type == 2">@{{ report.ownerName }}</td>
-                    <td v-if="type == 2">@{{ report.warehouseName }}</td>
-                    <td v-if="type == 2">@{{ report.principal }}</td>
-                    <td v-if="type == 2">@{{ report.sell }}</td>
-                    <td>@{{ report.ownerStatus }}</td>
-                    <td>@{{ report.ownerCreatedAt }}</td>
-                    <td>@{{ report.dailyAverageOrderAmount }}</td>
-                    <td>@{{ report.lastMonthCountingArea }}</td>
-                    <td>@{{ report.currentMonthCountingArea }}</td>
-                    <td v-if="type == 0">@{{ report.ownerBillReportInitialFee }}</td>
-                    <td v-if="type == 0 || type == 1">@{{ report.ownerBillReportConfirmFee }}</td>
-                    <td v-if="type == 2">@{{ report.ownerBillReportWorkFee }}</td>
-                    <td v-if="type == 2">@{{ report.ownerAreaReportAccountingArea }}</td>
-                    <td>@{{ report.ownerBillReportConfirmUpdatedAt }}</td>
-                    <td v-if="type == 0">@{{ report.timeOut }}</td>
+                    <td v-if="type == 2"><span>@{{ report.ownerName }}</span></td>
+                    <td v-if="type == 2"><span>@{{ report.warehouseName }}</span></td>
+                    <td v-if="type == 2"><span>@{{ report.principal }}</span></td>
+                    <td v-if="type == 2"><span>@{{ report.sell }}</span></td>
+                    <td><span>@{{ report.ownerStatus }}</span></td>
+                    <td><span>@{{ report.ownerCreatedAt }}</span></td>
+                    <td><span>@{{ report.dailyAverageOrderAmount }}</span></td>
+                    <td><span>@{{ report.lastMonthCountingArea }}</span></td>
+                    <td><span>@{{ report.currentMonthCountingArea }}</span></td>
+                    <td v-if="type == 0"><span>@{{ report.ownerBillReportInitialFee }}</span></td>
+                    <td v-if="type == 0 || type == 1"><span>@{{ report.ownerBillReportConfirmFee }}</span></td>
+                    <td v-if="type == 2"><span>@{{ report.ownerBillReportWorkFee }}</span></td>
+                    <td v-if="type == 2"><span>@{{ report.ownerAreaReportAccountingArea }}</span></td>
+                    <td><span>@{{ report.ownerBillReportConfirmUpdatedAt }}</span></td>
+                    <td v-if="type == 0"><span>@{{ report.timeOut }}</span></td>
                 </tr>
             </table>
             {{$reports->appends($params)->links()}}
@@ -90,7 +82,7 @@
 
 @section('lastScript')
     <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
-    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版--}}
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版2--}}
     <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
     <script>
         let vue = new Vue({
@@ -172,6 +164,13 @@
                     column: this._getRenderingHeader(),
                     data: this.reports,
                     fixedTop:($('#form_div').height())+2,
+                    before : [
+                        {colspan:2,value: '', class:"table-header-layer-1"},
+                        {colspan:2,value: '日期信息', class:"bg-light-purple"},
+                        {colspan:(this.type==1?7:8),value: '项目信息', class:"bg-light-khaki"},
+                        {colspan:3,value: '盘点信息', class:"bg-light-info"},
+                        {colspan:(this.type==0 ? '4' : (this.type==1 ? '2' : '3')),value: '账单信息', class:"bg-light-cyanogen"},
+                    ],
                 }).init();
             },
             methods : {

+ 2 - 2
resources/views/process/index.blade.php

@@ -271,7 +271,7 @@
                 </td>
                 <td v-if="processOne.id" :rowspan="processOne.is_multi_row?2:''">@{{ processOne.completed_amount }}</td>
                 <td v-if="processOne.id" :rowspan="processOne.is_multi_row?2:''">@{{ processOne.created_at }}</td>
-                <td colspan="5" style="margin:0;padding:0;position: relative;min-width: 900px">
+                <td style="margin:0;padding:0;position: relative;min-width: 900px">
                     <div class="w-100" v-if="processUnfold[processOne.code+processOne.id] || processOne.processesContents.length==1 ||
                     (processOne.is_multi_row &&  (processOne.processesContents.length)-(processFullSum[processOne.code])==1) || (!processOne.id &&  processFullSum[processOne.code]==1)">
                         <div class="row" v-for="processesContent in processOne.processesContents"
@@ -479,7 +479,7 @@
 @section('lastScript')
     <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
     <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
-    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版--}}
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版2--}}
     <script>
         let vue = new Vue({
             el:"#process",

+ 12 - 12
resources/views/process/statistic.blade.php

@@ -20,26 +20,26 @@
         </span>
         <table class="table table-striped text-nowrap table-hover td-min-width-80" style="background: #fff;" id="table">
             <tr v-for="(processStatistic,i) in processStatistics" :class="processStatistic.gross_profit_rate?'text-success':''">
-                <td><input class="checkItem" type="checkbox" :value="processStatistic.process_id"></td>
-                <td>@{{ i+1 }}</td>
+                <td><label><input class="checkItem" type="checkbox" :value="processStatistic.process_id"></label></td>
+                <td><span>@{{ i+1 }}</span></td>
                 <td><span v-if="processStatistic.process">@{{ processStatistic.process.code }}</span></td>
                 <td><span v-if="processStatistic.operatorLog && processStatistic.operatorLog.user">@{{ processStatistic.operatorLog.user.name }}</span></td>
                 <td><span v-if="processStatistic.process">@{{ processStatistic.process.owner_name }}</span></td>
-                <td>@{{ processStatistic.started_at }}</td>
-                <td>@{{ processStatistic.ended_at }}</td>
+                <td><span>@{{ processStatistic.started_at }}</span></td>
+                <td><span>@{{ processStatistic.ended_at }}</span></td>
                 <td><span v-if="processStatistic.process">@{{ processStatistic.process.created_at }}</span></td>
                 <td><span v-if="processStatistic.process">@{{ processStatistic.process.unit_price }}</span></td>
                 <td><span v-if="processStatistic.process">@{{ processStatistic.process.amount }}</span></td>
                 <td><span v-if="processStatistic.process">@{{ processStatistic.process.completed_amount }}</span></td>
-                <td>@{{ processStatistic.revenue }}</td>
-                <td>@{{ processStatistic.duration_days }}</td>
+                <td><span>@{{ processStatistic.revenue }}</span></td>
+                <td><span>@{{ processStatistic.duration_days }}</span></td>
                 <td><span v-if="processStatistic.process">@{{ processStatistic.duration_man_hours }}</span></td>
                 <td><span v-if="processStatistic.process">@{{ processStatistic.process.process_method_name }}</span></td>
-                <td>@{{ processStatistic.top_capacity }}</td>
-                <td>@{{ processStatistic.bottom_capacity }}</td>
-                <td>@{{ processStatistic.average_capacity }}</td>
-                <td>@{{ processStatistic.total_cost }}</td>
-                <td>@{{ processStatistic.gross_profit }}</td>
+                <td><span>@{{ processStatistic.top_capacity }}</span></td>
+                <td><span>@{{ processStatistic.bottom_capacity }}</span></td>
+                <td><span>@{{ processStatistic.average_capacity }}</span></td>
+                <td><span>@{{ processStatistic.total_cost }}</span></td>
+                <td><span>@{{ processStatistic.gross_profit }}</span></td>
                 <td><b v-if="processStatistic.gross_profit_rate">@{{ (processStatistic.gross_profit_rate)*100 | money}}%</b></td>
                 <td><span v-if="processStatistic.process">@{{ processStatistic.process.status }}</span></td>
                 <td><span v-if="processStatistic.process">@{{ processStatistic.process.remark }}</span></td>
@@ -53,7 +53,7 @@
 @section('lastScript')
     <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
     <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
-    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版--}}
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版2--}}
     <script>
         new Vue({
             el:"#statistics",

+ 12 - 12
resources/views/procurement/finance/checkBill.blade.php

@@ -22,17 +22,17 @@
                 <td>
                     <input class="checkItem" type="checkbox" :value="procurementCheckSheet.id">
                 </td>
-                <td class="">@{{ procurementCheckSheet.procurement_code }}</td>
-                <td class="text-muted">@{{ procurementCheckSheet.procurement_at }}</td>
-                <td class="text-muted">@{{ procurementCheckSheet.procurement_delivery_at }}</td>
-                <td class="text-muted">@{{ procurementCheckSheet.supplier_name }}</td>
-                <td class="tooltipTarget" style="max-width: 200px;overflow:hidden">@{{ procurementCheckSheet.material_code }}</td>
-                <td class="text-muted">@{{ procurementCheckSheet.material_name }}</td>
-                <td class="text-muted">@{{ procurementCheckSheet.procurement_quantity }}</td>
-                <td class="text-muted">@{{ procurementCheckSheet.amount }}</td>
-                <td class="text-muted">@{{ procurementCheckSheet.signer_name }}</td>
-                <td class="text-muted">@{{ procurementCheckSheet.signed_at }}</td>
-                <td class="text-muted">@{{ procurementCheckSheet.account_payable }}</td>
+                <td><span>@{{ procurementCheckSheet.procurement_code }}</span></td>
+                <td class="text-muted"><span>@{{ procurementCheckSheet.procurement_at }}</span></td>
+                <td class="text-muted"><span>@{{ procurementCheckSheet.procurement_delivery_at }}</span></td>
+                <td class="text-muted"><span>@{{ procurementCheckSheet.supplier_name }}</span></td>
+                <td class="tooltipTarget" style="max-width: 200px;overflow:hidden"><span>@{{ procurementCheckSheet.material_code }}</span></td>
+                <td class="text-muted"><span>@{{ procurementCheckSheet.material_name }}</span></td>
+                <td class="text-muted"><span>@{{ procurementCheckSheet.procurement_quantity }}</span></td>
+                <td class="text-muted"><span>@{{ procurementCheckSheet.amount }}</span></td>
+                <td class="text-muted"><span>@{{ procurementCheckSheet.signer_name }}</span></td>
+                <td class="text-muted"><span>@{{ procurementCheckSheet.signed_at }}</span></td>
+                <td class="text-muted"><span>@{{ procurementCheckSheet.account_payable }}</span></td>
                 <td><span>@{{ procurementCheckSheet.invoice_number }}</span></td>
                 <td><span>@{{ procurement_check_sheet_status[procurementCheckSheet.status] }}</span></td>
                 <td class="text-center">
@@ -51,7 +51,7 @@
 @section('lastScript')
     <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
     <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
-    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版--}}
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版2--}}
     <script>
         let vue = new Vue({
             el: '#list',

+ 6 - 6
resources/views/procurement/finance/monthlyBillReport.blade.php

@@ -22,11 +22,11 @@
                 <td>
                     <input class="checkItem" type="checkbox" :value="procurementTotalBill.id">
                 </td>
-                <td >@{{ procurementTotalBill.id }}</td>
-                <td class="text-muted">@{{ procurementTotalBill.counting_month }}</td>
-                <td class="text-muted">@{{ procurementTotalBill.created_at.substr(0,10) }}</td>
-                <td class="text-muted">@{{ procurementTotalBill.supplier_name }}</td>
-                <td>@{{ procurementTotalBill.total_payable }}</td>
+                <td><span>@{{ procurementTotalBill.id }}</span></td>
+                <td class="text-muted"><span>@{{ procurementTotalBill.counting_month }}</span></td>
+                <td class="text-muted"><span>@{{ procurementTotalBill.created_at.substr(0,10) }}</span></td>
+                <td class="text-muted"><span>@{{ procurementTotalBill.supplier_name }}</span></td>
+                <td><span>@{{ procurementTotalBill.total_payable }}</span></td>
                 <td><span>@{{ procurement_total_bill_status[procurementTotalBill.status] }}</span></td>
             </tr>
         </table>
@@ -37,7 +37,7 @@
 @section('lastScript')
     <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
     <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
-    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版--}}
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版2--}}
     <script>
         let vue = new Vue({
             el: '#list',

+ 12 - 12
resources/views/procurement/finance/procurementBill.blade.php

@@ -29,18 +29,18 @@
                 <td ><span v-if="procurement.owner_material.owner">@{{ procurement.owner_material.owner.name }}</span></td>
                 <td ><span v-if="procurement.owner_material.owner">@{{ procurement.owner_material.owner.customer?procurement.owner_material.owner.customer.company_name:'' }}</span></td>
                 <td ><span v-if="procurement.supplier">@{{ procurement.supplier.name }}</span></td>
-                <td class="tooltipTarget" style="max-width: 200px;overflow:hidden" v-if="procurement.owner_material.material">@{{ procurement.owner_material.material.code }}</td>
-                <td class="text-muted" v-if="procurement.owner_material.material">@{{ procurement.owner_material.material.name }}</td>
-                <td class="text-muted" v-if="procurement.owner_material">@{{ procurement.owner_material.size }}</td>
-                <td class="text-muted" v-if="procurement.owner_material">@{{ procurement.owner_material.special }}</td>
-                <td class="text-muted" v-if="procurement.owner_material">@{{ procurement.owner_material.specification }}</td>
-                <td>@{{ procurement.quantity }}</td>{{--采购数量--}}
-                <td>@{{ procurement.amount }}</td> {{--销售数量--}}
+                <td class="tooltipTarget" style="max-width: 200px;overflow:hidden" v-if="procurement.owner_material.material"><span>@{{ procurement.owner_material.material.code }}</span></td>
+                <td class="text-muted" v-if="procurement.owner_material.material"><span>@{{ procurement.owner_material.material.name }}</span></td>
+                <td class="text-muted" v-if="procurement.owner_material"><span>@{{ procurement.owner_material.size }}</span></td>
+                <td class="text-muted" v-if="procurement.owner_material"><span>@{{ procurement.owner_material.special }}</span></td>
+                <td class="text-muted" v-if="procurement.owner_material"><span>@{{ procurement.owner_material.specification }}</span></td>
+                <td><span>@{{ procurement.quantity }}</span></td>{{--采购数量--}}
+                <td><span>@{{ procurement.amount }}</span></td> {{--销售数量--}}
                 <td><span v-if="procurement.receive_amount">@{{ procurement.receive_amount }}</span></td>
-                <td>@{{ procurement.cost_price }}</td> {{--采购单价--}}
-                <td>@{{ procurement.unit_price }}</td>  {{--销售单价--}}
-                <td>@{{ procurement.amount*procurement.cost_price }}</td> {{--应收--}}
-                <td>@{{ procurement.quantity*procurement.unit_price }}</td> {{--应付--}}
+                <td><span>@{{ procurement.cost_price }}</span></td> {{--采购单价--}}
+                <td><span>@{{ procurement.unit_price }}</span></td>  {{--销售单价--}}
+                <td><span>@{{ procurement.amount*procurement.cost_price }}</span></td> {{--应收--}}
+                <td><span>@{{ procurement.quantity*procurement.unit_price }}</span></td> {{--应付--}}
                 <td><span>@{{ procurement_status[procurement.status] }}</span></td>
                 <td>
                     <span v-if="procurement.status<9">
@@ -60,7 +60,7 @@
 @section('lastScript')
     <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
     <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
-    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版--}}
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版2--}}
     <script>
         let vue = new Vue({
             el: '#list',

+ 6 - 6
resources/views/procurement/procurement/index.blade.php

@@ -66,15 +66,15 @@
                 <td>
                     <input class="checkItem" type="checkbox" :value="procurement.id">
                 </td>
-                <td class="">@{{ procurement.code }}</td>
+                <td><span>@{{ procurement.code }}</span></td>
                 <td><span v-if="procurement.owner_material.owner">@{{ procurement.owner_material.owner.name }}</span></td>
                 <td>@{{ procurement_type[procurement.type] }}</td>
                 <td><span v-if="procurement.owner_material.owner">@{{ procurement.owner_material.owner.customer? procurement.owner_material.owner.customer.company_name:'' }}</span></td>
                 <td class="tooltipTarget" style="max-width: 200px;overflow:hidden"><span v-if="procurement.owner_material.material">@{{ procurement.owner_material.material.code }}</span></td>
-                <td class=""><span v-if="procurement.owner_material.material">@{{ procurement.owner_material.material.name }}</span></td>
-                <td class=""><span v-if="procurement.owner_material">@{{ procurement.owner_material.size }}</span></td>
-                <td class=""><span v-if="procurement.owner_material">@{{ procurement.owner_material.special }}</span></td>
-                <td class=""><span v-if="procurement.owner_material">@{{ procurement.owner_material.specification }}</span></td>
+                <td><span v-if="procurement.owner_material.material">@{{ procurement.owner_material.material.name }}</span></td>
+                <td><span v-if="procurement.owner_material">@{{ procurement.owner_material.size }}</span></td>
+                <td><span v-if="procurement.owner_material">@{{ procurement.owner_material.special }}</span></td>
+                <td><span v-if="procurement.owner_material">@{{ procurement.owner_material.specification }}</span></td>
                 <td>
                     <div class="align-center text-center" >
                             <span v-if="procurement.owner_material.file">
@@ -118,7 +118,7 @@
 @section('lastScript')
     <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
     <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
-    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版--}}
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版2--}}
     <script>
         let vue = new Vue({
             el: '#list',

+ 8 - 8
resources/views/rejected/search/analyze.blade.php

@@ -27,25 +27,25 @@
                     <input type="checkbox" :value="rejectedBill.id_owner">
                 </td>
                 <td class="text-muted" style="opacity:0.7">
-                    @{{ index+1 }}
+                    <span>@{{ index+1 }}</span>
                 </td>
                 <td>
-                    @{{ rejectedBill.owner_name }}
+                    <span>@{{ rejectedBill.owner_name }}</span>
                 </td>
                 <td class="text-muted">
-                    @{{ rejectedBill.bounce_amount }}
+                    <span>@{{ rejectedBill.bounce_amount }}</span>
                 </td>
                 <td class="text-success font-weight-bold">
-                    @{{ rejectedBill.check_amount }}
+                    <span>@{{ rejectedBill.check_amount }}</span>
                 </td>
                 <td>
-                    @{{ rejectedBill.bounce_amount-rejectedBill.check_amount }}
+                    <span>@{{ rejectedBill.bounce_amount-rejectedBill.check_amount }}</span>
                 </td>
                 <td class="text-success font-weight-bold">
-                    @{{ rejectedBill.in_storage_count }}
+                    <span>@{{ rejectedBill.in_storage_count }}</span>
                 </td>
                 <td>
-                    @{{ rejectedBill.not_in_storage_count }}
+                    <span>@{{ rejectedBill.not_in_storage_count }}</span>
                 </td>
             </tr>
         </table>
@@ -55,7 +55,7 @@
 @section('lastScript')
     <script src="{{mix('js/queryForm/export.js')}}"></script>
     <script src="{{mix('js/queryForm/queryForm.js')}}"></script>
-    <script src="{{mix('js/queryForm/header.js')}}"></script>{{--新版--}}
+    <script src="{{mix('js/queryForm/header.js')}}"></script>{{--新版2--}}
     <script>
         let vue = new Vue({
             el:"#list",

+ 25 - 21
resources/views/rejected/search/general.blade.php

@@ -28,7 +28,8 @@
                 @can('退货管理-编辑')
                     <span class="btn btn-sm btn-outline-dark" @click="finishAll" style="cursor: pointer">完结</span>
                 @endcan
-                <span class="dropdown">
+                @cannot('退货管理-客户不可见')
+                    <span class="dropdown">
                     <button class="btn btn-outline-dark btn-sm form-control-sm dropdown-toggle tooltipTarget"
                             data-toggle="dropdown" title="将勾选记录的入库状态设定为是或否,仅对未完结状态的记录有效">
                         修改入库
@@ -41,6 +42,7 @@
                         <a class="dropdown-item" @click="setIsLoaded_batch(4)" href="javascript:">待确认</a>
                     </div>
                 </span>
+                @endcannot
 
                 @can('退货管理-编辑')
                     <a class="btn btn-sm btn-outline-dark" href="{{url('rejected/importRejectedNumber')}}" style="cursor: pointer">导入修改</a>
@@ -49,16 +51,18 @@
                 <table class="table table-striped table-sm table-bordered table-hover text-nowrap table-body td-min-width-80"  style="background: #fff;" id="table">
                     <tr v-for="(rejectedBill,i) in rejectedBills" :data-id="rejectedBill.id"  @click="selectTr===i+1?selectTr=0:selectTr=i+1" :class="selectTr===i+1?'focusing' : ''">
                         <td>
-                            <input type="checkbox" :value="rejectedBill.id"/>
+                            <label><input type="checkbox" :value="rejectedBill.id"/></label>
                         </td>
                         <td class="text-nowrap">
                             <span class="text-muted" style="opacity:0.7">@{{ i+1 }}</span> <span v-if="rejectedBill.order_issue_rejected_bill" class="badge badge-pill badge-danger">问题件</span>
                         </td>
                         <td class="text-muted">
-                            <span v-if="rejectedBill.is_checked==1" class="text-success">
-                                <span class="fa fa-check-square"></span> @{{ rejectedBill.checked_numbers }}
+                            <span>
+                                <span v-if="rejectedBill.is_checked==1" class="text-success">
+                                    <span class="fa fa-check-square"></span> @{{ rejectedBill.checked_numbers }}
+                                </span>
+                                <span v-else>未审核</span>
                             </span>
-                            <span v-else>未审核</span>
                         </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']">
@@ -67,18 +71,18 @@
                             </span>
                             <span v-else>@{{rejectedBill.is_loaded | yesNoIsLoaded}}</span>
                         </td>
-                        <td class="text-muted">@{{rejectedBill.created_at}}</td>
-                        <td><span v-if="rejectedBill.owner">@{{rejectedBill.owner.name}}</span></td>
-                        <td>@{{rejectedBill.logistic_number_return}}</td>
-                        <td class="text-muted"><span v-if="rejectedBill.logistic">@{{rejectedBill.logistic.name}}</span></td>
+                        <td class="text-muted"><span>@{{rejectedBill.created_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>@{{rejectedBill.order_number}}</td>
-                        <td class="text-muted text-overflow-replace-100" style="pointer-events:auto">@{{rejectedBill.sender}}</td>
-                        <td class="text-muted text-overflow-replace-200" style="pointer-events:auto">@{{rejectedBill.mobile_sender}}</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">@{{rejectedBill.fee_collected}}</td>@endcannot
-                        @can('退货管理-查询-客户定义-爱奇艺')<td class="text-muted">@{{rejectedBill.common_01}}</td>@endcan
-                        <td class="text-muted">@{{rejectedBill.common_02}}</td>
-                        <td class="text-muted">@{{rejectedBill.goods_amount}}</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
+                        <td class="text-muted"><span>@{{rejectedBill.goods_amount}}</span></td>
                         <td style="min-width: 900px">
                             <div class="w-100" :class="rejectedBill.items.length>1 ? 'up' : ''" :id="'rejected-'+rejectedBill.id">
                                 <div class="row" v-for="item in rejectedBill.items">
@@ -144,7 +148,7 @@
         ];
         let logistics=[
             @foreach($logistics as $logistic)
-            {!! $logistic !!},
+                {!! $logistic !!},
             @endforeach
         ];
         let qualityLabels=[
@@ -152,9 +156,9 @@
             {id:'{{$qualityLabel->id}}',name:'{{$qualityLabel->name}}'},
             @endforeach
         ];
-            @if(isset($paginateParams))
+        @if(isset($paginateParams))
         let paginateParams={!! json_encode($paginateParams) !!};
-            @endif
+        @endif
         let total='{{$rejectedBills->total()}}';
         let editUrl = "{{url('rejectedBill')}}/";
         let destroyUrl = "{{url('rejectedBill')}}/";
@@ -166,7 +170,7 @@
     </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>{{--新版--}}
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版2--}}
     <script>
         let vue = new Vue({
             el:"#list",
@@ -236,7 +240,7 @@
                     {name: 'logistic_number', value: '原单单号'},
                         @cannot('退货管理-到付费用'){name:'fee_collected',value: '到付费用',neglect: true},@endcannot
                         @can('退货管理-查询-客户定义-爱奇艺'){name:'common_01',value: '寄件方省'},@endcan
-                    {name:'common_02',value: '重量'},
+                        @cannot('退货管理-客户不可见'){name:'common_02',value: '重量'},@endcannot
                     {name:'goods_amount',value: '商品总数'},
                     {name:"goods",type:"multi",title:"商品信息",rows:[
                             {value:"商品条码",col:"2"},
@@ -250,7 +254,7 @@
                         ]},
                     {name:'remark',value: '退单备注'},
                     {name:'operator_name',value: '录入人'},
-                    @can('退货管理-编辑','退货管理-删除'){name:'remove',value: '操作', neglect: true},@endcan
+                        @can('退货管理-编辑','退货管理-删除'){name:'remove',value: '操作', neglect: true},@endcan
                 ];
                 new Header({
                     el: "table",

+ 3 - 1
resources/views/rejected/search/menu.blade.php

@@ -6,9 +6,11 @@
                     <a target="rejected/index/general" class="nav-link" href="{{url('rejected/index/general')}}" :class="{active:isActive('general',3)}">一般</a>
                 </li> @endcan
             @can('退货管理-查询')
+                @cannot('退货管理-客户不可见')
                 <li class="nav-item">
                     <a target="rejected/index/analyze" class="nav-link" href="{{url('rejected/index/analyze')}}" :class="{active:isActive('analyze',3)}">统计</a>
-                </li> @endcan
+                </li>@endcannot
+            @endcan
         </ul>
     </div>
 </div>

+ 9 - 9
resources/views/store/checkingReceive/mission.blade.php

@@ -44,14 +44,14 @@
 
     <table class="table table-striped table-sm text-nowrap table-hover mt-1 td-min-width-80" id="table">
         <tr v-for="(storeCheckingReceive,i) in storeCheckingReceives" @click="selectTr===i+1?selectTr=0:selectTr=i+1" :class="selectTr===i+1?'focusing' : ''">
-            <td>@{{ i+1 }}</td>
-            <td>@{{ storeCheckingReceive.id }}</td>
-            <td>@{{ storeCheckingReceive.owner_name }}</td>
-            <td class="font-weight-bold">@{{ storeCheckingReceive.status }}</td>
-            <td class="text-muted">@{{ storeCheckingReceive.is_receive_diff }}</td>
-            <td>@{{ storeCheckingReceive.asn }}</td>
-            <td>@{{ storeCheckingReceive.is_asn_diff }}</td>
-            <td>@{{ storeCheckingReceive.created_at }}</td>
+            <td><span>@{{ i+1 }}</span></td>
+            <td><span>@{{ storeCheckingReceive.id }}</span></td>
+            <td><span>@{{ storeCheckingReceive.owner_name }}</span></td>
+            <td class="font-weight-bold"><span>@{{ storeCheckingReceive.status }}</span></td>
+            <td class="text-muted"><span>@{{ storeCheckingReceive.is_receive_diff }}</span></td>
+            <td><span>@{{ storeCheckingReceive.asn }}</span></td>
+            <td><span>@{{ storeCheckingReceive.is_asn_diff }}</span></td>
+            <td><span>@{{ storeCheckingReceive.created_at }}</span></td>
             <td>
                 @can('入库管理-盘收一体-盘收')<a v-if="storeCheckingReceive.status != '已收货'" target="_blank" :href="'{{url('store/checkingReceive/mission')}}/'+storeCheckingReceive.id">
                     <button class="btn btn-sm btn-outline-dark">盘收</button>
@@ -75,7 +75,7 @@
 @stop
 
 @section('lastScript')
-    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版--}}
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版2--}}
     <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
     <script>
         let vue = new Vue({

+ 14 - 16
resources/views/store/checkingReceive/show.blade.php

@@ -96,15 +96,15 @@
         <div class="d-none d-sm-block">
             <table class="table table-striped table-sm text-nowrap table-hover mt-1 td-min-width-80" id="table">
                 <tr v-for="(storeCheckingReceiveItem,i) in storeCheckingReceiveItems" @click="selectedColor(i,$event)">
-                    <td>@{{ i+1 }}</td>
-                    <td>@{{ storeCheckingReceiveItem.bin_number }}</td>
-                    <td>@{{ storeCheckingReceiveItem.commodity_name }}</td>
+                    <td><span>@{{ i+1 }}</span></td>
+                    <td><span>@{{ storeCheckingReceiveItem.bin_number }}</span></td>
+                    <td><span>@{{ storeCheckingReceiveItem.commodity_name }}</span></td>
                     <td>
                     <span v-for="commodity_barcode in storeCheckingReceiveItem.commodity_barcodes">
                         <small>@{{ commodity_barcode.code }}</small><br>
                     </span>
                     </td>
-                    <td>@{{ storeCheckingReceiveItem.imported_amount }}</td>
+                    <td><span>@{{ storeCheckingReceiveItem.imported_amount }}</span></td>
                     <td @click="showInput(storeCheckingReceiveItem.id)" v-if="is_show">
                         <div class="form-inline">
                             <input @focus="showInput(storeCheckingReceiveItem.id)"  @blur="delFocus()" :id = "'counted_amount_'+storeCheckingReceiveItem.id" :value="storeCheckingReceiveItem.counted_amount"
@@ -115,17 +115,15 @@
                                 @click.stop="disabledItemId = ''">取消</button>
                         </div>
                     </td>
-                    <td v-if="!is_show">@{{ storeCheckingReceiveItem.counted_amount }}</td>
-                    <td>@{{ storeCheckingReceiveItem.asn_amount }}</td>
-                    <td>@{{ storeCheckingReceiveItem.imported_diff_amount }}</td>
-                    <td>@{{ storeCheckingReceiveItem.asn_diff_amount }}</td>
-                    <td>@{{ storeCheckingReceiveItem.produced_at }}</td>
-                    <td>@{{ storeCheckingReceiveItem.invalid_at }}</td>
-                    <td>@{{ storeCheckingReceiveItem.batch_code }}</td>
-                    <td>@{{ storeCheckingReceiveItem.unique_code }}</td>
-                    <td>
-{{--                        @can('入库管理-盘收一体-盘收-编辑')<button @click="destroyItem(storeCheckingReceiveItem,i)" class="btn btn-sm btn-outline-danger">删除</button>@endcan--}}
-                    </td>
+                    <td v-if="!is_show"><span>@{{ storeCheckingReceiveItem.counted_amount }}</span></td>
+                    <td><span>@{{ storeCheckingReceiveItem.asn_amount }}</span></td>
+                    <td><span>@{{ storeCheckingReceiveItem.imported_diff_amount }}</span></td>
+                    <td><span>@{{ storeCheckingReceiveItem.asn_diff_amount }}</span></td>
+                    <td><span>@{{ storeCheckingReceiveItem.produced_at }}</span></td>
+                    <td><span>@{{ storeCheckingReceiveItem.invalid_at }}</span></td>
+                    <td><span>@{{ storeCheckingReceiveItem.batch_code }}</span></td>
+                    <td><span>@{{ storeCheckingReceiveItem.unique_code }}</span></td>
+                    <td></td>
                 </tr>
             </table>
         </div>
@@ -209,7 +207,7 @@
 @stop
 
 @section('lastScript')
-<script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版--}}
+<script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版2--}}
 <script>
     new Vue({
         el:"#container",

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

@@ -1,5 +1,5 @@
 @extends('layouts.app')
-@section('title')客户预约-客户预约@endsection
+@section('title')入库预约@endsection
 
 @section('content')
     <span id="nav2">

+ 47 - 0
resources/views/store/deliveryAppointment/capacityMaintenance.blade.php

@@ -0,0 +1,47 @@
+@extends('layouts.app')
+@section('title')预约管理-入库预约@endsection
+
+@section('content')
+    <span id="nav2">
+    @component('store.menu')@endcomponent
+    @component('store.deliveryAppointment.menu')@endcomponent
+    </span>
+    <div class="card container" id="container">
+        <div class="card-body">
+            <div class="row">
+                <div class="col-12 font-weight-bold h1 text-center mb-4">产能信息</div>
+            </div>
+            <div class="row mt-2 offset-2" v-for="(warehouse,i) in warehouses">
+                <label class="col-2">@{{ warehouse.name }}</label>
+                <label class="col-5"><input :readonly="!warehouse.read" @blur="updateCapacity($event,warehouse)" @focus="readonlyInput(i)" class="form-control" type="number" step="0.01"
+                                            :value="warehouse.production_capacity"></label>
+            </div>
+        </div>
+    </div>
+@stop
+
+@section("lastScript")
+    <script>
+        new Vue({
+            el:"#container",
+            data:{
+                warehouses:[@foreach($warehouses as $warehouse)@json($warehouse),@endforeach],
+            },
+            methods:{
+                readonlyInput(index){
+                    this.$set(this.warehouses[index],"read",this.warehouses[index].read==='undefined' ? true : !this.warehouses[index].read);
+                },
+                updateCapacity(e,warehouse){
+                    let val = e.target.value;
+                    if (Number(val)!==Number(warehouse.production_capacity)){
+                        window.tempTip.postBasicRequest("{{url('store/deliveryAppointment/updateCapacity')}}",{id:warehouse.id,production_capacity:val},res=>{
+                            warehouse.read = false;
+                            warehouse.production_capacity = val;
+                            return "产能修改成功";
+                        });
+                    }
+                }
+            },
+        });
+    </script>
+@stop

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

@@ -5,7 +5,7 @@
     <meta name="viewport" content="width=device-width, initial-scale=1">
     <link rel="icon" href="{{asset('icon/faviconc.ico')}}" type="image/x-icon"/>
 
-    <title>填写预约码-客户预约</title>
+    <title>填写预约码-入库预约</title>
     <style>
         html{
             height: 100%;

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

@@ -5,7 +5,7 @@
     <meta name="viewport" content="width=device-width, initial-scale=1">
     <link rel="icon" href="{{asset('icon/faviconc.ico')}}" type="image/x-icon"/>
 
-    <title>送货成功-客户预约</title>
+    <title>送货成功-入库预约</title>
     <link href="{{ mix('css/app.css') }}" rel="stylesheet">
     <style>
         .font{

+ 113 - 4
resources/views/store/deliveryAppointment/exhibition.blade.php

@@ -7,7 +7,7 @@
     <!-- CSRF Token -->
     <meta name="csrf-token" content="{{ csrf_token() }}">
 
-    <title>入库区终端-客户预约</title>
+    <title>入库区终端-入库预约</title>
     <link href="{{ mix('css/app.css') }}" rel="stylesheet">
     <style>
         html{
@@ -81,6 +81,25 @@
             border: 2px solid #1b1e21;
             border-radius: 2px;
         }
+        .modal-body-div{
+            width: 30%;
+            display: inline-block;
+        }
+        .modal-body-item{
+            margin: 10px;
+            border: 2px solid #aaaaaa;
+            border-radius: 5px;
+            height:100px;
+            text-align: center;
+            display: flex;
+            align-items: center;
+            justify-content: center;
+            flex-direction: column
+        }
+        .modal-body-item-text{
+            margin-left:10%;
+            width: 80%;
+        }
     </style>
 </head>
 <body onload="initLoad()" class="h-100">
@@ -101,14 +120,45 @@
                 <hr class="font-weight-bold">
             </div>
             <div class="w-100 h-90">
-                <div class="row h-9 mt-1" 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 }}</div>
+                <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 }}
+                        <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>
+                    </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">
+                    <div class="col-5">
+                        <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 }}
+                                <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>
+                            </div>
+                            <div class="col-4 text-line">@{{ data.driver_name }}</div>
+                        </div>
+                    </div>
+                    <div class="col-7" 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 }}
+                                <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>
+                            </div>
+                            <div class="col-3">@{{ data.driver_name }}</div>
+                            <div class="col-3">@{{ data.driver_phone }}</div>
+                        </div>
+                    </div>
+                </div>
             </div>
             {{--<div class="row h-40 mt-0">
                 <div class="col-5">
@@ -124,13 +174,67 @@
                 </div>
             </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">
+                <div class="modal-content">
+                    <div class="modal-header">
+                        <div class="text-center font-weight-bold">选择仓库</div>
+                    </div>
+                    <div class="modal-body" id="modal-body"></div>
+                    <div class="modal-footer">
+                        <button class="btn btn-success" onclick="selectedWarehouse()"> 确 定 </button>
+                    </div>
+                </div>
+            </div>
+        </div>
     </div>
+
 </body>
 <script src="{{ mix('js/app.js') }}"></script>
 <script src="{{ mix('js/utilities/qrcode.js') }}"></script>
 <script type="text/javascript">
+    var warehouses = [@foreach($warehouses as $warehouse)@json($warehouse),@endforeach];
+    var warehouse = "{{$id}}";
+    var selected = "";
     //初始化询问
     function initLoad() {
+        if (!warehouse){
+            let dom = document.getElementById("modal-body");
+            for (let i=0;i<warehouses.length;i++){
+                let div = document.createElement("div");
+                div.className="modal-body-div";
+                let div1 = document.createElement("div");
+                div1.className="modal-body-item";
+                div1.style.cursor = "pointer";
+                div1.dataset.id = warehouses[i].id;
+                div1.id = "warehouse-"+warehouses[i].id;
+                if (i===0){
+                    div1.className += " box-shadow-dark";
+                    selected = "warehouse-"+warehouses[i].id;
+                }
+                div1.onclick = function(){
+                    let dom = event.target;
+                    while (!dom.id)dom = dom.parentElement;
+                    if (dom.id===selected)return;
+                    document.getElementById(selected).className = "modal-body-item";
+                    document.getElementById(dom.id).className = "modal-body-item box-shadow-dark";
+                    selected = dom.id;
+                };
+                let div2 = document.createElement("div");
+                div2.className="modal-body-item-text";
+                div2.innerText = warehouses[i].name;
+                div1.appendChild(div2);
+                div.appendChild(div1);
+                dom.appendChild(div);
+            }
+            $("#modal").modal('show');
+        }else alert("是否需要开启全屏?");
+    }
+    function selectedWarehouse() {
+        if (!selected) return;
+        warehouse = document.getElementById(selected).dataset.id;
+        history.pushState(null,null,window.location.href+"?warehouse="+warehouse);
+        $("#modal").modal('hide');
         alert("是否需要开启全屏?");
     }
     //重绘弹窗样式
@@ -158,6 +262,7 @@
         el:"#container",
         data:{
             list:[],
+            nextList:[],
             key:"",
             baseUrl:"{{url('store/deliveryAppointment/delivery?k=')}}",
             QrCode : null,
@@ -187,6 +292,7 @@
                 window.Echo.channel('{{config('database.redis.options.prefix')}}delivery').listen('.car',(res)=>{this._sortData(res.delivery)})
             },
             _sortData(res){
+                if (res.warehouse!=warehouse)return;
                 if (this.list.every((data,i)=>{
                     if (data.id === res.id){
                         //this.$set(this.list[i],"is_delivery",true);
@@ -211,6 +317,8 @@
                         "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,
                         "status"                : res.status,
                         /*"is_delivery"           : true,*/
                     };
@@ -237,7 +345,7 @@
             //初始化数据
             _initData(){
                 let url = "{{url('store/deliveryAppointment/getExhibitionList')}}";
-                window.tempTip.postBasicRequest(url,{},res=>{
+                window.tempTip.postBasicRequest(url,{warehouse:warehouse},res=>{
                     if (!res)return;
                     if (res.list){
                         /*let data = res.list;
@@ -255,6 +363,7 @@
                             }
                         });*/
                         this.list = res.list;
+                        this.nextList = res.nextDay;
                         this.count.notReached = res.notReached;
                         this.count.success = res.success;
                         this.count.work = res.work;

+ 3 - 3
resources/views/store/deliveryAppointment/list.blade.php

@@ -1,5 +1,5 @@
 @extends('layouts.app')
-@section('title')预约管理-客户预约@endsection
+@section('title')预约管理-入库预约@endsection
 
 @section('content')
     <span id="nav2">
@@ -95,7 +95,7 @@
                             <div class="col-2 text-secondary">@{{ info.cars[0].car ? info.cars[0].car.name : '' }}</div>
                             <div class="col-1 text-secondary">@{{ info.cars[0].driver_name }}</div>
                             <div class="col-3 text-secondary">@{{ info.cars[0].driver_phone }}</div>
-                            <div class="col-2">@can("入库管理-客户预约-预约管理-卸货完成")<button class="btn btn-sm btn-outline-success" @click="unloading(i,0)" v-if="info.cars[0].status==1">卸货完成</button>@endcan</div>
+                            <div class="col-2">@can("入库管理-入库预约-预约管理-卸货完成")<button class="btn btn-sm btn-outline-success" @click="unloading(i,0)" v-if="info.cars[0].status==1">卸货完成</button>@endcan</div>
                         </div>
                         <div class="up" :id="'item-'+info.id" v-show="info.cars.length>1">
                             <div class="row" v-for="(car,j) in info.cars" v-if="j!==0" style="min-width: 600px">
@@ -104,7 +104,7 @@
                                 <div class="col-2 text-secondary">@{{ car.car ? car.car.name : '' }}</div>
                                 <div class="col-1 text-secondary">@{{ car.driver_name }}</div>
                                 <div class="col-3 text-secondary">@{{ car.driver_phone }}</div>
-                                <div class="col-2">@can("入库管理-客户预约-预约管理-卸货完成")<button class="btn btn-sm btn-outline-success" @click="unloading(i,j)" v-if="car.status==1">卸货完成</button>@endcan</div>
+                                <div class="col-2">@can("入库管理-入库预约-预约管理-卸货完成")<button class="btn btn-sm btn-outline-success" @click="unloading(i,j)" v-if="car.status==1">卸货完成</button>@endcan</div>
                             </div>
                         </div>
                         <div class="text-center m-auto small cursor-pointer" v-if="info.cars.length>1" @click="upAll(info.id)">

+ 11 - 5
resources/views/store/deliveryAppointment/menu.blade.php

@@ -2,20 +2,26 @@
     <div class="container-fluid nav3">
         <div class="card menu-third" >
             <ul class="nav nav-pills">
-                @can('入库管理-客户预约-预约')
+                @can('入库管理-入库预约-预约')
                 <li class="nav-item">
-                    <a target="store/deliveryAppointment/appointment" class="nav-link" href="{{url('store/deliveryAppointment/appointment')}}" :class="{active:isActive('appointment',3)}">客户预约</a>
+                    <a target="store/deliveryAppointment/appointment" class="nav-link" href="{{url('store/deliveryAppointment/appointment')}}" :class="{active:isActive('appointment',3)}">入库预约</a>
                 </li> @endcan
-                @can('入库管理-客户预约-预约管理')
+                @can('入库管理-入库预约-预约管理')
                 <li class="nav-item">
                     <a target="store/deliveryAppointment/list" class="nav-link" href="{{url('store/deliveryAppointment/list')}}" :class="{active:isActive('list',3)}">预约管理</a>
                 </li> @endcan
+                @can('入库管理-入库预约-入库区终端')
                 <li class="nav-item">
                     <a target="_blank" class="nav-link" href="{{url('store/deliveryAppointment/exhibition')}}" :class="{active:isActive('exhibition',3)}">入库区终端</a>
-                </li>
+                </li>@endcan
+                @can('入库管理-入库预约-二维码')
                 <li class="nav-item">
                     <a target="_blank" class="nav-link" href="{{url('store/deliveryAppointment/qrcode')}}" :class="{active:isActive('qrcode',3)}">二维码</a>
-                </li>
+                </li>@endcan
+                @can('入库管理-入库预约-产能维护')
+                <li class="nav-item">
+                    <a target="_blank" class="nav-link" href="{{url('store/deliveryAppointment/capacityMaintenance')}}" :class="{active:isActive('capacityMaintenance',3)}">产能维护</a>
+                </li>@endcan
             </ul>
         </div>
     </div>

Some files were not shown because too many files changed in this diff