ANG YU 4 лет назад
Родитель
Сommit
5c15d5a146

+ 33 - 0
app/Http/Controllers/WorkCoefficientController.php

@@ -0,0 +1,33 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Owner;
+use App\Services\UserService;
+use Illuminate\Http\Request;
+
+class WorkCoefficientController extends Controller
+{
+    public function index()
+    {
+        /** @var UserService $userService */
+        $userService = app('UserService');
+        $ownerIds = $userService->getPermittingOwnerIds(auth()->user());
+        $owners = Owner::query()->select(['id', 'name'])->whereIn('id', $ownerIds)->get();
+        return view('kpi.workCoefficient.index', compact('owners'));
+    }
+
+    public function create()
+    {
+        /** @var UserService $userService */
+        $userService = app('UserService');
+        $ownerIds = $userService->getPermittingOwnerIds(auth()->user());
+        $owners = Owner::query()->select(['id', 'name'])->whereIn('id', $ownerIds)->get();
+        return view('kpi.workCoefficient.create',compact('owners'));
+    }
+
+    public function update()
+    {
+        return view('kpi.workCoefficient.update');
+    }
+}

+ 189 - 0
resources/views/kpi/workCoefficient/create.blade.php

@@ -0,0 +1,189 @@
+@extends('layouts.app')
+@section('title')KPI-日报表@endsection
+@section('content')
+    <div class="d-none" id="list">
+        <div class="mt-5 ml-5">
+            <div class="row mb-5">
+                <select
+                    v-model="formData.ownerId"
+                    class="selectpicker form-control col-2" title="选择货主"
+                    data-actions-box="true"
+                    data-live-search="true"
+                    data-live-search-placeholder="搜索"
+                    data-style="btn-primary"
+                >
+                    <option v-for="(v,k) of owners" :value="v.id" :key="v.id">@{{ v.name }}</option>
+                </select>
+                <select
+                    v-model="formData.workCoefficientTypeId"
+                    class="selectpicker form-control col-2 ml-5" title="选择分类"
+                    data-actions-box="true"
+                    data-live-search="true"
+                    data-live-search-placeholder="搜索"
+                    data-style="btn-primary"
+                >
+                    <option v-for="(v,k) of workTypes" :value="v.id" :key="v.id">@{{ v.name }}</option>
+                </select>
+                <button class="btn btn-success col-1 ml-5" @click="submitForm()">提交</button>
+            </div>
+
+            <div class="row">
+                <div class="form-group col-4 " v-for="(v,k) of submitData">
+                    <h3 v-if="v.name">@{{ v.name }}</h3>
+                    <h3 v-else>@{{ v.workCoefficientTypeDetailName }}</h3>
+                    <div class="row">
+                        <label for="库存组" class="control-label col-4">库存组</label>
+                        <input type="number" class="form-control col-6" v-model="v.inventoryCoef">
+                    </div>
+                    <div class="row">
+                        <label for="退货组" class="control-label col-4">退货组</label>
+                        <input type="number" class="form-control col-6" v-model="v.returnCoef">
+                    </div>
+                    <div class="row">
+                        <label for="收货组" class="control-label col-4">收货组</label>
+                        <input type="number" class="form-control col-6" v-model="v.receiveCoef">
+                    </div>
+                    <div class="row">
+                        <label for="发货组" class="control-label col-4">发货组</label>
+                        <input type="number" class="form-control col-6" v-model="v.deliverCoef">
+                    </div>
+                    <div class="row">
+                        <label for="加工组" class="control-label col-4">加工组</label>
+                        <input type="number" class="form-control col-6" v-model="v.processCoef">
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+
+
+@endsection
+
+@section('lastScript')
+    <script>
+        let vue = new Vue({
+            el: "#list",
+            data: {
+                cnt: 0,
+                owners: [
+                        @foreach($owners as $owner)
+                    {
+                        name: '{{$owner->name}}', id: '{{$owner->id}}'
+                    },
+                    @endforeach
+                ],
+                workTypes: [],
+                workTypeDetails: [],
+                currentWorkTypeDetails: [],
+                formData: {
+                    ownerId: null,
+                    workCoefficientTypeId: null
+                },
+                submitData: []
+            },
+            created() {
+                this.initData();
+            },
+            mounted: function () {
+            },
+            watch: {
+                //大类型变更后获取指定类型是否已经有数据
+                "formData.workCoefficientTypeId": function (n, o) {
+                    if (this.formData.ownerId === null) {
+                        tempTip.show("未选择货主!")
+                        return;
+                    }
+                    this.setCurrentWorkTypeDetails(n);
+                },
+                //货主变更后获取指定类型是否已经有数据
+                "formData.ownerId": function (n, o) {
+                    this.setCurrentWorkTypeDetails(this.formData.workCoefficientTypeId);
+                }
+            },
+            computed: {},
+            methods: {
+                //初始化数据 大类型和小类型的初始化,完成后才可以渲染页面
+                initData() {
+                    let names = ['workCoefficientType', 'workCoefficientTypeDetail'];
+                    let requests = names.map(name => axios.get(this.getBaseUrl() + "/api/" + name + "/listAll"));
+                    Promise.all(requests).then(resList => {
+                        for (let res of resList) {
+                            if ((res.config.url + '').endsWith('workCoefficientType/listAll')) {
+                                this.workTypes = res.data.data;
+                            }
+                            if ((res.config.url + '').endsWith('workCoefficientTypeDetail/listAll')) {
+                                this.workTypeDetails = res.data.data;
+                            }
+                        }
+                    }).then(() => {
+                        $('#list').removeClass('d-none');
+                    });
+                },
+                //根据环境获取不同的url
+                getBaseUrl() {
+                    let url = '';
+                    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;
+                },
+                //提交请求
+                submitForm() {
+                    if (this.formData.ownerId === null || this.formData.workCoefficientTypeId === null) {
+                        tempTip.show("输入参数缺少!")
+                        return;
+                    }
+                    if (!confirm('是否确认当前数据!')) return;
+                    let postData = this.submitData;
+                    if (postData[0].id !== undefined) {//更新
+                        axios.post(this.getBaseUrl() + "/api/ownerWorkCoefficient/updateBatch", postData).then(res => {
+                            if (res.data.code === 200) {
+                                tempTip.showSuccess("更新成功");
+                            }
+                        });
+                    } else {//新增
+                        axios.post(this.getBaseUrl() + "/api/ownerWorkCoefficient/createBatch", postData).then(res => {
+                            tempTip.showSuccess("新增成功");
+                        });
+                    }
+                },
+                //根据条件获取工作系数
+                async getOwnerWorkCoefficients(params) {
+                    let url = this.getBaseUrl() + "/api/ownerWorkCoefficient/list"
+                    return await axios.get(url, {params});
+                },
+                //设置当前类型下的工作系数
+                setCurrentWorkTypeDetails(o) {
+                    this.submitData = [];
+                    this.getOwnerWorkCoefficients({
+                        ownerId: this.formData.ownerId,
+                        workCoefficientTypeId: this.formData.workCoefficientTypeId
+                    }).then(res => {
+                        if (res.data.data.length > 0) {
+                            this.submitData = res.data.data;
+                        } else {
+                            this.currentWorkTypeDetails = this.workTypeDetails.filter(i => i.workCoefficientTypeId === o)
+                            this.currentWorkTypeDetails.forEach(i => {
+                                this.submitData.push({
+                                    ownerId: this.formData.ownerId,
+                                    name: i.name,
+                                    workCoefficientTypeId: i.workCoefficientTypeId,
+                                    workCoefficientTypeDetailId: i.id,
+                                    inventoryCoef: null,
+                                    returnCoef: null,
+                                    receiveCoef: null,
+                                    deliverCoef: null,
+                                    processCoef: null,
+                                });
+                            });
+                        }
+                    }).catch(err => {
+                    })
+                }
+            },
+        });
+    </script>
+@endsection

