ANG YU 4 лет назад
Родитель
Сommit
2b58886748
28 измененных файлов с 964 добавлено и 0 удалено
  1. 46 0
      app/Filters/OwnerSundryFeeDetailFilters.php
  2. 82 0
      app/Http/Controllers/OwnerSundryFeeDetailsController.php
  3. 41 0
      app/Http/Requests/OwnerSundryFeeDetailRequest.php
  4. 14 0
      app/Http/Requests/Request.php
  5. 21 0
      app/Observers/OwnerSundryFeeDetailObserver.php
  6. 6 0
      app/Owner.php
  7. 70 0
      app/OwnerSundryFeeDetail.php
  8. 20 0
      app/Policies/OwnerSundryFeeDetailPolicy.php
  9. 22 0
      app/Policies/Policy.php
  10. 1 0
      app/Providers/AuthServiceProvider.php
  11. 11 0
      database/factories/OwnerSundryFeeDetailFactory.php
  12. 27 0
      database/migrations/2021_05_27_103720_create_ownersundryfeedetails_table.php
  13. 39 0
      database/migrations/2021_05_27_105155_add_authority_settlement_bills.php
  14. 20 0
      database/seeds/OwnerSundryFeeDetailsTableSeeder.php
  15. 4 0
      resources/views/customer/menu.blade.php
  16. 67 0
      resources/views/customer/ownerSundryFee/create_and_edit.blade.php
  17. 117 0
      resources/views/customer/ownerSundryFee/index.blade.php
  18. 30 0
      resources/views/customer/ownerSundryFee/menu.blade.php
  19. 44 0
      resources/views/customer/ownerSundryFee/show.blade.php
  20. 4 0
      resources/views/finance/menu.blade.php
  21. 14 0
      resources/views/finance/settlementBills/menu.blade.php
  22. 65 0
      resources/views/finance/settlementBills/ownerSundryFee/create_and_edit.blade.php
  23. 105 0
      resources/views/finance/settlementBills/ownerSundryFee/index.blade.php
  24. 26 0
      resources/views/finance/settlementBills/ownerSundryFee/menu.blade.php
  25. 44 0
      resources/views/finance/settlementBills/ownerSundryFee/show.blade.php
  26. 10 0
      resources/views/shared/_error.blade.php
  27. 9 0
      resources/views/shared/_messages.blade.php
  28. 5 0
      routes/web.php

+ 46 - 0
app/Filters/OwnerSundryFeeDetailFilters.php

@@ -0,0 +1,46 @@
+<?php
+
+
+namespace App\Filters;
+
+use App\Order;
+use App\Services\UserService;
+use Illuminate\Http\Request;
+use Illuminate\Support\Carbon;
+use Illuminate\Support\Str;
+use phpDocumentor\Reflection\Types\Boolean;
+
+class OwnerSundryFeeDetailFilters
+{
+    protected $request;
+    protected $queryBuilder;
+    protected $filters = ['owner_id'];
+
+    public function __construct(Request $request)
+    {
+        $this->request = $request;
+    }
+
+    public function apply($builder)
+    {
+        $this->queryBuilder = $builder;
+        $filters = array_filter($this->request->only($this->filters));
+        foreach ($filters as $filter => $value) {
+            if (method_exists($this, $filter)) {
+                $this->$filter($value, $this->queryBuilder);
+            }
+        }
+        return $this->queryBuilder;
+    }
+
+
+    private function owner_id($owner_id)
+    {
+        if (strpos($owner_id, ',') || strpos($owner_id, ',') || strpos($owner_id, ' ')) {
+            $arr = array_filter(preg_split('/[,, ]+/is', $owner_id));
+            $this->queryBuilder->whereIn('owner_id',$arr);
+        } else {
+            $this->queryBuilder->where('owner_id','like',$owner_id."%");
+        }
+    }
+}

+ 82 - 0
app/Http/Controllers/OwnerSundryFeeDetailsController.php

