Browse Source

客单件报表 添加权限

yuang 4 years ago
parent
commit
3281950ea8

+ 21 - 4
app/Http/Controllers/KpiController.php

@@ -3,6 +3,8 @@
 namespace App\Http\Controllers;
 
 use App\Services\UserService;
+use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Database\Eloquent\Collection;
 use Illuminate\Http\Request;
 
 class KpiController extends Controller
@@ -24,10 +26,7 @@ class KpiController extends Controller
 
     public function dayDetailCustomer()
     {
-        /** @var UserService $userService */
-        $userService = app('UserService');
-        $ownerIds =  $userService->getPermittingOwnerIds(auth()->user());
-        $owners = \App\Owner::query()->select(['id', 'name', 'code'])->whereIn('id', $ownerIds)->get();
+        $owners = $this->getOwners();
         return view('kpi.dayDetailCustomer.index', compact('owners'));
     }
 
@@ -35,6 +34,24 @@ class KpiController extends Controller
     {
         $userWorkgroups = \App\UserWorkgroup::query()->select(["id", "name"])->get();
         return view('kpi.workCoefficientDayStat.index', compact('userWorkgroups'));
+    }
+
+    public function ownerPcsReport()
+    {
+        $ownerCodes = $this->getOwners()->pluck('code');
+        return view('kpi.ownerPcsReport.index', compact('ownerCodes'));
 
     }
+
+    /**
+     * @return Builder[]|Collection
+     */
+    public function getOwners()
+    {
+        /** @var UserService $userService */
+        $userService = app('UserService');
+        $ownerIds = $userService->getPermittingOwnerIds(auth()->user());
+        $owners = \App\Owner::query()->select(['id', 'name', 'code'])->whereIn('id', $ownerIds)->get();
+        return $owners;
+    }
 }

+ 167 - 0
resources/views/kpi/ownerPcsReport/index.blade.php

@@ -0,0 +1,167 @@
+@extends('layouts.app')
+@section('title')客单件报表@endsection
+@section('content')
+    <div class="d-none" id="list">
+        <!--查询            -->
+        <div class="row m-3" style="background-color: #fff;">
+            <!--货主名称-->
+            <div class="form-group m-2" data-toggle="tooltip" data-placement="top" title="货主名称">
+                <input v-model="search.customerName" class="form-control" type="text" placeholder="货主名称">
+            </div>
+
+            <div class="form-group m-2" data-toggle="tooltip" data-placement="top" title="起始日期">
+                <input v-model="search.startTime" class="form-control" type="date" step="01">
+            </div>
+
+            <div class="form-group m-2" data-toggle="tooltip" data-placement="top" title="截止日期">
+                <input v-model="search.endTime" class="form-control" type="date" step="01">
+            </div>
+
+            <div class="form-group m-2">
+                <button class="form-control btn btn-sm btn-info" @click="searchData()">查询</button>
+            </div>
+
+            <div class="form-group m-2">
+                <button class="form-control btn btn-sm btn-success" @click="resetSearch()">重置</button>
+            </div>
+
+            <div class="form-group m-2">
+                <button class="form-control btn btn-sm btn-success" @click="downExcel()">导出EXCEL</button>
+            </div>
+        </div>
+
+        <!--            导出-->
+        <span class="dropdown"></span>
+        <!--            表格-->
+        <table class="table table-striped table-bordered table-hover text-nowrap waybill-table td-min-width-80"
+               style="background: #fff;" id="table">
+            <tr v-for="(item,i) in details.data" :key="i">
+                <td class="td-warm text-muted"><span>@{{ i+1 }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.customerName }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.case1Amount }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.case2Amount }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.case3Amount }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.case4Amount }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.case5Amount }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.case6Amount }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.case7Amount }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.case8Amount }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.moreThan9Amount }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.avg }}</span></td>
+            </tr>
+        </table>
+    </div>
+
+
+@endsection
+
+@section('lastScript')
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版2--}}
+    <script>
+        let vue = new Vue({
+            el: "#list",
+            data: {
+                selectTr: null,
+                details: {
+                    data: [],
+                },
+                search: {
+                    startTime: null,
+                    endTime: null,
+                    customerName: null,
+                    customerCodes: {!! $ownerCodes !!}
+                },
+            },
+            created() {
+                let url = this.getBaseUrl();
+                url += '/api/report/customerOrderQty/listGrouped';
+
+                axios.post(url, this.search).then(res => {
+                    this.details.data = res.data.data;
+                });
+            },
+            mounted: function () {
+                $('#list').removeClass('d-none');
+                let column = [
+                    {name: 'customerName', value: '货主名称'},
+                    {name: 'case1Amount', value: '1pcs'},
+                    {name: 'case2Amount', value: '2pcs'},
+                    {name: 'case3Amount', value: '3pcs'},
+                    {name: 'case4Amount', value: '4pcs'},
+                    {name: 'case5Amount', value: '5pcs'},
+                    {name: 'case6Amount', value: '6pcs'},
+                    {name: 'case7Amount', value: '7pcs'},
+                    {name: 'case8Amount', value: '8pcs'},
+                    {name: 'moreThan9Amount', value: '>=9pcs'},
+                    {name: 'avg', value: '单均客单数'}
+
+                ];
+                new Header({
+                    el: "table",
+                    name: "details",
+                    column: column,
+                    data: this.details.data,
+                    restorationColumn: 'addtime',
+                    fixedTop: ($('#form_div').height()) + ($('#btn').height()) + 1,
+                }).init();
+            },
+            methods: {
+                resetSearch() {
+                    this.search = {
+                        startTime: null,
+                        endTime: null,
+                        customerName: null,
+                    };
+                },
+                searchData() {
+                    this.pagination();
+                },
+                //根据环境获取不同的url
+                getBaseUrl() {
+                    let url = null;
+                    let env = "{{ config('app.env') }}";
+                    if (env === 'local') {
+                        url = 'http://127.0.0.1:8111'
+                    } else if (env === 'production') {
+                        url = 'https://stat.baoshi56.com'
+                    }
+                    return url;
+                },
+                pagination(flag) {
+                    let url = this.getBaseUrl();
+                    url += '/api/report/customerOrderQty/listGrouped';
+                    axios.post(url, this.search).then(res => {
+                        if (res.data.data === undefined) {
+                            this.details.data = [];
+                        } else {
+                            this.details.data = res.data.data;
+                        }
+                    });
+                },
+                downExcel() {
+                    let url = this.getBaseUrl();
+                    url += '/api/report/scanInfo/export';
+                    let search = this.getSearch();
+                    axios.post(url, search).then(res => {
+                        if (res.data.code === 200) {
+                            let filename = res.data.data;
+                            let downUrl = this.getBaseUrl() + '/api/report/scanInfo/export/' + filename;
+                            let link = document.createElement('a');
+                            link.style.display = 'none';
+                            link.href = downUrl;
+                            link.download = `${filename}.xlsx`;
+                            document.body.appendChild(link);
+                            link.click();
+                            document.body.removeChild(link);
+                            tempTip.showSuccess('导出成功!');
+                        } else {
+                            tempTip.setDuration(3000);
+                            tempTip.show(res.data.data);
+                        }
+                    })
+                }
+            },
+
+        });
+    </script>
+@endsection