Prechádzať zdrojové kódy

Merge branch 'master' into yang

yuang 4 rokov pred
rodič
commit
a882e1e91d
63 zmenil súbory, kde vykonal 847 pridanie a 796 odobranie
  1. 2 8
      app/Console/Commands/EndReceivingTask.php
  2. 1 3
      app/Filters/OrderIssueFilters.php
  3. 1 3
      app/Filters/OrderTrackFilters.php
  4. 2 2
      app/Filters/WorkOrderFilters.php
  5. 1 1
      app/Http/Controllers/ControlPanelController.php
  6. 23 11
      app/Http/Controllers/DeliveryAppointmentController.php
  7. 0 5
      app/Http/Controllers/InventoryController.php
  8. 17 14
      app/Http/Controllers/OrderIssueController.php
  9. 1 3
      app/Http/Controllers/OrderTrackingOwnerController.php
  10. 3 1
      app/Http/Controllers/PackageLogisticController.php
  11. 4 4
      app/Http/Controllers/ProcurementController.php
  12. 5 0
      app/Http/Controllers/ReceiveRecordController.php
  13. 2 47
      app/Http/Controllers/RejectedBillController.php
  14. 11 4
      app/Http/Controllers/RejectedController.php
  15. 1 3
      app/Http/Controllers/ReplenishmentController.php
  16. 1 1
      app/Http/Controllers/SettlementBillExpressFeeReportController.php
  17. 4 2
      app/Http/Controllers/StoreController.php
  18. 14 1
      app/Http/Controllers/TestController.php
  19. 28 0
      app/Http/Controllers/UserController.php
  20. 2 8
      app/Http/Controllers/WorkCoefficientController.php
  21. 2 1
      app/Http/Controllers/WorkOrderController.php
  22. 2 1
      app/Interfaces/UserFilter.php
  23. 5 132
      app/OrderIssue.php
  24. 7 4
      app/Owner.php
  25. 1 2
      app/Process.php
  26. 9 1
      app/Services/AuthorityService.php
  27. 1 2
      app/Services/DeliveryAppointmentService.php
  28. 6 11
      app/Services/InventoryService.php
  29. 7 2
      app/Services/LogisticService.php
  30. 2 8
      app/Services/OrderIssueWorkLoadService.php
  31. 17 6
      app/Services/OrderRejectedBillRelationService.php
  32. 8 5
      app/Services/OrderRejectingStatusService.php
  33. 5 3
      app/Services/OrderService.php
  34. 1 2
      app/Services/OwnerMaterialService.php
  35. 33 26
      app/Services/OwnerService.php
  36. 1 2
      app/Services/PackageService.php
  37. 1 2
      app/Services/PackageStatisticsService.php
  38. 1 1
      app/Services/ReceivingTaskService.php
  39. 20 6
      app/Services/UserService.php
  40. 2 2
      app/Services/WaybillService.php
  41. 1 1
      app/Services/WorkOrderCommoditiesService.php
  42. 1 1
      app/Services/common/QueryService.php
  43. 1 1
      app/Traits/ModelSearchWay.php
  44. 1 1
      app/Traits/SettlementBillTrait.php
  45. 6 4
      app/User.php
  46. 2 1
      app/UserWorkgroup.php
  47. 4 3
      app/Waybill.php
  48. 1 1
      config/users.php
  49. 32 0
      database/migrations/2022_02_10_113047_user_workgroup_soft_delete.php
  50. 32 0
      database/migrations/2022_02_14_091112_create_owner_user_table.php
  51. 0 0
      resources/js/element/index.js
  52. 221 179
      resources/js/queryForm/header.js
  53. 0 0
      resources/sass/element/index.css
  54. 1 0
      resources/views/inventory/statement/changeInventory.blade.php
  55. 0 122
      resources/views/maintenance/role/index.blade.bak.php
  56. 38 0
      resources/views/maintenance/user/_allocationOwner.blade.php
  57. 57 1
      resources/views/maintenance/user/index.blade.php
  58. 182 136
      resources/views/order/workOrder/index.blade.php
  59. 2 2
      resources/views/store/receivingTasks/create.blade.php
  60. 4 3
      resources/views/store/receivingTasks/index.blade.php
  61. 1 0
      resources/views/transport/waybill/index.blade.php
  62. 2 0
      routes/web.php
  63. 4 0
      webpack.mix.js

+ 2 - 8
app/Console/Commands/EndReceivingTask.php

@@ -13,7 +13,7 @@ class EndReceivingTask extends Command
      *
      * @var string
      */
-    protected $signature = 'receivingTask:batch end';
+    protected $signature = 'receivingTask:batchEnd';
 
     /**
      * The console command description.
@@ -32,16 +32,10 @@ class EndReceivingTask extends Command
         parent::__construct();
     }
 
-    /**
-     * Execute the console command.
-     *
-     * @return int
-     */
-    public function handle(): int
+    public function handle()
     {
         /** @var ReceivingTaskService $service */
         $service = app(ReceivingTaskService::class);
         $service->overtimeToCompleteTask();
-        return 1;
     }
 }

+ 1 - 3
app/Filters/OrderIssueFilters.php

@@ -195,12 +195,10 @@ class OrderIssueFilters
             }
         }
 
-        $user = Auth::user();
-        $owner_ids = $user ? app('UserService')->getPermittingOwnerIds($user) : [];
         if (isset($this->params['owner'])) {
             $this->searchWay($this->getOrderQuery(), $this->params['owner'], 'orders.owner_id');
         } else {
-            $this->getOrderQuery()->whereIn('owner_id', $owner_ids);
+            $this->getOrderQuery()->whereIn('owner_id', app("OwnerService")->getQuery());
         }
 
     }

+ 1 - 3
app/Filters/OrderTrackFilters.php

@@ -62,9 +62,7 @@ class OrderTrackFilters
         if(isset($this->params['data']))
             $this->id(explode(',',$this->params['data']));
 
-        // 货主
-        $user = Auth::user();
-        $owner_ids = $user ? app(UserService::class)->getPermittingOwnerIds($user) : [];
+        $owner_ids = app("OwnerService")->getIdArr();
         if (isset($this->params['owner'])) {
             $ownerIds = explode(",", $this->params['owner']);
             $owner_ids = array_intersect($owner_ids, $ownerIds);

+ 2 - 2
app/Filters/WorkOrderFilters.php

@@ -100,7 +100,7 @@ class WorkOrderFilters
             $this->id(explode(',', $this->params['data']));
 
         if (Gate::allows('订单管理-工单处理-货主编辑') || Gate::allows('订单管理-工单处理-客服编辑')) {
-            $this->queryBuilder->whereIn('owner_id', app('UserService')->getPermittingOwnerIds(Auth::user()) ?? []);
+            $this->queryBuilder->whereIn('owner_id', app("OwnerService")->getQuery());
         }
 
         $this->afterFilter();
@@ -114,7 +114,7 @@ class WorkOrderFilters
 
         $logistic_ids = App('UserService')->getPermittingLogisticIds($user);
 
-        $owner_ids = app('UserService')->getPermittingOwnerIds($user);
+        $owner_ids = app("OwnerService")->getIdArr();
 
         $this->afterFilterLogistic($logistic_ids);
 

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

@@ -119,7 +119,7 @@ class ControlPanelController extends Controller
         $user = auth()->user();
         /** @var UserService $userService */
         $userService = app('UserService');
-        $permittingOwnerIds = $userService->getPermittingOwnerIds($user);
+        $permittingOwnerIds = app("OwnerService")->getIdArr();
         if (!$ownerIds) {
             return $permittingOwnerIds;
         }

+ 23 - 11
app/Http/Controllers/DeliveryAppointmentController.php

@@ -10,6 +10,8 @@ use App\Events\DeliveryAppointmentEvent;
 use App\Imports\AppointmentDetail;
 use App\Jobs\DeliveryAppointmentCheck;
 use App\Logistic;
+use App\OracleDOCASNHeader;
+use App\OracleDOCOrderHeader;
 use App\Store;
 use App\Warehouse;
 use Carbon\Carbon;
@@ -130,16 +132,24 @@ class DeliveryAppointmentController extends Controller
     }
 
     private function checkAndGetAsn($codes){
-        if ($codes){
-            $codes = array_filter(array_unique(preg_split('/[,, ]+/u', $codes)));
-            if (count($codes)>0){
-                $asnCount = Store::query()->whereIn("asn_code",$codes)->count();
-                $codes = count($codes)===$asnCount ? implode(",",$codes) : null;
-            }else{
-                $codes = null;
-            }
-        }
-        return $codes;
+        if(!$codes) return null;
+
+        $codes = array_filter(array_unique(preg_split('/[,, ]+/u', $codes)));
+        if(count($codes) == 0) return null;
+
+        $asnNos = array_filter($codes,function($item){return str_starts_with($item,'ASN');});   // asn号
+        $asnCount = Store::query()->whereIn("asn_code",$asnNos)->count();
+        if($asnCount!==count($asnNos)) return null;
+
+        $asnReferences = array_filter($codes,function($item){return !str_starts_with($item,'ASN');});  // 上游单号
+        $docAsnHeaderAsnNos = OracleDOCASNHeader::query()->select('asnNo')->whereIn('ASNReference1',$codes)->get()->map(function ($item) {
+            return $item->asnno;
+        })->toArray();
+
+        $asnCount = Store::query()->whereIn("asn_code",$docAsnHeaderAsnNos)->count();
+        if($asnCount !== count($asnReferences)) return null;
+
+        return implode(",",array_unique(array_merge($asnNos,$docAsnHeaderAsnNos)));
     }
 
     /**
@@ -672,8 +682,10 @@ html;
     {
         $this->gate("入库管理-入库预约-预约");
         $asn = preg_split('/[,, ]+/is', request("asn"));
-        $owner = request("owner_id");
+        $asnNos = $this->checkAndGetAsn(request("asn"));
+        if(!$asnNos) $this->error("无此ASN单号");
         if (!$asn || strlen(request("asn"))<13)$this->error("非法ASN单号");
+        $owner = request("owner_id");
         $query = Store::query()->whereIn("asn_code",$asn);
         if ($owner)$query->where("owner_id",$owner);
         $stores = $query->with("storeItems")->get();

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

@@ -2,16 +2,13 @@
 
 namespace App\Http\Controllers;
 
-use App\OracleBasCustomer;
 use App\Owner;
 use App\Services\AllInventoryService;
 use App\Services\InventoryDailyLogService;
 use App\Services\InventoryService;
 use App\Services\OwnerService;
-use Exception;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Gate;
-use Illuminate\Support\Facades\Http;
 use Oursdreams\Export\Export;
 
 class InventoryController extends Controller
@@ -27,7 +24,6 @@ class InventoryController extends Controller
         if(!Gate::allows("库存管理-库存")){ return redirect(url('/'));  }
         $oracleActTransactingLogs=app('inventoryService')->paginate($request->input());
         $oracleActTransactingLogs=json_encode($oracleActTransactingLogs);
-//        $owners=OracleBasCustomer::query()->select('customerid','descr_c')->where('customer_type','OW')->where('active_flag','Y')->get();
         $owners=Owner::filterAuthorities()->select(['code', 'name'])->get();
         $isTotalStock=false;
         $page = $request->page ?? 1;
@@ -41,7 +37,6 @@ class InventoryController extends Controller
         $service = app('AllInventoryService');
         $oracleActTransactingLogs= $service->paginate($request->input());
         $oracleActTransactingLogs=json_encode($oracleActTransactingLogs);
-//        $owners=OracleBasCustomer::query()->select('customerid','descr_c')->where('customer_type','OW')->where('active_flag','Y')->get();
         $owners=Owner::filterAuthorities()->select(['code', 'name'])->get();
         $isTotalStock=true;
         $page = $request->page ?? 1;

+ 17 - 14
app/Http/Controllers/OrderIssueController.php

@@ -78,7 +78,7 @@ class OrderIssueController extends Controller
         $orderIssueType = $this->orderIssueTypeService->getAllOrderIssueTypes();
         $qualityLabel = QualityLabel::all();
         $logistics = Logistic::all();
-        $userWorkgroup = UserWorkgroup::all();
+        $userWorkgroup = UserWorkgroup::withTrashed()->get();
         $userOwnerGroups = UserOwnerGroup::all();
         return view('order/issue/index', compact('owners', 'orderIssues', 'orderIssueType', 'qualityLabel', 'userWorkgroup', 'logistics', 'userOwnerGroups'));
     }
@@ -424,7 +424,7 @@ class OrderIssueController extends Controller
             return ['success' => false, 'fail_info' => '没有对应权限'];
         }
         $orderIssue_ids = $request->input('ids');
-        $bool = $this->service->isExistOrderIssueTypeIsEnd($orderIssue_ids);
+        $bool = OrderIssue::query()->whereIn('id',$orderIssue_ids)->whereIn('final_status',['已解决','已归档'])->exists();
         if ($bool) return ['success' => false, 'fail_info' => '需要完结的订单问题件中已有完结的订单问题件'];
         $bool = $this->service->endOrderIssues($orderIssue_ids);
         if ($bool == 0) return ['success' => false, 'fail_info' => '操作失败'];
@@ -609,20 +609,23 @@ class OrderIssueController extends Controller
             $rejected_name = '';
             $rejected_barcode = '';
             $rejected_amount = '';
-            if ($order_issue->rejectedBills) {
-                $order_issue->rejectedBills->each(function ($rejectedBill) use (
+            if ($order_issue->orderIssueRejectedBills) {
+                $order_issue->orderIssueRejectedBills->each(function ($orderIssueRejectedBill) use (
                     &$rejected_name, &$rejected_barcode, &$rejected_amount, &$rejected_Bill_remark, &$rejected_is_checked, &$rejected_logistic_number
                 ) {
-                    $rejected_logistic_number .= $rejectedBill->logistic_number_return . ",\r\n";
-                    $rejectedBill->items->each(function ($item) use (
-                        &$rejected_name, &$rejected_barcode, &$rejected_amount, &$rejected_Bill_remark, &$rejected_is_checked
-                    ) {
-                        $rejected_name .= $item->name_goods . ",\r\n";
-                        $rejected_barcode .= $item->barcode_goods . ",\r\n";
-                        $rejected_amount .= $item->amount . ",\r\n";
-                        $rejected_Bill_remark .= $item->remark . ",\r\n";
-                        $rejected_is_checked .= $item->quality->name . ",\r\n";
-                    });
+                    $rejectedBill = $orderIssueRejectedBill->rejectedBill;
+                    if($rejectedBill){
+                        $rejected_logistic_number .= $rejectedBill->logistic_number_return . ",\r\n";
+                        $rejectedBill->items->each(function ($item) use (
+                            &$rejected_name, &$rejected_barcode, &$rejected_amount, &$rejected_Bill_remark, &$rejected_is_checked
+                        ) {
+                            $rejected_name .= $item->name_goods . ",\r\n";
+                            $rejected_barcode .= $item->barcode_goods . ",\r\n";
+                            $rejected_amount .= $item->amount . ",\r\n";
+                            $rejected_Bill_remark .= $item->remark . ",\r\n";
+                            $rejected_is_checked .= $item->quality->name . ",\r\n";
+                        });
+                    }
                 });
             }
             $log_type = '';

+ 1 - 3
app/Http/Controllers/OrderTrackingOwnerController.php

@@ -36,10 +36,8 @@ class OrderTrackingOwnerController extends Controller
         if (!Gate::allows('订单管理-跟踪-监听')) {
             return ['success' => false, 'fail_info' => '权限不足'];
         }
-        $user = Auth::user();
-        $owner_ids = $user ? app('UserService')->getPermittingOwnerIds($user) : [];
         $owner = Owner::query()->with('orderTrackingOwner')
-            ->whereIn('id',$owner_ids)
+            ->whereIn('id',app("OwnerService")->getQuery())
             ->whereHas('orderTrackingOwner',function ($query){$query->where('status','启用');})
             ->select('id')
             ->get();

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

@@ -9,6 +9,7 @@ use App\Logistic;
 use App\OrderPackage;
 use App\Owner;
 use App\Services\common\ExportService;
+use App\Services\OwnerService;
 use App\Services\UserService;
 use Illuminate\Http\Request;
 use Illuminate\Support\Carbon;
@@ -134,7 +135,8 @@ class PackageLogisticController extends Controller
         ini_set('max_execution_time', 300);
         /** @var UserService $userService */
         $userService = app('UserService');
-        $owner_ids = $userService->getPermittingOwnerIds(auth()->user());
+        //$owner_ids = $userService->getPermittingOwnerIds(auth()->user());
+        $owner_ids = app(OwnerService::class)->getIdArr();
         $query = OrderPackage::query()
             ->whereIn('owner_id', $owner_ids)
             //订单取消的不显示

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