@@ -0,0 +1,82 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Filters\OwnerSundryFeeDetailFilters;
+use App\Owner;
+use App\OwnerSundryFeeDetail;
+use Illuminate\Http\Request;
+use App\Http\Requests\OwnerSundryFeeDetailRequest;
+
+class OwnerSundryFeeDetailsController extends Controller
+{
+    public function __construct()
+    {
+        $this->middleware('auth');
+    }
+
+    public function index(Request $request, OwnerSundryFeeDetailFilters $filters)
+    {
+        $paginateParams = $request->input();
+        $owner_sundry_fee_details = OwnerSundryFeeDetail::query()->filter($filters)->with('owner')->orderByDesc('updated_at')->paginate($request->paginate ?? 50);
+        $owners = Owner::all();
+        return view('customer.ownerSundryFee.index', compact('owner_sundry_fee_details', 'paginateParams','owners'));
+    }
+
+    public function show($owner_sundry_fee_detail)
+    {
+        $owner_sundry_fee_detail = OwnerSundryFeeDetail::find($owner_sundry_fee_detail);
+        $owner_sundry_fee_detail->loadMissing('owner');
+        return view('customer.ownerSundryFee.show', compact('owner_sundry_fee_detail'));
+    }
+
+    public function create(OwnerSundryFeeDetail $owner_sundry_fee_detail)
+    {
+        $types = [
+            '材料',
+            '垫付',
+            '人工',
+            '其他',
+        ];
+        $owners = Owner::all();
+        return view('customer.ownerSundryFee.create_and_edit', compact('owner_sundry_fee_detail', 'types','owners'));
+    }
+
+    public function store(OwnerSundryFeeDetailRequest $request)
+    {
+        $owner_sundry_fee_detail = OwnerSundryFeeDetail::create($request->all());
+        return redirect()->route('ownerSundryFeeDetails.index', $owner_sundry_fee_detail->id)->with('success', '创建成功');
+    }
+
+    public function edit($owner_sundry_fee_detail)
+    {
+        $owner_sundry_fee_detail = OwnerSundryFeeDetail::find($owner_sundry_fee_detail);
+        $owner_sundry_fee_detail->loadMissing('owner');
+        $this->authorize('update', $owner_sundry_fee_detail);
+        $types = [
+            '材料',
+            '垫付',
+            '人工',
+            '其他',
+        ];
+        $owners = Owner::all();
+
+        return view('customer.ownerSundryFee.create_and_edit', compact('owner_sundry_fee_detail','types','owners'));
+    }
+
+    public function update(OwnerSundryFeeDetailRequest $request, $owner_sundry_fee_detail)
+    {
+        $owner_sundry_fee_detail = OwnerSundryFeeDetail::find($owner_sundry_fee_detail);
+        $this->authorize('update', $owner_sundry_fee_detail);
+        $owner_sundry_fee_detail->update($request->all());
+        return redirect()->route('ownerSundryFeeDetails.index', $owner_sundry_fee_detail->id)->with('success', '更新成功');
+    }
+
+    public function destroy($owner_sundry_fee_detail)
+    {
+        $owner_sundry_fee_detail = OwnerSundryFeeDetail::find($owner_sundry_fee_detail);
+        $this->authorize('destroy', $owner_sundry_fee_detail);
+        $owner_sundry_fee_detail->delete();
+        return redirect()->route('ownerSundryFeeDetails.index')->with('success', '删除成功');
+    }
+}

+ 41 - 0
app/Http/Requests/OwnerSundryFeeDetailRequest.php

@@ -0,0 +1,41 @@
+<?php
+
+namespace App\Http\Requests;
+
+class OwnerSundryFeeDetailRequest extends Request
+{
+    public function rules()
+    {
+        switch($this->method())
+        {
+            // CREATE
+            case 'POST':
+            {
+                return [
+                    // CREATE ROLES
+                ];
+            }
+            // UPDATE
+            case 'PUT':
+            case 'PATCH':
+            {
+                return [
+                    // UPDATE ROLES
+                ];
+            }
+            case 'GET':
+            case 'DELETE':
+            default:
+            {
+                return [];
+            }
+        }
+    }
+
+    public function messages()
+    {
+        return [
+            // Validation messages
+        ];
+    }
+}

+ 14 - 0
app/Http/Requests/Request.php

@@ -0,0 +1,14 @@
+<?php
+
+namespace App\Http\Requests;
+
+use Illuminate\Foundation\Http\FormRequest;
+
+class Request extends FormRequest
+{
+    public function authorize()
+    {
+    	// Using policy for Authorization
+        return true;
+    }
+}

+ 21 - 0
app/Observers/OwnerSundryFeeDetailObserver.php

@@ -0,0 +1,21 @@
+<?php
+
+namespace App\Observers;
+
+use App\OwnerSundryFeeDetail;
+
+// creating, created, updating, updated, saving,
+// saved,  deleting, deleted, restoring, restored
+
+class OwnerSundryFeeDetailObserver
+{
+    public function creating(OwnerSundryFeeDetail $owner_sundry_fee_detail)
+    {
+        //
+    }
+
+    public function updating(OwnerSundryFeeDetail $owner_sundry_fee_detail)
+    {
+        //
+    }
+}

+ 6 - 0
app/Owner.php

