Explorar el Código

客户系统模块Bug修改 8-27
by 'zengjun'

ajun hace 5 años
padre
commit
af696974d6

+ 23 - 0
app/Http/Controllers/OrderIssuePerformanceController.php

@@ -0,0 +1,23 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Gate;
+
+class OrderIssuePerformanceController extends Controller
+{
+    public function index(Request $request){
+        if (!Gate::allows('订单管理-问题件-绩效统计')) {
+            return redirect(url('/'));
+        }
+        $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'));
+    }
+    public function export(Request $request){
+        $service  = app('orderIssuePerformanceService');
+        return $service->exportPerformance($request->all());
+    }
+}

+ 10 - 0
app/Order.php

@@ -92,4 +92,14 @@ class Order extends Model
         }
     }
 
+    public function delete()
+    {
+        $this->packages()->delete();
+        return parent::delete();
+    }
+    public function deleteSafe()
+    {
+        return parent::delete();
+    }
+
 }

+ 13 - 0
app/OrderIssue.php

@@ -50,4 +50,17 @@ class OrderIssue extends Model
     public function getSecondLogisticNumberAttribute(){
         return $this['secondOrder']['code'] ??'';
     }
+
+    public function delete()
+    {
+        $this->order()->delete();
+        $this->logs()->delete();
+        $this->top()->delete();
+        return parent::delete();
+    }
+
+    public function deleteSafe(){
+        return parent::delete();
+    }
+
 }

+ 10 - 0
app/OrderPackage.php

@@ -20,4 +20,14 @@ class OrderPackage extends Model
         return $this->hasMany('App\OrderPackageCommodities','order_package_id','id');
     }
 
+    public function delete()
+    {
+        $this->commodities()->delete();
+        return parent::delete();
+    }
+
+    public function deleteSafe(){
+        return parent::delete();
+    }
+
 }

+ 1 - 0
app/OrderPackageCommodities.php

@@ -19,4 +19,5 @@ class OrderPackageCommodities extends Model
     public function commodity(){
         return $this->belongsTo('App\Commodity','commodity_id','id');
     }
+
 }

+ 2 - 0
app/Providers/AppServiceProvider.php

@@ -3,6 +3,7 @@
 namespace App\Providers;
 
 use App\Http\Controllers\Controller;
+use App\Services\OrderIssuePerformanceService;
 use Illuminate\Queue\Events\JobFailed;
 use Illuminate\Support\Facades\Queue;
 use Illuminate\Support\Facades\Schema;