@@ -66,7 +66,7 @@ class ProcurementController extends Controller
     {
         if(!Gate::allows('采购管理-采购-查询')){ return redirect(url('/'));  }
         $paginateParams=$request->input();
-        $owner_ids=app('UserService')->getPermittingOwnerIds(auth()->user());
+        $owner_ids = app("OwnerService")->getIdArr();
         $procurements = Procurement::query()
             ->orderByDesc('id')
             ->filter($filters)
@@ -332,7 +332,7 @@ class ProcurementController extends Controller
     {
         if(!Gate::allows('采购管理-财务-采购账单')){ return redirect(url('/'));  }
         $paginateParams=$request->input();
-        $owner_ids=app('UserService')->getPermittingOwnerIds(auth()->user());
+        $owner_ids = app("OwnerService")->getIdArr();
         $owners=app("OwnerService")->getIntersectPermitting();
         $materials=Material::query()->select('id','name')->get();
         $suppliers=Supplier::query()->select('id','name')->get();
@@ -379,7 +379,7 @@ class ProcurementController extends Controller
     //采购导出
     public function procurementExport(Request $request,ProcurementFilters $filters){
         $this->gate('采购管理-采购-查询');
-        $owner_ids=app('UserService')->getPermittingOwnerIds(auth()->user());
+        $owner_ids=app("OwnerService")->getIdArr();
         $procurements = Procurement::query()
             ->filter($filters)
             ->withCount('procurementQuotations')
@@ -466,7 +466,7 @@ class ProcurementController extends Controller
     //采购账单导出
     public function procurementBillExport(Request $request,ProcurementFilters $filters){
         $this->gate('采购管理-财务-采购账单');
-        $owner_ids=app('UserService')->getPermittingOwnerIds(auth()->user());
+        $owner_ids=app("OwnerService")->getIdArr();
         $procurements = Procurement::query()
             ->filter($filters)
             ->with(['supplier','initiator','ownerMaterial.material','ownerMaterial.owner'=>function($query)use($owner_ids){

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

@@ -16,6 +16,7 @@ use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Cache;
 use Illuminate\Support\Facades\Gate;
+use Illuminate\Support\Str;
 use Oursdreams\Export\Export;
 
 class ReceiveRecordController extends Controller
@@ -128,6 +129,10 @@ class ReceiveRecordController extends Controller
             $logistic = Logistic::query()->select("id","name")->where("name","like","%{$name}%")->first();
             $logisticId = $logistic ? $logistic->id : 0;
         } else $logisticId = 0;
+        if(str_ends_with($logisticNumber,'_') && str_starts_with($logisticNumber,'JD')){
+            preg_match_all('/[A-Za-b0-9]+/', $logisticNumber, $codes);
+            $logisticNumber = $codes[0][0] ?? $logisticNumber;
+        }
         try {
             $dateTime = now()->toDateTimeString();
             ReceiveRecord::query()->create([

+ 2 - 47
app/Http/Controllers/RejectedBillController.php

@@ -14,7 +14,6 @@ use App\RejectedBill;
 use App\Services\LogService;
 use App\Services\RejectedBillItemService;
 use App\Services\RejectedBillService;
-use App\Services\OrderRejectingStatusService;
 use App\Services\WorkOrderService;
 use Illuminate\Contracts\View\Factory;
 use Illuminate\Http\RedirectResponse;
@@ -28,52 +27,12 @@ use Illuminate\View\View;
 
 class RejectedBillController extends Controller
 {
-    private $rejectedBillSyncOrderService;
-
-    function __construct(OrderRejectingStatusService $rejectedBillSyncOrderService)
-    {
-        $this->rejectedBillSyncOrderService = $rejectedBillSyncOrderService;
-//        app()->bind('OrderPackageCommoditiesService',OrderPackageCommoditiesService::class);
-    }
-
-    /**
-     * Display a listing of the resource.
-     *
-     * @return Response
-     */
-    public function index()
-    {
-        //
-    }
-
-    /**
-     * Show the form for creating a new resource.
-     *
-     * @return Response
-     */
-    public function create()
-    {
-        //
-    }
-
-    /**
-     * Store a newly created resource in storage.
-     *
-     * @param Request $request
-     * @return Response
-     */
-    public function store(Request $request)
-    {
-        //
-    }
-
     public function apiGetRecent()
     {
         if(!Gate::allows('退货管理-查询')){
             return ['success'=>'false','fail_info'=>'没有权限'];}
-        $user=Auth::user();
         $rejectedBills = RejectedBill::query()->orderByDesc('id')->whereIn('id_owner',
-            $user?app('UserService')->getPermittingOwnerIds($user):[])->limit(20)->get();
+            app("OwnerService")->getQuery())->limit(20)->get();
         return ['success'=>'true','rejectedBills'=>$rejectedBills->toArray()];
     }
 
@@ -98,7 +57,6 @@ class RejectedBillController extends Controller
          * @var RejectedBillService $rejectedBillService
          */
         $rejectedBillService=app(RejectedBillService::class);
-//        $rejectedBillService->joinOrderIssue($rejectedBill);
         SyncOrderRejectingStatusJob::dispatch($rejectedBill);
         $rejectedBillService->updateCheckedStatusByWms($request->input('logistic_number_return'));
         app('LogService')->log(__METHOD__,__FUNCTION__.'_'.$rejectedBill['id'],json_encode($request->toArray()),Auth::user()['id']);
@@ -126,8 +84,6 @@ class RejectedBillController extends Controller
          */
         $rejectedBillService=app(RejectedBillService::class);
         SyncOrderRejectingStatusJob::dispatch($rejectedBill);
-//        $rejectedBillService->joinOrderIssue($rejectedBill);
-//        $rejectedBillService->syncOrderIssue($rejectedBill);
         $rejectedBillService->updateCheckedStatusByWms($rejectedBill->logistic_number_return);
 
         app('LogService')->log(__METHOD__,__FUNCTION__.'_'.$rejectedBill['id'],json_encode($request->toArray()),Auth::user()['id']);
@@ -252,9 +208,8 @@ class RejectedBillController extends Controller
     public function edit(RejectedBill $rejectedBill,Request $request)
     {
         if(!Gate::allows('退货管理-编辑')){ return redirect(url('/'));  }
-        $user=Auth::user();
         $owners=Owner::all()->whereIn('id',
-            $user?app('UserService')->getPermittingOwnerIds($user):[])->sortBy('name');
+            app('OwnerService')->getIdArr())->sortBy('name');
         $logistics=Logistic::all()->sortBy('name');
         $qualityLabels=QualityLabel::all()->sortBy('name');
         $rejectedBill['is_loaded'] = $rejectedBill['is_loaded_null'];

+ 11 - 4
app/Http/Controllers/RejectedController.php

@@ -15,6 +15,7 @@ use App\Services\LogisticService;
 use App\Services\OwnerService;
 use App\Services\QualityLabelService;
 use App\Services\RejectedService;
+use App\Services\UserService;
 use Carbon\Carbon;
 use Exception;
 use Illuminate\Contracts\Foundation\Application;
@@ -33,9 +34,11 @@ use Oursdreams\Export\Export;
 
 class RejectedController extends Controller
 {
-    public function __construct()
+    private $userService;
+    public function __construct(UserService $userService)
     {
         app()->singleton('RejectedService',RejectedService::class);
+        $this->userService = $userService;
     }
 
     /**
@@ -63,12 +66,11 @@ class RejectedController extends Controller
     public function recycle(Request $request)
     {
         if(!Gate::allows('退货管理-删除')){ return redirect(url('/'));  }
-        $user=Auth::user();
         $paginate = $request->input('paginate')??50;
         $paginateParams = $this->packFilterParams($request);
         $paginateParams['paginate']=$paginate;
         $rejectedQuery=$this->buildFilteredQuery($paginateParams)->orderBy('id','desc')->whereIn('id_owner',
-            $user?app('UserService')->getPermittingOwnerIds($user):[])->withTrashed()->whereNotNull('deleted_at');
+            app("OwnerService")->getQuery())->withTrashed()->whereNotNull('deleted_at');
         $total = $rejectedQuery->count();
         $rejectedBills=$rejectedQuery->paginate($paginate);
         return view('rejected.recycle',compact('rejectedBills','total','paginateParams'));
@@ -486,8 +488,13 @@ class RejectedController extends Controller
     // 统计查询参数获取 zengjun
     private function getAnalyzeSearchParams(Request $request)
     {
+        $owner_id = $request->input('owner',[]);
+        $owner_ids = $this->userService->getPermittingLogisticIds(Auth::user());
+        if(!is_array($owner_id))$owner_id = [$owner_id];
+        if(count($owner_id) != 0) $owner_ids = array_intersect($owner_ids,$owner_id);
+        $owner_ids = implode(',',$owner_ids);
         $searchParams = [
-            'owner_id' => $request->input('owner_id'),
+            'owner_id' => $owner_ids,
             'data'=> $request->input('data'),
             'created_at_start' => $request->input('created_at_start'),
             'created_at_end' => $request->input('created_at_end'),

+ 1 - 3
app/Http/Controllers/ReplenishmentController.php

@@ -31,9 +31,7 @@ class ReplenishmentController extends Controller
     public function index(Request $request)
     {
         $this->gate("库存管理-补货列表");
-        /** @var UserService $userService */
-        $userService = app('UserService');
-        $owners = Owner::query()->whereIn('id', $userService->getPermittingOwnerIds(auth()->user()))->get();
+        $owners = Owner::query()->whereIn('id', app("OwnerService")->getQuery())->get();
         return view('inventory.stockOut.index', compact('owners'));
     }
 

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

@@ -99,7 +99,7 @@ class SettlementBillExpressFeeReportController extends Controller
     {
         $this->service = app('OwnerLogisticFeeReportService');
         $this->userService = app('UserService');
-        $permittingOwnerIds = $this->userService->getPermittingOwnerIds(auth()->user());
+        $permittingOwnerIds = app("OwnerService")->getIdArr();
         if (is_null($year)) {
             $year = now()->subMonth() ->year;
         }

+ 4 - 2
app/Http/Controllers/StoreController.php

@@ -6,6 +6,7 @@ use App\Components\ErrorPush;
 use App\Depository;
 use App\Owner;
 use App\Services\common\BatchUpdateService;
+use App\Services\OwnerService;
 use App\Services\StoreService;
 use App\Station;
 use App\Store;
@@ -39,8 +40,9 @@ class StoreController extends Controller
         $storeService=app(StoreService::class);
         $stores=$storeService->paginate($request->input());
         $warehouses=Warehouse::query()->get();
-        $ownerIds=app('UserService')->getPermittingOwnerIds(Auth::user());
-        $owners=Owner::query()->select(["id","name","is_check_asn"])->whereIn('id', $ownerIds)->whereNull('deleted_at')->get();
+        /** @var OwnerService $service */
+        $service = app("OwnerService");
+        $owners=Owner::query()->select(["id","name","is_check_asn"])->whereIn('id', $service->getQuery())->whereNull('deleted_at')->get();
         return view('store.inStorage.index',compact('stores','warehouses','owners','paginateParams'));
     }
     /**

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

@@ -13,12 +13,15 @@ use App\OrderDetail;
 use App\OrderIssue;
 use App\OrderIssueRejectedBill;
 use App\RejectedBill;
+use App\Role;
 use App\Services\common\BatchUpdateService;
 use App\Services\DeliveryAppointmentService;
 use App\Services\OracleDocAsnHerderService;
 use App\Services\OrderRejectedBillRelationService;
 use App\Services\OrderRejectingStatusService;
+use App\Services\OwnerService;
 use App\Services\RejectedService;
+use App\Services\UserService;
 use App\Services\WaybillService;
 use App\User;
 use App\Waybill;
@@ -27,6 +30,7 @@ use Illuminate\Database\Capsule\Manager;
 use Illuminate\Database\DatabaseManager;
 use Illuminate\Foundation\Auth\AuthenticatesUsers;
 use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Cache;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Hash;
@@ -54,7 +58,16 @@ class TestController extends Controller
         }
     }
     public function test(Request $request){
-        dd(Cache::get(DeliveryAppointment::BAN,[]));
+        $users = User::query()->with(["roles.owners"])->get();
+        foreach ($users as $user){
+            $owners = [];
+            foreach ($user->roles as $role){
+                foreach ($role->owners as $owner){
+                    $owners[] = $owner->id;
+                }
+            }
+            $user->owners()->sync($owners);
+        }
     }
 }
 

+ 28 - 0
app/Http/Controllers/UserController.php

@@ -3,6 +3,7 @@
 namespace App\Http\Controllers;
 
 use App\Components\AsyncResponse;
+use App\Owner;
 use App\Role;
 use App\Supplier;
 use App\User;
@@ -12,6 +13,7 @@ use Exception;
 use Illuminate\Http\Request;
 use Illuminate\Http\Response;
 use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Facades\Cache;
 use Illuminate\Support\Facades\Gate;
 use Illuminate\Support\Facades\Hash;
 use Illuminate\Support\Facades\Validator;
@@ -251,4 +253,30 @@ class UserController extends Controller
         $user->ownerGroups()->sync($params['ownerGroups']);
         return ['success'=>true];
     }
+
+    /**
+     * 获取拥有货主
+     *
+     * @param Request $request
+     */
+    public function getOwners(Request $request)
+    {
+        $this->gate("用户-编辑");
+        $this->success(app("UserService")->getUserUnderOwnerIdArr($request->input("id")));
+    }
+
+    /**
+     * 绑定货主
+     *
+     * @param Request $request
+     */
+    public function bindOwner(Request $request)
+    {
+        $this->gate("用户-编辑");
+        $user = new User();
+        $user->id = $request->input("id");
+        $user->owners()->sync($request->input("owners",[]));
+        Cache::pull("USER.{$user->id}.OWNER.ID");
+        $this->success();
+    }
 }

+ 2 - 8
app/Http/Controllers/WorkCoefficientController.php

@@ -10,19 +10,13 @@ class WorkCoefficientController extends Controller
 {
     public function index()
     {
-        /** @var UserService $userService */
-        $userService = app('UserService');
-        $ownerIds = $userService->getPermittingOwnerIds(auth()->user());
-        $owners = Owner::query()->select(['id', 'name'])->whereIn('id', $ownerIds)->get();
+        $owners = Owner::query()->select(['id', 'name'])->whereIn('id', app("OwnerService")->getQuery())->get();
         return view('kpi.workCoefficient.index', compact('owners'));
     }
 
     public function create()
     {
-        /** @var UserService $userService */
-        $userService = app('UserService');
-        $ownerIds = $userService->getPermittingOwnerIds(auth()->user());
-        $owners = Owner::query()->select(['id', 'name'])->whereIn('id', $ownerIds)->get();
+        $owners = Owner::query()->select(['id', 'name'])->whereIn('id', app("OwnerService")->getQuery())->get();
         return view('kpi.workCoefficient.create',compact('owners'));
     }
 

+ 2 - 1
app/Http/Controllers/WorkOrderController.php

@@ -279,7 +279,7 @@ class WorkOrderController extends Controller
     {
         $json = [];
         $row = [
-            '工单类型', '当前进度', '客户', '店铺名称', '客户订单号', '快递单号', '创建时间', '当前处理人', '创建人', '情况说明', '退回单号', '退回商品', '退回商品名称', '退回商品数量', '是否正品', '操作类型', '操作人', '内容'
+            '工单类型', '当前进度', '客户', '店铺名称', '客户订单号','承运人', '快递单号', '创建时间', '当前处理人', '创建人', '情况说明', '退回单号', '退回商品', '退回商品名称', '退回商品数量', '是否正品', '操作类型', '操作人', '内容'
         ];
         $workOrders->each(function ($item) use (&$json) {
             $logistic_numbers = $item->order->packages->implode('logistic_number', ",\r\n");
@@ -318,6 +318,7 @@ class WorkOrderController extends Controller
                 $item->owner->name ?? '',
                 $item->order->shop->name ?? '',
                 $item->order->client_code ?? '',
+                $item->logistic->name ?? '',
                 rtrim($logistic_numbers, ",\r\n"),
                 isset($item->created_at) ? str_split($item->created_at, 10)[0] : '',
                 $item->status,

+ 2 - 1
app/Interfaces/UserFilter.php

@@ -9,5 +9,6 @@ use Illuminate\Database\Eloquent\Builder;
 interface UserFilter
 {
     function getIdArr(?int $userId):array;
-    function getQuery(?int $userId):Builder;
+    function getCodeArr(?int $userId):array;
+    function getQuery(?int $userId, $column):Builder;
 }

+ 5 - 132
app/OrderIssue.php

@@ -63,12 +63,12 @@ class OrderIssue extends Model
 
     public function rejectedBills(): BelongsToMany
     {
-        return $this->belongsToMany(RejectedBill::class,'order_issue_rejected_bill','order_issue_id','logistic_number_return','id','logistic_number_return');
+        return $this->belongsToMany(RejectedBill::class,'order_issue_rejected_bill','order_issue_id','logistic_number_return','id','logistic_number_return')->where('logistic_number_return','!=','');
     }
 
     public function orderIssueRejectedBills(): HasMany
     {
-        return $this->hasMany(OrderIssueRejectedBill::class,'order_id','order_id');
+        return $this->hasMany(OrderIssueRejectedBill::class,'order_id','order_id')->where('logistic_number_return','!=','');
     }
 
     public function issueType(): BelongsTo
@@ -139,77 +139,6 @@ class OrderIssue extends Model
         return $createLog->user->name ?? '';
     }
 
-//    /**
-//     * 同步退货状态
-//     */
-//    public function syncRejectingStatus()
-//    {
-//        $this->syncRejectedBillStatus($this);
-//    }
-
-//    public function syncRejectedBillStatus($orderIssue)
-//    {
-//        if (!$orderIssue->order_id) return;
-//        $orderIssueMap = [];
-//        $rejectedMap = [];
-//        $owner_id = $orderIssue->order->owner_id;
-//
-//        // 获取对应订单的所有商品
-//        $orderPackageQuery = OrderPackage::query()->selectRaw("id")->where('order_id', $orderIssue->order_id);
-//        $orderPackageCommodities = OrderPackageCommodities::query()->with('commodity')->whereIn('order_package_id', $orderPackageQuery)->get();
-//        foreach ($orderPackageCommodities as $orderPackageCommodity) {
-//            $code = $orderPackageCommodity->commodity->sku;
-//            if (empty($orderIssueMap[$code])) $orderIssueMap[$code] = $orderPackageCommodity->amount;
-//            else $orderIssueMap[$code] += $orderPackageCommodity->amount;
-//        }
-//
-//        // 获取对应退回单的所有商品
-//        $orderIssueRejectedBillQuery = OrderIssueRejectedBill::query()->selectRaw("logistic_number_return")->where("order_issue_id", $orderIssue->id);
-//        $RejectedBills = RejectedBill::query()->with('items.quality')->whereIn("logistic_number_return", $orderIssueRejectedBillQuery)->get();
-//        /** @var RejectedBill $rejectedBill */
-//        foreach ($RejectedBills as $rejectedBill) {
-//            foreach ($rejectedBill->items as $item) {
-//                $code = $item->barcode_goods;
-//                $exists = Commodity::query()->where("sku", $code)->where('owner_id',$owner_id)->exists();
-//                if (!$exists) {
-//                    $commodityBarcodeQuery = CommodityBarcode::query()->select('commodity_id')->where('code',$code);
-//                    $commodity = Commodity::query()->where('owner_id',$owner_id)->whereIn('id',$commodityBarcodeQuery)->first();
-//                    if ($commodity)$code = $commodity->sku;
-//                }
-//                $qualityName = $item->quality->name;
-//                if (empty($rejectedMap[$code]) || empty($rejectedMap[$code][$qualityName])) $rejectedMap[$code][$qualityName] = $item->amount;
-//                else $rejectedMap[$code][$qualityName] += $item->amount;
-//            }
-//        }
-//        // 比较
-//        $status = $this->getRejectingStatus($orderIssueMap, $rejectedMap);
-//        $this->update(['rejecting_status' => $status]);
-//        $this->syncWorkOrder();
-//    }
-
-//    private function getRejectingStatus($orderIssueMap, $rejectedMap): string
-//    {
-//        //未退回,差异退回,全部退回,超量退回,部分退回
-//        if (count($rejectedMap) == 0) return "未退回";
-//        $equal = 0;
-//        $portion = 0;
-//        foreach ($rejectedMap as $key => $map) {
-//            if (isset($map['残次']) && $map['残次'] > 0) return "差异退回";
-//            if (empty($orderIssueMap[$key])) return "差异退回";
-//            if(isset($rejectedMap[$key]['正品']) && isset($orderIssueMap[$key])){
-//                if ( $rejectedMap[$key]['正品'] < $orderIssueMap[$key]) $portion += 1;
-//                if ( $rejectedMap[$key]['正品'] > $orderIssueMap[$key]) return "超量退回";                                 // 超量退回
-//                if ( $rejectedMap[$key]['正品'] == $orderIssueMap[$key]) $equal += 1;
-//            }
-//        }
-//        if ($equal == count($orderIssueMap) && $equal == count($rejectedMap)  && $portion == 0) return "全部退回";        // 全部退回
-//        if ($portion > 0) return "部分退回";                                                                              // 部分退回
-//        // 部分退回
-//        if (count(array_diff_key($orderIssueMap,$rejectedMap)) > 0)return '部分退回';
-//        if (count(array_diff_key($rejectedMap,$orderIssueMap)) > 0)return '差异退回';
-//        return "无";
-//    }
-
     public function delete()
     {
         $this->logs()->delete();
@@ -222,64 +151,6 @@ class OrderIssue extends Model
         return parent::delete();
     }
 
-//    /**
-//     * 同步退货单号
-//     */
-//    public function syncRejectedBills()
-//    {
-//        $order_packages = $this->order->packages;
-//        if($order_packages){
-//            foreach ($order_packages as $order_package) {
-//                $logistic_number = $order_package->logistic_number;
-//                $rejectedBill = RejectedBill::query()->where('logistic_number_return',$logistic_number)->first();
-//                if($rejectedBill){
-//                    if(OrderIssueRejectedBill::isExit($this->id,$logistic_number))continue;
-//                    $this->joinRejectedBill($logistic_number);
-//                    if(isset($rejectedBill->items))
-//                        $this->is_new_rejecting = '有';
-//                }
-//            }
-//            $this->save();
-//        }
-//    }
-
-//    public function syncRejected($logistic_number)
-//    {
-//        $query = RejectedBill::query()->selectRaw('id');
-//        if(is_array($logistic_number)){
-//            $query->whereIn('logistic_number_return',$logistic_number);
-//        }elseif (is_string($logistic_number)){
-//            $query->where('logistic_number_return',$logistic_number);
-//        }else return;
-//        $items = RejectedBillItem::query()->whereIn('id_rejected_bill',$query);
-//        if($items->count() > 0) $this->update(['is_new_rejecting'=>'有']);
-//        elseif($items->count() == 0) $this->update(['is_new_rejecting'=>'无']);
-//    }
-
-
-//    /**
-//     * @param array|string $logistic_number
-//     * @return array|void
-//     */
-//    public function joinRejectedBill($logistic_number)
-//    {
-//        if(!$logistic_number)return null;
-//        $this->syncRejected($logistic_number);
-//        if(is_array($logistic_number)){
-//            return $this->rejectedBills()->sync($logistic_number,false);
-//        }
-//        return $this->rejectedBills()->attach($logistic_number);
-//    }
-//
-//    public function unJoinRejectedBill($logistic_number)
-//    {
-//        return $this->rejectedBills()->detach($logistic_number);
-//    }
-//
-//    public function reviseJoinRejectedBill($logistic_number,$logistic_number_update)
-//    {
-//        return $this->rejectedBills()->updateExistingPivot($logistic_number,['logistic_number_return'=>$logistic_number_update]);
-//    }
 
     public function scopeFilter($query, $filters)
     {
@@ -311,7 +182,9 @@ class OrderIssue extends Model
             $query->with(['shop', 'logistic', 'owner', 'packages.commodities.commodity.barcodes']);
         },'orderIssueRejectedBills.rejectedBill'=>function($query){
             $query->with(['owner','logistic','user','items.quality']);
-        },'userWorkgroups','userOwnerGroup','orderDetail']);
+        },'userWorkgroups'=>function($query){
+            $query->withTrashed();
+        },'userOwnerGroup','orderDetail']);
 
     }
 

+ 7 - 4
app/Owner.php

@@ -70,9 +70,7 @@ class Owner extends Model
         if(!$user){
             return $query->where('id','0');
         }
-        $ownerIds=app('UserService')->getPermittingOwnerIds($user);
-        if(empty($ownerIds))return $query;
-        return $query->whereIn('id',$ownerIds);
+        return $query->whereIn('id',app("OwnerService")->getQuery());
     }
 
     /**
@@ -85,11 +83,16 @@ class Owner extends Model
         return $this['checking_count'];
     }
 
-    public function paperBoxes()
+    public function paperBoxes(): BelongsToMany
     {
         return $this->belongsToMany('\App\PaperBox', 'owner_paper_box', 'owner_id', 'paper_box_id');
     }
 
+    public function users(): BelongsToMany
+    {
+        return $this->belongsToMany('\App\User', 'owner_user', 'owner_id', 'user_id');
+    }
+
     public function orderTrackingOwner(){
         return $this->belongsTo(OrderTrackingOwner::class,'id','owner_id');
     }

+ 1 - 2
app/Process.php

@@ -27,8 +27,7 @@ class Process extends Model
         if(!$user){
             return (new static)->newQuery()->where('processes.owner_id','0');
         }
-        $ownerIds=app('UserService')->getPermittingOwnerIds($user);
-        return (new static)->newQuery()->whereIn('processes.owner_id',$ownerIds);
+        return (new static)->newQuery()->whereIn('processes.owner_id',app("OwnerService")->getQuery());
     }
 
     public function owner(){

+ 9 - 1
app/Services/AuthorityService.php

@@ -152,8 +152,16 @@ class AuthorityService
         })->orWhereIn("name",config("users.superAdmin"))->get();
     }
 
-    public function checkAllOwner(): bool
+    public function checkAllOwner($userId): bool
     {
+        $authorityName = "货主-可见全部";
+        if ($userId != Auth::id()){
+            return Authority::query()->selectRaw("1")->whereHas("roles",function ($query)use($userId){
+                $query->whereHas("users",function ($query)use($userId){
+                    $query->where("users.id",$userId);
+                });
+            })->where("alias_name",$authorityName)->first() != null;
+        }
         return Gate::allows("货主-可见全部");
     }
 }

+ 1 - 2
app/Services/DeliveryAppointmentService.php

@@ -29,7 +29,6 @@ class DeliveryAppointmentService
      */
     public function query(array $params)
     {
-        $owners = app("UserService")->getPermittingOwnerIds(Auth::user());
         $query = DeliveryAppointment::query();
         if ($params["appointment_number"] ?? false){
             $query->whereHas("cars",function ($query)use($params){
@@ -45,7 +44,7 @@ class DeliveryAppointmentService
             "owner_id"=>['multi' => ','],
             "asn_number"=>['like' => '','timeLimit' => 15],
             "id"=>['multi' => ','],
-        ])->whereIn("owner_id",$owners)->with(["cars.car","details.commodity.barcodes"]);
+        ])->whereIn("owner_id",app("OwnerService")->getQuery())->with(["cars.car","details.commodity.barcodes"]);
     }
 
     /**

+ 6 - 11
app/Services/InventoryService.php

@@ -30,6 +30,7 @@ class InventoryService
         $SKU=$params['SKU'] ?? null;
         $ALTERNATE_SKU1=$params['ALTERNATE_SKU1'] ?? null;
         $LotAtt02_end=$params['LotAtt02_end'] ?? null;
+        $commodityName=$params['commodity_name'] ?? null;
         $sql='select * from (select result.*,rownum rn from (';
         $sql.=' select customer.Descr_C as 货主,stockLog.客户 客户, 库位, sku.SKU 产品编码, sku.ALTERNATE_SKU1 产品条码, ';
         $sql.=' sku.Descr_C 商品名称, lot.LotAtt05 属性仓, lot.LotAtt08 质量状态, lot.LotAtt02 失效日期, ';
@@ -40,8 +41,6 @@ class InventoryService
         $sql.=" from ACT_Transaction_Log where TransactionType='PA' ";
         if ($date_start) $sql.=" and addtime > to_date('".$date_start." 00:00:00','yyyy-mm-dd hh24:mi:ss') ";
         if ($date_end) $sql.=" and addtime < to_date('".$date_end." 23:59:59','yyyy-mm-dd hh24:mi:ss') ";
-//        if ($TOLocation)$sql .= " and TOLocation like '".$TOLocation."' ";
-//        if ($SKU)$sql.=" and FMSKU like '".$SKU."' ";
         if ($TOLocation)$sql=$this->sqlSearchWay($sql,$TOLocation,"TOLocation");
         if ($SKU)$sql=$this->sqlSearchWay($sql,$SKU,"FMSKU");
         if ($customerid){
@@ -66,8 +65,6 @@ class InventoryService
         $sql.=" from ACT_Transaction_Log where TransactionType='SO' ";
         if ($date_start) $sql.=" and addtime > to_date('".$date_start." 00:00:00','yyyy-mm-dd hh24:mi:ss') ";
         if ($date_end) $sql.=" and addtime < to_date('".$date_end." 23:59:59','yyyy-mm-dd hh24:mi:ss') ";
-//        if ($TOLocation)$sql .= " and FMLOCATION like '".$TOLocation."' ";
-//        if ($SKU)$sql.=" and FMSKU like '".$SKU."' ";
         if ($TOLocation)$sql=$this->sqlSearchWay($sql,$TOLocation,"FMLOCATION");
         if ($SKU)$sql=$this->sqlSearchWay($sql,$SKU,"FMSKU");
         if ($customerid){
@@ -92,8 +89,6 @@ class InventoryService
         $sql.=" from ACT_Transaction_Log  where TransactionType='MV' ";
         if ($date_start) $sql.=" and addtime > to_date('".$date_start." 00:00:00','yyyy-mm-dd hh24:mi:ss') ";
         if ($date_end) $sql.=" and addtime < to_date('".$date_end." 23:59:59','yyyy-mm-dd hh24:mi:ss') ";
-//        if ($TOLocation)$sql .= " and FMLocation like '".$TOLocation."' ";
-//        if ($SKU)$sql.=" and FMSKU like '".$SKU."' ";
         if ($TOLocation)$sql=$this->sqlSearchWay($sql,$TOLocation,"FMLocation");
         if ($SKU)$sql=$this->sqlSearchWay($sql,$SKU,"FMSKU");
 
@@ -119,8 +114,6 @@ class InventoryService
         $sql.=" from ACT_Transaction_Log where TransactionType='MV' ";
         if ($date_start) $sql.=" and addtime > to_date('".$date_start." 00:00:00','yyyy-mm-dd hh24:mi:ss') ";
         if ($date_end) $sql.=" and addtime < to_date('".$date_end." 23:59:59','yyyy-mm-dd hh24:mi:ss') ";
-//        if ($TOLocation)$sql .= " and TOLocation like '".$TOLocation."' ";
-//        if ($SKU)$sql.=" and FMSKU like '".$SKU."' ";
         if ($TOLocation)$sql=$this->sqlSearchWay($sql,$TOLocation,"TOLocation");
         if ($SKU)$sql=$this->sqlSearchWay($sql,$SKU,"FMSKU");
 
@@ -146,16 +139,18 @@ class InventoryService
         $sql.=' left join BAS_SKU sku on sku.SKU=stockLog.FMSKU and sku.CUSTOMERID=stockLog.客户 ';
         $sql.=' left join INV_LOT_ATT lot on lot.LOTNUM=stockLog.FMLOTNUM ';
         $sql.=' left join INV_LOT_LOC_ID storeStatus on storeStatus.LOTNUM=stockLog.FMLOTNUM ';;
-        $sql.=' and storeStatus.LocationID=stockLog.库位 ';
+        $sql.=' and storeStatus.LocationID=stockLog.库位 WHERE 1=1 ';
+        if ($commodityName){
+            $commodityName = str_replace("'",'"',$commodityName);
+            $sql .= " AND sku.Descr_C like '".$commodityName."%' ";
+        }
         $sql.=' group by 库位,customer.Descr_C,sku.SKU,sku.ALTERNATE_SKU1 ';
         $sql.=' ,sku.Descr_C,FMLotNum,lot.LotAtt05,lot.LotAtt08,lot.LotAtt02,lot.LotAtt04 ';
         $sql.=' , storeStatus.QTY, storeStatus.QtyAllocated,stockLog.客户  ';
         $sql.=' )result where 1=1 ';
-//        if ($LotAtt05)$sql .=" and 属性仓 like '".$LotAtt05."' ";
         if ($LotAtt05)$sql=$this->sqlSearchWay($sql,$LotAtt05,"属性仓");
         if ($LotAtt02_start)$sql.=" and 失效日期 >='".$LotAtt02_start." 00:00:00' ";
         if ($LotAtt02_end)$sql.=" and 失效日期 <='".$LotAtt02_end." 23:59:59' ";
-//        if ($ALTERNATE_SKU1)$sql.=" and 产品条码 like '".$ALTERNATE_SKU1."' ";
         if ($ALTERNATE_SKU1)$sql=$this->sqlSearchWay($sql,$ALTERNATE_SKU1,"产品条码");
         if ($page&&$paginate)$sql.="  and ROWNUM<='".$page*$paginate."'";
         $sql.=' )  ';

+ 7 - 2
app/Services/LogisticService.php

@@ -123,10 +123,15 @@ class LogisticService implements UserFilter
         if (!$userId)$userId = Auth::id();
         return array_column($this->getQuery($userId)->get()->toArray(),"id");
     }
-    function getQuery(?int $userId = null): Builder
+    function getCodeArr(?int $userId): array
+    {
+        return [];
+    }
+
+    function getQuery(?int $userId = null, $column = "id"): Builder
     {
         if (!$userId)$userId = Auth::id();
-        $query = Logistic::query()->select("id");
+        $query = Logistic::query()->select($column);
         if (!app("UserService")->checkAdminIdentity($userId)){
             $query->whereHas("users",function ($query)use($userId){
                 $query->where("users.id",$userId);

+ 2 - 8
app/Services/OrderIssueWorkLoadService.php

@@ -8,19 +8,14 @@ use App\OrderIssueProcessLog;
 use App\Owner;
 use App\Services\common\QueryService;
 use App\User;
-use Illuminate\Support\Facades\Auth;
 use Maatwebsite\Excel\Facades\Excel;
-use App\Traits\ServiceAppAop;
 
 
 class OrderIssueWorkLoadService
 {
-    use ServiceAppAop;
-    protected $modelClass=OrderIssueWorkLoad::class;
     public function getQuery(array $queryParam)
     {
-        $user = Auth::user();
-        $owner_ids = $user ? app('UserService')->getPermittingOwnerIds($user) : [];
+        $owner_ids = app("OwnerService")->getIdArr();
         $query = OrderIssue::with(['logs.user','order' => function ($query) {
             $query->with(['packages', 'owner']);
         }])->whereHas('order', function ($query) use (&$queryParam, $owner_ids) {
@@ -88,8 +83,7 @@ class OrderIssueWorkLoadService
     }
 
     public function getOwners(){
-        $owner_ids = app('UserService')->getPermittingOwnerIds(auth()->user())??[];
-        return Owner::whereIn('id', $owner_ids)->get();
+        return Owner::query()->whereIn('id', app("OwnerService")->getQuery())->get();
     }
 
     public function getOptions(array $arr){

+ 17 - 6
app/Services/OrderRejectedBillRelationService.php

@@ -30,9 +30,11 @@ class OrderRejectedBillRelationService
                 ['order_id' => $order->id,'order_issue_id' => $order_issue->id ?? null]
             );
         } else {
-            OrderIssueRejectedBill::query()->create(
-                ['order_id' => $order->id, 'order_issue_id' => $order_issue->id ?? null, 'logistic_number_return' => $rejectedBill->logistic_number_return]
-            );
+            if($rejectedBill->logistic_number_return !== ''){
+                OrderIssueRejectedBill::query()->create(
+                    ['order_id' => $order->id, 'order_issue_id' => $order_issue->id ?? null, 'logistic_number_return' => $rejectedBill->logistic_number_return]
+                );
+            }
         }
         $this->service->syncRejectingStatus($order);
     }
@@ -40,7 +42,7 @@ class OrderRejectedBillRelationService
 
     private function getOrder(RejectedBill $rejectedBill)
     {
-        return $this->getOrderByLogisticNumber($rejectedBill) ?? $this->getOrderByOracleOrderHeader($rejectedBill);
+        return ($this->getOrderByLogisticNumber($rejectedBill) ?? $this->getOrderByOracleOrderHeader($rejectedBill)) ?? $this->getOrderByOrderIssueRejectedBill($rejectedBill);
     }
 
     private function getOrderByLogisticNumber(RejectedBill $rejectedBill)
@@ -58,6 +60,11 @@ class OrderRejectedBillRelationService
         return $order_header ? Order::query()->where('code', $order_header->orderno)->first() : null;
     }
 
+    private function getOrderByOrderIssueRejectedBill(RejectedBill $rejectedBill){
+        $query = OrderIssueRejectedBill::query()->select('order_id')->where('logistic_number_return',$rejectedBill['logistic_number_return']);
+        return Order::query()->whereIn('id',$query)->first();
+    }
+
     // 问题件同步
     public function orderSyncRejectedBill(Order $order)
     {
@@ -103,7 +110,9 @@ class OrderRejectedBillRelationService
 
         $rejected_bill_logistic_number_return = $this->getExistRejectedBIllLogisticNumberReturn($logistic_number_returns);
 
-        return array_intersect($logistic_number_returns, $rejected_bill_logistic_number_return);
+        return array_filter(array_intersect($logistic_number_returns, $rejected_bill_logistic_number_return),function($item){
+            return $item != '';
+        });
     }
 
     /**
@@ -116,6 +125,7 @@ class OrderRejectedBillRelationService
         return OrderIssueRejectedBill::query()
             ->select('logistic_number_return')->where('order_id', $order->id)
             ->whereIn('logistic_number_return', $logistic_numbers)->get()
+            ->where('logistic_number_return','!=','')
             ->map(function ($item) {
                 return $item->logistic_number_return;
             })->toArray();
@@ -128,7 +138,8 @@ class OrderRejectedBillRelationService
     public function getExistRejectedBIllLogisticNumberReturn(array $logistic_numbers): array
     {
         return RejectedBill::query()->select('logistic_number_return')
-            ->whereIn('logistic_number_return', $logistic_numbers)->get()
+            ->whereIn('logistic_number_return', $logistic_numbers)
+            ->where('logistic_number_return','!=','')->get()
             ->map(function ($item) {
                 return $item->logistic_number_return;
             })->toArray();

+ 8 - 5
app/Services/OrderRejectingStatusService.php

@@ -56,8 +56,11 @@ class OrderRejectingStatusService
 
     private function getRejectedBillItems(Order $order)
     {
-        $query = OrderIssueRejectedBill::query()->select('logistic_number_return')->where('order_id', $order->id);
-        $query = RejectedBill::query()->select('id')->whereIn('logistic_number_return', $query);
+        $orderIssueRejectedBills = OrderIssueRejectedBill::query()->select('logistic_number_return')->where('order_id', $order->id)->where('logistic_number_return','!=','')->get();
+        $logistic_number_return = $orderIssueRejectedBills->map(function($item){
+            return $item->logistic_number_return;
+        })->toArray();
+        $query = RejectedBill::query()->select('id')->whereIn('logistic_number_return', $logistic_number_return);
         return RejectedBillItem::query()->with('quality')->whereIn('id_rejected_bill', $query)->get();
     }
 
@@ -112,11 +115,11 @@ class OrderRejectingStatusService
             }
         }
         if ($equal == count($rejected_bill_item_map)
-            && $equal == count($rejected_bill_item_map)
+            && $equal == count($order_commodity_map)
             && $portion == 0) return "全部退回";        // 全部退回
         if ($portion > 0) return "部分退回";
-        if (count(array_diff_key($rejected_bill_item_map, $order_commodity_map)) > 0) return '部分退回';
-        if (count(array_diff_key($order_commodity_map, $rejected_bill_item_map)) > 0) return '差异退回';
+        if (count(array_diff_key($order_commodity_map, $rejected_bill_item_map)) > 0) return '部分退回';
+        if (count(array_diff_key($rejected_bill_item_map, $order_commodity_map)) > 0) return '差异退回';
         return "无";
     }
 }

+ 5 - 3
app/Services/OrderService.php

@@ -1140,11 +1140,13 @@ SQL;
         if (!$month)$month = date("Y-m");
         $query = DB::raw(<<<sql
 SELECT COUNT(1) count,logistic_id FROM orders WHERE wms_status = '订单完成'
-AND owner_id = ?
-AND wms_edittime like ? GROUP BY logistic_id
+AND owner_id >= ?
+AND wms_edittime >= ? and wms_edittime <= ?   GROUP BY logistic_id
 sql
         );
-        $statistics = DB::select($query, [$owner, $month . "%"]);
+        $startDate = $month.'-01 00:00:00';
+        $endDate = Carbon::parse($startDate)->addMonth()->subMicrosecond()->toDateTimeString();
+        $statistics = DB::select($query, [$owner, $startDate,$endDate]);
         $toB = 0;
         $toC = 0;
         foreach ($statistics as $statistic) {

+ 1 - 2
app/Services/OwnerMaterialService.php

@@ -14,7 +14,6 @@ class OwnerMaterialService
     protected $modelClass=OwnerMaterial::class;
     public function getOwnerPermittingWithMaterial()
     {
-        $ownerIds=app('UserService')->getPermittingOwnerIds(Auth::user());
-        return Owner::query()->with(['ownerMaterials.material','customer'])->select(['id','name','customer_id'])->whereIn('id', $ownerIds)->get();
+        return Owner::query()->with(['ownerMaterials.material','customer'])->select(['id','name','customer_id'])->whereIn('id', app("OwnerService")->getQuery())->get();
     }
 }

+ 33 - 26
app/Services/OwnerService.php

@@ -40,7 +40,7 @@ class OwnerService implements UserFilter
      */
     public function getIntersectPermitting(array $column = ['id', 'name'])
     {
-        $ownerIds=app('UserService')->getPermittingOwnerIds(Auth::user());
+        $ownerIds=app('OwnerService')->getIdArr();
         return $this->cacheService->getOrExecute('OwnersAll_IdName'.md5(json_encode($column).json_encode($ownerIds)),function()use($column,$ownerIds){
             if(empty($ownerIds))return new Collection();
             return Owner::query()->select($column)->whereIn('id', $ownerIds)->whereNull('deleted_at')->get();
@@ -182,42 +182,39 @@ class OwnerService implements UserFilter
     }
 
     public function getAuthorizedOwners(){
-        $user = Auth::user();
-        return Owner::query()->whereIn('id',app('UserService')->getPermittingOwnerIds($user)??[])->get();
+        return Owner::query()->whereIn('id',app("OwnerService")->getQuery())->get();
     }
 
     public function get(array $params, array $withs = null, bool $authority = true, bool $notShowSoftDelete = false, $user = null)
     {
-        /** @var User $user */
-        if ($user==null)$user = Auth::user();
         return Cache::remember(
             'owner_'.md5(json_encode($params).json_encode($withs).$authority.$notShowSoftDelete.json_encode($user))
             ,config('cache.expirations.rarelyChange')
-            ,function()use($params,$withs,$authority,$notShowSoftDelete,$user){
-            $query = Owner::query();
-            if ($withs)$query->with($withs);
-            if ($authority&&$user){
-                $ids = $user->getPermittingOwnerIdsAttribute();
-                $query->whereIn("id",$ids);
-            }
-            if ($notShowSoftDelete) $query->whereNull('deleted_at');
-            $query = $this->query($query,$params);
+            ,function()use($params,$withs,$authority,$notShowSoftDelete){
+            $query = $this->query($this->getQueryConstructor($withs, $authority, $notShowSoftDelete),$params);
             return $query->get();
         });
     }
 
-    public function paginate(array $params, array $withs = null, bool $authority = true, bool $notShowSoftDelete = false)
+    private function getQueryConstructor(array $withs, bool $authority, bool $notShowSoftDelete) :Builder
     {
-        /** @var User $user */
-        $user = Auth::user();
         $query = Owner::query();
         if ($withs)$query->with($withs);
         if ($authority){
-            $ids = $user->getPermittingOwnerIdsAttribute();
-            $query->whereIn("id",$ids);
+            $ids = $this->getIdArr();
+            if (count($ids) > 0){
+                $query->whereIn("id", $ids);
+            } else {
+                $query->where("id", 0);
+            }
         }
         if ($notShowSoftDelete) $query->whereNull('deleted_at');
-        $query = $this->query($query,$params)->orderByDesc("id");
+        return $query;
+    }
+    public function paginate(array $params, array $withs = null, bool $authority = true, bool $notShowSoftDelete = false)
+    {
+        $query = $this->query($this->getQueryConstructor($withs, $authority, $notShowSoftDelete),$params)->
+                orderByDesc("id");
         return $query->paginate($params["paginate"] ?? 50);
     }
 
@@ -576,18 +573,28 @@ sql;
     function getIdArr(?int $userId = null): array
     {
         if (!$userId)$userId = Auth::id();
-        return array_column($this->getQuery($userId)->get()->toArray(),"id");
+        return $this->cacheService->getOrExecute("USER.{$userId}.OWNER.ID",function()use($userId){
+            return array_column($this->getQuery($userId)->get()->toArray(),"id");
+        });
+    }
+    function getCodeArr(?int $userId): array
+    {
+        $column = "code";
+        if (!$userId)$userId = Auth::id();
+        return $this->cacheService->getOrExecute("USER.{$userId}.OWNER.CODE",function()use($userId, $column){
+            return array_column($this->getQuery($userId, $column)->get()->toArray(),$column);
+        });
     }
-    function getQuery(?int $userId = null): Builder
+    function getQuery(?int $userId = null, $column = "id"): Builder
     {
         if (!$userId)$userId = Auth::id();
-        $query = Owner::query()->select("owners.id");
-        if (!app("UserService")->checkAdminIdentity($userId) && !app("AuthorityService")->checkAllOwner()){
-            $query->whereHas("roles",function ($query)use($userId){
+        $query = Owner::query()->select("owners.".$column);
+        if (!app("UserService")->checkAdminIdentity($userId) && !app("AuthorityService")->checkAllOwner($userId)){
+            //$query->whereHas("roles",function ($query)use($userId){
                 $query->whereHas("users",function ($query)use($userId){
                     $query->where("users.id",$userId);
                 });
-            });
+            //});
         }
         return $query->whereNull("deleted_at");
     }

+ 1 - 2
app/Services/PackageService.php

@@ -19,11 +19,10 @@ class PackageService
     use ServiceAppAop;
     protected $modelClass=Package::class;
     private function conditionQuery($params){
-        $ownerIds=app('UserService')->getPermittingOwnerIds(Auth::user());
         $packages = OrderPackage::query()->with(['order'=>function($query){
             return  $query->with(['owner','logistic','batch']);
         },'paperBox','measuringMachine'])
-        ->whereIn('order_packages.owner_id',$ownerIds)->orderBy(TABLE.'id','DESC');
+        ->whereIn('order_packages.owner_id',app("OwnerService")->getIdArr())->orderBy(TABLE.'id','DESC');
         if ($params['owner'] ?? false){
             $owner_id = explode(',',$params['owner']);
             $packages->whereIn('order_packages.owner_id',$owner_id);

+ 1 - 2
app/Services/PackageStatisticsService.php

@@ -18,9 +18,8 @@ class PackageStatisticsService
      * @return Builder
      */
     private function conditionQuery(array $params){
-        $ownerIds = app('UserService')->getPermittingOwnerIds(auth()->user());
         $query = DB::table('order_packages')->select(DB::raw('COUNT(*) AS count'))
-            ->whereIn('order_packages.owner_id',$ownerIds)
+            ->whereIn('order_packages.owner_id',app("OwnerService")->getQuery())
             ->whereNotNull('logistic_id')
             ->leftJoin('orders','order_packages.order_id','orders.id')
                 ->selectRaw('orders.owner_id,logistic_id');

+ 1 - 1
app/Services/ReceivingTaskService.php

@@ -119,7 +119,7 @@ class ReceivingTaskService
     }
 
     /**
-     * 延时完成昨天未完成的工单
+     * 对昨天未完成的单进行超时完成
      */
     public function overtimeToCompleteTask()
     {

+ 20 - 6
app/Services/UserService.php

@@ -12,6 +12,7 @@ use Illuminate\Database\Eloquent\Model;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Cache;
 use App\Traits\ServiceAppAop;
+use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Log;
 
 
@@ -31,12 +32,6 @@ class UserService
         });
         return !!$roles->intersect($thisRoles)->count();
     }
-    function getPermittingOwnerIds($user=null){
-        if(!$user)return [];
-        return $this->cacheService->getOrExecute("user{$user['id']}->getPermittingOwnerIds",function()use($user){
-            return $user->getPermittingOwnerIdsAttribute() ?? [];
-        })??[];
-    }
 
     function getPermittingLogisticIds($user=null){
         if(!$user)return [];
@@ -194,4 +189,23 @@ class UserService
         $userAgent = isset($_SERVER['HTTP_USER_AGENT']) ? "#".md5($_SERVER['HTTP_USER_AGENT']) : "";
         return $tV===($token.$userAgent);
     }
+
+    /**
+     * 这里与ownerService的getIdArr区别为映射真实ID,摒弃其余因素干扰(超管身份,超级权限等)
+     *
+     * @param int|null $userId
+     * @return array
+     */
+    public function getUserUnderOwnerIdArr(?int $userId = null) :array
+    {
+        if (!$userId){
+            /**@var $user User*/
+            $user = Auth::user();
+        }else{
+            $user = new User();
+            $user->id = $userId;
+        }
+        $user->load("owners:id");
+        return array_column($user->owners->toArray(),"id");
+    }
 }

+ 2 - 2
app/Services/WaybillService.php

@@ -136,9 +136,9 @@ class WaybillService
             'uriType' => ['alias' => 'type'],
             'id' => ['multi' => ','],
             'logistic' => ['alias' => 'logistic_id', 'multi' => ','],
+            'ordering_remark' => ['like' => '%'],
         ];
-        $waybills = app(QueryService::class)->query($param,$waybills,$columnQueryRules,"waybills");
-        return $waybills;
+        return app(QueryService::class)->query($param,$waybills,$columnQueryRules,"waybills");
     }
 
     public function paginate(array $param){

+ 1 - 1
app/Services/WorkOrderCommoditiesService.php

@@ -142,7 +142,7 @@ class WorkOrderCommoditiesService
                     'sku' => $key,
                     'quality_label' => [
                         "${quality_label}"=> [
-                            "quality_label" => $quality_label, "amount" => $item->amount,
+                            "quality_label" => $quality_label, "amount" => 0,
                         ],
                     ],
                     'name' => $item->name_goods,

+ 1 - 1
app/Services/common/QueryService.php

@@ -63,7 +63,7 @@ class QueryService
                     $isExecute = true;
                 }
                 if ($rule === 'like'){
-                    $query = $query->where($tableName.$column,'like',$value.$params[$param].$value.'%');
+                    $query = $query->where($tableName.$column,'like',$value.$params[$param].'%');
                     $isExecute = true;
                 }
                 if ($rule === 'multi'){

+ 1 - 1
app/Traits/ModelSearchWay.php

@@ -38,7 +38,7 @@ trait ModelSearchWay
                 $sql .= ') ';
                 unset($condition);
             } else {
-                $sql .= " and $column like '".$condition."' ";
+                $sql .= " and $column like '".$condition."%' ";
             }
         }
         return $sql;

+ 1 - 1
app/Traits/SettlementBillTrait.php

@@ -19,7 +19,7 @@ trait SettlementBillTrait
      */
     public function getRequestParams($year, $month, $owner_id): array
     {
-        $permittingOwnerIds = app('UserService')->getPermittingOwnerIds(auth()->user());
+        $permittingOwnerIds = app("OwnerService")->getIdArr();
         if (is_null($year)) {
             $year = now()->subMonth()->year;
         }

+ 6 - 4
app/User.php

@@ -86,6 +86,11 @@ class User extends Authenticatable
     public function touchToken(){
         return $this->token();
     }
+    public function owners(): BelongsToMany
+    {
+        return $this->belongsToMany('App\Owner','owner_user','user_id','owner_id')
+            ->whereNull("deleted_at");
+    }
     function roles(){
         return $this->belongsToMany('App\Role','user_role','id_user','id_role');
     }
@@ -129,7 +134,7 @@ class User extends Authenticatable
         //原查询
         $old_owner=  array_column(DB::table("owner_role")->whereIn("role_id",
             array_column($this->roles->toArray(),"id"))->get()->toArray(),"owner_id");
-        //兼容
+        //兼容 TODO
         $new_owner = $this->ownerGroups()->with(['owners:id,user_owner_group_id'])->get();
         $new_work= $this->workGroups()->with(['owners:id,user_workgroup_id'])->get();
 
@@ -152,9 +157,6 @@ class User extends Authenticatable
         }else{
             $workgroupIds = array_column(DB::table("role_user_work_group")
                 ->whereIn("role_id",array_column($this->roles->toArray(),"id"))->get()->toArray(),"user_work_group_id");
-            /*$this->authorities()->each(function(Authority $authority)use(&$workgroupIds){
-                if($authority->type=="工作组"){array_push($workgroupIds,$authority->relevance);}
-            });*/
         }
         return $workgroupIds;
     }

+ 2 - 1
app/UserWorkgroup.php

@@ -7,11 +7,12 @@ use Illuminate\Database\Eloquent\Model;
 
 use App\Traits\ModelLogChanging;
 use Illuminate\Database\Eloquent\Relations\BelongsToMany;
+use Illuminate\Database\Eloquent\SoftDeletes;
 
 class UserWorkgroup extends Model
 {
     use ModelLogChanging;
-
+    use SoftDeletes;
     protected $table="user_workgroups";
     protected $fillable=['name','warehouse_id'];
     protected $appends=[

+ 4 - 3
app/Waybill.php

@@ -171,7 +171,7 @@ class Waybill extends Model
      * @return Builder
      */
     public static function filterAuthorities(){
-        $ids=app('UserService')->getPermittingOwnerIds(auth()->user());
+        $ownerQuery = app("OwnerService")->getQuery();
         return (new static)->newQuery()->leftJoin("orders","waybills.order_id","orders.id")
             ->leftJoin("owners","orders.owner_id","owners.id")
             ->selectRaw(<<<column
@@ -184,9 +184,10 @@ class Waybill extends Model
             orders.address as order_address
 column
 )
-            ->where(function ($query)use($ids){
+            ->where(function ($query)use($ownerQuery){
             /** @var Builder  $query */
-            $query->whereIn('waybills.owner_id',$ids)->orWhereIn("orders.owner_id",$ids);
+            $query->whereIn('waybills.owner_id',$ownerQuery)->
+                orWhereIn("orders.owner_id",$ownerQuery);
         });
     }
 

+ 1 - 1
config/users.php

@@ -1,7 +1,7 @@
 <?php
 
 return [
-    'superAdmin' => ['xuxiaodong','ldaaww','baoshi56','徐薇','周亚萍','shiyao','zhouzhendong','zengjun',"yang",'huhao','zy','刘媛媛','李家磊',env('SUPER_ADMIN',"")],
+    'superAdmin' => ['xuxiaodong','ldaaww','baoshi56','周亚萍','shiyao','zhouzhendong','zengjun',"yang",'huhao','zy','刘媛媛','李家磊',env('SUPER_ADMIN',"")],
     'token_expire_minutes'=>7200,
     'token_check_in_expire_minutes'=>432000, //打卡过期时间,单位为秒
     'cookie_expire_minutes'=>7200,//cookie过期时间,单位分钟

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

@@ -0,0 +1,32 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class UserWorkgroupSoftDelete extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('user_workgroups', function (Blueprint $table) {
+            $table->softDeletes();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('user_workgroups', function (Blueprint $table) {
+            $table->dropSoftDeletes();
+        });
+    }
+}

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

@@ -0,0 +1,32 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class CreateOwnerUserTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('owner_user', function (Blueprint $table) {
+            $table->bigInteger("owner_id");
+            $table->bigInteger("user_id");
+            $table->unique(["user_id","owner_id"]);
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('owner_user');
+    }
+}

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
resources/js/element/index.js


+ 221 - 179
resources/js/queryForm/header.js

@@ -1,120 +1,127 @@
 window.checkData = []; //全选 数据池
-window.sort=require('../utilities/sort');//排序组件
+window.sort = require('../utilities/sort');//排序组件
 window.Header = function getHeader(object) {
     let _targetDom = object.el ? document.getElementById(object.el) : document.getElementsByTagName("table")[0];//基点元素
     let _columns = object.column;   //列名
     let _fixedTop = object.fixedTop || 0;  //同级浮动元素高度,使当前元素追加该元素高度浮动
-    let _isCheckAllBox = object.isCheckAllBox!==false;//是否开启全选框
+    let _isCheckAllBox = object.isCheckAllBox !== false;//是否开启全选框
     let _data = object.data || [];   //被排序数据
     let _restorationColumn = object.restorationColumn || 'id'; //恢复原数据基准字段
     let _isRestorationColumnAsc = object.isRestorationColumnAsc || false;    //恢复原数据基准字段的排序类型 true:asc false:desc
     let _before = object.before;//前置元素
-    let _name = "header:"+(object.name ? object.name+"." : "");//唯一名称 用于区别模块 本地存储
+    let _name = "header:" + (object.name ? object.name + "." : "");//唯一名称 用于区别模块 本地存储
     let _isForbidDrag = object.isForbidDrag;
 
     let sortType = {}; //排序类型
     let columnArr = []; //列数组
 
     let moveTd = {}; //移动列
-    let isNested = _targetDom.getElementsByTagName("table").length>0;
+    let isNested = _targetDom.getElementsByTagName("table").length > 0;
 
     let setting = "setting-column";
     let settingInfo = localStorage.getItem("settingInfo") ? JSON.parse(localStorage.getItem("settingInfo")) : {
-        isCopyWrap : true
+        isCopyWrap: true
     };
     let keyCode = false;
     let settingCheck = true;
+    var beforeHeaderDom;
+    var headerDom;
 
     function getTargetChildNode(dom) { //递归获取input子节点
-        if (!dom || dom.tagName==='INPUT')return dom;
+        if (!dom || dom.tagName === 'INPUT') return dom;
         return getTargetChildNode(dom.firstElementChild);
     }
+
     function createHeaderBefore() {//生成前置元素
         let tr = document.createElement("tr");
         tr.className = "text-center";
-        _before.forEach(be=>{
+        _before.forEach(be => {
             let th = document.createElement("th");
-            if (be.colspan)th.colSpan = be.colspan;
-            if (be.font){
+            if (be.colspan) th.colSpan = be.colspan;
+            if (be.font) {
                 let font = document.createElement("span");
                 font.className = be.font;
                 th.appendChild(font);
             }
-            if (be.value)th.appendChild(document.createTextNode(be.value));
-            if (be.class)th.className = be.class;
+            if (be.value) th.appendChild(document.createTextNode(be.value));
+            if (be.class) th.className = be.class;
             tr.appendChild(th);
         });
         _targetDom.insertBefore(tr, _targetDom.firstElementChild);
+        beforeHeaderDom = tr;
     }
-    function appendFloat(div,cla="") {
+
+    function appendFloat(div, cla = "") {
         div.style.overflowX = "hidden";
-        div.className="m-0 p-0";
+        div.className = "m-0 p-0";
         let th = document.createElement("th");
-        th.className = "pl-2 pr-2 header-float "+cla;
-        th.style.top = _fixedTop+"px";
+        th.className = "pl-2 pr-2 header-float " + cla;
+        th.style.top = _fixedTop + "px";
         th.appendChild(div);
         return th;
     }
+
     function createHeader() {//生成表头列
         let tr = document.createElement("tr");
         tr.className = "text-nowrap";
         let firstTr = _targetDom.getElementsByTagName("tr")[0];
         let tds = [];
-        if (firstTr)tds = firstTr.children;
-        if (_isCheckAllBox){//是否开启全选
+        if (firstTr) tds = firstTr.children;
+        if (_isCheckAllBox) {//是否开启全选
             let div = document.createElement("div");
             let check = document.createElement("input");
             check.type = "checkbox";
             check.id = "checkAll";
-            if (firstTr)bindCheckbox(check);
+            if (firstTr) bindCheckbox(check);
             div.appendChild(check);
-            tr.appendChild(appendFloat(div,"text-left"));
+            tr.appendChild(appendFloat(div, "text-left"));
         }
 
         let i = (_isCheckAllBox && firstTr) ? 1 : 0;
-        for (i;i<(tds.length>0 ? tds.length : _columns.length);i++){
+        for (i; i < (tds.length > 0 ? tds.length : _columns.length); i++) {
             let div = document.createElement("div");
             let th = appendFloat(div);
-            let column = _columns[(_isCheckAllBox && firstTr) ? i-1 : i];
-            let wid = column ? localStorage.getItem(_name+column.name) : null;
-            if (wid){
-                div.style.width = wid+"px";
-                th.style.minWidth = wid+"px";
+            let column = _columns[(_isCheckAllBox && firstTr) ? i - 1 : i];
+            let wid = column ? localStorage.getItem(_name + column.name) : null;
+            if (wid) {
+                div.style.width = wid + "px";
+                th.style.minWidth = wid + "px";
                 let trs = _targetDom.children;
-                while(trs[0] && trs[0].tagName !== 'TR')trs = trs[0].children;
-                if (trs[0]){
-                    for (let j=0;j<trs.length;j++){
-                        if (trs[j].children[i]){
-                            trs[j].children[i].firstElementChild.style.width = wid+"px";
-                            trs[j].children[i].style.minWidth = wid+"px";
+                while (trs[0] && trs[0].tagName !== 'TR') trs = trs[0].children;
+                if (trs[0]) {
+                    for (let j = 0; j < trs.length; j++) {
+                        if (trs[j].children[i]) {
+                            trs[j].children[i].firstElementChild.style.width = wid + "px";
+                            trs[j].children[i].style.minWidth = wid + "px";
                         }
                     }
                 }
             }
-            if (column){
-                if (column.type === 'multi')  multiColumn(div,column);
-                else defaultColumn(div,column);
+            if (column) {
+                if (column.type === 'multi') multiColumn(div, column);
+                else defaultColumn(div, column);
             }
             tr.appendChild(th);
         }
         bindMove(tr);
-        if (_targetDom.firstElementChild)_targetDom.insertBefore(tr, _targetDom.firstElementChild);
+        if (_targetDom.firstElementChild) _targetDom.insertBefore(tr, _targetDom.firstElementChild);
         else _targetDom.appendChild(tr);
+        headerDom = tr;
     }
 
-    function multiColumn(th,column) { //多列样式的生成
-        if (column.title){
+    function multiColumn(th, column) { //多列样式的生成
+        if (column.title) {
             let div = document.createElement("div");
-            div.className="w-100 text-center";
+            div.className = "w-100 text-center";
             div.appendChild(document.createTextNode(column.title));
             th.appendChild(div);
         }
         let div = document.createElement("div");
-        div.className="row text-center";
-        if (column.rows){
-            column.rows.forEach(row=>{
+        div.className = "row text-center";
+        if (column.rows) {
+            column.rows.forEach(row => {
                 let node = document.createElement("div");
-                node.className = "col-"+(row.col ? row.col : 1);
+                node.className = "col-" + (row.col ? row.col : 1);
                 node.appendChild(document.createTextNode(row.value));
                 div.appendChild(node);
             });
@@ -122,67 +129,67 @@ window.Header = function getHeader(object) {
         }
     }
 
-    function defaultColumn(th,column) { //默认列样式的生成
-        if (column.style)for (let key in column.style)if (column.style.hasOwnProperty(key)) th.parentElement.style[key] = column.style[key];
-        if (column.class)th.parentElement.className +=  column.class;
+    function defaultColumn(th, column) { //默认列样式的生成
+        if (column.style) for (let key in column.style) if (column.style.hasOwnProperty(key)) th.parentElement.style[key] = column.style[key];
+        if (column.class) th.parentElement.className += column.class;
         let span = document.createElement("span");
         span.style.display = "inline-block";
-        if (!column.neglect){
+        if (!column.neglect) {
             span.style.cursor = "pointer";
             let font = document.createElement("span");
             font.className = "fa fa-sort";
             span.appendChild(font);
-            span.onclick = rule(column,font); //绑定排序事件
+            span.onclick = rule(column, font); //绑定排序事件
         }
         span.appendChild(document.createTextNode((column.value ? column.value : '')));
         th.appendChild(span);
     }
 
     //点击事件触发的排序规则
-    function rule(column,columnSort) {
+    function rule(column, columnSort) {
         return function () {
-            if (!sortType[column.name]){
+            if (!sortType[column.name]) {
                 sortType[column.name] = 'asc';
                 columnArr.push(column.name);
                 columnSort.className = "fa fa-sort-asc";
                 let columnArrTemp = [];
-                columnArrTemp.push.apply(columnArrTemp,columnArr);
-                window.sort.sort(_data,columnArrTemp,sortType);
-                return ;
+                columnArrTemp.push.apply(columnArrTemp, columnArr);
+                window.sort.sort(_data, columnArrTemp, sortType);
+                return;
             }
-            if (sortType[column.name] === 'asc'){
+            if (sortType[column.name] === 'asc') {
                 sortType[column.name] = 'desc';
                 columnSort.className = "fa fa-sort-desc";
                 let columnArrTemp = [];
-                columnArrTemp.push.apply(columnArrTemp,columnArr);
-                window.sort.sort(_data,columnArrTemp,sortType);
-                return ;
+                columnArrTemp.push.apply(columnArrTemp, columnArr);
+                window.sort.sort(_data, columnArrTemp, sortType);
+                return;
             }
-            if (sortType[column.name] === 'desc'){
+            if (sortType[column.name] === 'desc') {
                 delete sortType[column.name];
                 columnArr.some(function (name, index) {
-                    if (name === column.name){
-                        columnArr.splice(index,1);
+                    if (name === column.name) {
+                        columnArr.splice(index, 1);
                         return true;
                     }
                 });
                 columnSort.className = "fa fa-sort";
-                if (columnArr.length === 0){
+                if (columnArr.length === 0) {
                     //希尔排序
                     let arr = [];
-                    arr.push.apply(arr,_data);
+                    arr.push.apply(arr, _data);
                     let len = arr.length;
-                    for(let gap = Math.floor(len / 2); gap > 0; gap = Math.floor(gap / 2)) {
-                        for(let i = gap; i < len; i++) {
+                    for (let gap = Math.floor(len / 2); gap > 0; gap = Math.floor(gap / 2)) {
+                        for (let i = gap; i < len; i++) {
                             let j = i;
                             let current = arr[i];
-                            if (_isRestorationColumnAsc){
-                                while(j - gap >= 0 && Number(current[_restorationColumn]) < Number(arr[j - gap][_restorationColumn])) {
+                            if (_isRestorationColumnAsc) {
+                                while (j - gap >= 0 && Number(current[_restorationColumn]) < Number(arr[j - gap][_restorationColumn])) {
                                     arr[j] = arr[j - gap];
                                     j = j - gap;
                                 }
-                            }else{
-                                while(j - gap >= 0 && Number(current[_restorationColumn]) > Number(arr[j - gap][_restorationColumn])) {
+                            } else {
+                                while (j - gap >= 0 && Number(current[_restorationColumn]) > Number(arr[j - gap][_restorationColumn])) {
                                     arr[j] = arr[j - gap];
                                     j = j - gap;
                                 }
@@ -191,121 +198,132 @@ window.Header = function getHeader(object) {
                         }
                     }
                     _data.length = 0;
-                    _data.push.apply(_data,arr);
+                    _data.push.apply(_data, arr);
                     return;
                 }
                 let columnArrTemp = [];
-                columnArrTemp.push.apply(columnArrTemp,columnArr);
-                window.sort.sort(_data,columnArrTemp,sortType);
+                columnArrTemp.push.apply(columnArrTemp, columnArr);
+                window.sort.sort(_data, columnArrTemp, sortType);
             }
         }
     }
+
     function bindCheckbox(check) {
         let trs = _targetDom.children;
-        while(trs[0].tagName !== 'TR')trs = trs[0].children;
+        while (trs[0].tagName !== 'TR') trs = trs[0].children;
         check.onchange = function () {
-            if (event.target.checked){
-                for (let i=0;i<trs.length;i++){
+            if (event.target.checked) {
+                for (let i = 0; i < trs.length; i++) {
                     let checkbox = getTargetChildNode(trs[i].children[0]);
-                    if (checkbox && !checkbox.checked){
+                    if (checkbox && !checkbox.checked) {
                         checkData.push(checkbox.value);
                         checkbox.checked = true;
                     }
                 }
-            }else{
+            } else {
                 checkData = [];
-                for (let i=0;i<trs.length;i++){
+                for (let i = 0; i < trs.length; i++) {
                     let checkbox = getTargetChildNode(trs[i].children[0]);
-                    if (checkbox && checkbox.checked)checkbox.checked = false;
+                    if (checkbox && checkbox.checked) checkbox.checked = false;
                 }
             }
         };
-        for (let i=0;i<trs.length;i++){
+        for (let i = 0; i < trs.length; i++) {
             let checkbox = getTargetChildNode(trs[i].children[0]);
             if (checkbox) checkbox.onchange = function () {
-                if (event.target.checked)checkData.push(checkbox.value);
-                else checkData.splice(checkData.indexOf(checkbox.value),1);
-                if (checkData.length === _data.length && !check.checked)check.checked=true;
-                if (checkData.length !== _data.length && check.checked) check.checked=false;
+                if (event.target.checked) checkData.push(checkbox.value);
+                else checkData.splice(checkData.indexOf(checkbox.value), 1);
+                if (checkData.length === _data.length && !check.checked) check.checked = true;
+                if (checkData.length !== _data.length && check.checked) check.checked = false;
             }
         }
     }
+
     function bindMove(tr) {
-        if (_isForbidDrag)return;
-        for (let j=0;j<tr.children.length;j++){ //为首列绑定拖拽列宽事件
-            tr.children[j].onmousedown = function (){
-                if (j===0 && event.offsetX<10)return;
-                if(event.offsetX<10)moveTd = {oldX:event.clientX,dom:tr.children[j-1],index:j-1};
-                if (event.offsetX > tr.children[j].offsetWidth-10)moveTd = {oldX:event.clientX,dom:tr.children[j],index:j};
+        if (_isForbidDrag) return;
+        for (let j = 0; j < tr.children.length; j++) { //为首列绑定拖拽列宽事件
+            tr.children[j].onmousedown = function () {
+                if (j === 0 && event.offsetX < 10) return;
+                if (event.offsetX < 10) moveTd = {oldX: event.clientX, dom: tr.children[j - 1], index: j - 1};
+                if (event.offsetX > tr.children[j].offsetWidth - 10) moveTd = {
+                    oldX: event.clientX,
+                    dom: tr.children[j],
+                    index: j
+                };
             };
             tr.children[j].onmousemove = function () {
-                if (j===0 && event.offsetX<10)return;
-                if(event.offsetX<10 || event.offsetX > tr.children[j].offsetWidth-10)
+                if (j === 0 && event.offsetX < 10) return;
+                if (event.offsetX < 10 || event.offsetX > tr.children[j].offsetWidth - 10)
                     this.style.cursor = 'w-resize';
                 else this.style.cursor = 'default';
             }
         }
-        document.onmouseup = function (){ //全局监听拖拽列宽的发生 作用域设为全局是为了防抖动
-            if (moveTd.oldX){
+        document.onmouseup = function () { //全局监听拖拽列宽的发生 作用域设为全局是为了防抖动
+            if (moveTd.oldX) {
                 event.stopPropagation();
                 moveTd.dom.style.cursor = 'default';
                 moveTd.oldX = undefined;
                 setTimeout(function () {
-                    let column = _columns[(_isCheckAllBox && _targetDom.firstElementChild) ? moveTd.index-1 : moveTd.index];
-                    if (column) localStorage.setItem(_name+column.name, moveTd.dom.offsetWidth);
+                    let column = _columns[(_isCheckAllBox && _targetDom.firstElementChild) ? moveTd.index - 1 : moveTd.index];
+                    if (column) localStorage.setItem(_name + column.name, moveTd.dom.offsetWidth);
                 });
             }
         }; //移动时调整表头与表身的列宽
-        document.onmousemove = function(){
-            if (moveTd.oldX){
+        document.onmousemove = function () {
+            if (moveTd.oldX) {
                 event.stopPropagation();
-                let diff = event.clientX-moveTd.oldX;
-                let newWidth = moveTd.dom.firstElementChild.offsetWidth+diff+"px";
-                if (diff!==0){
+                let diff = event.clientX - moveTd.oldX;
+                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++){
-                        if (isNested){
+                    for (let j = (_before ? 1 : 0); j < trs.length; j++) {
+                        if (isNested) {
                             let table = trs[j].parentElement;
-                            while (table.tagName!=='TABLE') table = table.parentElement;
-                            if (table.id!==object.el)continue;
+                            while (table.tagName !== 'TABLE') table = table.parentElement;
+                            if (table.id !== object.el) continue;
                         }
-                        if (trs[j].children[moveTd.index]){
+                        if (trs[j].children[moveTd.index]) {
                             trs[j].children[moveTd.index].firstElementChild.style.width = newWidth;
                             trs[j].children[moveTd.index].style.minWidth = newWidth;
                         }
                     }
-                    _targetDom.style.width = _targetDom.offsetWidth+diff+"px";
+                    _targetDom.style.width = _targetDom.offsetWidth + diff + "px";
                     moveTd.oldX = event.clientX;
                 }
             }
         };
     }
+
     function repaintDom() {
         let trs = _targetDom.getElementsByTagName("tr");
-        for (let i=0;i<trs.length;i++){
-            if (isNested){
+        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;
+                while (table.tagName !== 'TABLE') table = table.parentElement;
+                if (table.id !== object.el) continue;
             }
             let tds = trs[i].children;
-            for (let j=0;j<tds.length;j++){
+            for (let j = 0; j < tds.length; j++) {
                 let count = tds[j].children.length;
                 let div = document.createElement("div");
                 div.style.overflowX = "hidden";
-                for (let k=0;k<count;k++){div.appendChild(tds[j].children[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 (){
+        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">
@@ -332,7 +350,8 @@ window.Header = function getHeader(object) {
         div.appendChild(h1);
         document.body.appendChild(div);
     }
-    function _createSettingHeader(text,id) {
+
+    function _createSettingHeader(text, id) {
         let div = document.createElement("div");
         div.style.width = "5%";
         div.style.display = "inline-block";
@@ -342,91 +361,95 @@ window.Header = function getHeader(object) {
         div.innerText = text;
         div.id = id;
         div.onclick = function () {
-            if (event.target.id===setting)return;
+            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 = "";
+            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);
+        return function () {
+            let storage = localStorage.getItem("column:" + object.name);
             let arr = storage ? storage.split(',') : [];
-            localStorage.setItem("column:"+object.name,_exeHid(arr).toString());
+            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++){
+        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){
+            if (checked && arr.indexOf(value) !== -1) show.push(index);
+            if (!checked) {
                 newArr.push(value);
-                if (arr.indexOf(value)===-1)hid.push(index);
+                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){ //排除表格嵌套
+        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;
+                while (table.tagName !== 'TABLE') table = table.parentElement;
+                if (table.id !== object.el) continue;
             }
-            if (total!==trs[i].children.length){ //存在合并行/列
+            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 < 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");
+                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++;
+
+    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 {
+            if (dom.colSpan > 1) dom.colSpan--;
             else dom.style.display = "none";
         }
     }
+
     function appendCheckboxList(div) {
-        let storage = localStorage.getItem("column:"+object.name);
+        let storage = localStorage.getItem("column:" + object.name);
         let arr = storage ? storage.split(',') : [];
-        _columns.forEach(function (column,index) {
-            let key = "setting-column-"+column.name;
+        _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.type = "checkbox";
+            input.id = key;
             input.className = "fixed-checkbox";
-            input.dataset.index = _isCheckAllBox ? index+1 : index;
+            input.dataset.index = _isCheckAllBox ? index + 1 : index;
             input.value = column.name;
-            if (arr.indexOf(column.name)===-1)input.checked = true;
+            if (arr.indexOf(column.name) === -1) input.checked = true;
             label.appendChild(input);
             let la = document.createElement("label");
-            la.setAttribute("for",key);
+            la.setAttribute("for", key);
             label.appendChild(la);
             label.appendChild(document.createTextNode(column.type ? column.title : column.value));
             let prentLabel = document.createElement("label");
@@ -435,29 +458,33 @@ window.Header = function getHeader(object) {
             div.appendChild(prentLabel);
         });
     }
+
     function bindClearEvent(need) {
-        return function() {
+        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);
+                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;
+            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;
+            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">
@@ -509,17 +536,17 @@ window.Header = function getHeader(object) {
         span.onclick = showSetting("setting-2");
         div11.appendChild(span);
         div1.appendChild(div11);
-        let div12 = _createSettingHeader("显示列","setting-column");
+        let div12 = _createSettingHeader("显示列", "setting-column");
         div12.style.backgroundColor = "#3490dc";
         div12.style.color = "white";
         div1.appendChild(div12);
-        div1.appendChild(_createSettingHeader("表头设置","setting-header"));
+        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.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);
@@ -534,7 +561,7 @@ window.Header = function getHeader(object) {
         let btn = document.createElement("button");
         btn.className = "btn btn-sm btn-success";
         btn.type = "button";
-        btn.innerText="保存设置";
+        btn.innerText = "保存设置";
         btn.onclick = bindColumnEvent();
         let div211 = document.createElement("div");
         div211.appendChild(btn);
@@ -554,7 +581,7 @@ window.Header = function getHeader(object) {
         div2.appendChild(div21);
         let div22 = document.createElement("div");
         div22.id = "setting-header-body";
-        div22.style.display="none";
+        div22.style.display = "none";
         let div221 = document.createElement("div");
         div221.className = "row mt-2";
         let text = document.createElement("label");
@@ -581,9 +608,9 @@ window.Header = function getHeader(object) {
         input.type = "checkbox";
         input.className = "switch";
         input.checked = settingInfo.isCopyNoWrap;
-        input.onchange = function(){
+        input.onchange = function () {
             settingInfo.isCopyNoWrap = event.target.checked;
-            localStorage.setItem("settingInfo",JSON.stringify(settingInfo));
+            localStorage.setItem("settingInfo", JSON.stringify(settingInfo));
         };
         let div223 = document.createElement("div");
         div223.className = "row";
@@ -594,9 +621,9 @@ window.Header = function getHeader(object) {
         let btn3 = document.createElement("button");
         btn3.className = "btn btn-sm btn-outline-info";
         btn3.innerText = "打开消息面板";
-        btn3.onclick= function (){
+        btn3.onclick = function () {
             let height = window.screen.height;
-            window.open ("https://"+window.location.host+"/notification/regular", 'newwindow', 'height='+(height*0.7)+', width=510 ,top='+(height*0.10)+
+            window.open("https://" + window.location.host + "/notification/regular", 'newwindow', 'height=' + (height * 0.7) + ', width=510 ,top=' + (height * 0.10) +
                 'toolbar=no, menubar=no, scrollbars=no, resizable=no,location=no, status=no');
         };
         div223.appendChild(btn3);
@@ -609,31 +636,46 @@ window.Header = function getHeader(object) {
         div.appendChild(div2);
         document.body.appendChild(div);
     }
+
     function createSetting() {
         _createSetting1();
         _createSetting2();
     }
+
     function bindGlobalEvent() {
         document.onkeydown = (e) => {
-            if (e.ctrlKey && e.keyCode===67)keyCode = true;
+            if (e.ctrlKey && e.keyCode === 67) keyCode = true;
         };
-        document.oncopy = (e)=>{
-            if (keyCode && settingInfo.isCopyNoWrap){
+        document.oncopy = (e) => {
+            if (keyCode && settingInfo.isCopyNoWrap) {
                 e.preventDefault();
                 let content = window.getSelection().toString();
-                e.clipboardData.setData("text", content.replace(/[\n\r]/g,' '));
+                e.clipboardData.setData("text", content.replace(/[\n\r]/g, ' '));
                 keyCode = false;
             }
         };
     }
+
     //初始化
-    this.init = function() {
-        if (!_isForbidDrag)repaintDom();
+    this.init = function () {
+        if (!_isForbidDrag) repaintDom();
         createHeader();
-        if (_before)createHeaderBefore();
+        if (_before) createHeaderBefore();
         createSetting();
         _exeHid([]);
         bindGlobalEvent();
-        _targetDom.style.width = _targetDom.offsetWidth+"px";
+        _targetDom.style.width = _targetDom.offsetWidth + "px";
     };
+
+    this.redrawHeader = function(column) {
+        _columns = column;
+        if (beforeHeaderDom) {
+            _targetDom.removeChild(beforeHeaderDom);
+        }
+        if (headerDom) {
+            _targetDom.removeChild(headerDom);
+        }
+        createHeader();
+        if (_before) createHeaderBefore();
+    }
 };

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
resources/sass/element/index.css


+ 1 - 0
resources/views/inventory/statement/changeInventory.blade.php

@@ -86,6 +86,7 @@
                         {name:'SKU',type:'input',tip:'可支持多产品编码,糊模查找需要在左边打上%符号',placeholder: '产品编码'},
                         {name:'ALTERNATE_SKU1',type:'input',tip:'可支持多产品条码,糊模查找需要在左边打上%符号',placeholder: '产品条码'},
                         {name:'LotAtt02_end',type:'dateTime',tip:'选择显示失效日期的结束时间'},
+                        {name:'commodity_name',type:'input',tip:'商品名称模糊搜索,请配合其余条件一起使用,加%为全量模糊',placeholder: '商品名称'},
                     ],
                 ];
                 this.form = new query({

+ 0 - 122
resources/views/maintenance/role/index.blade.bak.php

@@ -1,122 +0,0 @@
-@extends('layouts.app')
-@section('title')查询-角色@endsection
-
-@section('content')
-    <span id="nav2">
-        @component('maintenance.menu')@endcomponent
-        @component('maintenance.role.menu')@endcomponent
-    </span>
-    <div class="container-fluid">
-        <div class="card">
-            <div id="form_div"></div>
-            <div class="card-body" id="list">
-                @if(Session::has('successTip'))
-                    <div class="alert alert-success h1">{{Session::get('successTip')}}</div>
-                @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>
-                            <div style="max-height: 130px;overflow-y: scroll;border: solid 1px #ddd;" v-if="role.authorities.length>0">
-                                <ul class="list-group">
-                                    <li v-for="authority in role.authorities" v-if="authority.permission=='允许'"  style="list-style: none">@{{ authority.alias_name }}</li>
-                                </ul>
-                            </div>
-                        </td>
-                        <td>
-                            <div style="max-height: 130px;overflow-y: scroll;border: solid 1px #ddd;" v-if="role.authorities.length>0">
-                                <ul class="list-group">
-                                    <li v-for="authority in role.authorities" v-if="authority.permission=='禁止'"  style="list-style: none">@{{ authority.alias_name }}</li>
-                                </ul>
-                            </div>
-                        </td>
-                        <td class="text-muted">@{{role.created_at}}</td>
-                        <td>
-                            @can('角色-编辑')
-                            <button class="btn btn-sm btn-outline-primary" @click="edit(role.id)">改</button> @endcan
-                            @can('角色-删除')
-                            <button class="btn btn-sm btn-outline-dark" @click="destroy(role)">删</button> @endcan
-                        </td>
-                    </tr>
-                </table>
-                {{$roles->links()}}
-            </div>
-        </div>
-    </div>
-@endsection
-
-@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>
-        new Vue({
-            el:"#list",
-            data:{
-                roles:[
-                        @foreach( $roles as $role )
-                    {id:'{{$role->id}}',name:'{{$role->name}}',
-                        authorities:{!! $role->authorities !!},created_at:'{{$role->created_at}}',
-                    },
-                    @endforeach
-                ],
-                form:'',
-                selectTr:0
-            },
-            mounted:function(){
-                let data = [[
-                    {name:'role',type:'input',tip:'角色名:可在两侧添加百分号(%)进行模糊搜索',placeholder:'角色名'}]];
-                this.form = new query({
-                    el: '#form_div',
-                    condition: data,
-                });
-                this.form.init();
-                let column = [
-                    {name:'id',value: 'ID'},
-                    {name:'name',value: '角色'},
-                    {name:'alias_name',value: '允许权限', neglect: true},
-                    {name:'alias_name_false',value: '禁止权限', neglect: true},
-                    {name:'created_at',value: '创建时间'},
-                    {name:'operation',value: '操作', neglect: true},
-                ];
-                new Header({
-                    el:"table",
-                    name:"role",
-                    column: column,
-                    data: this.roles,
-                    fixedTop: ($('#form_div').height())+2,
-                }).init();
-            },
-            methods:{
-                edit:function(id){
-                    location.href = "{{url('maintenance/role')}}/"+id+"/edit";
-                },
-                destroy:function(role){
-                    if(!confirm('确定要删除角色“' + role.name + '”吗?')){return};
-                    let data=this;
-                    let url = "{{url('maintenance/role')}}/"+role.id;
-                    axios.delete(url,{id:role.id})
-                        .then(function (response) {
-                            if(response.data.success){
-                                for (let i = 0; i < data.roles.length; i++) {
-                                    if (data.roles[i].id===role.id){
-                                        data.roles.splice(i,1);
-                                        break;
-                                    }
-                                }
-                                tempTip.setDuration(1000);
-                                tempTip.showSuccess('删除角色"'+role.name+'"成功!')
-                            }else{
-                                tempTip.setDuration(1000);
-                                tempTip.show('删除角色"'+role.name+'"失败!')
-                            }
-                        })
-                        .catch(function (err) {
-                            tempTip.setDuration(3000);
-                            tempTip.show('删除角色失败!'+'网络错误:' + err)
-                        });
-                },
-            }
-        });
-    </script>
-@endsection

+ 38 - 0
resources/views/maintenance/user/_allocationOwner.blade.php

@@ -0,0 +1,38 @@
+<div class="modal fade" id="allocation-owner" tabindex="-1" role="dialog" aria-hidden="true">
+    <div class="modal-dialog modal-dialog-centered" role="document">
+        <div class="modal-content">
+            <div class="modal-header">
+                <div class="text-center font-weight-bold h4">分配货主</div>
+                <button type="button" class="close" data-dismiss="modal">&times;</button>
+            </div>
+            <div class="modal-body card p-0">
+                <div class="card-header row">
+                    <div class="col-4">
+                        <div class="pull-left text-muted">
+                            <label for="check-owners">
+                                <input type="checkbox" class="switch" v-model="switchStatus" @change="changeSwitchStatus()"  id="check-owners">
+                            </label>
+                        </div>
+                        <label class="ml-0">未拥有</label>
+                    </div>
+                    <div class="col-7">
+                        <input class="form-control form-control-sm rounded-pill" placeholder="检索" @keydown.enter="seekOwner($event)">
+                    </div>
+                </div>
+                <div class="card-body overflow-scrollbar-200 p-0">
+                    <ul class="list-group">
+                        <li class="list-group-item" v-for="owner in owners" v-show="!owner.hide">
+                            <label class="custom-control custom-checkbox" style="user-select:none" :for="'owner'+owner.name">
+                                <input type="checkbox" class="custom-control-input" v-model="switchOwner" :value="owner.name" :id="'owner'+owner.name">
+                                <label class="custom-control-label ml-0">@{{ owner.value }}</label>
+                            </label>
+                        </li>
+                    </ul>
+                </div>
+            </div>
+            <div class="modal-footer">
+                <button class="col-12 btn btn-success" @click="executeAllocation()">确定</button>
+            </div>
+        </div>
+    </div>
+</div>

+ 57 - 1
resources/views/maintenance/user/index.blade.php

@@ -11,6 +11,7 @@
                 @endif
                 <div id="list">
                     @include("maintenance.user._resetPwd")
+                    @include("maintenance.user._allocationOwner")
                     <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"><span>@{{user.id}}</span></td>
@@ -37,7 +38,8 @@
                             <td>
                                 @can('用户-编辑')
                                 <button class="btn btn-sm btn-warning" @click="openResetPwdModal(user)">重置密码</button>
-                                <button class="btn btn-sm btn-outline-primary" @click="edit(user.id)">改</button> @endcan
+                                <button class="btn btn-sm btn-info ml-1" @click="allocationOwner(user)">分配货主</button>
+                                <button class="btn btn-sm btn-outline-primary ml-1" @click="edit(user.id)">改</button> @endcan
                                 @can('用户-删除')
                                 <button class="btn btn-sm btn-outline-dark" @click="destroy(user)">删</button> @endcan
                             </td>
@@ -69,6 +71,8 @@
                 ],
                 selectTr:0,
                 user:{},
+                switchStatus:false,
+                switchOwner:[],
             },
             mounted:function(){
                 let data = [
@@ -153,6 +157,58 @@
                         return "已重置用户:“"+this.user.name+"”的密码";
                     },true);
                 },
+                allocationOwner(user){
+                    this.switchOwner = [];
+                    this._updateOwnerShow(this.switchStatus);
+                    this.user = user;
+                    if (!user.owners){
+                        window.tempTip.postBasicRequest("{{url('maintenance/user/getOwners')}}", {id:user.id},res=>{
+                            this.user.owners = res;
+                            this.switchOwner = res;
+                        });
+                    }else{
+                        this.switchOwner = user.owners;
+                    }
+                    $("#allocation-owner").modal('show');
+                },
+                changeSwitchStatus(){
+                    if (!this.user.owners || this.user.owners.length===0){
+                        this._updateOwnerShow(!this.switchStatus);
+                    }else{
+                        this.owners.forEach(owner=>{
+                            owner.hide = this.isExist(this.user.owners,owner.name) && this.switchStatus;
+                        });
+                        this.$forceUpdate();
+                    }
+                },
+                _updateOwnerShow(isHide){
+                    this.owners.forEach(owner=>{
+                        owner.hide = isHide;
+                    })
+                    this.$forceUpdate();
+                },
+                seekOwner(e){
+                    let val = e.target.value;
+                    this.owners.forEach(owner=>{
+                        if (owner.value.indexOf(val) > -1){
+                            owner.hide = !((this.switchStatus && !this.isExist(this.user.owners,owner.name)) || !this.switchStatus);
+                        }else{
+                            owner.hide = true;
+                        }
+                    })
+                    this.$forceUpdate();
+                },
+                executeAllocation(){
+                    window.tempTip.postBasicRequest("{{url('maintenance/user/bindOwner')}}", {id:this.user.id,owners:this.switchOwner},()=>{
+                        this.user.owners = this.switchOwner;
+                        return "绑定成功";
+                    },true);
+                },
+                isExist(arr, tar){
+                    return arr.some(val=>{
+                        return val == tar;
+                    });
+                },
             }
         });
     </script>

+ 182 - 136
resources/views/order/workOrder/index.blade.php

@@ -1,8 +1,7 @@
 @extends("layouts.app")
 @section('title','处理工单')
 @section('head')
-    <link href="{{ mix('css/element-ui.css') }}" rel="stylesheet">
-    <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
+    <link href="{{ asset('css/element-ui.css') }}" rel="stylesheet">
 @endsection
 
 @section("content")
@@ -203,6 +202,7 @@
                                         </button>
                                     @endcan
                                 </td>
+                                <td v-text="item.created_at"></td>
                                 <td>
                                     <span v-text="item.issue_type_name"></span>
                                 </td>
@@ -220,11 +220,20 @@
                                         <span v-text="logistic_number"></span>
                                     </div>
                                 </td>
-                                <td v-text="item.created_at"></td>
                                 <td v-text="item.status"></td>
                                 <td v-text="item.creator ? item.creator.name : ''"></td>
                                 <td v-text="item.result_explain ? item.result_explain: item.remark"></td>
-                                <td class="text-muted child-layer-3-hide">
+                                <td class="p-0 m-0 w-50" style="width:30px;" v-if="i===0"
+                                    :rowspan="workOrders.length">
+                                    <span class="btn"
+                                          style="max-width: 50px"
+                                          :class="hideRejectedBills ? 'btn-outline-secondary':'btn-outline-info'"
+                                          @click="toggleRejectedBill()" :style="{'min-height':toggleBtnHeight+'px'}"
+                                          v-text="hideRejectedBills ? '展开运单列' : '隐藏运单列'">
+                                    </span>
+                                </td>
+
+                                <td class="text-muted child-layer-3-hide" v-if="!hideRejectedBills">
                                     <div class="form-inline">
                                         <div class="form-group">
                                             <input type="text" class="form-control form-text form-control-sm mr-1">
@@ -249,7 +258,7 @@
                                     </div>
                                 </td>
                                 @if( \Illuminate\Support\Facades\Gate::check('订单管理-工单处理-宝时编辑') || \Illuminate\Support\Facades\Gate::check('订单管理-工单处理-商家编辑') )
-                                    <td class="p-0 child-layer-3-hide align-center">
+                                    <td class="p-0 child-layer-3-hide align-center" v-if="!hideRejectedBills">
                                         <div class="m-0 p-0" v-if="item.rejected_bill_items">
                                             <table class="table table-sm m-0" v-show="showRejectedBillItem === item.id">
                                                 <tr v-for="rejected_bill_item in item.rejected_bill_items">
@@ -296,6 +305,8 @@
                                         </div>
                                     </td>
                                 @endif
+
+
                                 <td class="log-td"
                                     v-on:mouseover="showAddBtn($event)"
                                     v-on:mouseleave="hideAddBtn($event)">
@@ -308,24 +319,6 @@
                                         @include('order.workOrder._issue_logs')
                                     </td>
                                 @endcan
-                                <td class="container" style="min-width: 500px">
-                                    <div class="row">
-                                        @can('订单管理-工单处理-删除')
-                                            <div class="col-2 ">
-                                                <div class="header-alert">
-                                                    <button type="button"
-                                                            class="btn btn-sm btn-outline-danger"
-                                                            @click="destroy(item,i)">
-                                                        删除
-                                                    </button>
-                                                </div>
-                                            </div>
-                                        @endcan
-                                        <div class="col-10 m-0 ">
-                                            @include('order.workOrder._work_order_details')
-                                        </div>
-                                    </div>
-                                </td>
                                 @can('订单管理-工单处理-宝时编辑')
                                     <td>
                                         <input type="number" class="form-control form-control-sm"
@@ -370,7 +363,9 @@
                                             <tr v-for="(user_workgroup,index) in item.user_work_groups">
                                                 <td>
                                                     <span v-text="user_workgroup.name"></span>
-                                                    <button class="btn btn-sm btn-outline-danger float-right" @click="destroyUserWorkGroup(item,index,$event)">删</button>
+                                                    <button class="btn btn-sm btn-outline-danger float-right"
+                                                            @click="destroyUserWorkGroup(item,index,$event)">删
+                                                    </button>
                                                 </td>
                                             </tr>
                                         </table>
@@ -386,6 +381,25 @@
                                         </select>
                                     </td>
                                 @endcan
+                                <td class="container" style="min-width: 500px">
+                                    <div class="row">
+                                        @can('订单管理-工单处理-删除')
+                                            <div class="col-2 ">
+                                                <div class="header-alert">
+                                                    <button type="button"
+                                                            class="btn btn-sm btn-outline-danger"
+                                                            @click="destroy(item,i)">
+                                                        删除
+                                                    </button>
+                                                </div>
+                                            </div>
+                                        @endcan
+                                        <div class="col-10 m-0 ">
+                                            @include('order.workOrder._work_order_details')
+                                        </div>
+                                    </div>
+                                </td>
+
                             </tr>
                         </template>
                         </tbody>
@@ -414,7 +428,7 @@
     <script type="text/javascript" src="{{asset('js/queryForm/queryForm.js')}}"></script>
     <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>
     <script type="text/javascript" src="{{mix('js/element-ui.js') }}"></script>
-    <script src="https://unpkg.com/element-ui/lib/index.js"></script>
+    <script type="text/javascript" src="{{asset('js/element/index.js')}}"></script>
     <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
 
     <style>
@@ -635,7 +649,7 @@
                 dialogBatchEditOrderIssueLogVisible: false,  // 问题件日志
                 dialogProcessLogVisible: false,              // 工单处理日志
                 dialogOrderCommoditiesVisible: false,              // 订单商品详情
-                dialogCommoditiesEqualsVisible:false,       // 商品对比
+                dialogCommoditiesEqualsVisible: false,       // 商品对比
 
                 showProcessLogId: null,         // workOrder->id
                 showAddDetailProcessLog: null,        // workOrderDetail->ids
@@ -660,18 +674,21 @@
                 },
                 order_info_commodities_key: 101,
                 workOrderRemissionType: [
-                    {name:'原单减免',value:'原单减免'},
-                    {name:'补发减免',value:'补发减免'},
-                    {name:'全部减免',value:'全部减免'},
+                    {name: '原单减免', value: '原单减免'},
+                    {name: '补发减免', value: '补发减免'},
+                    {name: '全部减免', value: '全部减免'},
+                ],
+                rejectingStatus: [
+                    {name: '无', value: '无'},
+                    {name: '未退回', value: '未退回'},
+                    {name: '全部退回', value: '全部退回'},
+                    {name: '部分退回', value: '部分退回'},
+                    {name: '差异退回', value: '差异退回'},
                 ],
-                rejectingStatus:[
-                    {name:'无',value:'无'},
-                    {name:'未退回',value:'未退回'},
-                    {name:'全部退回',value:'全部退回'},
-                    {name:'部分退回',value:'部分退回'},
-                    {name:'差异退回',value:'差异退回'},
-                    ],
-                commodityEqualsMap:[],
+                commodityEqualsMap: [],
+                hideRejectedBills: true,
+                tableHeader:null,
+                toggleBtnHeight:0,
             },
             computed: {},
             mounted() {
@@ -761,15 +778,27 @@
                     {name: 'is_end', type: 'checkbox', tip: '是否已拦截', data: [{name: 'ture', value: '已完成'}]},
                 ], [
                     {name: 'logistic_indemnity_money', type: 'input', placeholder: '承运商赔偿金额'},
-                    {name: 'logistic_express_remission', type: 'select', placeholder: '承运商快递减免',data:this.workOrderRemissionType},
+                    {
+                        name: 'logistic_express_remission',
+                        type: 'select',
+                        placeholder: '承运商快递减免',
+                        data: this.workOrderRemissionType
+                    },
                     {name: 'bao_shi_indemnity_money', type: 'input', placeholder: '宝时赔偿金额'},
-                    {name: 'bao_shi_express_remission', type: 'select', placeholder: '宝时快递减免',data:this.workOrderRemissionType},
-                    {name: 'user_work_group_id', type: 'select_multiple_select',
+                    {
+                        name: 'bao_shi_express_remission',
+                        type: 'select',
+                        placeholder: '宝时快递减免',
+                        data: this.workOrderRemissionType
+                    },
+                    {
+                        name: 'user_work_group_id', type: 'select_multiple_select',
                         tip: ['输入关键词快速定位下拉列表,回车确定', '选择要显示的仓库责任方'],
-                        placeholder: ['仓库责任方', '定位或多选仓库责任方'],data:this.userWorkgroup},
-                    {name: 'user_owner_group_id', type: 'select', placeholder: '项目责任方',data:this.userOwnerGroup},
-                    {name: 'rejecting_status', type: 'select', placeholder: '退回状态',data:this.rejectingStatus},
-                ],[
+                        placeholder: ['仓库责任方', '定位或多选仓库责任方'], data: this.userWorkgroup
+                    },
+                    {name: 'user_owner_group_id', type: 'select', placeholder: '项目责任方', data: this.userOwnerGroup},
+                    {name: 'rejecting_status', type: 'select', placeholder: '退回状态', data: this.rejectingStatus},
+                ], [
                     {name: 'order_issue_log', type: 'input', placeholder: '问题件处理日志'},
                     {
                         name: ['log_content', 'addtime'],
@@ -796,8 +825,9 @@
                     },
                     {name: 'shop_name', type: 'input', placeholder: '商铺名'},
                     {name: 'work_order_process_log', type: 'input', placeholder: '工单处理日志'},
-                    {name:"rejectingStatus",type:'select', placeholder: '退单状态',
-                        data:[
+                    {
+                        name: "rejectingStatus", type: 'select', placeholder: '退单状态',
+                        data: [
                             {name: '无', value: '无'},
                             {name: '未退回', value: '未退回'},
                             {name: '全部退回', value: '全部退回'},
@@ -813,66 +843,7 @@
                     appendDom: "btn",
                 });
                 this.form.init();
-                let column = [
-                    {name: 'id', value: '工单号', neglect: true},
-                    {name: 'operation', value: '操作', neglect: true},
-                    {name: 'work_type', value: '工单类型', neglect: true},
-                    {name: 'process_progress', value: '当前进度', neglect: true},
-                    {name: 'owner', value: '客户', neglect: true},
-                    {name: 'shop_name', value: '店铺名称'},
-                    {name: 'client_no', value: '客户订单号'},
-                    {name: 'logistic_name', value: '承运人'},
-                    {name: 'logistic_numbers', value: '快递单号'},
-                    {name: 'created_at', value: '创建时间', neglect: true},
-                    {name: 'status', value: '当前处理人', neglect: true},
-                    {name: 'creator', value: '创建人'},
-                    {name: 'remark', value: '情况说明'},
-                    {name: 'return_logistic_number', value: '退回单号'},
-                        @if( \Illuminate\Support\Facades\Gate::check('订单管理-工单处理-宝时编辑') || \Illuminate\Support\Facades\Gate::check('订单管理-工单处理-商家编辑') )
-                    {
-                        name: 'rejected_bills_items', value: '退回商品详情'
-                    },
-                        @endif
-                    {
-                        name: 'process_logs', value: '处理日志'
-                    },
-                        @can('订单管理-工单处理-宝时编辑')
-                    {
-                        name: 'order_issue_log', value: '问题件处理结果'
-                    },
-                        @endcan
-                    {
-                        name: 'ab_operation', type: 'multi', title: "其他操作", rows: [
-                                @can('订单管理-工单处理-删除')
-                            {
-                                value: "删除", col: "2"
-                            },
-                            {value: "查看资料", col: "10"},
-                                @else
-                            {
-                                value: "查看资料", col: "12"
-                            },
-                            @endcan
-                        ], neglect: true
-                    },
-                        @can('订单管理-工单处理-宝时编辑')
-                    {
-                        name: 'logistic_indemnity_money', value: '承运商赔偿金额'
-                    },
-                    {name: 'logistic_express_remission', value: '承运商快递减免'},
-                    {name: 'bao_shi_indemnity_money', value: '宝时赔偿金额'},
-                    {name: 'bao_shi_express_remission', value: '宝时快递减免'},
-                    {name: 'user_work_groups', value: '仓库组责任方'},
-                    {name: 'user_owner_group', value: '项目组责任方'},
-                    @endcan
-                ];
-                new Header({
-                    el: "table",
-                    name: "work_orders",
-                    column: column,
-                    data: this.workOrders,
-                    fixedTop: ($('#form_div').height()) + ($('#btn').height()) + 1,
-                }).init();
+                this.initTableHeader();
             },
             created() {
                 this.workOrders.forEach(item => {
@@ -898,6 +869,18 @@
                 },
             },
             methods: {
+                initTableHeader(){
+                    let column = this.headerColumn();
+                    this.tableHeader = new Header({
+                        el: "table",
+                        name: "work_orders",
+                        column: column,
+                        data: this.workOrders,
+                        fixedTop: ($('#form_div').height()) + ($('#btn').height()) + 1,
+                    });
+                    this.tableHeader.init();
+                    this.toggleBtnHeight = document.getElementById('table').clientHeight;
+                },
                 waitingTempTip(message) {
                     window.tempTip.setIndex(2005);
                     window.tempTip.waitingTip(message);
@@ -2166,7 +2149,7 @@
                 canTagWorkOrder(item) {
                     let {pending_detail, status, issue_type_name} = item;
                     if (status !== '承运商处理') return false;
-                    if (!['拦截', '取消拦截', '信息更改','快递异常'].includes(issue_type_name)) return false;
+                    if (!['拦截', '取消拦截', '信息更改', '快递异常'].includes(issue_type_name)) return false;
                     let {logistic_handle_tag} = pending_detail;
                     return logistic_handle_tag !== '承运商处理中';
                 },
@@ -3518,7 +3501,7 @@
                 },
                 joinLogisticNumberReturn(item, e, index) {
                     let logistic_number_return = $(e.target).prev().val();
-                    if (logistic_number_return.trim().length === 0){
+                    if (logistic_number_return.trim().length === 0) {
                         this.errorTempTip('请输入退回单号进行添加');
                         return;
                     }
@@ -3585,83 +3568,83 @@
                         this.errorTempTip(err);
                     });
                 },
-                changeUserOwnerGroup(item,e) {
-                    let url ="{{route('workOrder.userOwnerGroup.updateApi')}}";
+                changeUserOwnerGroup(item, e) {
+                    let url = "{{route('workOrder.userOwnerGroup.updateApi')}}";
                     let data = {
-                        id:item.id,
-                        user_owner_group_id:$(e.target).val(),
+                        id: item.id,
+                        user_owner_group_id: $(e.target).val(),
                     };
                     this.waitingTempTip('处理中');
-                    axios.post(url,data).then(res=>{
+                    axios.post(url, data).then(res => {
                         window.tempTip.cancelWaitingTip();
-                        if (res.data.success){
+                        if (res.data.success) {
                             item.user_work_group_id = $(e.target).val();
                             this.successTempTip('处理完成');
                             return;
                         }
                         this.errorTempTip(res.data.message ? res.data.message : '处理出现异常,刷新后重试');
-                    }).catch(err=>{
+                    }).catch(err => {
                         window.tempTip.cancelWaitingTip();
                         this.errorTempTip(err);
                     })
                 },
-                createUserWorkGroup(item,e) {
+                createUserWorkGroup(item, e) {
                     let url = "{{route('workOrder.userWorkGroups.storeApi')}}";
                     let data = {
-                        id:item.id,
-                        user_workgroup_id:$(e.target).val(),
+                        id: item.id,
+                        user_workgroup_id: $(e.target).val(),
                     };
                     this.waitingTempTip('处理中');
-                    axios.post(url,data).then(res=>{
+                    axios.post(url, data).then(res => {
                         window.tempTip.cancelWaitingTip();
-                        if (res.data.success){
+                        if (res.data.success) {
                             this.successTempTip('处理完成');
                             item.user_work_groups = res.data.data;
                             return;
                         }
                         this.errorTempTip(res.data.message ? res.data.message : '处理出现异常,刷新后重试');
-                    }).catch(err=>{
+                    }).catch(err => {
                         window.tempTip.cancelWaitingTip();
                         this.errorTempTip(err);
                     })
                 },
-                destroyUserWorkGroup(item,index,e){
-                    if(!confirm('确认删除?')) return;
-                    let url ="{{route('workOrder.userWorkGroups.destroyApi')}}";
+                destroyUserWorkGroup(item, index, e) {
+                    if (!confirm('确认删除?')) return;
+                    let url = "{{route('workOrder.userWorkGroups.destroyApi')}}";
                     let data = {
-                        id:item.id,
-                        user_workgroup_id:$(e.target).val(),
+                        id: item.id,
+                        user_workgroup_id: $(e.target).val(),
                     };
                     this.waitingTempTip('处理中');
-                    axios.post(url,data).then(res=>{
+                    axios.post(url, data).then(res => {
                         window.tempTip.cancelWaitingTip();
-                        if (res.data.success){
+                        if (res.data.success) {
                             this.successTempTip('处理完成');
-                            item.user_work_groups.splice(index,1);
+                            item.user_work_groups.splice(index, 1);
                             return;
                         }
                         this.errorTempTip(res.data.message ? res.data.message : '处理出现异常,刷新后重试');
-                    }).catch(err=>{
+                    }).catch(err => {
                         window.tempTip.cancelWaitingTip();
                         this.errorTempTip(err);
                     })
                 },
-                getEqualsMap(item){
+                getEqualsMap(item) {
                     let order_detail_id = item.pending_detail.id;
                     let url = "{{route('workOrder.commodity.equalsMapApi')}}";
                     let data = {
-                        id:order_detail_id,
+                        id: order_detail_id,
                     }
                     this.waitingTempTip('获取中..');
-                    axios.post(url,data).then(res=>{
+                    axios.post(url, data).then(res => {
                         window.tempTip.cancelWaitingTip();
-                        if(res.data.success){
+                        if (res.data.success) {
                             this.commodityEqualsMap = res.data.data;
                             this.dialogCommoditiesEqualsVisible = true;
-                            return ;
+                            return;
                         }
                         this.errorTempTip(res.data.message ? res.data.message : '获取失败');
-                    }).catch(err=>{
+                    }).catch(err => {
                         window.tempTip.cancelWaitingTip();
                         this.errorTempTip(err);
                     });
@@ -3675,6 +3658,69 @@
                         excelExport(false, checkData, url, null, token);
                     }
                 },
+                toggleRejectedBill() {
+                    this.hideRejectedBills = !this.hideRejectedBills;
+                    if(this.tableHeader !== null){
+                        let column = this.headerColumn();
+                        this.tableHeader.redrawHeader(column);
+                    }
+                },
+                headerColumn() {
+                    let columns = [];
+                    columns.push({name: 'id', value: '工单号', neglect: true},
+                        {name: 'operation', value: '操作', neglect: true},
+                        {name: 'created_at', value: '创建时间', neglect: true},
+                        {name: 'work_type', value: '工单类型', neglect: true},
+                        {name: 'process_progress', value: '当前进度', neglect: true},
+                        {name: 'owner', value: '客户', neglect: true},
+                        {name: 'shop_name', value: '店铺名称'},
+                        {name: 'client_no', value: '客户订单号'},
+                        {name: 'logistic_name', value: '承运人'},
+                        {name: 'logistic_numbers', value: '快递单号'},
+                        {name: 'status', value: '当前处理人', neglect: true},
+                        {name: 'creator', value: '创建人'},
+                        {name: 'remark', value: '情况说明'},
+                        {name: 'rejectedBills', value: '展开',neglect: true,max_width:30},)
+                    if (!this.hideRejectedBills) {
+                        columns.push({name: 'return_logistic_number', value: '退回单号'});
+                        @if( \Illuminate\Support\Facades\Gate::check('订单管理-工单处理-宝时编辑') || \Illuminate\Support\Facades\Gate::check('订单管理-工单处理-商家编辑') )
+                        columns.push({name: 'rejected_bills_items', value: '退回商品详情'});
+                        @endif
+                    }
+                    columns.push({
+                            name: 'process_logs', value: '处理日志'
+                        },
+                            @can('订单管理-工单处理-宝时编辑')
+                        {
+                            name: 'order_issue_log', value: '问题件处理结果'
+                        },
+                            @endcan
+                            @can('订单管理-工单处理-宝时编辑')
+                        {
+                            name: 'logistic_indemnity_money', value: '承运商赔偿金额'
+                        },
+                        {name: 'logistic_express_remission', value: '承运商快递减免'},
+                        {name: 'bao_shi_indemnity_money', value: '宝时赔偿金额'},
+                        {name: 'bao_shi_express_remission', value: '宝时快递减免'},
+                        {name: 'user_work_groups', value: '仓库组责任方'},
+                        {name: 'user_owner_group', value: '项目组责任方'},
+                            @endcan
+                        {
+                            name: 'ab_operation', type: 'multi', title: "其他操作", rows: [
+                                    @can('订单管理-工单处理-删除')
+                                {
+                                    value: "删除", col: "2"
+                                },
+                                {value: "查看资料", col: "10"},
+                                    @else
+                                {
+                                    value: "查看资料", col: "12"
+                                },
+                                @endcan
+                            ], neglect: true
+                        },);
+                    return columns;
+                }
             },
         });
     </script>

+ 2 - 2
resources/views/store/receivingTasks/create.blade.php

@@ -2,7 +2,7 @@
 @section('title')开单入库-创建@endsection
 @section('head')
     <link href="{{ mix('css/element-ui.css') }}" rel="stylesheet">
-    <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
+    <link rel="stylesheet" href="{{ mix('css/element/index.css') }}">
 @endsection
 
 @section('content')
@@ -385,7 +385,7 @@
 
     <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
     <script type="text/javascript" src="{{ mix('js/element-ui.js') }}"></script>
-    <script src="https://unpkg.com/element-ui/lib/index.js"></script>
+    <script type="text/javascript" src="{{mix('js/element/index.js') }}"></script>
     <script type="text/javascript" src="{{mix('js/lodop/LodopFuncs.js')}}"></script>
 
     <script src='http://localhost:18000/CLodopfuncs.js?name=CLODOPA'></script>

+ 4 - 3
resources/views/store/receivingTasks/index.blade.php

@@ -1,8 +1,7 @@
 @extends('layouts.app')
 @section('title')开单入库-查询@endsection
 @section('head')
-    <link href="{{ mix('css/element-ui.css') }}" rel="stylesheet">
-    <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
+    <link rel="stylesheet" href="{{ asset('css/element/index.css') }}">
 @endsection
 
 
@@ -29,6 +28,7 @@
                         <td v-text="i+1"></td>
                         <td v-text="item.number"></td>
                         <td v-text="item.status"></td>
+                        <td v-text="item.owner"></td>
                         <td>
                             <template v-for="(asn_no,i) in item.asn_nos">
                                 <div>
@@ -54,7 +54,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>{{--新版2--}}
-    <script type="text/javascript" src="{{mix('js/element-ui.js') }}"></script>
+    <script type="text/javascript" src="{{asset('js/element-ui.js') }}"></script>
     <script type="text/javascript" src="{{mix('js/lodop/LodopFuncs.js')}}"></script>
 
     <script type="text/javascript" src='http://localhost:18000/CLodopfuncs.js?name=CLODOPA'></script>
@@ -138,6 +138,7 @@
                     {name: 'id', value: '序号', neglect: true},
                     {name: 'number', value: '收货任务号'},
                     {name: 'status', value: '状态', neglect: true},
+                    {name: 'owner', value: '货主', neglect: true},
                     {name: 'asn_nos', value: 'ASN单号', neglect: true},
                     {name: 'created_at', value: '投单时间'},
                     {name: 'warehouse', value: '仓库'},

+ 1 - 0
resources/views/transport/waybill/index.blade.php

@@ -682,6 +682,7 @@
                             placeholder:['承运商','定位或多选承运商'],data:this.logistics},
                         {name:'carType_id',type:'select',placeholder: '车型',data:this.carTypes},
                         {name:'express_face_list',type:'select',placeholder: '快递面单是否打印',data:this.expresss},
+                        {name:'ordering_remark',type:'input',tip: '运单备注,默认全模糊查询,推荐配合日期使用',placeholder: '运单备注'},
                     ]
                 ];
                 let param=[];

+ 2 - 0
routes/web.php

@@ -355,6 +355,8 @@ Route::group(['middleware' => 'auth'], function ($route) {
             Route::post("resetPassword", 'UserController@resetPassword');
             Route::post("saveWorkGroups", 'UserController@saveWorkGroups');
             Route::post("saveOwnerGroups", 'UserController@saveOwnerGroups');
+            Route::post("getOwners", 'UserController@getOwners');
+            Route::post("bindOwner", 'UserController@bindOwner');
         });
         /** 项目耗材 */
         Route::group(['prefix' => "ownerMaterial"], function () {

+ 4 - 0
webpack.mix.js

@@ -56,4 +56,8 @@ mix.copy('resources/js/login/swiper-bundle.min.js','public/js/login/swiper-bundl
 mix.copy('resources/sass/reset.css','public/css/reset.css');
 mix.copy('resources/sass/swiper-bundle.min.css','public/css/swiper-bundle.min.css');
 
+// element table 渲染
+mix.copy('resources/js/element/index.js','public/js/element/index.js')
+mix.copy('resources/sass/element/index.css','public/css/element/index.css');
+
 mix.version();

Niektoré súbory nie sú zobrazené, pretože je v týchto rozdielových dátach zmenené mnoho súborov