@@ -4,6 +4,7 @@ namespace App;
 
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Relations\HasMany;
 use Illuminate\Support\Facades\Auth;
 
 /**
@@ -209,4 +210,9 @@ class Owner extends Model
             ->select(DB::raw(1))->whereNotNull("operation")
             ->where("operation","!=","");
     }
+
+    public function ownerSundryFeeDetail(): HasMany
+    {
+        return $this->hasMany(OwnerSundryFeeDetail::class);
+    }
 }

+ 70 - 0
app/OwnerSundryFeeDetail.php

@@ -0,0 +1,70 @@
+<?php
+
+namespace App;
+
+use App\Traits\ModelLogChanging;
+use App\Traits\ModelTimeFormat;
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Relations\BelongsTo;
+use Illuminate\Database\Eloquent\Relations\HasOne;
+use Illuminate\Database\Eloquent\SoftDeletes;
+
+class OwnerSundryFeeDetail extends Model
+{
+    use ModelLogChanging;
+    use ModelTimeFormat;
+    use SoftDeletes;
+
+    protected $fillable = ['type', 'fee_explain', 'remark', 'fee', 'changable','owner_id'];
+
+
+    static public $enums = [
+        'type' => [
+            '' => 0,
+            '材料' => 1,
+            '垫付' => 2,
+            '人工' => 3,
+            '其他' => 4,
+        ],
+        'changable' => [
+            '' => 0,
+            '未冻结' => 1,
+            '已冻结' => 2,
+        ],
+    ];
+
+    function __construct(array $attributes = [])
+    {
+        foreach (self::$enums as &$enum) {
+            $enum = $enum + array_flip($enum);
+        }
+        parent::__construct($attributes);
+    }
+
+    public function getTypeAttribute($value)
+    {
+        if (!$value) return '';
+        return self::$enums['type'][$value];
+    }
+
+    public function setTypeAttribute($value)
+    {
+        if (!$value) return 0;
+        $this->attributes['type'] = self::$enums['type'][$value];
+    }
+
+    public function getRouteKey()
+    {
+        return 'id';
+    }
+
+    public function owner(): BelongsTo
+    {
+        return $this->belongsTo(Owner::class);
+    }
+
+    public function scopeFilter($query, $filters)
+    {
+        return $filters->apply($query);
+    }
+}

+ 20 - 0
app/Policies/OwnerSundryFeeDetailPolicy.php

@@ -0,0 +1,20 @@
+<?php
+
+namespace App\Policies;
+
+use App\User;
+use App\OwnerSundryFeeDetail;
+
+class OwnerSundryFeeDetailPolicy extends Policy
+{
+    public function update(User $user, OwnerSundryFeeDetail $owner_sundry_fee_detail)
+    {
+        // return $owner_sundry_fee_detail->user_id == $user->id;
+        return true;
+    }
+
+    public function destroy(User $user, OwnerSundryFeeDetail $owner_sundry_fee_detail)
+    {
+        return true;
+    }
+}

+ 22 - 0
app/Policies/Policy.php

@@ -0,0 +1,22 @@
+<?php
+
+namespace App\Policies;
+
+use Illuminate\Auth\Access\HandlesAuthorization;
+
+class Policy
+{
+    use HandlesAuthorization;
+
+    public function __construct()
+    {
+        //
+    }
+
+    public function before($user, $ability)
+	{
+	    // if ($user->isSuperAdmin()) {
+	    // 		return true;
+	    // }
+	}
+}

+ 1 - 0
app/Providers/AuthServiceProvider.php

@@ -22,6 +22,7 @@ class AuthServiceProvider extends ServiceProvider
      * @var array
      */
     protected $policies = [
+		 \App\OwnerSundryFeeDetail::class => \App\Policies\OwnerSundryFeeDetailPolicy::class,
         // 'App\Model' => 'App\Policies\ModelPolicy',
         CustomerLog::class => CustomerLogPolice::class,
 

+ 11 - 0
database/factories/OwnerSundryFeeDetailFactory.php

@@ -0,0 +1,11 @@
+<?php
+
+use Faker\Generator as Faker;
+use Illuminate\Database\Eloquent\Factory;
+
+/** @var Factory $factory */
+$factory->define(App\OwnerSundryFeeDetail::class, function (Faker $faker) {
+    return [
+        // 'name' => $faker->name,
+    ];
+});

+ 27 - 0
database/migrations/2021_05_27_103720_create_ownersundryfeedetails_table.php

@@ -0,0 +1,27 @@
+<?php
+
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+
+class CreateOwnerSundryFeeDetailsTable extends Migration
+{
+	public function up()
+	{
+		Schema::create('owner_sundry_fee_details', function(Blueprint $table) {
+            $table->increments('id');
+            $table->integer('owner_id')->comment('货主ID');
+            $table->integer('type')->unsigned()->comment('作业类型');
+            $table->string('fee_explain')->nullable()->comment('费用描述');
+            $table->string('remark')->nullable()->comment('备注');
+            $table->decimal('fee')->default(0)->comment('收费金额');
+            $table->integer('changable')->unsigned()->default(1)->comment('冻结状态');
+            $table->softDeletes();
+            $table->timestamps();
+        });
+	}
+
+	public function down()
+	{
+		Schema::drop('owner_sundry_fee_details');
+	}
+}

+ 39 - 0
database/migrations/2021_05_27_105155_add_authority_settlement_bills.php

@@ -0,0 +1,39 @@
+<?php
+
+use App\Authority;
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class AddAuthoritySettlementBills extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+//        Authority::query()->firstOrCreate(["name" => "结算管理-结算账单"],["alias_name"=>"结算管理-结算账单"]);
+//        Authority::query()->firstOrCreate(["name" => "结算管理-结算账单-杂项费"],["alias_name"=>"结算管理-结算账单-杂项费"]);
+
+        Authority::query()->firstOrCreate(["name" => "项目管理-杂项费-查询"],["alias_name"=>"项目管理-杂项费-查询"]);
+        Authority::query()->firstOrCreate(["name" => "项目管理-杂项费-录入"],["alias_name"=>"项目管理-杂项费-录入"]);
+        Authority::query()->firstOrCreate(["name" => "项目管理-杂项费-编辑"],["alias_name"=>"项目管理-杂项费-编辑"]);
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+//        Authority::query()->where('name', '结算管理-结算账单')->delete();
+//        Authority::query()->where('name', '结算管理-结算账单-杂项费')->delete();
+
+        Authority::query()->where('name', '项目管理-杂项费-查询')->delete();
+        Authority::query()->where('name', '项目管理-杂项费-录入')->delete();
+        Authority::query()->where('name', '项目管理-杂项费-编辑')->delete();
+    }
+}

+ 20 - 0
database/seeds/OwnerSundryFeeDetailsTableSeeder.php