+ 226 - 0
resources/views/kpi/workCoefficient/index.blade.php

@@ -0,0 +1,226 @@
+@extends('layouts.app')
+@section('title')KPI-日报表@endsection
+@section('content')
+    <div class="d-none" id="list">
+        <!--查询            -->
+        <div class="row m-3" style="background-color: #fff;">
+
+            <div class="form-group m-2">
+                <select class="form-control selectpicker" title="分页大小" v-model="size">
+                    <option value="50">50</option>
+                    <option value="100">100</option>
+                    <option value="200">200</option>
+                    <option value="500">500</option>
+                    <option value="1000">1000</option>
+                </select>
+            </div>
+
+            <div class="form-group m-2" style="max-width: 200px !important;">
+                <select v-model="search.ownerId" class="selectpicker form-control" title="选择货主"
+                        data-actions-box="true"
+                        data-live-search="true"
+                        data-live-search-placeholder="搜索"
+                >
+                    <option v-for="(v,k) of owners" :value="v.id" :key="v.id">@{{ v.name }}</option>
+                </select>
+            </div>
+            <div class="form-group m-2" style="max-width: 200px !important;">
+                <select v-model="search.workCoefficientTypeId" class="selectpicker form-control" title="选择单据类型"
+                        data-actions-box="true"
+                        data-live-search="true"
+                        data-live-search-placeholder="搜索"
+                >
+                    <option v-for="(v,k) of workTypes" :value="v.id" :key="v.id">@{{ v.name }}</option>
+                </select>
+            </div>
+            <div class="form-group m-2" style="max-width: 200px !important;">
+                <select v-model="search.workCoefficientTypeDetailId" class="selectpicker form-control" title="选择单据类型明细"
+                        data-actions-box="true"
+                        data-live-search="true"
+                        data-live-search-placeholder="搜索"
+                >
+                    <option v-for="(v,k) of workTypeDetails" :value="v.id" :key="v.id">@{{ v.name }}</option>
+                </select>
+            </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>
+
+        <!--            导出-->
+        <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><input class="checkItem" type="checkbox" :value="item.id"></td>
+                <td class="td-warm text-muted"><span>@{{ item.ownerName }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.workCoefficientTypeName }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.workCoefficientTypeDetailName }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.inventoryCoef }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.returnCoef }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.receiveCoef }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.deliverCoef }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.processCoef }}</span></td>
+
+            </tr>
+        </table>
+        <nav aria-label="...">
+            <ul class="pagination">
+                <li class="page-item" :class="current===1?'disabled':''">
+                    <button class="page-link" @click="pagination('pre')">上一页</button>
+                </li>
+                <li class="page-item" :class="current===details.pages?'disabled':''">
+                    <button class="page-link" @click="pagination('next')">下一页</button>
+                </li>
+            </ul>
+        </nav>
+    </div>
+
+
+@endsection
+
+@section('lastScript')
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版2--}}
+    <script>
+        let vue = new Vue({
+            el: "#list",
+            data: {
+                workTypes: [],
+                workTypeDetails: [],
+                owners: [
+                        @foreach($owners as $owner)
+                    {
+                        name: '{{$owner->name}}', id: '{{$owner->id}}', code: '{{$owner->code}}'
+                    },
+                    @endforeach
+                ],
+                selectTr: '',
+                details: {
+                    data: [],
+                    total: null,
+                    current: null,
+                    pages: null,
+                    size: null
+                },
+                size: 50,
+                current: 1,
+                search: {
+                    ownerId: null,
+                    workCoefficientTypeId: null,
+                    workCoefficientTypeDetailId: null
+                }
+            },
+            created() {
+                let url = this.getBaseUrl();
+                url += `/api/ownerWorkCoefficient/listPage?size=${this.size}&current=${this.current}`;
+                axios.post(url, this.search).then(res => {
+                    this.details.data = res.data.data.list;
+                    this.details.total = res.data.data.page.total;
+                    this.details.current = res.data.data.page.pageNum;
+                    this.details.pages = res.data.data.page.pages
+                    this.details.size = res.data.data.page.pageSize;
+                });
+
+                this.initData();
+
+            },
+            mounted: function () {
+                $('#list').removeClass('d-none');
+                let column = [
+                    {name: 'owner_id', value: '货主'},
+                    {name: 'work_coefficient_type_name', value: '单据类型'},
+                    {name: 'work_coefficient_type_detail_name', value: '单据类型详情'},
+                    {name: 'inventory_coef', value: '库存组工作系数'},
+                    {name: 'return_coef', value: '退货组工作系数'},
+                    {name: 'receive_coef', value: '收货组工作系数'},
+                    {name: 'deliver_coef', value: '发货组工作系数'},
+                    {name: 'process_coef', value: '加工组工作系数'},
+                ];
+                new Header({
+                    el: "table",
+                    name: "package",
+                    column: column,
+                    data: this.packages,
+                    restorationColumn: 'addtime',
+                    fixedTop: ($('#form_div').height()) + ($('#btn').height()) + 1,
+                }).init();
+            },
+            methods: {
+                //初始化数据 大类型和小类型的初始化,完成后才可以渲染页面
+                initData() {
+                    let names = ['workCoefficientType', 'workCoefficientTypeDetail'];
+                    let requests = names.map(name => axios.get(this.getBaseUrl() + "/api/" + name + "/listAll"));
+                    Promise.all(requests).then(resList => {
+                        for (let res of resList) {
+                            if ((res.config.url + '').endsWith('workCoefficientType/listAll')) {
+                                this.workTypes = res.data.data;
+                            }
+                            if ((res.config.url + '').endsWith('workCoefficientTypeDetail/listAll')) {
+                                this.workTypeDetails = res.data.data;
+                            }
+                        }
+                    }).then(() => {
+                        $('#list').removeClass('d-none');
+                    });
+                },
+                resetSearch() {
+                    this.current = 1;
+                    this.size = 50;
+                    this.search = {
+                        ownerId: null,
+                        workCoefficientTypeId: null
+                    }
+                },
+
+                searchData() {
+                    this.current = 1;
+                    this.pagination();
+                },
+
+                //根据环境获取不同的url
+                getBaseUrl() {
+                    let url = '';
+                    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) {
+                    if (flag === 'pre' && this.current > 1) {
+                        this.current--;
+                    } else if (flag === 'next' && this.current < this.details.pages) {
+                        this.current++;
+                    }
+                    let env = "{{ config('env') }}";
+                    console.log(env);
+                    let url = this.getBaseUrl();
+
+                    url += `/api/ownerWorkCoefficient/listPage?size=${this.size}&current=${this.current}`;
+                    axios.post(url, this.search).then(res => {
+                        if (res.data.data === undefined) {
+                            this.details.data = [];
+                            this.details.total = 0
+                            this.details.current = 1
+                            this.details.pages = 0
+                            this.details.size = 50;
+                        } else {
+                            this.details.data = res.data.data.list;
+                            this.details.total = res.data.data.page.total;
+                            this.details.current = res.data.data.page.pageNum;
+                            this.details.pages = res.data.data.page.pages
+                            this.details.size = res.data.data.page.pageSize;
+                        }
+                    });
+                },
+            },
+        });
+    </script>
+@endsection

+ 2 - 0
routes/web.php

@@ -1131,6 +1131,8 @@ Route::group(['prefix'=>'package'],function(){
         Route::get( 'day', 'KpiController@dayIndex');
         Route::get( 'dayDetail', 'KpiController@dayDetailIndex');
         Route::get( 'dayDetailCustomer', 'KpiController@dayDetailCustomer');
+
+        Route::resource('workCoefficient', 'WorkCoefficientController')->only(['index', 'create', 'update']);
     });
 });