@@ -21,6 +22,7 @@ class AppServiceProvider extends ServiceProvider
     public function register()
     {
         //
+        app()->singleton('orderIssuePerformanceService',OrderIssuePerformanceService::class);
     }
 
     /**

+ 0 - 1
app/Services/InventoryService.php

@@ -33,7 +33,6 @@ class InventoryService
         ];
         $inventoryDailyLogs = app(QueryService::class)->query($param,$inventoryDailyLogs,$columnQueryRules);
         return $inventoryDailyLogs;
-
     }
 
     //库存体积

+ 102 - 0
app/Services/OrderIssuePerformanceService.php

@@ -0,0 +1,102 @@
+<?php
+
+namespace App\Services;
+
+use App\OrderIssueProcessLog;
+use App\Owner;
+use App\Services\common\QueryService;
+use App\User;
+use App\Exports\Export;
+use Illuminate\Pagination\LengthAwarePaginator;
+use Illuminate\Pagination\Paginator;
+use Maatwebsite\Excel\Facades\Excel;
+
+
+class OrderIssuePerformanceService
+{
+    public function getQuery(array $queryParam)
+    {
+        $user_id = $queryParam['user_id'] ?? '';
+        $owner_id = $queryParam['owner_id'] ?? '';
+        $timeFrame = $queryParam['timeFrame'] ?? '';
+        unset($queryParam['owner_id'], $queryParam['user_id'], $queryParam['timeFrame'],$queryParam['_token']);
+        $orderIssueProcessLog = OrderIssueProcessLog::query()->with(['user' => function ($query) use ($user_id) {
+            if ($user_id) {
+                $query->where('id', $user_id);
+            }
+        }, 'orderIssue.order.owner' => function ($query) use ($owner_id) {
+            if ($owner_id) {
+                $query->where('id', $owner_id);
+            }
+        }]);
+        $columnQueryRules = [
+            'create_start' => ['alias' => 'created_at', 'startDate' => ' 00:00:00'],
+            'create_end' => ['alias' => 'created_at', 'endDate' => ' 23:59:59'],
+        ];
+        if ($timeFrame ?? false) {
+            if ($timeFrame == 'day') {
+                $queryParam['create_start'] = date('Y-m-d');
+                $queryParam['create_end'] = date('Y-m-d');
+            } else if ($timeFrame == 'yesterday') {
+                $queryParam['create_start'] = date('Y-m-d', strtotime('-1 day'));
+                $queryParam['create_end'] = date('Y-m-d', strtotime('-1 day'));
+            } else if ($timeFrame) {
+                $date = date('Y-m-d', strtotime('-1 weeks', strtotime('Monday')));
+                $queryParam['create_start'] = $date;
+                $queryParam['create_end'] = date('Y-m-d');
+            } else if ($timeFrame == 'month') {
+                $queryParam['create_start'] = date('Y-m-1');
+                $queryParam['create_end'] = date('Y-m-d');
+            }
+        }
+        $orderIssueProcessLog = app(QueryService::class)->query($queryParam, $orderIssueProcessLog, $columnQueryRules);
+        return $orderIssueProcessLog;
+    }
+
+    public function paginate(array $params)
+    {
+        $paginate = $params['paginate'] ?? 50;
+        $page = $params['page'] ?? 1;
+        $data = $this->getAll($params);
+        $collection = collect($data);
+        $list = $collection->slice(($page - 1) * $paginate, $paginate)->all();
+        $option = ['path' => Paginator::resolveCurrentPath()];
+        $paginate = new LengthAwarePaginator($list, $collection->count(), $paginate, $page,$option );
+        return $paginate;
+    }
+
+    public function getAll($params)
+    {
+        $arr = OrderIssueProcessLog::all()->groupBy('user_id');
+        $owners = Owner::all();
+        $user_ids = array_keys($arr->toArray());
+        $data = [];
+        $total = 0;
+        foreach ($user_ids as $key => $value) {
+            $params['user_id'] = $value;
+            $user = User::find($value);
+            $orderIssueProcessLog = $this->getQuery($params)->get();
+            foreach ($owners as $owner) {
+                $createCount = $orderIssueProcessLog->where('user_id', $value)->where('orderIssue.order.owner.id', $owner['id'])->where('type', '创建')->count(); //创建
+                $endCount = $orderIssueProcessLog->where('user_id', $value)->where('orderIssue.order.owner.id', $owner['id'])->where('type', '结束')->count(); //结束
+                $treatmentCount = $orderIssueProcessLog->where('user_id', $value)->where('orderIssue.order.owner.id', $owner['id'])->where('type', '处理')->count(); //处理
+                $sum = $createCount + $endCount + $treatmentCount;
+                if ($sum == 0) {
+                    continue;
+                }
+                $total++;
+                array_push($data, ['id'=>$total,'user' => $user['name'], 'owner' => $owner['name'], 'createCount' => $createCount, 'endCount' => $endCount, 'treatmentCount' => $treatmentCount, 'sum' => $sum]);
+            }
+        }
+        return $data;
+    }
+
+    public function exportPerformance(array $params)
+    {
+        $performance = $this->getAll($params);
+        $row = [['user'=>'客服','owner'=>'客户','createCount'=>'创建数','treatmentCount' =>'处理数','endCount'=>'完结数','sum'=>'总数']];
+        return  Excel::download(new Export($row,$performance),date('YmdHis', time()).'-客服绩效.xlsx');
+    }
+
+
+}

+ 1 - 1
app/Services/OrderIssueService.php

@@ -214,7 +214,7 @@ class OrderIssueService
                 $orderIssue->rejected_bill_id = $rejectedBill['id'];
                 $orderIssue->save();
             }else {
-                $rejectedBill =  RejectedBill::where('order_number',$orderHeader['orderNo']);
+                $rejectedBill =  RejectedBill::where('order_number',$orderHeader['orderNo'])->first();
                 if($rejectedBill){
                     $orderIssue->rejected_bill_id = $rejectedBill['id'];
                     $orderIssue->save();

+ 18 - 5
app/Services/OrderPackageCommoditiesService.php

@@ -6,6 +6,7 @@ use App\Commodity;
 use App\OracleActAllocationDetails;
 use App\OracleBasSKU;
 use App\OracleDOCOrderDetail;
+use App\OracleDOCOrderHeader;
 use App\Order;
 use App\OrderPackage;
 use App\OrderPackageCommodities;
@@ -25,7 +26,7 @@ class OrderPackageCommoditiesService
     public function basedOnActAllocationDetailsStoreByOrderNo($orderNo,$orderPackage){
         $details = OracleActAllocationDetails::where('orderno', $orderNo)->get();
         foreach ($details as $key => $detail) {
-            $this->createByActAllocationDetails($detail, $orderPackage);
+            $this->createByActAllocationDetail($detail, $orderPackage);
         }
     }
 
@@ -33,11 +34,25 @@ class OrderPackageCommoditiesService
     {
         $details = OracleActAllocationDetails::where('picktotraceid', $orderPackage->logistic_number)->get();
         foreach ($details as $key => $detail) {
-            $this->createByActAllocationDetails($detail, $orderPackage);
+            $this->createByActAllocationDetail($detail, $orderPackage);
         }
     }
 
-    private function createByActAllocationDetails($detail, OrderPackage $orderPackage)
+    public function basedOnActAllocationDetail(Order $order,OracleDOCOrderHeader $header,array  $details){
+        foreach ($details as $detail){
+            $logistic_number  = $details['picktotraceid'];
+            if($logistic_number == '*' || $logistic_number== null || $logistic_number== ''){
+                $logistic_number = $header['soreference5'];
+                if($logistic_number  == '*' || $logistic_number== null || $logistic_number== ''){
+                    continue;
+                }
+            }
+            $orderPackage = OrderPackage::firstOrCreate(['order_id'=>$order['id'],'logistic_number',$details]);
+            $this->createByActAllocationDetail($detail, $orderPackage);
+        }
+    }
+
+    private function createByActAllocationDetail($detail, OrderPackage $orderPackage)
     {
         $owner = Owner::where(['code' => $detail->customerid])->first();      // 货主
         $sku = $detail->sku;
@@ -50,8 +65,6 @@ class OrderPackageCommoditiesService
         return OrderPackageCommodities::create(['order_package_id' => $orderPackage['id'], 'commodity_id' => $commodity['id'], 'amount' => $detail['qty']]);
     }
 
-
-
     public function getOrderPackageCommoditiesByOrderId($orderId)
     {
         $order = Order::where('id', $orderId)->first();

+ 40 - 3
app/Services/OrderPackageService.php

@@ -7,6 +7,8 @@ use App\OracleDOCOrderDetail;
 use App\OracleDOCOrderHeader;
 use App\Order;
 use App\OrderPackage;
+use App\OrderPackageCommodities;
+use Tightenco\Collect\Support\Arr;
 
 class OrderPackageService
 {
@@ -23,6 +25,7 @@ class OrderPackageService
         $orderHeader = OracleDOCOrderHeader::where('OrderNo', $order['code'])->first();
         $orderDetailCount = OracleDOCOrderDetail::where('OrderNo', $order['code'])->count();
         $logistic_number = null;
+
         if ($actAllocationCount == 0) {  // 通过oracle Order Detail
             $logistic_number = $orderHeader['soreference5'];
             if ($orderDetailCount == 0) {return null;}
@@ -42,7 +45,7 @@ class OrderPackageService
                     $logistic_number = $detail['picktotraceid'];
                     if ($logistic_number == null || $logistic_number == '*') {
                         $logistic_number = $orderHeader['soreference5'];
-                        if ($logistic_number == null || $logistic_number == '*')  return null;
+                        if ($logistic_number == null || $logistic_number == '*')  {return null;}
                         $orderPackage = OrderPackage::where(['order_id' => $order['id'], 'logistic_number' => $logistic_number])->first();
                         if($orderPackage)continue;
                         $orderPackage = OrderPackage::create(['order_id' => $order['id'], 'logistic_number' => $logistic_number]);
@@ -50,15 +53,49 @@ class OrderPackageService
                         continue;
                     }
                     $orderPackage = OrderPackage::where(['order_id' => $order['id'], 'logistic_number' => $logistic_number])->first();
-                    if ($orderPackage) continue;
+                    if ($orderPackage) {continue;}
                     $orderPackage = OrderPackage::create(['order_id' => $order['id'], 'logistic_number' => $logistic_number]);
                     $orderPackageCommoditiesService->basedOnActAllocationDetailsStore($orderPackage);
                 }
             }
+        }else{
+            $this->updateOrderPackageInfo($order);
         }
         return OrderPackage::with(['commodities' => function ($query) {
             return $query->with(['commodity']);
         }])->get();
     }
 
-}
+    public function updateOrderPackageInfo(Order $order)
+    {
+        $orderHeader = OracleDOCOrderHeader::where('orderNo', $order['code'])->first();
+        if ($orderHeader['oracleBASCode_codename_c'] == $order['wam_status']) {
+            return;
+        }
+        $orderPackages = OrderPackage::where('order_id', $order['id'])->get();
+        $orderPackageCommodities = OrderPackageCommodities::with('commodity')->whereIn('order_package_id', data_get($orderPackages, '*.id'))->get();
+        $actAllocationDetails = OracleActAllocationDetails::where('orderNo', $order['client_code'])->get();
+        if (count($orderPackageCommodities) < count($actAllocationDetails)) {
+            $actAllocationDetails =  $actAllocationDetails->reject(function($value,$key) use (&$orderPackageCommodities){
+                $bool = false;
+                $count = 0;
+                $orderPackageCommodities->reject(function($value1,$key1)use($value,&$bool,$count){
+                    if($count>0){return false;}
+                    if($value1->commodity['sku'] == $value['sku'] && $value1['amount'] == intval($value['qty']) ){
+                        $bool = true;
+                        $count++;
+                        return true;
+                    }else{
+                        return false;
+                    }
+                });
+                return $bool;
+            });
+        }
+        $orderPackageCommoditiesService = app('orderPackageCommoditiesService');
+        $orderPackageCommoditiesService->basedOnActAllocationDetail($order, $orderHeader, $actAllocationDetails);
+        $order['wam_status'] = $orderHeader['oracleBASCode_codename_c'];
+        $order->save();
+    }
+
+ }

+ 1 - 1
app/Waybill.php

@@ -68,7 +68,7 @@ class Waybill extends Model
     }
 
     public function carType(){
-        return $this->belongsTo('App\CarType','carType_id','id');
+        return $this->hasOne('App\CarType','id','carType_id');
     }
 
     public function waybillAuditLogs(){

+ 38 - 0
database/migrations/2020_08_26_134321_add_order_issue_performance_staistics.php

@@ -0,0 +1,38 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class AddOrderIssuePerformanceStaistics extends Migration
+{
+
+
+    protected $authNames = [ "订单管理-问题件-绩效统计"];
+
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        //
+        foreach ($this->authNames as $authName){
+            \App\Authority::create(['name'=>$authName,'alias_name'=>$authName,'permission'=>'允许']);
+        }
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        //
+        foreach ($this->authNames as $authName){
+            \App\Authority::where(['name'=>$authName,'alias_name'=>$authName])->delete();
+        }
+    }
+}

+ 4 - 4
public/js/app.js

@@ -2330,7 +2330,7 @@ function fromByteArray (uint8) {
 var BlobBuilder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :
   typeof WebKitBlobBuilder !== 'undefined' ? WebKitBlobBuilder :
   typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :
-  typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder :
+  typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : 
   false;
 
 /**
@@ -61974,8 +61974,8 @@ module.exports = tempTip;
 /*! no static exports found */
 /***/ (function(module, exports, __webpack_require__) {
 
-__webpack_require__(/*! D:\Reald\desktop\BsWAS\src\resources\js\app.js */"./resources/js/app.js");
-module.exports = __webpack_require__(/*! D:\Reald\desktop\BsWAS\src\resources\sass\app.scss */"./resources/sass/app.scss");
+__webpack_require__(/*! D:\phpstudy_pro\WWW\bswas\resources\js\app.js */"./resources/js/app.js");
+module.exports = __webpack_require__(/*! D:\phpstudy_pro\WWW\bswas\resources\sass\app.scss */"./resources/sass/app.scss");
 
 
 /***/ }),