@@ -0,0 +1,20 @@
+<?php
+
+use Illuminate\Database\Seeder;
+use App\OwnerSundryFeeDetail;
+
+class OwnerSundryFeeDetailsTableSeeder extends Seeder
+{
+    public function run()
+    {
+        $owner_sundry_fee_details = factory(OwnerSundryFeeDetail::class)->times(50)->make()->each(function ($owner_sundry_fee_detail, $index) {
+            if ($index == 0) {
+                // $owner_sundry_fee_detail->field = 'value';
+            }
+        });
+
+        OwnerSundryFeeDetail::insert($owner_sundry_fee_details->toArray());
+    }
+
+}
+

+ 4 - 0
resources/views/customer/menu.blade.php

@@ -15,6 +15,10 @@
                 <a target="customer/relating" class="nav-link" href="{{url('customer/relating')}}" :class="{active:isActive('relating',2)}">相关设置</a>
             </li>
                 @endcan
+            @can('项目管理-杂项费')
+                <li class="nav-item">
+                    <a target="customer/ownerSundryFeeDetails" class="nav-link" href="{{url('customer/ownerSundryFeeDetails')}}" :class="{active:isActive('ownerSundryFeeDetails',2)}">杂项费</a>
+                </li>@endcan
         </ul>
     </div>
 </div>

+ 67 - 0
resources/views/customer/ownerSundryFee/create_and_edit.blade.php

@@ -0,0 +1,67 @@
+@extends('layouts.app')
+
+@section('content')
+    @component("customer.ownerSundryFee.menu")@endcomponent
+
+<div class="container">
+  <div class="col-md-10 offset-md-1">
+    <div class="card ">
+      <div class="card-body">
+        @if($owner_sundry_fee_detail->id)
+          <form action="{{ route('ownerSundryFeeDetails.update', $owner_sundry_fee_detail->id) }}" method="POST" accept-charset="UTF-8">
+          <input type="hidden" name="_method" value="PUT">
+        @else
+          <form action="{{ route('ownerSundryFeeDetails.store') }}" method="POST" accept-charset="UTF-8">
+        @endif
+      @include('shared._error')
+
+          <input type="hidden" name="_token" value="{{ csrf_token() }}">
+                <div class="form-group">
+                    <label for="fee_explain-field">作业类型</label>
+                    <select class="form-control" name="type" required>
+                        <option value="" hidden disabled {{ $owner_sundry_fee_detail->id ? '' : 'selected' }}>请选择作业类型</option>
+                        @foreach ($types as $value)
+                            <option value="{{ $value }}" {{ $owner_sundry_fee_detail->type == $value ? 'selected' : '' }}>
+                                {{ $value }}
+                            </option>
+                        @endforeach
+                    </select>
+                </div>
+              <div class="form-group">
+                  <label for="fee_explain-field">货主</label>
+                  <select class="form-control" name="owner_id" required>
+                      <option value="" hidden disabled {{ $owner_sundry_fee_detail->id ? '' : 'selected' }}>请选择货主</option>
+                      @foreach ($owners as $value)
+                          <option value="{{ $value->id }}" {{ $owner_sundry_fee_detail->owner_id == $value->id ? 'selected' : '' }}>
+                              {{ $value->name }}
+                          </option>
+                      @endforeach
+                  </select>
+              </div>
+                <div class="form-group">
+                	<label for="fee_explain-field">费用描述</label>
+                	<input class="form-control" type="text" name="fee_explain" id="fee_explain-field" value="{{ old('fee_explain', $owner_sundry_fee_detail->fee_explain ) }}" />
+                </div>
+                <div class="form-group">
+                	<label for="remark-field">备注</label>
+                	<input class="form-control" type="text" name="remark" id="remark-field" value="{{ old('remark', $owner_sundry_fee_detail->remark ) }}" />
+                </div>
+                <div class="form-group">
+                    <label for="fee-field">收费金额</label>
+                    <input class="form-control" type="number" name="fee" id="fee-field" value="{{ old('fee', $owner_sundry_fee_detail->fee ) }}" />
+                </div>
+{{--                <div class="form-group">--}}
+{{--                    <label for="changable-field">Changable</label>--}}
+{{--                    <input class="form-control" type="text" name="changable" id="changable-field" value="{{ old('changable', $owner_sundry_fee_detail->changable ) }}" />--}}
+{{--                </div>--}}
+          <div class="well well-sm">
+            <button type="submit" class="btn btn-primary">保存</button>
+            <a class="btn btn-link float-xs-right" href="{{ route('ownerSundryFeeDetails.index') }}"> <- 返回</a>
+          </div>
+        </form>
+      </div>
+    </div>
+  </div>
+</div>
+
+@endsection

+ 117 - 0
resources/views/customer/ownerSundryFee/index.blade.php

