Переглянути джерело

工作量 及 部分bug修正

ajun 5 роки тому
батько
коміт
424cbf7c44

+ 5 - 3
app/Http/Controllers/OrderController.php

@@ -6,6 +6,7 @@ use App\Exports\Export;
 use App\OracleBasCustomer;
 use App\OracleDOCOrderHeader;
 use App\OracleDOCWaveDetails;
+use App\OrderIssueType;
 use Illuminate\Database\Eloquent\Collection;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Auth;
@@ -227,15 +228,16 @@ class OrderController extends Controller
         $page = $request->page ?? 1;
         $request=$request->input();
         $codes=DB::connection('oracle')->table('BAS_CODES')->select('code','codename_c')->where('codeid','SO_STS')->orderBy('code','asc')->get();
-        return view('order/index/delivering',compact('orders','customers','request','codes','commodities','page','picktotraceids'));
+        $orderIssueType = OrderIssueType::all();
+        return view('order/index/delivering',compact('orders','customers','request','codes','commodities','page','picktotraceids','orderIssueType'));
     }
     //通过商品条码获取订单编号
     public function getOrdersNo($alternate_sku1, $isPaging = true, $page = 1, $paginate = 50){
         if ($isPaging){
-            $sql = "SELECT RESULT.ORDERNO FROM 
+            $sql = "SELECT RESULT.ORDERNO FROM
                         (SELECT ROWNUM rn,DETAIL.ORDERNO as ORDERNO FROM
                             (SELECT ORDERNO FROM DOC_ORDER_DETAILS WHERE SKU LIKE '".$alternate_sku1."' GROUP BY ORDERNO ORDER BY ORDERNO DESC)DETAIL
-                        WHERE ROWNUM<='".$page*$paginate."')RESULT 
+                        WHERE ROWNUM<='".$page*$paginate."')RESULT
                     WHERE RESULT.rn>'".($page-1)*$paginate."'";
         }else {
             $sql = "SELECT ORDERNO FROM DOC_ORDER_DETAILS WHERE SKU LIKE '".$alternate_sku1."' GROUP BY ORDERNO ORDER BY ORDERNO DESC";

+ 19 - 15
app/Http/Controllers/OrderIssuePerformanceController.php

@@ -14,40 +14,44 @@ class OrderIssuePerformanceController extends Controller
 
     public function __construct()
     {
-        app()->singleton('orderIssueWorkLoadService',OrderIssueWorkLoadService::class);
-        app()->singleton('service',OrderIssuePerformanceService::class);
+        app()->singleton('orderIssueWorkLoadService', OrderIssueWorkLoadService::class);
+        app()->singleton('service', OrderIssuePerformanceService::class);
 
     }
 
-    public function index(Request $request){
+    public function index(Request $request)
+    {
         if (!Gate::allows('订单管理-问题件-绩效统计')) {
             return redirect(url('/'));
         }
-        $service  = app('orderIssuePerformanceService');
+        $service = app('orderIssuePerformanceService');
         $performance = $service->paginate($request->all());
-        $options = ['timeFrame'=>$request->input('timeFrame'),'create_start'=>$request->input('create_start')??'','create_end'=>$request->input('create_end')??''];
-        return view('order.issue.performance',compact('performance','options'));
+        $options = ['timeFrame' => $request->input('timeFrame'), 'create_start' => $request->input('create_start') ?? '', 'create_end' => $request->input('create_end') ?? ''];
+        return view('order.issue.performance', compact('performance', 'options'));
     }
 
-    public function export(Request $request){
-        $service  = app('orderIssuePerformanceService');
+    public function export(Request $request)
+    {
+        $service = app('orderIssuePerformanceService');
         return $service->exportPerformance($request->all());
     }
 
-    public function workLoadPage(Request $request){
+    public function workLoadPage(Request $request)
+    {
         if (!Gate::allows('订单管理-问题件-工作量')) {
             return redirect(url('/'));
         }
         $workLoadService = app('orderIssueWorkLoadService');
         $workLoads = $workLoadService->paginate($request->all());
-        $user = Auth::user();
-        $owner_ids = $user ? $user->getPermittingOwnerIdsAttribute() : [];
-        $owners = Owner::where('id',$owner_ids)->get();
         $users = $workLoadService->getUsers();
-        return view('order/issue/workload',compact('workLoads','owners','users'));
+        $owners = $workLoadService->getOwners();
+        $options =$workLoadService->getOptions($request->all());
+        return view('order/issue/workload', compact('workLoads', 'owners', 'users','options'));
     }
 
-    public function exportWorkLoad(Request $request){
-
+    public function exportWorkLoad(Request $request)
+    {
+        $workLoadService = app('orderIssueWorkLoadService');
+        return $workLoadService->exportWorkLoad($request->all());
     }
 }

+ 2 - 0
app/Http/Controllers/RejectedBillItemController.php

@@ -156,7 +156,9 @@ class RejectedBillItemController extends Controller
             return ['success'=>'false','fail_info'=>'没有匹配到相应内容'];
         }
         $item=$rejectedBillItems->first();
+        /** @var RejectedBill $rejectedBill */
         $rejectedBill = RejectedBill::find($item['id_rejected_bill']);
+        $rejectedBill->同步问题件();
         if(config('api.jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,'请求处理退单:'.$rejectedBill['logistic_number_return'],Auth::user()['id']);
         $downloadedSkus = WMSReflectReceive::downloadedSkus($rejectedBill['logistic_number_return'],true);
         $isGotMoreThenDownloaded=WMSReflectReceiveSku::isItemsOverDownloadedSkus($rejectedBillItems,$downloadedSkus);

+ 23 - 16
app/Imports/OrderIssueImport.php

@@ -7,6 +7,7 @@ use App\OracleDOCOrderHeader;
 use App\Order;
 use App\OrderIssue;
 use App\OrderIssueProcessLog;
+use App\OrderIssueType;
 use App\OrderPackage;
 use App\Services\RejectedService;
 use Illuminate\Support\Collection;
@@ -50,32 +51,38 @@ class OrderIssueImport implements ToCollection, WithHeadingRow, WithMultipleShee
                     $sum++;
                     continue;
                 }
+                $order_type = OrderIssueType::where('name', $row['问题类别'])->first();
+                if (!$order_type) {
+                    array_push($exception, ['原始运单号' . $row['原始运单号'] . '对应的的问题件类别不存在']);
+                    continue;
+                }
                 $count = OracleDOCOrderHeader::where('soreference5', $logistic_number)->count();
-                $detailCount = OracleActAllocationDetails::where('picktotraceid',$logistic_number)->count();
+                $detailCount = OracleActAllocationDetails::where('picktotraceid', $logistic_number)->count();
                 if (!$count && !$detailCount) {
                     array_push($exception, ['原始运单号' . $row['原始运单号'] . '对应的WMS运单不存在']);
                     $sum++;
                     continue;
                 }
-                $orderPackage = OrderPackage::where('logistic_number',$logistic_number)->first();
-                if($orderPackage){
-                    $order = Order::where('id',$orderPackage['order_id'])->first();
-                    if($order ){
-                        $orderIssue = OrderIssue::where('order_id',$order['id'])->first();
-                        if($orderIssue){
+                $orderPackage = OrderPackage::where('logistic_number', $logistic_number)->first();
+                if ($orderPackage) {
+                    $order = Order::where('id', $orderPackage['order_id'])->first();
+                    if ($order) {
+                        $orderIssue = OrderIssue::where('order_id', $order['id'])->first();
+                        if ($orderIssue) {
                             array_push($exception, ['原始运单号' . $row['原始运单号'] . '对应的问题件已存在']);
                             continue;
                         }
                     }
                 }
+
                 $client_no = null;
-                if($count){
-                    $orderHeader =  OracleDOCOrderHeader::where('soreference5',$logistic_number)->first();
-                    $client_no =$orderHeader['soreference1'];
-                }else if($detailCount){
-                    $detail = OracleActAllocationDetails::where('picktotraceid',$logistic_number)->first();
-                    $orderHeader =  OracleDOCOrderHeader::where('orderno',$detail['orderno'])->first();
-                    $client_no =$orderHeader['soreference1'];
+                if ($count) {
+                    $orderHeader = OracleDOCOrderHeader::where('soreference5', $logistic_number)->first();
+                    $client_no = $orderHeader['soreference1'];
+                } else if ($detailCount) {
+                    $detail = OracleActAllocationDetails::where('picktotraceid', $logistic_number)->first();
+                    $orderHeader = OracleDOCOrderHeader::where('orderno', $detail['orderno'])->first();
+                    $client_no = $orderHeader['soreference1'];
                 }
                 $order = $orderService->findOrCreateByClientCode($client_no);
                 $orderIssue = OrderIssue::where('order_id', $order['id'])->first();
@@ -85,14 +92,14 @@ class OrderIssueImport implements ToCollection, WithHeadingRow, WithMultipleShee
                     $sum++;
                     continue;
                 }
-                $arr = ['order_id' => $order['id'],];
+                $arr = ['order_id' => $order['id'], 'order_issue_type_id' => $order_type['id'],'result_explain'=>$row['情况说明']];
                 if ($rejectedBill) {
                     $arr['rejected_bill_id'] = $rejectedBill['id'];
                 }
                 $orderIssue = OrderIssue::create($arr);
                 if ($orderIssue) {
                     array_push($exception, ['订单' . $row['原始运单号'] . '问题件创建成功!']);
-                    OrderIssueProcessLog::create(['order_issue_id' => $orderIssue['id'], 'user_id' => Auth::user()['id'], 'content' => $row['情况说明'], 'type' => '创建']);
+                    OrderIssueProcessLog::create(['order_issue_id' => $orderIssue['id'], 'user_id' => Auth::user()['id'], 'content' => '导入创建问题订单件', 'type' => '创建']);
                 } else {
                     array_push($exception, ['订单' . $row['原始运单号'] . '问题件创建失败']);
                 }

+ 1 - 1
app/Order.php

@@ -28,7 +28,7 @@ class Order extends Model
 
     public function issue()
     {
-        return $this->hasOne('App\OrderIssue', 'id', 'order_id');
+        return $this->belongsTo('App\OrderIssue', 'id', 'order_id');
     }
 
     public function shop()

+ 58 - 30
app/OrderIssue.php

@@ -11,64 +11,91 @@ class OrderIssue extends Model
     use ModelTimeFormat;
 
     protected $fillable = [
-        'order_id','create_at','rejected_bill_id','rejecting_status','result_explain',
-        'situation_explain', 'order_issue_type_id','second_order_id','is_new_rejecting',
-        'final_status','logistic_indemnity_money','logistic_express_remission','baoshi_indemnity_money','baoshi_express_remission','user_workgroup_id'];
+        'order_id', 'create_at', 'rejected_bill_id', 'rejecting_status', 'result_explain',
+        'situation_explain', 'order_issue_type_id', 'second_order_id', 'is_new_rejecting',
+        'final_status', 'logistic_indemnity_money', 'logistic_express_remission', 'baoshi_indemnity_money', 'baoshi_express_remission', 'user_workgroup_id'];
 
     protected $appends = [
         'secondLogisticNumber',
         'createLog',
         'endLog',
-        'processingTime'
+        'processingTime',
+        'createUser',
+        'endUser',
     ];
 
-    public function order(){
-        return $this->belongsTo('App\Order','order_id','id');
+    public function order()
+    {
+        return $this->belongsTo('App\Order', 'order_id', 'id');
     }
 
-    public function rejectedBill(){
-        return $this->belongsTo('App\RejectedBill','rejected_bill_id','id');
+    public function rejectedBill()
+    {
+        return $this->belongsTo('App\RejectedBill', 'rejected_bill_id', 'id');
     }
 
-    public function issueType(){
-        return $this->belongsTo('App\OrderIssueType','order_issue_type_id','id');
+    public function issueType()
+    {
+        return $this->belongsTo('App\OrderIssueType', 'order_issue_type_id', 'id');
     }
 
-    public function logs(){
-        return $this->hasMany('App\OrderIssueProcessLog','order_issue_id','id');
+    public function logs()
+    {
+        return $this->hasMany('App\OrderIssueProcessLog', 'order_issue_id', 'id');
     }
 
-    public function top(){
-        return $this->hasOne('App\OrderIssueOnTop','order_issue_id','id');
+    public function top()
+    {
+        return $this->hasOne('App\OrderIssueOnTop', 'order_issue_id', 'id');
     }
 
-    public function userWorkGroup(){
-        return $this->belongsTo('App\UserWorkgroup','user_workgroup_id','id');
+    public function userWorkGroup()
+    {
+        return $this->belongsTo('App\UserWorkgroup', 'user_workgroup_id', 'id');
     }
 
-    public function secondOrder(){
-        return $this->belongsTo('App\Order','second_order_id','id');
+    public function secondOrder()
+    {
+        return $this->belongsTo('App\Order', 'second_order_id', 'id');
     }
 
-    public function getSecondLogisticNumberAttribute(){
-        return $this['secondOrder']['code'] ??'';
+    public function getSecondLogisticNumberAttribute()
+    {
+        return $this['secondOrder']['code'] ?? '';
     }
-    public function getCreateLogAttribute(){
-        return $this->logs->where('type','创建')->first();
+
+    public function getCreateLogAttribute()
+    {
+        return $this->logs->where('type', '创建')->first();
     }
-    public function getEndLogAttribute(){
-        return $this->logs->where('type','完结')->first();
+
+    public function getEndLogAttribute()
+    {
+        return $this->logs->where('type', '结束')->last();
     }
-    public function getProcessingTimeAttribute(){
+
+    public function getProcessingTimeAttribute()
+    {
         $createLogs = $this->getCreateLogAttribute();
-        $endLogs =$this->getEndLogAttribute();
-        if( ($createLogs ?? false) && ($endLogs ?? false)){
-            $time = date_diff($createLogs->create_at,$endLogs->create_at);
-            return $time->format('H天I小时');
+        $endLogs = $this->getEndLogAttribute();
+        if (($createLogs ?? false) && ($endLogs ?? false)) {
+            $time = date_diff($createLogs->created_at, $endLogs->created_at);
+            return $time->format('%a天, %h小时');
         }
         return null;
     }
 
+    public function getCreateUserAttribute()
+    {
+        $createLog = $this->getCreateLogAttribute();
+        return $createLog->user->name ?? '';
+    }
+
+    public function getEndUserAttribute()
+    {
+        $createLog = $this->getEndLogAttribute();
+        return $createLog->user->name ?? '';
+    }
 
     public function delete()
     {
@@ -78,7 +105,8 @@ class OrderIssue extends Model
         return parent::delete();
     }
 
-    public function deleteSafe(){
+    public function deleteSafe()
+    {
         return parent::delete();
     }
 

+ 2 - 2
app/OrderIssueProcessLog.php

@@ -13,9 +13,9 @@ class OrderIssueProcessLog extends Model
     protected $fillable = ['order_issue_id','user_id','content','type'];
 
     public function orderIssue(){
-        return $this->belongsTo('App\OrderIssue','order_issue_id','id');
+        return $this->hasOne('App\OrderIssue','id','order_issue_id');
     }
     public function user(){
-        return $this->belongsTo('App\User','user_id','id');
+        return $this->hasOne('App\User','id','user_id');
     }
 }

+ 12 - 0
app/RejectedBill.php

@@ -151,6 +151,18 @@ class RejectedBill extends Model
         }
     }
 
+    public function 同步问题件(){
+        $order_number = $this['order_number'];
+        $order_header = OracleDOCOrderHeader::where('soreference1',$order_number)->first();
+        if(!$order_header){return;}
+        $order = Order::with('issue')->where('code',$order_header['orderno'])->first();
+        if($order['issue']){
+            $order_issue =  $order->issue;
+            $order_issue->update(['rejected_bill_id'=>$this['id']]);
+        }
+    }
+
+
     private function judgeRejectingStatus(OrderIssue $orderIssue)
     {
         $orderPackageCommoditiesService = new OrderPackageCommoditiesService();

+ 21 - 34
app/Services/OrderIssueService.php

@@ -2,6 +2,7 @@
 
 namespace App\Services;
 
+use App\OracleDOCASNHeader;
 use App\OracleDOCOrderHeader;
 use App\OrderIssue;
 use App\OrderIssueProcessLog;
@@ -16,7 +17,6 @@ use Illuminate\Support\Facades\Validator;
 
 class OrderIssueService
 {
-
     public function __construct()
     {
         app()->bind("orderService", OrderService::class);
@@ -35,11 +35,6 @@ class OrderIssueService
         if ($condition['owner_id'] ?? false) {
             $owner_ids = explode(',', $condition['owner_id']);
         }
-
-        $orders = Order::select('id')->whereIn('owner_id', $owner_ids)->get();
-        foreach ($orders as $order) {
-            array_push($order_ids, $order['id']);
-        }
         $query = OrderIssue::with(['top', 'userWorkGroup', 'issueType', 'logs' => function ($query) {
             $query->with(['user'])->orderByDesc('created_at');
         }, 'order' => function ($query) {
@@ -103,18 +98,27 @@ class OrderIssueService
                 });
             }
         });
+        if ($arr['send_client_code'] ?? false) {
+            $query->whereHas('secondOrder', function ($query) use ($arr) {
+                $query->where('client_code', $arr['send_client_code']);
+            });
+        }
+
         return $query;
     }
 
     public function getRejectedBillQuery(array $arr, $query)
     {
-        if ($arr['id_quality_label'] ?? false) {
-            $query->whereHas('rejectedBill', function ($query) use ($arr) {
-                $query->whereHas('items', function ($query) use ($arr) {
-                    if ($arr['id_quality_label'] ?? false) {
+        if(  ($arr['logistic_number_return'] ?? false) || ($arr['id_quality_label'] ?? false)){
+            $query->whereHas('rejectedBill', function ($query) use (&$arr) {
+                if ($arr['logistic_number_return'] ?? false) {
+                    $query->where('logistic_number_return', 'like', $arr['logistic_number_return']);
+                }
+                if ($arr['id_quality_label'] ?? false) {
+                    $query->whereHas('items', function ($query) use ($arr) {
                         $query->where('id_quality_label', $arr['id_quality_label']);
-                    }
-                });
+                    });
+                }
             });
         }
         return $query;
@@ -130,10 +134,10 @@ class OrderIssueService
             $condition = $arr;
         }
         if (isset($condition['created_at_start'])) {
-            $query->where('created_at', '>=', $condition['created_at_start'] . " 00:00:00");
+            $query->where('order_issues.created_at', '>=', $condition['created_at_start'] . " 00:00:00");
         }
         if (isset($condition['created_at_end'])) {
-            $query->where('created_at', '<=', $condition['created_at_end'] . " 23:59:59");
+            $query->where('order_issues.created_at', '<=', $condition['created_at_end'] . " 23:59:59");
         }
         if (isset($condition['final_status'])) {
             $query->where('final_status', $condition['final_status']);
@@ -178,6 +182,7 @@ class OrderIssueService
         }
         foreach ($orderNos as $orderNo) {
             $orderIssue = $this->createOrFindByOrderNo($orderNo);
+            OrderIssue::where('id',$orderIssue['id'])->update(['order_issue_type_id'=>$arr['typeId'],'result_explain'=>$arr['result_explain']]);
             OrderIssueProcessLog::create(['order_issue_id' => $orderIssue['id'], 'user_id' => Auth::user()['id'], 'content' => '标记创建订单问题件', 'type' => '创建']);
         }
         $meg['success'] = true;
@@ -186,8 +191,6 @@ class OrderIssueService
 
     public function createOrFindByOrderNo($orderNo)
     {
-        $orderService = app('orderService');
-        $rejectedService = app('rejectedService');
         $orderHeader = OracleDOCOrderHeader::where('orderNo', $orderNo)->first();
         if (!$orderHeader) {
             return null;
@@ -198,31 +201,17 @@ class OrderIssueService
     public function createOrFind($clientCode)
     {
         $orderService = app('orderService');
-        $rejectedService = app('rejectedService');
         $orderHeader = OracleDOCOrderHeader::where('SOREFERENCE1', $clientCode)->first();
         if (!$orderHeader) {
             return null;
         }
         $order = $orderService->findOrCreateByClientCode($clientCode);
+        $rejectedBill = RejectedBill::where('order_number', $orderHeader['soreference1'])->first();
         $arr = [
             'order_id' => $order['id'],
+            'rejecetd_bill_id' => $rejectedBill['id'],
         ];
         $orderIssue = OrderIssue::create($arr);
-        if ($order->client_code) {
-            $rejectedBill = $rejectedService->getRejectedByClientNo($clientCode);
-            if ($rejectedBill) {
-                $orderIssue->rejected_bill_id = $rejectedBill['id'];
-                $orderIssue->save();
-            } else {
-                if ($orderHeader['orderno']) {
-                    $rejectedBill = RejectedBill::where('order_number', $orderHeader['orderno'])->first();
-                    if ($rejectedBill) {
-                        $orderIssue->rejected_bill_id = $rejectedBill['id'];
-                        $orderIssue->save();
-                    }
-                }
-            }
-        }
         $this->judgeRejectingStatus($orderIssue);
         $orderIssue->order = $order;
         return $orderIssue;
@@ -362,7 +351,6 @@ class OrderIssueService
 
     public function createByLogisticNumber(array $arr)
     {
-        $orderService = app('orderService');
         $order = Order::create($arr);
         $orderIssue = OrderIssue::create($arr);
         $orderIssue->order_id = $order['id'];
@@ -397,7 +385,6 @@ class OrderIssueService
             $orderIssueIds = $request->input('data');
             $ids = explode(',', $orderIssueIds);
             $request['order_issue_ids'] = $ids;
-
             $result = $this->getConditionQuery($request->all(), null)->get();
         }
         return $result;

+ 111 - 22
app/Services/OrderIssueWorkLoadService.php

@@ -2,51 +2,140 @@
 
 namespace App\Services;
 
+use App\Exports\Export;
 use App\OrderIssue;
 use App\OrderIssueProcessLog;
+use App\Owner;
 use App\Services\common\QueryService;
 use App\User;
 use Illuminate\Support\Facades\Auth;
+use Maatwebsite\Excel\Facades\Excel;
 
-Class OrderIssueWorkLoadService
+class OrderIssueWorkLoadService
 {
-    public function getQuery(array $queryParam){
+    public function getQuery(array $queryParam)
+    {
         $user = Auth::user();
         $owner_ids = $user ? $user->getPermittingOwnerIdsAttribute() : [];
-        $query = OrderIssue::with(['log.user'=>function($query) use (&$queryParam){
-            if($queryParam['create_user_id'] ?? false){
-                $query->where('type','创建')->where('user_id',$queryParam['create_user_id']);
+        $query = OrderIssue::with(['logs.user','order' => function ($query) {
+            $query->with(['packages', 'owner']);
+        }])->whereHas('order', function ($query) use (&$queryParam, $owner_ids) {
+            if ($queryParam['logistic_number'] ?? false) {
+               $query->whereHas('packages',function($query)use (&$queryParam){
+                   $query->where('order_packages.logistic_number','like',$queryParam['logistic_number']);
+               });
             }
-            if($queryParam['end_user_id'] ?? false){
-                $query->where('type','完结')->where('user_id',$queryParam['end_user_id']);
+            if ($queryParam['owner_id'] ?? false && in_array($queryParam['owner_id'], $owner_ids)) {
+                $query->where('owner_id', $queryParam['owner_id']);
+            } else {
+                $query->whereIn('owner_id', $owner_ids);
             }
-        },'order'])->whereHas('order',function($query) use (&$queryParam,$owner_ids) {
-            if($queryParam['client_no'] ?? false){
-                $query->whereHas('client_no',$queryParam['client_no']);
+        });
+        if($queryParam['end_date'] ?? false){
+            $query->whereHas('logs',function($query) use(&$queryParam){
+                $query->where('type','结束')
+                    ->where('created_at','<=',$queryParam['end_date'].' 23:59:59')
+                    ->where('created_at','>=',$queryParam['end_date'].' 00:00:00');
+            });
+        }
+        if($queryParam['end_date'] ?? false){
+            $query->whereHas('logs',function($query) use(&$queryParam){
+                $query->where('type','结束')
+                    ->where('created_at','<=',$queryParam['end_date'].' 23:59:59')
+                    ->where('created_at','>=',$queryParam['end_date'].' 00:00:00');
+            });
+        }
+        if($queryParam['create_user_id'] ?? false ?? $queryParam['end_user_id'] ?? false){
+            if($queryParam['create_user_id'] ?? false){
+                $query->whereHas('logs',function($query) use ($queryParam){
+                    $query->where('user_id',$queryParam['create_user_id'])->where('type', '创建');
+                });
             }
-            if($queryParam['owner_id'] ?? false && in_array($queryParam['owner_id'],$owner_ids)){
-                $query->whereHas('owner_id',$queryParam['owner_id']);
-            }else{
-                $query->whereIn('owner_id',$owner_ids);
+            if($queryParam['end_user_id'] ?? false){
+                $query->whereHas('logs',function($query) use ($queryParam){
+                    $query->where('user_id',$queryParam['end_user_id'])->where('type', '结束');
+                });
             }
-        });
-        unset($queryParam['create_user_id'],$queryParam['end_user_id'],$queryParam['client_no'],$queryParam['owner_id']);
+        }
+        $query->orderByDesc('id');
+        unset($queryParam['create_user_id'], $queryParam['end_user_id'], $queryParam['client_no'],
+            $queryParam['owner_id'],$queryParam['end_date'],$queryParam['logistic_number']);
         $columnQueryRules = [
             'create_start' => ['alias' => 'created_at', 'startDate' => ' 00:00:00'],
-            'create_end' => ['alias' => 'created_at', 'endDate' => ' 23:59:59'],
-            'order_issue_id'=>['alias'=>'id']
+            'order_issue_id'=>['alias' => 'id','multi'=>',']
         ];
-        $query  = app(QueryService::class)->query($queryParam, $query, $columnQueryRules);
+        $query = app(QueryService::class)->query($queryParam, $query, $columnQueryRules);
+
         return $query;
     }
 
-    public function paginate(array $params){
+    public function paginate(array $params)
+    {
         return $this->getQuery($params)->paginate($params['paginate'] ?? 50);
     }
 
-    public function getUsers(){
+    public function getUsers()
+    {
         $arr = OrderIssueProcessLog::all()->groupBy('user_id');
         $user_ids = array_keys($arr->toArray());
-        return  User::whereIn('id',$user_ids)->get();
+        return User::whereIn('id', $user_ids)->get();
+    }
+
+    public function getOwners(){
+        $user = Auth::user();
+        $owner_ids = $user ? $user->getPermittingOwnerIdsAttribute():[];
+        return Owner::whereIn('id', $owner_ids)->get();
+    }
+
+    public function getOptions(array $arr){
+        return [
+            'create_user_id' =>$arr['create_user_id'] ?? '',
+            'end_user_id' => $arr['end_user_id'] ?? '',
+            'client_no' =>  $arr['client_no'] ?? '',
+            'owner_id' => $arr['owner_id'] ?? '',
+            'create_start' => $arr['owner_id'] ?? '',
+            'create_end' => $arr['create_end'] ?? '',
+            'order_issue_id' => $arr['order_issue_id'] ?? '',
+            'logistic_number'=> $arr['logistic_number'] ?? ''
+        ];
+    }
+
+    public function exportWorkLoad(array $params)
+    {
+        unset($params['checkAllSign']);
+        if($params['data']??false){
+            $params = ['id'=>$params['data']];
+        }
+        $workLoads = $this->getQuery($params)->get();
+        $row = [[
+            'id' => '问题件ID',
+            'createDate' => '创建时间',
+            'endDate' => '完结时间',
+            'created_user' => '创建人',
+            'end_user' => '结束人',
+            'owner' => '客户',
+            'logisticNumbers' => '快递单号',
+            'processingTime' => '处理时效']];
+        $data = [];
+        foreach ($workLoads as $workLoad) {
+            $logisticNumbers = '';
+            if($workLoad['order']['logisticNumbers'] ?? false){
+                foreach ($workLoad['order']['logisticNumbers'] as $str){
+                    $logisticNumbers.=$str.' ';
+                }
+            }
+            $temp = [
+                'id' => $workLoad['id'],
+                'createDate' => $workLoad['createLog']['created_at'] ?? '',
+                'endDate' => $workLoad['endLog']['created_at'] ?? '',
+                'created_user' => $workLoad['createLog']['user']['name'] ?? '',
+                'end_user' => $workLoad['endLog']['user']['name'] ?? '',
+                'owner' => $workLoad['order']['owner']['name'] ?? '',
+                'logisticNumbers' => $logisticNumbers,
+                'processingTime' => $workLoad['processingTime'],
+            ];
+            array_push($data,$temp);
+        }
+        return  Excel::download(new Export($row,$data),date('YmdHis', time()).'-工作量.xlsx');
     }
 }

+ 1 - 1
database/migrations/2020_08_28_134321_change_ids_of_tables_not_int.php

@@ -26,7 +26,7 @@ class ChangeIdsOfTablesNotInt extends Migration
             $table->bigInteger('authority_id')->change();
         });
         Schema::table('orders', function (Blueprint $table) {
-            $table->bigInteger('batch_id')->change();
+            $table->bigInteger('batch_id')->nullable()->change();
         });
         Schema::table('order_issues', function (Blueprint $table) {
             $table->bigInteger('order_issue_type_id')->nullable()->change();

+ 28 - 3
public/t.php

@@ -2,7 +2,32 @@
 ;
 ?>
 <script>
-    (function t(){
-        alert(22);
-    })();
+    // 0.5秒后返回input*input的计算结果:
+    function multiply(input) {
+        return new Promise(function (resolve, reject) {
+            console.log('calculating ' + input + ' x ' + input + '...');
+            setTimeout(resolve, 500, input * input);
+        });
+    }
+
+    // 0.5秒后返回input+input的计算结果:
+    function add(input) {
+        return new Promise(function (resolve, reject) {
+            console.log('calculating ' + input + ' + ' + input + '...');
+            setTimeout(resolve, 500, input + input);
+        });
+    }
+
+    var p = new Promise(function (resolve, reject) {
+        console.log('start new Promise...');
+        resolve(123);
+    });
+
+    p.then(multiply)
+        .then(add)
+        .then(multiply)
+        .then(add)
+        .then(function (result) {
+            console.log('Got value: ' + result);
+        });
 </script>

+ 64 - 8
resources/views/order/index/delivering.blade.php

@@ -133,7 +133,42 @@
                 <button type="button" @click="pageDown()" :readonly="maxPage == 0 ? false : (page<maxPage?false:true)" class="btn btn-sm m-3" :class="maxPage == 0 ? 'btn-outline-info' : (page<maxPage?'btn-outline-info':'')">下一页</button>
                 <input  @keyup.enter="pageSkip($event)" class="form-control-sm ml-3 tooltipTarget" :placeholder="pagePlaceholder" title="去往指定页">
                 <span class="text-muted m-1" v-if="maxPage != 0">共 @{{ sum }} 条</span>
+
+                <div class="modal fade " id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel"
+                     aria-hidden="true">
+                    <div class="modal-dialog modal-dialog-centered">
+                        <div class="modal-content">
+                            <div class="modal-header">
+                                <h5 class="modal-title" id="exampleModalLabel">输入问题件信息</h5>
+                                <button type="button" class="close" data-dismiss="modal" aria-label="Close"
+                                        @click="changeRemark">
+                                    <span aria-hidden="true">&times;</span>
+                                </button>
+                            </div>
+                            <div class="modal-body">
+                                <div class="form-group row">
+                                    <label class="col-2 text-right">问题类别</label>
+                                    <select name="order_issues_type_id" v-model="typeId" class="form-control col-8" id="orderIssueType" @focus="focusOnModal($event)" >
+                                        <option value></option>
+                                        <option v-for="type in orderIssueType" :value="type.id">@{{ type.name }}</option>
+                                    </select>
+                                </div>
+                                <div class="form-group row">
+                                    <label class="col-2 text-right ">情况说明</label>
+                                    <textarea name="result_explain" v-model="result_explain" class="form-control col-8" id="result_explain" @focus="focusOnModal($event)"></textarea>
+                                </div>
+                            </div>
+                            <div class="modal-footer">
+                                <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal"
+                                        @click="changeRemark">关闭
+                                </button>
+                                <button type="button" class="btn btn-sm btn-primary" @click="submit">提交</button>
+                            </div>
+                        </div>
+                    </div>
+                </div>
             </div>
+
         </div>
     </div>
 @endsection
@@ -151,7 +186,7 @@
                 sum:0,
                 checkData:[],
                 owners:[
-                        @foreach($customers as $customer)
+                    @foreach($customers as $customer)
                     { name:'{{$customer->customerid}}',value:'{{$customer->descr_c}}' },
                     @endforeach
                 ],
@@ -160,13 +195,16 @@
                 isBtn:{},
                 content:'',
                 codes:[
-                        @foreach($codes as $code)
+                    @foreach($codes as $code)
                     {name:'{{$code->code}}',value:'{{$code->codename_c}}'},
                     @endforeach
                 ],
                 selectedStyle:'',
                 picktotraceidMap:{!! $picktotraceids !!},
                 pagePlaceholder:"",
+                typeId:'',
+                result_explain:'',
+                orderIssueType:{!! $orderIssueType !!},
             },
             mounted:function () {
                 $(".tooltipTarget").tooltip({'trigger':'hover'});
@@ -190,7 +228,7 @@
                         {name:['notes','addtime'],type:'input_select',tip:['右侧选择查询范围,默认为一天内','查询范围,范围越短搜索越快'],placeholder: ['备注',''],
                             data:[{name:'31',value:'近一月'},{name:'92',value:'近三月'},{name:'183',value:'近半年'},{name:'366',value:'近一年'},{name:'0',value:'不限'},],
                             rules:[{son:{addtime:{default:'31',required_without_all_if:['orderdate_start','orderdate_end']}}},
-                                {date_relevance:{date:['orderdate_start','orderdate_end'],relevance:'addtime',killing:'relevance',default:[31,92,183,366]}}]},
+                                {date_relevance:{date:['orderdate_start','orderdate_end'],relevance:'addtime',killing:'date',default:[31,92,183,366]}}]},
                         {name:'issuepartyname',type:'input',tip:'',placeholder: '店铺名称'},
                         {name:'edisendflag2',type:'select',tip:'快递获取标记',placeholder: '快递获取标记',data:[{name:'Y',value:'是'},{name:'N',value:'否'},{name:'W',value:'错误'},]},
                         {name:'edisendflag',type:'select',tip:'接口回传标记',placeholder: '接口回传标记',data:[{name:'Y',value:'Y'},{name:'N',value:'N'},{name:'W',value:'W'},{name:'R',value:'R'},]}
@@ -198,7 +236,7 @@
                     [
                         {name:'codename_c_end',type:'select',placeholder:'订单状态范围',data:this.codes},
                         {name:'orderdate_end',type:'time',tip:['选择显示指定日期的结束时间','选择显示指定日期的结束时间'],
-                            rules:{date_relevance:{date:['orderdate_start','orderdate_end'],relevance:'addtime',killing:'date',default:[31,92,183,366]}}},
+                            rules:{date_relevance:{date:['orderdate_start','orderdate_end'],relevance:'addtime',killing:'relevance',default:[31,92,183,366]}}},
                         {name:'customerid',type:'select_multiple_select',tip:['输入关键词快速定位下拉列表,回车确定','选择要显示的客户'],
                             placeholder:['货主','定位或多选货主'],data:this.owners},
                         {name:'soreference5',type:'input',tip:'可支持多快递单号,糊模查找需要在左边打上%符号',placeholder: '多快递单号'},
@@ -510,15 +548,26 @@
                     order.is_unfold=false;
                 },
                 orderIssueTag(){
-                   // 标记问题单
                     let _this = this;
                     if( _this.checkData.length === 0){
                         tempTip.show('没有勾选记录');
                         return
                     }
+                    $("#exampleModal").modal('show');
+                },
+                submit(){
+                   if(this.typeId === ''){
+                    $("#orderIssueType").addClass('is-invalid'); return;
+                   }else if(this.result_explain ===''){
+                       $("#result_explain").addClass('is-invalid'); return;
+                   }else{
+                       $("#result_explain #result_explain").removeClass('is-invalid');
+                       $("#exampleModal").modal('hide');
+                   }
                     tempTip.setDuration(99999);
-                    tempTip.waitingTip('处理中,请稍候')
-                    axios.post("{{url('apiLocal/order/issue/orderIssueTag')}}",{orderNos:_this.checkData}).then(function(res){
+                    tempTip.waitingTip('处理中,请稍候');
+                    let data = {orderNos:this.checkData,typeId: this.typeId,result_explain:this.result_explain};
+                    axios.post("{{url('apiLocal/order/issue/orderIssueTag')}}",data).then(function(res){
                         tempTip.setDuration(5000)
                         tempTip.cancelWaitingTip();
                         if(res.data.success){
@@ -537,7 +586,14 @@
                         tempTip.show('网络链接异常'+err);
                     })
                 },
-            },
+                changeRemark(){
+                    this.typeId ='';
+                    this.result_explain ='';
+                },
+                focusOnModal(e){
+                    $(e.target).removeClass('is-invalid');
+                }
+            }
         });
     </script>
 @endsection

+ 42 - 11
resources/views/order/issue/edit.blade.php

@@ -70,10 +70,10 @@
                     </div>
                 </div>
                 <div class="form-group row">
-                    <label class="col-2 col-form-label text-right">二次运单商品详情</label>
+                    <label class="col-2 col-form-label text-right">二次订单商品详情”</label>
                     <div class="col-8">
-                        <div class="alert alert-success" v-if="secondOrder.packages">二次单商品详情已填充</div>
-                        <div class="alert alert-secondary" v-else>二次单商品详情</div>
+                        <div class="alert alert-success" v-if="secondOrder.packages">二次单商品详情已填充</div>
+                        <div class="alert alert-secondary" v-else>二次单商品详情</div>
                         <table class="table" v-if="secondOrder.packages">
                             <tr><th>条码</th><th>商品名</th><th>数量</th></tr>
                             <template v-for="package in secondOrder.packages">
@@ -150,7 +150,7 @@
                 <div class="form-group row">
                     <label class="col-2 col-form-label text-right"></label>
                     <div class="col-8">
-                        <button type="submit" class="btn btn-success form-control" @click="orderIssueUpdate">提交修改
+                        <button type="submit" class="btn btn-success form-control" @click="submitFake">提交修改
                         </button>
                     </div>
                 </div>
@@ -199,7 +199,6 @@
             },
             mounted: function () {
                 $("#editOrderIssue").removeClass('d-none');
-                console.log(this.rejectedBill);
             },
             watch:{
                 secondOrder:{
@@ -212,9 +211,39 @@
                 },
             },
             methods: {
+                asyncMethodChain(func){
+                    return new Promise(function (resolve,error) {
+                        if(1){
+                            error();
+                        }
+                        resolve();
+                    })
+                },
+                submitFake(){
+                    let _this = this;
+                    let p= new Promise(function (resolve) {
+                        let client_code = _this.secondOrder.client_code;
+                        if(client_code){
+                            let data = {clientNo:client_code};
+                            axios.post("{{url('apiLocal/order/issue/getOrderInfoByClientNo')}}",data).then(function(res){
+                                if(res.data.success){
+                                    _this.secondOrder = res.data.data;
+                                    _this.orderIssues.second_order_id = res.data.data.id;
+                                    resolve();
+                                } else {
+                                    tempTip.setDuration(4000);
+                                    tempTip.show('查询订单信息出现异常:' + res.data.fail_info);
+                                }
+                            }).catch(function(err){
+                                tempTip.setDuration(4000);
+                                tempTip.show('网络异常:' + err);
+                            });
+                        }
+                    })
+                    p.then(this.orderIssueUpdate);
+                },
                 getRejectedBill(){
                     let logistic_number_return =  this.rejectedBill.logistic_number_return;
-                    console.log(123,logistic_number_return);
                     let _this = this;
                     if( logistic_number_return === null || logistic_number_return == '' ){
                         this.rejectedBill = {logistic_number_return:logistic_number_return} ;
@@ -257,8 +286,6 @@
                         '承运商快递减免':'logistic_express_remission',
                         '宝时赔偿金额':'baoshi_indemnity_money',
                         '宝时快递减免':'baoshi_express_remission',
-                        '宝时快递减免':'baoshi_express_remission',
-                        '宝时快递减免':'baoshi_express_remission',
                         '退回单号':'logistic_number_return',
                         '退回单号货主':'id_owner',
                         '退回单号承运商':'id_logistic_return',
@@ -269,7 +296,11 @@
                     }
                     axios.post('{{url("apiLocal/order/issue/update")}}', data).then(function (res) {
                         if (res.data.success) {
-                            $('#alertModal').modal('show');
+                            tempTip.setDuration(1000);
+                            tempTip.showSuccess('修改成功正在返回查询页面');
+                            setTimeout(function(){
+                                window.location.href="javascript:history.go(-1)";
+                            },500);
                         } else {
                             tempTip.setDuration(3000);
                             tempTip.show(res.data.errors[0][0]);
@@ -287,9 +318,9 @@
                         $('#alertModal').modal('hide');
                     });
                 },
-                getSecondOrder(e){
+                getSecondOrder(){
                     let _this = this;
-                    let client_code = $(e.target).val();
+                    let client_code = this.secondOrder.client_code;
                     if(!client_code){
                         _this.secondOrder = '';
                         _this.orderIssues.second_order_id = null;

+ 56 - 35
resources/views/order/issue/index.blade.php

@@ -4,7 +4,7 @@
 @section('content')
     @component("order.issue.menu")@endcomponent
     <div class="container-fluid" id="issue_div">
-        <div style="min-width: 3000px;" class="container-fluid">
+        <div style="min-width: 3000px;" >
             <div id="list" class="d-none container-fluid">
                 <div id="form_div" style="min-width: 2250px;"></div>
                 <div class="form-inline mt-1 ">
@@ -32,16 +32,16 @@
                 <table class="table table-sm  table-bordered table-hover card-body table-responsive-sm p-0 m-0 "
                        style="background: #fff;min-width: 3000px;">
                     <tr class="tr-yellow" align="center">
-                        <th class=" font-weight-bolder " colspan="6"></th>
+                        <th class=" font-weight-bolder " colspan="7"></th>
                         <th class="td-yellow  font-weight-bolder original-class table-head-warning "
-                            :colspan="isShowOrderInfo ? '16':'8'">原始运单号
-                            <button class="btn btn-sm btn-outline-secondary" v-if="isShowOrderInfo"
+                            :colspan="isShowOrderInfo ? '16':'8'"><span>原始运单号</span>
+                            <button class="btn btn-sm btn-outline-secondary float-right" v-if="isShowOrderInfo"
                                     @click="hideOrderInfo">隐藏运单列
                             </button>
                         </th>
 
                         <th class="  font-weight-bolder" :colspan="10 +  (isShowRejectedBill ? 5:1) + (isShowSecondOrderInfo ? 6: 1 )   @cannot('客户不可见') +1 @endcannot">
-                            <button class="btn btn-sm btn-outline-secondary" v-if="isShowRejectedBill"
+                            <button class="btn btn-sm btn-outline-secondary float-left" v-if="isShowRejectedBill"
                                     @click="hideRejectedBill">隐藏退单列
                             </button>
                             情况说明
@@ -65,6 +65,7 @@
                             <th class=" align-middle" rowspan="2" style=" min-width: 75px;">置顶</th>
                         @endcan
                         <th class=" align-middle" rowspan="2" style=" min-width: 100px;">退单状态</th>
+                        <th class="  align-middle" rowspan="2" style="min-width: 120px">最终状态</th>
                         <th class=" align-middle td-yellow" rowspan="2" style="min-width: 165px;">登记日期</th>
                         <th class=" align-middle td-yellow" rowspan="2" style="min-width: 165px;">订单日期</th>
                         <th class=" align-middle td-yellow" rowspan="2" style="min-width: 100px;">客户</th>
@@ -121,8 +122,6 @@
                             style=" min-width: 350px;">
                             二次商品明细
                         </th>
-                        <th class="  align-middle" rowspan="2" style="min-width: 120px">最终状态</th>
-
                         @cannot('客户不可见')
                             <th class="  align-middle" rowspan="2" style="min-width: 120px">承运商赔偿金额</th>
                         @endcannot
@@ -184,6 +183,7 @@
                             </td>
                         @endcan
                         <td >@{{ orderIssue.rejecting_status }}</td>
+                        <td >@{{ orderIssue.final_status }}</td>
                         <td class="toptd td-yellow ">
                             <div v-if="orderIssue.remark" class="bg-light-yellow  text-danger top text-left" data-toggle="tooltip" style="opacity: 0.1;position: absolute;z-index: 1">
                                 置顶备注:@{{ orderIssue.remark }}
@@ -346,7 +346,7 @@
                             <span class="btn btn-outline-secondary " @click="showSecondeOrder"   :style="orderIssues.length>4 ?'{height: 200px;line-height: 100px':''">展开运单列</span>
                         </td>
                         <td v-if="isShowSecondOrderInfo">
-                            <span v-if="orderIssue.second_order" class="p-0"> @{{ orderIssue.second_order.code }}</span>
+                            <span v-if="orderIssue.second_order" class="p-0"> @{{ orderIssue.second_order.client_code }}</span>
                         </td>
                         <td v-if="isShowSecondOrderInfo">
                             <span v-if="orderIssue.second_order" class="p-0"> @{{ orderIssue.second_order.logistic.name }}</span>
@@ -393,7 +393,7 @@
                                 </button>
                             </template>
                         </td>
-                        <td >@{{ orderIssue.final_status }}</td>
+
                         <td >@{{ orderIssue.logistic_indemnity_money }}</td>
                         <td >@{{ orderIssue.logistic_express_remission }}</td>
                         @cannot('客户不可见')
@@ -413,11 +413,12 @@
                         </td>
                     </tr>
                 </table>
-                <a :href="page.prevPageUrl" class="btn btn-sm" :class="page.curPage === 1 ?'':'btn-outline-primary'"
-                   :disabled="page.curPage === 1">上一页</a>
-                <a :href="page.nextPageUrl" class="btn btn-sm"
-                   :class="page.curPage === page.lastPage ?'':'btn-outline-primary'"
-                   :disabled="page.curPage === page.lastPage">下一页</a>
+                <button  class="btn btn-sm" :class="page.curPage === 1 ?'':'btn-outline-primary'"
+                    @click="goPage(page.curPage-1)"
+                   :disabled="page.curPage === 1">上一页</button>
+                <button  class="btn btn-sm" :class="page.curPage === page.lastPage ?'':'btn-outline-primary'"
+                    @click="goPage(page.curPage+1)"
+                    :disabled="page.curPage === page.lastPage">下一页</button>
                 <input @keyup.enter="pageTurning($event)" class="form-control-sm ml-3 tooltipTarget"
                        :placeholder="'当前页数:'+page.curPage+'/'+page.lastPage" title="去往指定页">
                 <span class="text-muted m-1">共 @{{page.total}} 条 </span>
@@ -584,22 +585,15 @@
                     },
                     {name: 'client_code', type: 'input', tip: '原始订单号', placeholder: '原始订单号'},
                     {name: 'logistic_number', type: 'input', tip: ['输入原始运单号'], placeholder: '原始运单号'},
-                    {name: 'final_status', type: 'select', tip: '问题件的最终状态', placeholder: '最终状态', data: final_status},
-                    {
-                        name: 'order_issue_type_id',
-                        type: 'select',
-                        tip: '问题类别',
-                        placeholder: '问题类别',
-                        data: this.orderIssueType
-                    },
-                    {name: 'logistic_indemnity_money', type: 'input', tip: '承运商赔偿金额', placeholder: '承运商赔偿金额'},
-                    {name: 'is_handle', type: 'checkbox', tip: '是否已处理', data: [{name: 'ture', value: '已解决'}]},
+                    {name: 'logistic_number_return', type: 'input', tip: '退回单号', placeholder: '退回单号'},
+                    {name: 'send_client_code', type: 'input', tip: '二次订单号', placeholder: '二次订单号'},
                 ], [
                     {name: 'created_at_end', type: 'dateTime', tip: '订单结束日期'},
                     {name: 'consignee_name', type: 'input', tip: '收货人名称', placeholder: '收货人名称'},
                     {name: 'consignee_phone', type: 'input', tip: '收货人电话', placeholder: '收货人电话'},
                     {name: 'good_barcode', type: 'input', tip: '条码', placeholder: '条码'},
                     {name: 'good_name', type: 'input', tip: '商品名', placeholder: '商品名'},
+
                     {
                         name: 'id_quality_label',
                         type: 'select',
@@ -607,13 +601,22 @@
                         placeholder: '是否正品',
                         data: this.qualityLabel
                     },
-
-                        @cannot('客户不可见')
+                ],[
+                    {name: 'logistic_indemnity_money', type: 'input', tip: '承运商赔偿金额', placeholder: '承运商赔偿金额'},
+                    @cannot('客户不可见')
                     {
                         name: 'baoshi_indemnity_money', type: 'input', tip: '宝时赔偿金额', placeholder: '宝时赔偿金额'
                     },
+                    {name: 'final_status', type: 'select', tip: '问题件的最终状态', placeholder: '最终状态', data: final_status},
+                    {
+                        name: 'order_issue_type_id',
+                        type: 'select',
+                        tip: '问题类别',
+                        placeholder: '问题类别',
+                        data: this.orderIssueType
+                    },
+                    {name: 'is_handle', type: 'checkbox', tip: '是否已处理', data: [{name: 'ture', value: '已解决'}]},
                     @endcannot
-
                 ]];
                 this.form = new query({
                     el: '#form_div',
@@ -748,13 +751,7 @@
                         });
                     }
                 },
-                pageTurning(event) {
-                    let page = $(event.target).val();
-                    if (page > this.page.lastPage) {
-                        return;
-                    }
-                    window.location = this.form.goPage(page);
-                },
+
                 orderIssueExport(sign) {
                     let url = '{{url('order/issue/export')}}';
                     let token = '{{ csrf_token() }}';
@@ -791,6 +788,8 @@
                             p_ele.select();
                             document.execCommand("Copy");
                             p.remove();
+                            tempTip.setDuration(1200);
+                            tempTip.showSuccess('复制快递单号成功');
                         }
                     }catch(err){
                         tempTip.setDuration(2000);
@@ -1028,7 +1027,29 @@
                 },
                 showSecondeOrder() {
                     this.isShowSecondOrderInfo = true;
-                }
+                },
+                goPage(page){
+                    let href = window.location.href;
+                    if(href.indexOf('page=')!==-1){
+                        href = href.replace('page='+this.page.curPage,'page='+page);
+                    }else{
+                        href+='&page='+page;
+                    }
+                    window.location = href;
+                },
+                pageTurning(e) {
+                    let page = $(e.target).val();
+                    if (page > this.page.lastPage) {
+                        return;
+                    }
+                    let href = window.location.href;
+                    if(href.indexOf('page=')!==-1){
+                        href = href.replace('page='+this.page.curPage,'page='+page);
+                    }else{
+                        href+='&page='+page;
+                    }
+                    window.location = href;
+                },
             }
         })
         // modal 隐藏时修改 input 为空

+ 1 - 1
resources/views/order/issue/menu.blade.php

@@ -21,7 +21,7 @@
                 @endcan
                 @can('订单管理-问题件-工作量')
                     <li class="nav-item" >
-                        <a class="nav-link" href="{{url('orderIssuePerformance/index')}}" :class="{active:isActive('orderIssuePerformance',1)}">工作量</a>
+                        <a class="nav-link" href="{{url('workLoad/index')}}" :class="{active:isActive('workLoad',1)}">工作量</a>
                     </li>
                 @endcan
                 @can('订单管理-问题件-绩效统计')

+ 153 - 29
resources/views/order/issue/workload.blade.php

@@ -20,9 +20,10 @@
                 </span>
             </div>
             <table class="table table-sm table-striped table-bordered table-hover card-body mt-2 ">
-                <tr>
+                <tr class="text-nowrap" id="header"></tr>
+                <tr class="text-center">
                     <th>
-                        <input type="checkbox" id="all" >
+                        <input type="checkbox" id="all" @click="checkAll($event)">
                     </th>
                     <th>序号</th>
                     <th>问题件ID</th>
@@ -34,46 +35,169 @@
                     <th>快递单号</th>
                     <th>处理时效</th>
                 </tr>
-
-                <tr v-for=""></tr>
-
+                <tr v-for="(workLoad,index) in workLoads" class="text-center">
+                    <td><input type="checkbox" v-model="checkData" :value="workLoad.id"></td>
+                    <td>@{{ index+1 }}</td>
+                    <td>@{{ workLoad.id }}</td>
+                    <td>@{{ workLoad.created_at }}</td>
+                    <td>
+                        <template v-if="workLoad.endLog">@{{ workLoad.endLog.created_at }}</template>
+                    </td>
+                    <td>@{{ workLoad.createUser }}</td>
+                    <td >@{{ workLoad.endUser }}</td>
+                    <td>
+                        <template v-if="workLoad.order.owner">@{{ workLoad.order.owner.name }}</template>
+                    </td>
+                    <td>
+                        <div>
+                            <p v-for="(package,index) in workLoad.order.packages" class="p-0 m-0">
+                               <span >@{{ package.logistic_number }}</span>
+                            </p>
+                        </div>
+                    </td>
+                    <td>@{{ workLoad.processingTime }}</td>
+                </tr>
             </table>
+            <button  class="btn btn-sm" :class="page.curPage === 1 ?'':'btn-outline-primary'"
+                @click="goPage(page.curPage-1)"
+                :disabled="page.curPage === 1">上一页</button>
+            <button  class="btn btn-sm" :class="page.curPage === page.lastPage ?'':'btn-outline-primary'"
+               @click="goPage(page.curPage+1)"
+               :disabled="page.curPage === page.lastPage">下一页</button>
+            <input @keyup.enter="pageTurning($event)" class="form-control-sm ml-3 tooltipTarget"
+                   :placeholder="'当前页数:'+page.curPage+'/'+page.lastPage" title="去往指定页">
+            <span class="text-muted m-1">共 @{{page.total}} 条 </span>
         </div>
     </div>
 
 @endsection
 @section('lastScript')
-    <script type="text/javascript" src="{{asset('js/queryForm/queryForm.js')}}"></script>
+    <script type="text/javascript" src="{{asset('js/queryForm/queryForm200828a.js')}}"></script>
     <script type="text/javascript" src="{{asset('js/queryForm/export200818a.js')}}"></script>
-
+    <script type="text/javascript" src="{{asset('js/queryForm/header200826b.js')}}"></script>
     <script>
         let workLoadVue = new Vue({
-            el:"#workLoad_div",
-            data:{
-                workLoads:{!! $workLoads->toJson() !!},
-                users:{!! $users !!},
-                owners:{!! $owners !!},
-                checkData:[],
-                query:{
-                    create_user_id:'{{$options['create_user_id']}}',
-                    end_user_id:'{{$options['end_user_id']}}',
-                    client_no:'{{$options['client_no']}}',
-                    owner_id:'{{{$options['owner_id']}}}',
-                    create_start:'{{$options['create_start']}}',
-                    create_end:'{{$options['create_end']}}',
-                    order_issue_id:'{{$options['order_issue_id']}}',
-                }
+            el: "#workLoad_div",
+            data: {
+                workLoads: {!! $workLoads->toJson() !!}['data'],
+                users:{!! $users->toJson() !!},
+                owners:{!! $owners->toJson() !!},
+                checkData: [],
+                query: {
+                    create_user_id: '{{$options['create_user_id']}}',
+                    end_user_id: '{{$options['end_user_id']}}',
+                    client_no: '{{$options['client_no']}}',
+                    owner_id: '{{{$options['owner_id']}}}',
+                    create_start: '{{$options['create_start']}}',
+                    create_end: '{{$options['create_end']}}',
+                    order_issue_id: '{{$options['order_issue_id']}}',
+                },
+                page: {
+                    lastPage: {!! $workLoads->toJson() !!}['last_page'],
+                    curPage: {!!  $workLoads->toJson() !!}['current_page'],
+                    total: {!!  $workLoads->toJson() !!}['total'],
+                    nextPageUrl: {!!  $workLoads->toJson() !!}['next_page_url'],
+                    prevPageUrl: {!! $workLoads->toJson()  !!}['prev_page_url'],
+                    lastPageUrl: {!!  $workLoads->toJson() !!}['last_page_url'],
+                },
+                isBtn:[],
+                form:'',
             },
-            mounted:function(){
+            mounted: function () {
                 $('#workLoad_div').removeClass('d-none');
-                console.log(this.workLoads);
+                let users = [];
+                let owners = [];
+                this.users.forEach(function(user,index){
+                    users.push({name:user.id,value:user.name})
+                })
+                this.owners.forEach(function(owner,index){
+                    owners.push({name:owner.id,value:owner.name})
+                })
+                let data = [
+                    [
+                        {name: 'create_start', type: 'dateTime', tip: '创建日期', placeholder: '创建日期'},
+                        {name: 'owner_id',type:'select_multiple_select',tip:['输入关键词快速定位下拉列表,回车确定','选择要显示的客户'],placeholder:['',''],data:owners},
+                        {name: 'create_user_id', type: 'select', tip: '创建人', placeholder: '创建人',data:users},
+                        {name: 'end_user_id', type: 'select', tip: '结束人', placeholder: '结束人',data:users},
+                    ], [
+                        {name: 'end_date', type: 'dateTime', tip: '完结日期', placeholder: '完结日期'},
+                        {name: 'logistic_number', type: 'input', tip: '快递单号', placeholder: '快递单号'},
+                        {name: 'order_issue_id', type: 'input', tip: '问题件ID', placeholder: '问题件ID'},
+                    ]
+                ];
+                this.form = new query({
+                    'el':'#form_div',
+                    condition:data,
+                });
+                this.form.init();
             },
-            methods:{
-                exportSelected(){
-
+            watch: {
+                checkData: {
+                    handler() {
+                        if (this.checkData.length === this.workLoads.length) {
+                            document.querySelector('#all').checked = true;
+                        } else {
+                            document.querySelector('#all').checked = false;
+                        }
+                    },
+                    deep: true
+                }
+            },
+            methods: {
+                checkAll(e) {
+                    if (e.target.checked) {
+                        this.workLoads.forEach((el, i) => {
+                            if (this.checkData.indexOf(el.id) == '-1')
+                                this.checkData.push(el.id);
+                        });
+                    } else {
+                        this.checkData = [];
+                    }
                 },
-                exportAll(){
-
+                exportSelected() {
+                    let url = '{{url('workLoad/export')}}';
+                    let token = '{{ csrf_token() }}';
+                    excelExport(false, this.checkData, url, this.page.total, token);
+                },
+                exportAll() {
+                    let url = '{{url('workLoad/export')}}';
+                    let token = '{{ csrf_token() }}';
+                    excelExport(true, null, url, null, token);
+                },
+                isUnfold(order){
+                    if (!order.is_unfold){
+                        this.$set(order,'is_unfold',true);
+                        return
+                    }
+                    order.is_unfold=false;
+                },
+                unfold(id){
+                    this.$set(this.isBtn,id,true);
+                    setTimeout(function () {
+                        $(".tooltipTarget").tooltip({'trigger':'hover'});
+                    },1);
+                },
+                pageTurning(e){
+                    let page = $(e.target).val();
+                    if (page > this.page.lastPage) {
+                        return;
+                    }
+                    let href = window.location.href;
+                    if(href.indexOf('page=')!==-1){
+                        href = href.replace('page='+this.page.curPage,'page='+page);
+                    }else{
+                        href+='&page='+page;
+                    }
+                    window.location = href;
+                },
+                goPage(page){
+                    let href = window.location.href;
+                    if(href.indexOf('page=')!==-1){
+                        href = href.replace('page='+this.page.curPage,'page='+page);
+                    }else{
+                        href+='&page='+page;
+                    }
+                    window.location = href;
                 }
             }
         })

+ 5 - 0
routes/web.php

@@ -376,3 +376,8 @@ Route::group(['prefix'=>'orderIssuePerformance'],function(){
         Route::get('index','OrderIssuePerformanceController@index');
         Route::any('export','OrderIssuePerformanceController@export');
 });
+
+Route::group(['prefix'=>'workLoad'],function(){
+   Route::get('index','OrderIssuePerformanceController@workLoadPage');
+   Route::any('export','OrderIssuePerformanceController@exportWorkLoad');
+});