@@ -61991,4 +61991,4 @@ module.exports = __webpack_require__(/*! D:\Reald\desktop\BsWAS\src\resources\sa
 
 /***/ })
 
-/******/ });
+/******/ });

+ 2 - 0
resources/js/queryForm/queryForm.js

@@ -27,6 +27,7 @@ const query = function getQueryForm(data) {
             if(!this.autoSubmit){
                 return;
             }
+            console.log(_data);
             saveSearchOnCookie();
             let form = $("<form method='" + _this.method +"'></form>");
             for (const key in _data) {
@@ -682,6 +683,7 @@ const query = function getQueryForm(data) {
         let killings=_data[dom.name].killings;
         if(killings){
             killings.forEach(function(targetName){
+                _data[targetName].value= '';
                 redenerSearchFormOnData(_data[targetName].name, '', _data[targetName].mold);
             })
         }

+ 20 - 24
resources/views/order/issue/index.blade.php

@@ -312,7 +312,7 @@
                                 </button>
                             </div>
 
-                            <div style="position: absolute;display: none;margin-top: -40px" class="add-btn"
+                            <div style="position: absolute;display: none;margin-top: -35px" class="add-btn"
                                  :id="'AddBtn'+orderIssue.id">
                                 <button type="button" class="btn  btn-primary "
                                         @click="showAddDiv('AddLog_'+orderIssue.id)">新
@@ -320,26 +320,24 @@
                             </div>
 
                             <template v-if="orderIssue.logs" class="p-0 m-0 ">
-                                <table class="table table-sm p-0 m-0 " :id="'logs'+orderIssue.id"
-                                       :class="orderIssue.logs.length > 1?'collapse':''">
-                                    <tr v-for="log in orderIssue.logs"  class="del-tr" style="position:static" align="center"
-                                        v-on:mouseover="showDelBtn($event)"
-                                        v-on:mouseleave="hideDelBtn($event)" >
-                                        <td>@{{ log.type }}</td>
-                                        <td>
-                                            <p class="text-wrap mb-0" style="mix-width: 200px">@{{ log.content }}</p>
-                                        </td>
-                                        <td>@{{ log.user.name }}</td>
+                                <table class="table table-sm p-0 m-0 " :id="'logs'+orderIssue.id" :data-value="orderIssue.logShow == null ? orderIssue.logShow=false:''">
+                                    <tr style="position:static" align="center" v-for="(log,index) in orderIssue.logs"
+                                        :class="(orderIssue.logs.length <= 2 ? '' : ((index === 0 || orderIssue.logShow )  ? '' : 'd-none' )) "
+                                        v-on:mouseover="showDelBtn($event)" v-on:mouseleave="hideDelBtn($event)" >
+                                        <td style="min-width: 75px">@{{ log.type }}</td>
+                                        <td style="min-width: 200px">@{{ log.content }}</td>
+                                        <td style="min-width: 120px">@{{ log.user.name }}</td>
                                         <td style="" class="m-0 p-0 border-0">
                                             <button type="button" class="btn btn-sm btn-outline-danger m-0 del-btn invisible"
                                                     @click="deleteOrderIssueLog(log.id,orderIssue.id)">删</button>
                                         </td>
                                     </tr>
                                 </table>
-                                <button v-if="orderIssue.logs.length > 1" type="button" class="btn btn-sm btn-outline-primary align-middle mt-1" data-toggle="collapse" aria-expanded="false"
-                                        :id="'logsBtn'+orderIssue.id"
-                                        :data-target="'#logs'+orderIssue.id" :aria-controls="'logs'+orderIssue.id"
-                                        @click="toggleLogs(orderIssue.id,orderIssue.logs.length)">
+                                <button type="button" class="btn btn-sm btn-outline-primary align-middle mt-1"
+                                        v-if="orderIssue.logs.length > 2"
+                                        :data-value="orderIssue.logs.length"
+                                        :data-count="orderIssue.logShow"
+                                        @click="toggleLogs(orderIssue,$event)">
                                     记录共@{{ orderIssue.logs.length }}条,点击展开
                                 </button>
                             </template>
@@ -777,7 +775,7 @@
                                 if (_this.checkData.includes(item.id)) {
                                     let logisticNumbers = item.order.logisticNumbers;
                                     if (logisticNumbers.length > 0) {
-                                        orderNos.push(logisticNumbers);
+                                        orderNos =  orderNos.concat(logisticNumbers);
                                     }
                                 }
                             })
@@ -786,7 +784,7 @@
                                 tempTip.show('勾选的问题件没有对应的快递单号');
                                 return;
                             }