@@ -0,0 +1,117 @@
+@extends('layouts.app')
+
+@section('content')
+    @component("customer.ownerSundryFee.menu")@endcomponent
+    @include('shared._messages')
+    @include('shared._error')
+    <div id="list" class="d-none">
+        <div class="container-fluid">
+            <div id="form_div"></div>
+            <div class="form-inline" id="btn"></div>
+            <table class="table table-striped table-sm text-nowrap table-hover" id="table">
+                <tr v-for="(owner_sundry_fee_detail,i) in owner_sundry_fee_details"
+                    @click="selectTr===i+1?selectTr=0:selectTr=i+1"
+                    :class="selectTr===i+1?'focusing' : ''">
+                    <td><input class="checkItem" type="checkbox" :value="owner_sundry_fee_detail.id"></td>
+                    <td>@{{ i+1 }}</td>
+                    <td>@{{ owner_sundry_fee_detail.owner.name }}</td>
+                    <td>@{{ owner_sundry_fee_detail.created_at }}</td>
+                    <td>@{{ owner_sundry_fee_detail.type }}</td>
+                    <td>@{{ owner_sundry_fee_detail.fee_explain }}</td>
+                    <td>@{{ owner_sundry_fee_detail.fee }}</td>
+                    <td>@{{ owner_sundry_fee_detail.remark }}</td>
+                    <td>
+                        @can('项目管理-杂项费-编辑')
+                            <button @click="edit(owner_sundry_fee_detail.id)" type="button"
+                                    class="btn btn-outline-primary btn-sm">改
+                            </button>
+
+                            <form :action="targetUrl(owner_sundry_fee_detail.id)" method="post"
+                                  style="display: inline-block;"
+                                  onsubmit="return confirm('您确定要删除吗?');">
+                                {{ csrf_field() }}
+                                {{ method_field('DELETE') }}
+                                <button type="submit" class="btn btn-outline-danger btn-sm">
+                                    <i class="far fa-trash-alt"></i> 删
+                                </button>
+                            </form>
+                        @endcan
+                    </td>
+                </tr>
+            </table>
+            <div class="text-info h5 btn btn">{{$owner_sundry_fee_details->count()}}
+                /{{$owner_sundry_fee_details->total()}}</div>
+            {{$owner_sundry_fee_details->appends($paginateParams)->links()}}
+        </div>
+        <textarea id="clipboardDiv" style="opacity:0"></textarea>
+    </div>
+@endsection
+@section('lastScript')
+    <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版2--}}
+    <script>
+        let vue = new Vue({
+            el: "#list",
+            data: {
+                owner_sundry_fee_details: [
+                    @foreach($owner_sundry_fee_details as $owner_sundry_fee_detail)
+                        {!! $owner_sundry_fee_detail !!},
+                    @endforeach
+                ],
+                owners: [@foreach($owners as $owner){name: '{{ $owner->id }}', value: '{{ $owner->name}}'},@endforeach],
+                selectTr: 0,
+            },
+            created() {
+            },
+            mounted() {
+                $('#list').removeClass('d-none');
+                let _this = this;
+                $(".up").slideUp();
+                let data = [
+                    [
+                        {
+                            name: 'owner_id',
+                            type: 'select_multiple_select',
+                            tip: ['输入关键词快速定位下拉列表,回车确定', '选择要显示的客户'],
+                            placeholder: ['货主', '定位或多选货主'],
+                            data: _this.owners
+                        },
+                    ]
+                ];
+                _this.form = new query({
+                    el: '#form_div',
+                    condition: data,
+                });
+                _this.form.init();
+                let column = [
+                    {name: 'index', value: '序号', neglect: true},
+                    {name: 'owner', value: '货主'},
+                    {name: 'created_at', value: '日期'},
+                    {name: 'type', value: '作业类型'},
+                    {name: 'fee_explain', value: '费用描述'},
+                    {name: 'fee', value: '收费金额'},
+                    {name: 'remark', value: '备注'},
+                    {name: 'operation', value: '操作'},
+                ];
+                new Header({
+                    el: "table",
+                    name: "owner_sundry_fee_detail",
+                    column: column,
+                    data: this.owner_sundry_fee_details,
+                    restorationColumn: 'addtime',
+                    fixedTop: ($('#form_div').height()) + ($('#btn').height()) + 1,
+                }).init();
+            },
+            methods: {
+                edit(id) {
+                    location.href = "{{url('customer/ownerSundryFeeDetails')}}/" + id + "/edit";
+                },
+                targetUrl(id) {
+                    return "{{ url('customer/ownerSundryFeeDetails') }}/" + id;
+                }
+            },
+            filters: {},
+        });
+    </script>
+@endsection

+ 30 - 0
resources/views/customer/ownerSundryFee/menu.blade.php

@@ -0,0 +1,30 @@
+<div id="nav2">
+    @component('customer.menu')@endcomponent
+    <div class="container-fluid nav3">
+        <div class="card menu-third">
+            <ul class="nav nav-pills">
+                @can('项目管理-杂项费-查询')
+                    <li class="nav-item">
+                        <a target="customer/ownerSundryFee" class="nav-link"
+                           href="{{url('customer/ownerSundryFeeDetails')}}"
+                           :class="{active:isActive('',3)}">查询</a>
+                    </li>
+                @endcan
+                @can('项目管理-杂项费-录入')
+                    <li class="nav-item">
+                        <a target="customer/ownerSundryFee/create" class="nav-link"
+                           href="{{url('customer/ownerSundryFeeDetails/create')}}"
+                           :class="{active:isActive('create',3)}">录入</a>
+                    </li>
+                @endcan
+{{--                @can('项目管理-杂项费-编辑')--}}
+{{--                    <li class="nav-item">--}}
+{{--                        <a target="customer/ownerSundryFee/edit" class="nav-link"--}}
+{{--                           href="{{url('customer/ownerSundryFeeDetails/{ownerSundryFeeDetail}/edit')}}"--}}
+{{--                           :class="{active:isActive('edit',4)}">编辑</a>--}}
+{{--                    </li>--}}
+{{--                @endcan--}}
+            </ul>
+        </div>
+    </div>
+</div>

+ 44 - 0
resources/views/customer/ownerSundryFee/show.blade.php

@@ -0,0 +1,44 @@
+@extends('layouts.app')
+@section('content')
+    @component("customer.ownerSundryFee.menu")@endcomponent
+    <div class="container">
+        <div class="col-md-10 offset-md-1">
+            <div class="card ">
+                <div class="card-body">
+                    <div class="card-block bg-light">
+                        <div class="row">
+                            <div class="col-md-6">
+                                <a class="btn btn-link" href="{{ route('ownerSundryFeeDetails.index') }}"><- Back</a>
+                            </div>
+                            <div class="col-md-6">
+                                <a class="btn btn-sm btn-warning float-right mt-1"
+                                   href="{{ route('ownerSundryFeeDetails.edit', $owner_sundry_fee_detail->id) }}">
+                                    Edit
+                                </a>
+                            </div>
+                        </div>
+                    </div>
+                    <br>
+
+                    <label>Type</label>
+                    <p>
+                        {{ $owner_sundry_fee_detail->type }}
+                    </p> <label>Fee_explain</label>
+                    <p>
+                        {{ $owner_sundry_fee_detail->fee_explain }}
+                    </p> <label>Remark</label>
+                    <p>
+                        {{ $owner_sundry_fee_detail->remark }}
+                    </p> <label>Fee</label>
+                    <p>
+                        {{ $owner_sundry_fee_detail->fee }}
+                    </p> <label>Changable</label>
+                    <p>
+                        {{ $owner_sundry_fee_detail->changable }}
+                    </p>
+                </div>
+            </div>
+        </div>
+    </div>
+
+@endsection

+ 4 - 0
resources/views/finance/menu.blade.php

@@ -9,6 +9,10 @@
             <li class="nav-item">
                 <a target="finance/billConfirmation" class="nav-link" href="{{url('finance/billConfirmation')}}" :class="{active:isActive('billConfirmation',2)}">账单确认</a>
             </li>@endcan
+{{--            @can('结算管理-结算账单')--}}
+{{--                <li class="nav-item">--}}
+{{--                    <a target="finance/settlementBills" class="nav-link" href="{{url('finance/settlementBills/ownerSundryFeeDetails')}}" :class="{active:isActive('settlementBills',2)}">结算账单</a>--}}
+{{--                </li>@endcan--}}
         </ul>
     </div>
 </div>

+ 14 - 0
resources/views/finance/settlementBills/menu.blade.php

@@ -0,0 +1,14 @@
+<div id="nav2">
+    @component('finance.menu')@endcomponent
+    <div class="container-fluid nav3">
+        <div class="card menu-third">
+            <ul class="nav nav-pills">
+                @can('结算管理-结算账单-杂项费')
+                    <li class="nav-item" >
+                        <a target="finance/settlementBills/ownerSundryFeeDetails" class="nav-link" href="{{url('finance/settlementBills/ownerSundryFeeDetails')}}" :class="{active:isActive('ownerSundryFeeDetails',3)}">杂项费</a>
+                    </li>
+                @endcan
+            </ul>
+        </div>
+    </div>
+</div>

+ 65 - 0
resources/views/finance/settlementBills/ownerSundryFee/create_and_edit.blade.php

@@ -0,0 +1,65 @@
+@extends('layouts.app')
+
+@section('content')
+    @component("finance.settlementBills.ownerSundryFee.menu")@endcomponent
+
+<div class="container">
+  <div class="col-md-10 offset-md-1">
+    <div class="card ">
+      <div class="card-body">
+        @if($owner_sundry_fee_detail->id)
+          <form action="{{ route('ownerSundryFeeDetails.update', $owner_sundry_fee_detail->id) }}" method="POST" accept-charset="UTF-8">
+          <input type="hidden" name="_method" value="PUT">
+        @else
+          <form action="{{ route('ownerSundryFeeDetails.store') }}" method="POST" accept-charset="UTF-8">
+        @endif
+      @include('shared._error')
+
+          <input type="hidden" name="_token" value="{{ csrf_token() }}">
+                <div class="form-group">
+                    <select class="form-control" name="type" required>
+                        <option value="" hidden disabled {{ $owner_sundry_fee_detail->id ? '' : 'selected' }}>请选择分类</option>
+                        @foreach ($types as $value)
+                            <option value="{{ $value }}" {{ $owner_sundry_fee_detail->type == $value ? 'selected' : '' }}>
+                                {{ $value }}
+                            </option>
+                        @endforeach
+                    </select>
+                </div>
+              <div class="form-group">
+                  <select class="form-control" name="owner_id" required>
+                      <option value="" hidden disabled {{ $owner_sundry_fee_detail->id ? '' : 'selected' }}>请选择货主</option>
+                      @foreach ($owners as $value)
+                          <option value="{{ $value->id }}" {{ $owner_sundry_fee_detail->owner_id == $value->id ? 'selected' : '' }}>
+                              {{ $value->name }}
+                          </option>
+                      @endforeach
+                  </select>
+              </div>
+                <div class="form-group">
+                	<label for="fee_explain-field">费用描述</label>
+                	<input class="form-control" type="text" name="fee_explain" id="fee_explain-field" value="{{ old('fee_explain', $owner_sundry_fee_detail->fee_explain ) }}" />
+                </div>
+                <div class="form-group">
+                	<label for="remark-field">备注</label>
+                	<input class="form-control" type="text" name="remark" id="remark-field" value="{{ old('remark', $owner_sundry_fee_detail->remark ) }}" />
+                </div>
+                <div class="form-group">
+                    <label for="fee-field">收费金额</label>
+                    <input class="form-control" type="number" name="fee" id="fee-field" value="{{ old('fee', $owner_sundry_fee_detail->fee ) }}" />
+                </div>
+{{--                <div class="form-group">--}}
+{{--                    <label for="changable-field">Changable</label>--}}
+{{--                    <input class="form-control" type="text" name="changable" id="changable-field" value="{{ old('changable', $owner_sundry_fee_detail->changable ) }}" />--}}
+{{--                </div>--}}
+          <div class="well well-sm">
+            <button type="submit" class="btn btn-primary">保存</button>
+            <a class="btn btn-link float-xs-right" href="{{ route('ownerSundryFeeDetails.index') }}"> <- 返回</a>
+          </div>
+        </form>
+      </div>
+    </div>
+  </div>
+</div>
+
+@endsection