-                            let p = $('<input id="copy" value="' + orderNos.join(',') + '"/>');
+                            let p = $('<textarea id="copy" />'+orderNos.join('\n')+'</textarea>');
                             p.attr('opacity', 0);
                             $('body').append(p);
                             let p_ele = document.getElementById('copy');
@@ -969,14 +967,13 @@
                         button.text("分箱" + length + "件,点击展开");
                     }
                 },
-                toggleLogs(id, length) {
-                    let button = $("#logsBtn" + id);
-                    let isShow = button.attr('aria-expanded');
-                    if (isShow === 'false') {
-                        button.text('点击收起');
+                toggleLogs(orderIssue, e) {
+                    if ( orderIssue.logShow  === false) {
+                        $(e.target).text('点击收起');
                     } else {
-                        button.text("记录共" + length + "条,点击展开");
+                        $(e.target).text("记录共" + $(e.target).attr('data-value') + "条,点击展开");
                     }
+                    orderIssue.logShow = !orderIssue.logShow;
                 },
                 toggleOrder(id, length) {
                     let button = $("#orderBtn" + id);
@@ -995,7 +992,6 @@
                     } else {
                         button.text("商品" + length + "件,点击展开");
                     }
-                    console.log(33)
                 },
                 toggleRejectedBill(id, length) {
                     let button = $("#rejectedBillBtn" + id);

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

@@ -19,11 +19,17 @@
                         <a class="nav-link" href="{{url('order/issue/excelImport')}}" :class="{active:isActive('excelImport',3)}">导入</a>
                     </li>
                 @endcan
+                @can('订单管理-问题件-绩效统计')
+                    <li class="nav-item" >
+                        <a class="nav-link" href="{{url('orderIssuePerformance/index')}}" :class="{active:isActive('orderIssuePerformance',1)}">绩效统计</a>
+                    </li>
+                @endcan
                 @can('订单管理-问题件-编辑')
                     <li class="nav-item" :class=" isActive('edit',3) ? '' : 'd-none' ">
-                        <a class="nav-link" href="{{url('order/issue/c')}}" :class="{active:isActive('edit',3)}">修改</a>
+                        <a class="nav-link" href="{{URL::current()}}" :class="{active:isActive('edit',3)}">修改</a>
                     </li>
                 @endcan
+
             </ul>
         </div>
     </div>

+ 103 - 7
resources/views/order/issue/performance.blade.php

@@ -1,25 +1,121 @@
 @extends('layouts.app')
-@section('title')问题件-工作量@endsection
+@section('title')订单管理-问题件-绩效统计@endsection
 
 @section('content')
     @component("order.issue.menu")@endcomponent
-    <div class="container-fluid" id="wave_div">
+    <div class="container-fluid none" id="performance_div">
         <div style="min-width: 2000px;">
             <div id="form_div" style="min-width: 1950px;" class="bg-white"></div>
-            <table class="table table-sm table-striped table-bordered table-hover card-body mt-2 ">
-                <td>
 
-                </td>
+            <div class="form-inline mt-1 ">
+                <span class="dropdown">
+                    <button type="button"
+                            class="btn btn-outline-dark btn-sm form-control-sm dropdown-toggle tooltipTarget"
+                            :class="[checkData.length>0?'btn-dark text-light':'']"
+                            data-toggle="dropdown" title="导出所有页将会以搜索条件得到的筛选结果,将其全部记录(每一页)导出">导出Excel
+                    </button>
+                    <div class="dropdown-menu">
+                        <a class="dropdown-item" @click="exportAll()" href="javascript:">导出所有页</a>
+                    </div>
+                </span>
+            </div>
+
+            <table class="table table-sm table-striped table-bordered table-hover card-body mt-2 ">
+                <tr>
+                    <th>
+                        <input type="checkbox" id="all" @click="checkAll($event)">
+                    </th>
+                    <th>序号</th>
+                    <th>客服</th>
+                    <th>客户</th>
+                    <th>创建数</th>
+                    <th>处理数</th>
+                    <th>完结数</th>
+                    <th>总数</th>
+                </tr>
+                <tr v-for="(performance,index) in performance.data">
+                    <td>
+                        <input type="checkbox"  v-model="checkData" :value="index+1">
+                    </td>
+                    <td>@{{ index+1 }}</td>
+                    <td>@{{ performance.user }}</td>
+                    <td>@{{ performance.owner }}</td>
+                    <td>@{{ performance.createCount }}</td>
+                    <td>@{{ performance.treatmentCount }}</td>
+                    <td>@{{ performance.endCount }}</td>
+                    <td>@{{ performance.sum }}</td>
+                </tr>
             </table>
 
+            <a :href="performance.prev_page_url" class="btn btn-sm" :class="performance.current_page === 1 ?'':'btn-outline-primary'"
+               :disabled="performance.current_page === 1">上一页</a>
+            <a :href="performance.next_page_url" class="btn btn-sm"
+               :class="performance.current_page === performance.last_page ?'':'btn-outline-primary'"
+               :disabled="performance.current_page === performance.lastPage">下一页</a>
+            <input @keyup.enter="pageTurning($event)" class="form-control-sm ml-3 tooltipTarget"
+                   :placeholder="'当前页数:'+performance.current_page+'/'+performance.last_page" title="去往指定页">
+            <span class="text-muted m-1">共 @{{performance.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>
-
+        let performance_vue = new Vue({
+            el:'#performance_div',
+            data:{
+                performance:{!! $performance->toJson() !!},
+                option:{
+                    timeFrame:'{{$options['timeFrame']}}',
+                    create_start:'{{$options['create_start']}}',
+                    create_end:'{{$options['create_end']}}',
+                },
+                checkData:[],
+            },
+            mounted:function(){
+                $('#performance_div').removeClass("d-none");
+                let data =[
+                    [{name:'create_start',type:'dateTime',tip:'统计时段开始',placeholder:'统计时段开始',killings:['timeFrame']},
+                    {name:'create_end',type:'dateTime',tip:'统计时段结束',placeholder:'统计时段结束',killings:['timeFrame']},
+                    {name:'timeFrame',type:'select',tip:'',placeholder:'选择时段',
+                        data:[{name:"day",value:'当天'},{name:'yesterday',value:'昨日'},{name:"week",value:'本周'},{name:"month",value:'本月'}],
+                        killings:['create_start','create_end'],
+                    }]
+                ];
+                let queryForm = new query({
+                    el:'#form_div',
+                    condition:data,
+                })
+                queryForm.init();
+            },
+            methods: {
+                pageTurning(e){
+                    let page = $(e.target).val();
+                    if(page){
+                        window.location = this.performance.path+'?page='+page;
+                    }
+                },
+                exportAll:function(){
+                    let search = '?timeFrame='+this.option.timeFrame+'&create_start='+this.option.create_start+'&create_end'+this.option.create_end;
+                    let url = '{{url('orderIssuePerformance/export')}}'+search;
+                    let token='{{ csrf_token() }}';
+                    excelExport(false,'',url,null,token);
+                },
+                checkAll(e) {
+                    if (e.target.checked) {
+                        this.performance.data.forEach((el, i) => {
+                            if (this.checkData.indexOf(el.id) == '-1') {
+                                this.checkData.push(el.id);
+                            }
+                        });
+                    } else {
+                        this.checkData = [];
+                    }
+                },
+            },
+        });
     </script>
 
 @endsection

+ 5 - 0
routes/web.php

@@ -365,3 +365,8 @@ Route::group(['prefix'=>'order'],function(){
     Route::get('issue/edit/{id}','OrderIssueController@edit');// 编辑
     Route::match(['get','post'],'issue/export','OrderIssueController@exportOrderIssue');// 导出
 });
+
+Route::group(['prefix'=>'orderIssuePerformance'],function(){
+        Route::get('index','OrderIssuePerformanceController@index');
+        Route::any('export','OrderIssuePerformanceController@export');
+});

+ 1 - 1
webpack.mix.js

@@ -19,7 +19,7 @@ mix.copy('resources/images','public/images');
 mix.copy('resources/icon/faviconc.ico','public/faviconc.ico');
 mix.js('resources/js/trix.js','public/js/trix.js');
 mix.copy('resources/sass/trix.css','public/css/trix.css');
-mix.copy('resources/js/queryForm/queryForm.js','public/js/queryForm/queryForm200825.js');
+mix.copy('resources/js/queryForm/queryForm.js','public/js/queryForm/queryForm200828a.js');
 mix.copy('resources/js/queryForm/export.js','public/js/queryForm/export200818a.js');
 mix.js('resources/js/queryForm/header.js','public/js/queryForm/header200826b.js');