+ 105 - 0
resources/views/finance/settlementBills/ownerSundryFee/index.blade.php

@@ -0,0 +1,105 @@
+@extends('layouts.app')
+
+@section('content')
+    @component("finance.settlementBills.ownerSundryFee.menu")@endcomponent
+    @include('shared._messages')
+    @include('shared._error')
+    <div id="list" class="d-none">
+        <div class="container-fluid">
+            <div id="form_div"></div>
+            <div class="form-inline" id="btn"></div>
+            <table class="table table-striped table-sm text-nowrap table-hover" id="table">
+                <tr v-for="(owner_sundry_fee_detail,i) in owner_sundry_fee_details"
+                    @click="selectTr===i+1?selectTr=0:selectTr=i+1"
+                    :class="selectTr===i+1?'focusing' : ''">
+                    <td><input class="checkItem" type="checkbox" :value="owner_sundry_fee_detail.id"></td>
+                    <td>@{{ i+1 }}</td>
+                    <td>@{{ owner_sundry_fee_detail.owner.name }}</td>
+                    <td>@{{ owner_sundry_fee_detail.created_at }}</td>
+                    <td>@{{ owner_sundry_fee_detail.type }}</td>
+                    <td>@{{ owner_sundry_fee_detail.fee_explain }}</td>
+                    <td>@{{ owner_sundry_fee_detail.fee }}</td>
+                    <td>@{{ owner_sundry_fee_detail.remark }}</td>
+                    <td>
+                        <button @click="edit(owner_sundry_fee_detail.id)" type="button"
+                                class="btn btn-outline-primary btn-sm">改
+                        </button>
+                        <form :action="targetUrl(owner_sundry_fee_detail.id)" method="post"
+                              style="display: inline-block;"
+                              onsubmit="return confirm('您确定要删除吗?');">
+                            {{ csrf_field() }}
+                            {{ method_field('DELETE') }}
+                            <button type="submit" class="btn btn-outline-danger btn-sm">
+                                <i class="far fa-trash-alt"></i> 删
+                            </button>
+                        </form>
+                    </td>
+                </tr>
+            </table>
+            <div class="text-info h5 btn btn">{{$owner_sundry_fee_details->count()}}
+                /{{$owner_sundry_fee_details->total()}}</div>
+            {{$owner_sundry_fee_details->appends($paginateParams)->links()}}
+        </div>
+        <textarea id="clipboardDiv" style="opacity:0"></textarea>
+    </div>
+@endsection
+@section('lastScript')
+    <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版2--}}
+    <script>
+        let vue = new Vue({
+            el: "#list",
+            data: {
+                owner_sundry_fee_details: [
+                    @foreach($owner_sundry_fee_details as $owner_sundry_fee_detail)
+                        {!! $owner_sundry_fee_detail !!},
+                    @endforeach
+                ],
+                selectTr: 0,
+            },
+            created() {
+            },
+            mounted() {
+                $('#list').removeClass('d-none');
+                let _this = this;
+                $(".up").slideUp();
+                let data = [
+                    []
+                ];
+                _this.form = new query({
+                    el: '#form_div',
+                    condition: data,
+                });
+                _this.form.init();
+                let column = [
+                    {name: 'index', value: '序号', neglect: true},
+                    {name: 'owner', value: '货主'},
+                    {name: 'created_at', value: '日期'},
+                    {name: 'type', value: '作业类型'},
+                    {name: 'fee_explain', value: '费用描述'},
+                    {name: 'fee', value: '收费金额'},
+                    {name: 'remark', value: '备注'},
+                    {name: 'operation', value: '操作'},
+                ];
+                new Header({
+                    el: "table",
+                    name: "owner_sundry_fee_detail",
+                    column: column,
+                    data: this.owner_sundry_fee_details,
+                    restorationColumn: 'addtime',
+                    fixedTop: ($('#form_div').height()) + ($('#btn').height()) + 1,
+                }).init();
+            },
+            methods: {
+                edit(id) {
+                    location.href = "{{url('finance/settlementBills/ownerSundryFeeDetails')}}/" + id + "/edit";
+                },
+                targetUrl(id) {
+                    return "{{ url('finance/settlementBills/ownerSundryFeeDetails') }}/" + id;
+                }
+            },
+            filters: {},
+        });
+    </script>
+@endsection

+ 26 - 0
resources/views/finance/settlementBills/ownerSundryFee/menu.blade.php

@@ -0,0 +1,26 @@
+<div id="nav2">
+    @component('finance.settlementBills.menu')@endcomponent
+    <div class="container-fluid nav4">
+        <div class="card menu-third">
+            <ul class="nav nav-pills">
+                @can('结算管理-结算账单-杂项费')
+                    <li class="nav-item">
+                        <a target="finance/settlementBills/ownerSundryFeeDetails" class="nav-link"
+                           href="{{url('finance/settlementBills/ownerSundryFeeDetails')}}"
+                           :class="{active:isActive('',4)}">查询</a>
+                    </li>
+                @endcan
+                    <li class="nav-item">
+                        <a target="finance/settlementBills/ownerSundryFeeDetails/create" class="nav-link"
+                           href="{{url('finance/settlementBills/ownerSundryFeeDetails/create')}}"
+                           :class="{active:isActive('create',4)}">新建</a>
+                    </li>
+                    <li class="nav-item">
+                        <a target="finance/settlementBills/ownerSundryFeeDetails/edit" class="nav-link"
+                           href="{{url('finance/settlementBills/ownerSundryFeeDetails/edit')}}"
+                           :class="{active:isActive('edit',4)}">编辑</a>
+                    </li>
+            </ul>
+        </div>
+    </div>
+</div>

+ 44 - 0
resources/views/finance/settlementBills/ownerSundryFee/show.blade.php

@@ -0,0 +1,44 @@
+@extends('layouts.app')
+@section('content')
+    @component("finance.settlementBills.ownerSundryFee.menu")@endcomponent
+    <div class="container">
+        <div class="col-md-10 offset-md-1">
+            <div class="card ">
+                <div class="card-body">
+                    <div class="card-block bg-light">
+                        <div class="row">
+                            <div class="col-md-6">
+                                <a class="btn btn-link" href="{{ route('ownerSundryFeeDetails.index') }}"><- Back</a>
+                            </div>
+                            <div class="col-md-6">
+                                <a class="btn btn-sm btn-warning float-right mt-1"
+                                   href="{{ route('ownerSundryFeeDetails.edit', $owner_sundry_fee_detail->id) }}">
+                                    Edit
+                                </a>
+                            </div>
+                        </div>
+                    </div>
+                    <br>
+
+                    <label>Type</label>
+                    <p>
+                        {{ $owner_sundry_fee_detail->type }}
+                    </p> <label>Fee_explain</label>
+                    <p>
+                        {{ $owner_sundry_fee_detail->fee_explain }}
+                    </p> <label>Remark</label>
+                    <p>
+                        {{ $owner_sundry_fee_detail->remark }}
+                    </p> <label>Fee</label>
+                    <p>
+                        {{ $owner_sundry_fee_detail->fee }}
+                    </p> <label>Changable</label>
+                    <p>
+                        {{ $owner_sundry_fee_detail->changable }}
+                    </p>
+                </div>
+            </div>
+        </div>
+    </div>
+
+@endsection

+ 10 - 0
resources/views/shared/_error.blade.php

@@ -0,0 +1,10 @@
+@if (count($errors) > 0)
+  <div class="alert alert-danger">
+    <div class="mt-2"><b>有错误发生:</b></div>
+    <ul class="mt-2 mb-2">
+      @foreach ($errors->all() as $error)
+        <li><i class="glyphicon glyphicon-remove"></i> {{ $error }}</li>
+      @endforeach
+    </ul>
+  </div>
+@endif

+ 9 - 0
resources/views/shared/_messages.blade.php

@@ -0,0 +1,9 @@
+@foreach (['danger', 'warning', 'success', 'info'] as $msg)
+  @if(session()->has($msg))
+    <div class="flash-message">
+      <p class="alert alert-{{ $msg }}">
+        {{ session()->get($msg) }}
+      </p>
+    </div>
+  @endif
+@endforeach

+ 5 - 0
routes/web.php

@@ -739,6 +739,9 @@ Route::group(['prefix'=>'finance'],function(){
     Route::get('billConfirmation','CustomerController@financeBillConfirmation');
     Route::post('updateBillReport','CustomerController@updateBillReport');
     Route::post('billConfirm','CustomerController@billConfirm');
+//    Route::group(['prefix'=>'settlementBills'],function(){
+//        Route::resource('ownerSundryFeeDetails', 'OwnerSundryFeeDetailsController', ['only' => ['index', 'create', 'store', 'update', 'edit','destroy']]);
+//    });
 });
 
 /** 客户 */
@@ -800,6 +803,7 @@ Route::group(['prefix'=>'customer'],function(){
     });
     Route::resource('customer', 'CustomerBaseController');
 
+    Route::resource('ownerSundryFeeDetails', 'OwnerSundryFeeDetailsController', ['only' => ['index', 'create', 'store', 'update', 'edit','destroy']]);
 });
 
 /** 站管理 */
@@ -860,3 +864,4 @@ Route::group(['prefix'=>'procurement'],function () {
 Route::group(['prefix'=>'demand'],function (){
     Route::get('/','DemandController@index');
 });
+