Browse Source

用户管理

jekon 6 years ago
parent
commit
c1667e204a

+ 178 - 0
app/Http/Controllers/Admin/AppUserController.php

@@ -0,0 +1,178 @@
+<?php
+
+namespace App\Http\Controllers\Admin;
+
+use App\Http\Requests\AppUserCreateRequest;
+use App\Http\Requests\AppUserUpdateRequest;
+use App\Models\AppUser;
+use Illuminate\Http\Request;
+use App\Http\Controllers\Controller;
+use App\Models\Role;
+
+class AppUserController extends Controller
+{
+    /**
+     * Display a listing of the resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function index()
+    {
+        return view('admin.appUser.index');
+    }
+
+    public function data(Request $request)
+    {
+        $res = AppUser::paginate($request->get('limit', 30))->toArray();
+        $data = [
+            'code' => 0,
+            'msg'   => '正在请求中...',
+            'count' => $res['total'],
+            'data'  => $res['data']
+        ];
+        return response()->json($data);
+    }
+
+    /**
+     * Show the form for creating a new resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function create()
+    {
+        return view('admin.appUser.create')->with(['appUser'=>array()]);
+    }
+
+    /**
+     * Store a newly created resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @return \Illuminate\Http\Response
+     */
+    public function store(AppUserCreateRequest $request)
+    {
+        $data = $request->all();
+        if (AppUser::create($data)){
+            return redirect()->to(route('admin.appUser'))->with(['status'=>'添加成功']);
+        }
+        return redirect()->to(route('admin.appUser'))->withErrors('系统错误');
+    }
+
+    /**
+     * Display the specified resource.
+     *
+     * @param  int  $id
+     * @return \Illuminate\Http\Response
+     */
+    public function show($id)
+    {
+        //
+    }
+
+    /**
+     * Show the form for editing the specified resource.
+     *
+     * @param  int  $id
+     * @return \Illuminate\Http\Response
+     */
+    public function edit($id)
+    {
+        $appUser = AppUser::where('id', $id)->first();
+        return view('admin.appUser.edit',compact('appUser'));
+    }
+
+    /**
+     * Update the specified resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  int  $id
+     * @return \Illuminate\Http\Response
+     */
+    public function update(AppUserUpdateRequest $request, $id)
+    {
+       // $appUser = AppUser::findOrFail($id);
+
+        $data = $request->all();
+        if(empty($data['key'])){
+            unset($data['key']);
+        }
+        if(empty($data['secret'])){
+            unset($data['secret']);
+        }
+        $appUser = AppUser::findOrFail($id);
+
+        if ($appUser->update($data)){
+            return redirect()->to(route('admin.appUser'))->with(['status'=>'更新成功']);
+        }
+        return redirect()->to(route('admin.appUser'))->withErrors('系统错误');
+    }
+
+    /**
+     * Remove the specified resource from storage.
+     *
+     * @param  int  $id
+     * @return \Illuminate\Http\Response
+     */
+    public function destroy(Request $request)
+    {
+        $ids = $request->get('ids');
+        if (empty($ids)){
+            return response()->json(['code'=>1,'msg'=>'请选择删除项']);
+        }
+        if (AppUser::destroy($ids)){
+            return response()->json(['code'=>0,'msg'=>'删除成功']);
+        }
+        return response()->json(['code'=>1,'msg'=>'删除失败']);
+    }
+
+    /**
+     * 分配角色
+     */
+    public function role(Request $request,$id)
+    {
+        $appUser = AppUser::findOrFail($id);
+        $roles = Role::get();
+        $hasRoles = $appUser->roles();
+        foreach ($roles as $role){
+            $role->own = $appUser->hasRole($role) ? true : false;
+        }
+        return view('admin.appUser.role',compact('roles','appUser'));
+    }
+
+    /**
+     * 更新分配角色
+     */
+    public function assignRole(Request $request,$id)
+    {
+        $appUser = AppUser::findOrFail($id);
+        $roles = $request->get('roles',[]);
+       if ($appUser->syncRoles($roles)){
+           return redirect()->to(route('admin.appUser'))->with(['status'=>'更新用户角色成功']);
+       }
+        return redirect()->to(route('admin.appUser'))->withErrors('系统错误');
+    }
+
+    /**
+     * 分配权限
+     */
+    public function permission(Request $request,$id)
+    {
+        $appUser = AppUser::findOrFail($id);
+        $permissions = $this->tree();
+        foreach ($permissions as $key1 => $item1){
+            $permissions[$key1]['own'] = $appUser->hasDirectPermission($item1['id']) ? 'checked' : false ;
+            if (isset($item1['_child'])){
+                foreach ($item1['_child'] as $key2 => $item2){
+                    $permissions[$key1]['_child'][$key2]['own'] = $appUser->hasDirectPermission($item2['id']) ? 'checked' : false ;
+                    if (isset($item2['_child'])){
+                        foreach ($item2['_child'] as $key3 => $item3){
+                            $permissions[$key1]['_child'][$key2]['_child'][$key3]['own'] = $appUser->hasDirectPermission($item3['id']) ? 'checked' : false ;
+                        }
+                    }
+                }
+            }
+        }
+        return view('admin.appUser.permission',compact('appUser','permissions'));
+    }
+
+}

+ 194 - 0
app/Http/Controllers/Admin/PartyUserController.php

@@ -0,0 +1,194 @@
+<?php
+
+namespace App\Http\Controllers\Admin;
+
+use App\Http\Requests\PartyUserCreateRequest;
+use App\Http\Requests\PartyUserUpdateRequest;
+use App\Models\PartyUser;
+use Illuminate\Http\Request;
+use App\Http\Controllers\Controller;
+use App\Models\Role;
+
+class PartyUserController extends Controller
+{
+    /**
+     * Display a listing of the resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function index()
+    {
+        return view('admin.partyUser.index');
+    }
+
+    public function data(Request $request)
+    {
+        $res = PartyUser::paginate($request->get('limit', 30))->toArray();
+        $data = [
+            'code' => 0,
+            'msg'   => '正在请求中...',
+            'count' => $res['total'],
+            'data'  => $res['data']
+        ];
+        return response()->json($data);
+    }
+
+    /**
+     * Show the form for creating a new resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function create()
+    {
+        return view('admin.partyUser.create')->with(['partyUser'=>array()]);
+    }
+
+    /**
+     * Store a newly created resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @return \Illuminate\Http\Response
+     */
+    public function store(PartyUserCreateRequest $request)
+    {
+        $data = $request->all();
+        if (PartyUser::create($data)){
+            return redirect()->to(route('admin.partyUser'))->with(['status'=>'添加成功']);
+        }
+        return redirect()->to(route('admin.partyUser'))->withErrors('系统错误');
+    }
+
+    /**
+     * Display the specified resource.
+     *
+     * @param  int  $id
+     * @return \Illuminate\Http\Response
+     */
+    public function show($id)
+    {
+        //
+    }
+
+    /**
+     * Show the form for editing the specified resource.
+     *
+     * @param  int  $id
+     * @return \Illuminate\Http\Response
+     */
+    public function edit($id)
+    {
+        $partyUser = PartyUser::where('id', $id)->first();
+        return view('admin.partyUser.edit',compact('partyUser'));
+    }
+
+    /**
+     * Update the specified resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  int  $id
+     * @return \Illuminate\Http\Response
+     */
+    public function update(PartyUserUpdateRequest $request, $id)
+    {
+       // $partyUser = PartyUser::findOrFail($id);
+
+        $data = $request->all();
+        if(empty($data['key'])){
+            unset($data['key']);
+        }
+        if(empty($data['secret'])){
+            unset($data['secret']);
+        }
+        $partyUser = PartyUser::findOrFail($id);
+
+        if ($partyUser->update($data)){
+            return redirect()->to(route('admin.partyUser'))->with(['status'=>'更新成功']);
+        }
+        return redirect()->to(route('admin.partyUser'))->withErrors('系统错误');
+    }
+
+    /**
+     * Remove the specified resource from storage.
+     *
+     * @param  int  $id
+     * @return \Illuminate\Http\Response
+     */
+    public function destroy(Request $request)
+    {
+        $ids = $request->get('ids');
+        if (empty($ids)){
+            return response()->json(['code'=>1,'msg'=>'请选择删除项']);
+        }
+        if (PartyUser::destroy($ids)){
+            return response()->json(['code'=>0,'msg'=>'删除成功']);
+        }
+        return response()->json(['code'=>1,'msg'=>'删除失败']);
+    }
+
+    /**
+     * 分配角色
+     */
+    public function role(Request $request,$id)
+    {
+        $partyUser = PartyUser::findOrFail($id);
+        $roles = Role::get();
+        $hasRoles = $partyUser->roles();
+        foreach ($roles as $role){
+            $role->own = $partyUser->hasRole($role) ? true : false;
+        }
+        return view('admin.partyUser.role',compact('roles','partyUser'));
+    }
+
+    /**
+     * 更新分配角色
+     */
+    public function assignRole(Request $request,$id)
+    {
+        $partyUser = PartyUser::findOrFail($id);
+        $roles = $request->get('roles',[]);
+       if ($partyUser->syncRoles($roles)){
+           return redirect()->to(route('admin.partyUser'))->with(['status'=>'更新用户角色成功']);
+       }
+        return redirect()->to(route('admin.partyUser'))->withErrors('系统错误');
+    }
+
+    /**
+     * 分配权限
+     */
+    public function permission(Request $request,$id)
+    {
+        $partyUser = PartyUser::findOrFail($id);
+        $permissions = $this->tree();
+        foreach ($permissions as $key1 => $item1){
+            $permissions[$key1]['own'] = $partyUser->hasDirectPermission($item1['id']) ? 'checked' : false ;
+            if (isset($item1['_child'])){
+                foreach ($item1['_child'] as $key2 => $item2){
+                    $permissions[$key1]['_child'][$key2]['own'] = $partyUser->hasDirectPermission($item2['id']) ? 'checked' : false ;
+                    if (isset($item2['_child'])){
+                        foreach ($item2['_child'] as $key3 => $item3){
+                            $permissions[$key1]['_child'][$key2]['_child'][$key3]['own'] = $partyUser->hasDirectPermission($item3['id']) ? 'checked' : false ;
+                        }
+                    }
+                }
+            }
+        }
+        return view('admin.partyUser.permission',compact('partyUser','permissions'));
+    }
+
+    /**
+     * 存储权限
+     */
+    public function assignPermission(Request $request,$id)
+    {
+        $partyUser = PartyUser::findOrFail($id);
+        $permissions = $request->get('permissions');
+
+        if (empty($permissions)){
+            $partyUser->permissions()->detach();
+            return redirect()->to(route('admin.partyUser'))->with(['status'=>'已更新用户直接权限']);
+        }
+        $partyUser->syncPermissions($permissions);
+        return redirect()->to(route('admin.partyUser'))->with(['status'=>'已更新用户直接权限']);
+    }
+
+}

+ 32 - 0
app/Http/Requests/AppUserCreateRequest.php

@@ -0,0 +1,32 @@
+<?php
+
+namespace App\Http\Requests;
+
+use Illuminate\Foundation\Http\FormRequest;
+
+class AppUserUserCreateRequest extends FormRequest
+{
+    /**
+     * Determine if the user is authorized to make this request.
+     *
+     * @return bool
+     */
+    public function authorize()
+    {
+        return true;
+    }
+
+    /**
+     * Get the validation rules that apply to the request.
+     *
+     * @return array
+     */
+    public function rules()
+    {
+        return [
+            'app_id' => 'required|regex:/^[0-9]{1,10}$/|',
+            'app_username'  => 'required|min:2|max:14|unique:ag_app_user,app_username,'.$this->get('id').',id',
+            'password' => 'required',
+        ];
+    }
+}

+ 33 - 0
app/Http/Requests/AppUserUpdateRequest.php

@@ -0,0 +1,33 @@
+<?php
+
+namespace App\Http\Requests;
+
+use Illuminate\Foundation\Http\FormRequest;
+
+class AppUserUpdateRequest extends FormRequest
+{
+    /**
+     * Determine if the user is authorized to make this request.
+     *
+     * @return bool
+     */
+    public function authorize()
+    {
+        return true;
+    }
+
+    /**
+     * Get the validation rules that apply to the request.
+     *
+     * @return array
+     */
+    public function rules()
+    {
+        $reture = [
+            //'app_id' => 'required|regex:/^[0-9]{1,10}$/|',
+            'app_username'  => 'required|min:2|max:14|unique:ag_app_user,app_username,'.$this->get('id').',id',
+            //'password' => 'required',
+        ];
+        return $reture;
+    }
+}

+ 32 - 0
app/Http/Requests/PartyUserCreateRequest.php

@@ -0,0 +1,32 @@
+<?php
+
+namespace App\Http\Requests;
+
+use Illuminate\Foundation\Http\FormRequest;
+
+class PartyUserCreateRequest extends FormRequest
+{
+    /**
+     * Determine if the user is authorized to make this request.
+     *
+     * @return bool
+     */
+    public function authorize()
+    {
+        return true;
+    }
+
+    /**
+     * Get the validation rules that apply to the request.
+     *
+     * @return array
+     */
+    public function rules()
+    {
+        return [
+            'party_id' => 'required|regex:/^[0-9]{1,10}$/|',
+            'party_username' => 'required',
+            'password' => 'required',
+        ];
+    }
+}

+ 33 - 0
app/Http/Requests/PartyUserUpdateRequest.php

@@ -0,0 +1,33 @@
+<?php
+
+namespace App\Http\Requests;
+
+use Illuminate\Foundation\Http\FormRequest;
+
+class PartyUserUpdateRequest extends FormRequest
+{
+    /**
+     * Determine if the user is authorized to make this request.
+     *
+     * @return bool
+     */
+    public function authorize()
+    {
+        return true;
+    }
+
+    /**
+     * Get the validation rules that apply to the request.
+     *
+     * @return array
+     */
+    public function rules()
+    {
+        $reture = [
+            //'party_id' => 'required|regex:/^[0-9]{1,10}$/|',
+            'party_username' => 'required',
+            //'password' => 'required',
+        ];
+        return $reture;
+    }
+}

+ 14 - 0
app/Models/AppUser.php

@@ -0,0 +1,14 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Model;
+
+class AppUser extends Model
+{
+    protected $table = 'ag_app_user';
+
+    protected $fillable = ['name','app_id','party_username', 'app_username', 'password', 'login_time', 'login_ip'];
+
+
+}

+ 14 - 0
app/Models/PartyUser.php

@@ -0,0 +1,14 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Model;
+
+class PartyUser extends Model
+{
+    protected $table = 'ag_party_user';
+
+    protected $fillable = ['name','app_id','party_username', 'app_username', 'password', 'login_time', 'login_ip'];
+
+
+}

+ 1 - 1
resources/views/admin/app/index.blade.php

@@ -46,7 +46,7 @@
                     ,{field: 'add_app', title: '添加者'}
                     ,{field: 'ctime', title: '创建时间'}
                     ,{field: 'updated_at', title: '更新时间'}
-                    ,{fixed: 'right', width: 320, align:'center', toolbar: '#options'}
+                    ,{fixed: 'right', title:'操作', align:'center', toolbar: '#options'}
                 ]]
             });
 

+ 14 - 0
resources/views/admin/appUser/_form.blade.php

@@ -0,0 +1,14 @@
+{{csrf_field()}}
+<div class="layui-form-item">
+    <label for="" class="layui-form-label">第三方账号</label>
+    <div class="layui-input-inline">
+        <input type="text" name="app_username" value="{{ $appUser->app_username ?? old('app_username') }}" lay-verify="required" placeholder="请输入第三方名" class="layui-input" >
+    </div>
+</div>
+
+<div class="layui-form-item">
+    <div class="layui-input-block">
+        <button type="submit" class="layui-btn" lay-submit="" lay-filter="formDemo">确 认</button>
+        <a  class="layui-btn" href="{{route('admin.appUser')}}" >返 回</a>
+    </div>
+</div>

+ 16 - 0
resources/views/admin/appUser/create.blade.php

@@ -0,0 +1,16 @@
+@extends('admin.base')
+
+@section('content')
+    <div class="layui-card">
+        <div class="layui-card-header  layuiadmin-card-header-auto">
+            <h2>添加第三方</h2>
+        </div>
+        <div class="layui-card-body">
+            <form class="layui-form" action="{{route('admin.appUser.store')}}" method="post">
+            @include('admin.appUser._form')
+        </form>
+        </div>
+    </div>
+@endsection
+
+

+ 18 - 0
resources/views/admin/appUser/edit.blade.php

@@ -0,0 +1,18 @@
+@extends('admin.base')
+
+@section('content')
+    <div class="layui-card">
+        <div class="layui-card-header layuiadmin-card-header-auto">
+            <h2>更新第三方</h2>
+        </div>
+        <div class="layui-card-body">
+            <form class="layui-form" action="{{route('admin.appUser.update',['appUser'=>$appUser])}}" method="post">
+                <input type="hidden" name="id" value="{{$appUser->id}}">
+                {{method_field('put')}}
+                @include('admin.appUser._form')
+            </form>
+        </div>
+    </div>
+@endsection
+
+

+ 103 - 0
resources/views/admin/appUser/index.blade.php

@@ -0,0 +1,103 @@
+@extends('admin.base')
+
+@section('content')
+    <div class="layui-card">
+
+        <div class="layui-card-header layuiadmin-card-header-auto">
+            <div class="layui-btn-group">
+                {{--<button class="layui-btn layui-btn-sm layui-btn-danger" id="listDelete">删 除</button>--}}
+                <a class="layui-btn layui-btn-sm" href="{{ route('admin.appUser.create') }}">添 加</a>
+            </div>
+        </div>
+
+        <div class="layui-card-body">
+            <table id="dataTable" lay-filter="dataTable"></table>
+            <script type="text/html" id="options">
+                <div class="layui-btn-group">
+                    <a class="layui-btn layui-btn-sm" lay-event="edit">编辑</a>
+                    <a class="layui-btn layui-btn-danger layui-btn-sm " lay-event="del">删除</a>
+                </div>
+            </script>
+        </div>
+
+    </div>
+@endsection
+
+@section('script')
+    <script>
+        layui.use(['layer','table','form'],function () {
+            var layer = layui.layer;
+            var form = layui.form;
+            var table = layui.table;
+
+            //第三方表格初始化
+            var dataTable = table.render({
+                elem: '#dataTable'
+                ,height: 500
+                ,url: "{{ route('admin.appUser.data') }}" //数据接口
+                ,where:{model:"appUser"}
+                ,page: true //开启分页
+                ,cols: [[ //表头
+                    {checkbox: true,fixed: true}
+                    ,{field: 'id', title: 'ID', sort: true,width:80}
+                    ,{field: 'app_username', title: '平台账号'}
+                    ,{field: 'app_id', title: '所属第三方ID'}
+                    ,{field: 'login_time', title: '登陆时间'}
+                    ,{field: 'login_ip', title: '登陆ip'}
+                    ,{fixed: 'right', title: '操作', align:'center', toolbar: '#options'}
+                ]]
+            });
+
+            //监听工具条
+            table.on('tool(dataTable)', function(obj){ //注:tool是工具条事件名,dataTable是table原始容器的属性 lay-filter="对应的值"
+                var data = obj.data //获得当前行数据
+                    ,layEvent = obj.event; //获得 lay-event 对应的值
+                if(layEvent === 'del'){
+                    layer.confirm('确认删除吗?', function(index){
+                        $.post("{{ route('admin.appUser.destroy') }}",{_method:'delete',ids:[data.id]},function (result) {
+                            if (result.code==0){
+                                obj.del(); //删除对应行(tr)的DOM结构
+                            }
+                            layer.close(index);
+                            layer.msg(result.msg,{icon:6})
+                        });
+                    });
+                } else if(layEvent === 'edit'){
+                    location.href = '/admin/appUser/'+data.id+'/edit';
+                } else if (layEvent === 'role'){
+                    location.href = '/admin/appUser/'+data.id+'/role';
+                } else if (layEvent === 'permission'){
+                    location.href = '/admin/appUser/'+data.id+'/permission';
+                }
+            });
+
+            //按钮批量删除
+            $("#listDelete").click(function () {
+                var ids = []
+                var hasCheck = table.checkStatus('dataTable')
+                var hasCheckData = hasCheck.data
+                if (hasCheckData.length>0){
+                    $.each(hasCheckData,function (index,element) {
+                        ids.push(element.id)
+                    })
+                }
+                if (ids.length>0){
+                    layer.confirm('确认删除吗?', function(index){
+                        $.post("{{ route('admin.appUser.destroy') }}",{_method:'delete',ids:ids},function (result) {
+                            if (result.code==0){
+                                dataTable.reload()
+                            }
+                            layer.close(index);
+                            layer.msg(result.msg,{icon:6})
+                        });
+                    })
+                }else {
+                    layer.msg('请选择删除项',{icon:5})
+                }
+            })
+        })
+    </script>
+@endsection
+
+
+

+ 98 - 0
resources/views/admin/appUser/permission.blade.php

@@ -0,0 +1,98 @@
+@extends('admin.base')
+
+@section('content')
+    <style>
+        .cate-box{margin-bottom: 15px;padding-bottom:10px;border-bottom: 1px solid #f0f0f0}
+        .cate-box dt{margin-bottom: 10px;}
+        .cate-box dt .cate-first{padding:10px 20px}
+        .cate-box dd{padding:0 50px}
+        .cate-box dd .cate-second{margin-bottom: 10px}
+        .cate-box dd .cate-third{padding:0 40px;margin-bottom: 10px}
+    </style>
+    <div class="layui-card">
+        <div class="layui-card-header layuiadmin-card-header-auto">
+            <h2>第三方 【{{$appUserUser->name}}】分配直接权限,直接权限与角色拥有的角色权限不冲突</h2>
+        </div>
+        <div class="layui-card-body">
+            <form action="{{route('admin.appUser.assignPermission',['appUser'=>$appUser])}}" method="post" class="layui-form">
+                {{csrf_field()}}
+                {{method_field('put')}}
+                @forelse($permissions as $first)
+                    <dl class="cate-box">
+                        <dt>
+                        <div class="cate-first"><input id="menu{{$first['id']}}" type="checkbox" name="permissions[]" value="{{$first['id']}}" title="{{$first['display_name']}}" lay-skin="primary" {{$first['own']??''}} ></div>
+                        </dt>
+                        @if(isset($first['_child']))
+                            @foreach($first['_child'] as $second)
+                                <dd>
+                                    <div class="cate-second"><input id="menu{{$first['id']}}-{{$second['id']}}" type="checkbox" name="permissions[]" value="{{$second['id']}}" title="{{$second['display_name']}}" lay-skin="primary" {{$second['own']??''}}></div>
+                                    @if(isset($second['_child']))
+                                        <div class="cate-third">
+                                            @foreach($second['_child'] as $thild)
+                                                <input type="checkbox" id="menu{{$first['id']}}-{{$second['id']}}-{{$thild['id']}}" name="permissions[]" value="{{$thild['id']}}" title="{{$thild['display_name']}}" lay-skin="primary" {{$thild['own']??''}}>
+                                            @endforeach
+                                        </div>
+                                    @endif
+                                </dd>
+                            @endforeach
+                        @endif
+                    </dl>
+                @empty
+                    <div style="text-align: center;padding:20px 0;">
+                        无数据
+                    </div>
+                @endforelse
+                <div class="layui-form-item">
+                    <button type="submit" class="layui-btn" lay-submit="" >确 认</button>
+                    <a href="{{route('admin.appUser')}}"  class="layui-btn" >返 回</a>
+                </div>
+
+            </form>
+        </div>
+    </div>
+@endsection
+
+@section('script')
+    <script type="text/javascript">
+        form.on('checkbox', function (data) {
+            var check = data.elem.checked;//是否选中
+            var checkId = data.elem.id;//当前操作的选项框
+            if (check) {
+                //选中
+                var ids = checkId.split("-");
+                if (ids.length == 3) {
+                    //第三极菜单
+                    //第三极菜单选中,则他的上级选中
+                    $("#" + (ids[0] + '-' + ids[1])).prop("checked", true);
+                    $("#" + (ids[0])).prop("checked", true);
+                } else if (ids.length == 2) {
+                    //第二季菜单
+                    $("#" + (ids[0])).prop("checked", true);
+                    $("input[id*=" + ids[0] + '-' + ids[1] + "]").each(function (i, ele) {
+                        $(ele).prop("checked", true);
+                    });
+                } else {
+                    //第一季菜单不需要做处理
+                    $("input[id*=" + ids[0] + "-]").each(function (i, ele) {
+                        $(ele).prop("checked", true);
+                    });
+                }
+            } else {
+                //取消选中
+                var ids = checkId.split("-");
+                if (ids.length == 2) {
+                    //第二极菜单
+                    $("input[id*=" + ids[0] + '-' + ids[1] + "]").each(function (i, ele) {
+                        $(ele).prop("checked", false);
+                    });
+                } else if (ids.length == 1) {
+                    $("input[id*=" + ids[0] + "-]").each(function (i, ele) {
+                        $(ele).prop("checked", false);
+                    });
+                }
+            }
+            form.render();
+        });
+    </script>
+@endsection
+

+ 36 - 0
resources/views/admin/appUser/role.blade.php

@@ -0,0 +1,36 @@
+@extends('admin.base')
+
+@section('content')
+    <style>
+        .layui-form-checkbox span{width: 100px}
+    </style>
+    <div class="layui-card">
+        <div class="layui-card-header layuiadmin-card-header-auto">
+            <h2>第三方【{{$appUser->name}}】分配角色</h2>
+        </div>
+        <div class="layui-card-body">
+            <form class="layui-form" action="{{route('admin.appUser.assignRole',['appUser'=>$appUser])}}" method="post">
+                {{csrf_field()}}
+                {{method_field('put')}}
+                <div class="layui-form-item">
+                    <label for="" class="layui-form-label">角色</label>
+                    <div class="layui-input-block" style="width: 400px">
+                        @forelse($roles as $role)
+                            <input type="checkbox" name="roles[]" value="{{$role->id}}" title="{{$role->display_name}}" {{ $role->own ? 'checked' : ''  }} >
+                        @empty
+                            <div class="layui-form-mid layui-word-aux">还没有角色</div>
+                        @endforelse
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <div class="layui-input-block">
+                        <button type="submit" class="layui-btn" lay-submit="" lay-filter="formDemo">确 认</button>
+                        <a class="layui-btn" href="{{route('admin.appUser')}}" >返 回</a>
+                    </div>
+                </div>
+            </form>
+        </div>
+    </div>
+@endsection
+
+

+ 55 - 0
resources/views/admin/appUser/update.blade.php

@@ -0,0 +1,55 @@
+@extends('admin.base')
+
+@section('content')
+    <div class="layui-elem-quote">更新第三方</div>
+    <form class="layui-form" action="{{route('appUser.update',['role'=>$appUser])}}" method="post">
+        {{csrf_field()}}
+        {{method_field('put')}}
+        <div class="layui-form-item">
+            <label for="" class="layui-form-label">额&nbsp;&nbsp;&nbsp;度</label>
+            <div class="layui-input-inline">
+                <input type="email" name="email" value="{{$appUser->balance}}" required="" lay-verify="required" placeholder="余额" autocomplete="off" class="layui-input" >
+            </div>
+        </div>
+        <div class="layui-form-item">
+            <label for="" class="layui-form-label">第三方名</label>
+            <div class="layui-input-inline">
+                <input type="text" name="name" value="{{$appUser->name}}" required="" lay-verify="required" placeholder="请输入第三方名" autocomplete="off" class="layui-input">
+            </div>
+        </div>
+        <div class="layui-form-item">
+            <label for="" class="layui-form-label">联系电话</label>
+            <div class="layui-input-inline">
+                <input type="text" name="tel" value="{{$appUser->tel}}" required="" lay-verify="required" placeholder="请输入联系电话" autocomplete="off" class="layui-input">
+            </div>
+        </div>
+        <div class="layui-form-item">
+            <label for="" class="layui-form-label">KEY</label>
+            <div class="layui-input-inline">
+                <input type="text" id="key" name="key" value="{{$appUser->key}}" placeholder="KEY" autocomplete="off" class="layui-input">
+            </div>
+            <div class="layui-form-mid layui-word-aux">不修改则留空</div>
+        </div>
+        <div class="layui-form-item">
+            <label for="" class="layui-form-label">SECRET</label>
+            <div class="layui-input-inline">
+                <input type="text" id="secret" name="secret" value="{{$appUser->secret}}" placeholder="SECRET" autocomplete="off" class="layui-input">
+            </div>
+            <div class="layui-form-mid layui-word-aux">不修改则留空</div>
+        </div>
+        <div class="layui-form-item">
+            <label for="" class="layui-form-label">确&nbsp;&nbsp;&nbsp;认</label>
+            <div class="layui-input-inline">
+                <input type="password" id="password_confirmation" name="password_confirmation" placeholder="请输入密码" autocomplete="off" class="layui-input">
+            </div>
+        </div>
+        <div class="layui-form-item">
+            <div class="layui-input-block">
+                <button type="submit" class="layui-btn" lay-submit="" lay-filter="formDemo">确 认</button>
+                <a class="layui-btn" href="{{route('appUser.index')}}" >返 回</a>
+            </div>
+        </div>
+    </form>
+@endsection
+
+

+ 2 - 2
resources/views/admin/layout.blade.php

@@ -125,10 +125,10 @@
                         </a>
                         <dl class="layui-nav-child">
                             <dd data-name="console" class="layui-this">
-                                <a lay-href="{{route('admin.index')}}">第三方账号</a>
+                                <a lay-href="{{route('admin.partyUser')}}">第三方账号</a>
                             </dd>
                             <dd data-name="console">
-                                <a lay-href="{{route('admin.index1')}}">平台账号</a>
+                                <a lay-href="{{route('admin.appUser')}}">平台账号</a>
                             </dd>
                         </dl>
                     </li>

+ 3 - 3
resources/views/admin/party/index.blade.php

@@ -46,7 +46,7 @@
                     ,{field: 'add_party', title: '添加者'}
                     ,{field: 'ctime', title: '创建时间'}
                     ,{field: 'updated_at', title: '更新时间'}
-                    ,{fixed: 'right', width: 320, align:'center', toolbar: '#options'}
+                    ,{fixed: 'right', title: '操作', align:'center', toolbar: '#options'}
                 ]]
             });
 
@@ -74,7 +74,7 @@
             });
 
             //按钮批量删除
-            $("#listDelete").click(function () {
+            /*$("#listDelete").click(function () {
                 var ids = []
                 var hasCheck = table.checkStatus('dataTable')
                 var hasCheckData = hasCheck.data
@@ -96,7 +96,7 @@
                 }else {
                     layer.msg('请选择删除项',{icon:5})
                 }
-            })
+            })*/
         })
     </script>
 @endsection

+ 14 - 0
resources/views/admin/partyUser/_form.blade.php

@@ -0,0 +1,14 @@
+{{csrf_field()}}
+<div class="layui-form-item">
+    <label for="" class="layui-form-label">第三方账号</label>
+    <div class="layui-input-inline">
+        <input type="text" name="party_username" value="{{ $partyUser->party_username ?? old('party_username') }}" lay-verify="required" placeholder="请输入第三方名" class="layui-input" >
+    </div>
+</div>
+
+<div class="layui-form-item">
+    <div class="layui-input-block">
+        <button type="submit" class="layui-btn" lay-submit="" lay-filter="formDemo">确 认</button>
+        <a  class="layui-btn" href="{{route('admin.partyUser')}}" >返 回</a>
+    </div>
+</div>

+ 16 - 0
resources/views/admin/partyUser/create.blade.php

@@ -0,0 +1,16 @@
+@extends('admin.base')
+
+@section('content')
+    <div class="layui-card">
+        <div class="layui-card-header  layuiadmin-card-header-auto">
+            <h2>添加第三方</h2>
+        </div>
+        <div class="layui-card-body">
+            <form class="layui-form" action="{{route('admin.partyUser.store')}}" method="post">
+            @include('admin.partyUser._form')
+        </form>
+        </div>
+    </div>
+@endsection
+
+

+ 18 - 0
resources/views/admin/partyUser/edit.blade.php

@@ -0,0 +1,18 @@
+@extends('admin.base')
+
+@section('content')
+    <div class="layui-card">
+        <div class="layui-card-header layuiadmin-card-header-auto">
+            <h2>更新第三方</h2>
+        </div>
+        <div class="layui-card-body">
+            <form class="layui-form" action="{{route('admin.partyUser.update',['partyUser'=>$partyUser])}}" method="post">
+                <input type="hidden" name="id" value="{{$partyUser->id}}">
+                {{method_field('put')}}
+                @include('admin.partyUser._form')
+            </form>
+        </div>
+    </div>
+@endsection
+
+

+ 103 - 0
resources/views/admin/partyUser/index.blade.php

@@ -0,0 +1,103 @@
+@extends('admin.base')
+
+@section('content')
+    <div class="layui-card">
+
+        <div class="layui-card-header layuiadmin-card-header-auto">
+            <div class="layui-btn-group">
+                {{--<button class="layui-btn layui-btn-sm layui-btn-danger" id="listDelete">删 除</button>--}}
+                <a class="layui-btn layui-btn-sm" href="{{ route('admin.partyUser.create') }}">添 加</a>
+            </div>
+        </div>
+
+        <div class="layui-card-body">
+            <table id="dataTable" lay-filter="dataTable"></table>
+            <script type="text/html" id="options">
+                <div class="layui-btn-group">
+                    <a class="layui-btn layui-btn-sm" lay-event="edit">编辑</a>
+                    <a class="layui-btn layui-btn-danger layui-btn-sm " lay-event="del">删除</a>
+                </div>
+            </script>
+        </div>
+
+    </div>
+@endsection
+
+@section('script')
+    <script>
+        layui.use(['layer','table','form'],function () {
+            var layer = layui.layer;
+            var form = layui.form;
+            var table = layui.table;
+
+            //第三方表格初始化
+            var dataTable = table.render({
+                elem: '#dataTable'
+                ,height: 500
+                ,url: "{{ route('admin.partyUser.data') }}" //数据接口
+                ,where:{model:"partyUser"}
+                ,page: true //开启分页
+                ,cols: [[ //表头
+                    {checkbox: true,fixed: true}
+                    ,{field: 'id', title: 'ID', sort: true,width:80}
+                    ,{field: 'party_username', title: '用户第三方账号'}
+                    ,{field: 'party_id', title: '所属第三方ID'}
+                    ,{field: 'login_time', title: '登陆时间'}
+                    ,{field: 'login_ip', title: '登陆ip'}
+                    ,{fixed: 'right', title: '操作', align:'center', toolbar: '#options'}
+                ]]
+            });
+
+            //监听工具条
+            table.on('tool(dataTable)', function(obj){ //注:tool是工具条事件名,dataTable是table原始容器的属性 lay-filter="对应的值"
+                var data = obj.data //获得当前行数据
+                    ,layEvent = obj.event; //获得 lay-event 对应的值
+                if(layEvent === 'del'){
+                    layer.confirm('确认删除吗?', function(index){
+                        $.post("{{ route('admin.partyUser.destroy') }}",{_method:'delete',ids:[data.id]},function (result) {
+                            if (result.code==0){
+                                obj.del(); //删除对应行(tr)的DOM结构
+                            }
+                            layer.close(index);
+                            layer.msg(result.msg,{icon:6})
+                        });
+                    });
+                } else if(layEvent === 'edit'){
+                    location.href = '/admin/partyUser/'+data.id+'/edit';
+                } else if (layEvent === 'role'){
+                    location.href = '/admin/partyUser/'+data.id+'/role';
+                } else if (layEvent === 'permission'){
+                    location.href = '/admin/partyUser/'+data.id+'/permission';
+                }
+            });
+
+            //按钮批量删除
+            $("#listDelete").click(function () {
+                var ids = []
+                var hasCheck = table.checkStatus('dataTable')
+                var hasCheckData = hasCheck.data
+                if (hasCheckData.length>0){
+                    $.each(hasCheckData,function (index,element) {
+                        ids.push(element.id)
+                    })
+                }
+                if (ids.length>0){
+                    layer.confirm('确认删除吗?', function(index){
+                        $.post("{{ route('admin.partyUser.destroy') }}",{_method:'delete',ids:ids},function (result) {
+                            if (result.code==0){
+                                dataTable.reload()
+                            }
+                            layer.close(index);
+                            layer.msg(result.msg,{icon:6})
+                        });
+                    })
+                }else {
+                    layer.msg('请选择删除项',{icon:5})
+                }
+            })
+        })
+    </script>
+@endsection
+
+
+

+ 98 - 0
resources/views/admin/partyUser/permission.blade.php

@@ -0,0 +1,98 @@
+@extends('admin.base')
+
+@section('content')
+    <style>
+        .cate-box{margin-bottom: 15px;padding-bottom:10px;border-bottom: 1px solid #f0f0f0}
+        .cate-box dt{margin-bottom: 10px;}
+        .cate-box dt .cate-first{padding:10px 20px}
+        .cate-box dd{padding:0 50px}
+        .cate-box dd .cate-second{margin-bottom: 10px}
+        .cate-box dd .cate-third{padding:0 40px;margin-bottom: 10px}
+    </style>
+    <div class="layui-card">
+        <div class="layui-card-header layuiadmin-card-header-auto">
+            <h2>第三方 【{{$partyUserUser->name}}】分配直接权限,直接权限与角色拥有的角色权限不冲突</h2>
+        </div>
+        <div class="layui-card-body">
+            <form action="{{route('admin.partyUser.assignPermission',['partyUser'=>$partyUser])}}" method="post" class="layui-form">
+                {{csrf_field()}}
+                {{method_field('put')}}
+                @forelse($permissions as $first)
+                    <dl class="cate-box">
+                        <dt>
+                        <div class="cate-first"><input id="menu{{$first['id']}}" type="checkbox" name="permissions[]" value="{{$first['id']}}" title="{{$first['display_name']}}" lay-skin="primary" {{$first['own']??''}} ></div>
+                        </dt>
+                        @if(isset($first['_child']))
+                            @foreach($first['_child'] as $second)
+                                <dd>
+                                    <div class="cate-second"><input id="menu{{$first['id']}}-{{$second['id']}}" type="checkbox" name="permissions[]" value="{{$second['id']}}" title="{{$second['display_name']}}" lay-skin="primary" {{$second['own']??''}}></div>
+                                    @if(isset($second['_child']))
+                                        <div class="cate-third">
+                                            @foreach($second['_child'] as $thild)
+                                                <input type="checkbox" id="menu{{$first['id']}}-{{$second['id']}}-{{$thild['id']}}" name="permissions[]" value="{{$thild['id']}}" title="{{$thild['display_name']}}" lay-skin="primary" {{$thild['own']??''}}>
+                                            @endforeach
+                                        </div>
+                                    @endif
+                                </dd>
+                            @endforeach
+                        @endif
+                    </dl>
+                @empty
+                    <div style="text-align: center;padding:20px 0;">
+                        无数据
+                    </div>
+                @endforelse
+                <div class="layui-form-item">
+                    <button type="submit" class="layui-btn" lay-submit="" >确 认</button>
+                    <a href="{{route('admin.partyUser')}}"  class="layui-btn" >返 回</a>
+                </div>
+
+            </form>
+        </div>
+    </div>
+@endsection
+
+@section('script')
+    <script type="text/javascript">
+        form.on('checkbox', function (data) {
+            var check = data.elem.checked;//是否选中
+            var checkId = data.elem.id;//当前操作的选项框
+            if (check) {
+                //选中
+                var ids = checkId.split("-");
+                if (ids.length == 3) {
+                    //第三极菜单
+                    //第三极菜单选中,则他的上级选中
+                    $("#" + (ids[0] + '-' + ids[1])).prop("checked", true);
+                    $("#" + (ids[0])).prop("checked", true);
+                } else if (ids.length == 2) {
+                    //第二季菜单
+                    $("#" + (ids[0])).prop("checked", true);
+                    $("input[id*=" + ids[0] + '-' + ids[1] + "]").each(function (i, ele) {
+                        $(ele).prop("checked", true);
+                    });
+                } else {
+                    //第一季菜单不需要做处理
+                    $("input[id*=" + ids[0] + "-]").each(function (i, ele) {
+                        $(ele).prop("checked", true);
+                    });
+                }
+            } else {
+                //取消选中
+                var ids = checkId.split("-");
+                if (ids.length == 2) {
+                    //第二极菜单
+                    $("input[id*=" + ids[0] + '-' + ids[1] + "]").each(function (i, ele) {
+                        $(ele).prop("checked", false);
+                    });
+                } else if (ids.length == 1) {
+                    $("input[id*=" + ids[0] + "-]").each(function (i, ele) {
+                        $(ele).prop("checked", false);
+                    });
+                }
+            }
+            form.render();
+        });
+    </script>
+@endsection
+

+ 36 - 0
resources/views/admin/partyUser/role.blade.php

@@ -0,0 +1,36 @@
+@extends('admin.base')
+
+@section('content')
+    <style>
+        .layui-form-checkbox span{width: 100px}
+    </style>
+    <div class="layui-card">
+        <div class="layui-card-header layuiadmin-card-header-auto">
+            <h2>第三方【{{$partyUser->name}}】分配角色</h2>
+        </div>
+        <div class="layui-card-body">
+            <form class="layui-form" action="{{route('admin.partyUser.assignRole',['partyUser'=>$partyUser])}}" method="post">
+                {{csrf_field()}}
+                {{method_field('put')}}
+                <div class="layui-form-item">
+                    <label for="" class="layui-form-label">角色</label>
+                    <div class="layui-input-block" style="width: 400px">
+                        @forelse($roles as $role)
+                            <input type="checkbox" name="roles[]" value="{{$role->id}}" title="{{$role->display_name}}" {{ $role->own ? 'checked' : ''  }} >
+                        @empty
+                            <div class="layui-form-mid layui-word-aux">还没有角色</div>
+                        @endforelse
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <div class="layui-input-block">
+                        <button type="submit" class="layui-btn" lay-submit="" lay-filter="formDemo">确 认</button>
+                        <a class="layui-btn" href="{{route('admin.partyUser')}}" >返 回</a>
+                    </div>
+                </div>
+            </form>
+        </div>
+    </div>
+@endsection
+
+

+ 55 - 0
resources/views/admin/partyUser/update.blade.php

@@ -0,0 +1,55 @@
+@extends('admin.base')
+
+@section('content')
+    <div class="layui-elem-quote">更新第三方</div>
+    <form class="layui-form" action="{{route('partyUser.update',['role'=>$partyUser])}}" method="post">
+        {{csrf_field()}}
+        {{method_field('put')}}
+        <div class="layui-form-item">
+            <label for="" class="layui-form-label">额&nbsp;&nbsp;&nbsp;度</label>
+            <div class="layui-input-inline">
+                <input type="email" name="email" value="{{$partyUser->balance}}" required="" lay-verify="required" placeholder="余额" autocomplete="off" class="layui-input" >
+            </div>
+        </div>
+        <div class="layui-form-item">
+            <label for="" class="layui-form-label">第三方名</label>
+            <div class="layui-input-inline">
+                <input type="text" name="name" value="{{$partyUser->name}}" required="" lay-verify="required" placeholder="请输入第三方名" autocomplete="off" class="layui-input">
+            </div>
+        </div>
+        <div class="layui-form-item">
+            <label for="" class="layui-form-label">联系电话</label>
+            <div class="layui-input-inline">
+                <input type="text" name="tel" value="{{$partyUser->tel}}" required="" lay-verify="required" placeholder="请输入联系电话" autocomplete="off" class="layui-input">
+            </div>
+        </div>
+        <div class="layui-form-item">
+            <label for="" class="layui-form-label">KEY</label>
+            <div class="layui-input-inline">
+                <input type="text" id="key" name="key" value="{{$partyUser->key}}" placeholder="KEY" autocomplete="off" class="layui-input">
+            </div>
+            <div class="layui-form-mid layui-word-aux">不修改则留空</div>
+        </div>
+        <div class="layui-form-item">
+            <label for="" class="layui-form-label">SECRET</label>
+            <div class="layui-input-inline">
+                <input type="text" id="secret" name="secret" value="{{$partyUser->secret}}" placeholder="SECRET" autocomplete="off" class="layui-input">
+            </div>
+            <div class="layui-form-mid layui-word-aux">不修改则留空</div>
+        </div>
+        <div class="layui-form-item">
+            <label for="" class="layui-form-label">确&nbsp;&nbsp;&nbsp;认</label>
+            <div class="layui-input-inline">
+                <input type="password" id="password_confirmation" name="password_confirmation" placeholder="请输入密码" autocomplete="off" class="layui-input">
+            </div>
+        </div>
+        <div class="layui-form-item">
+            <div class="layui-input-block">
+                <button type="submit" class="layui-btn" lay-submit="" lay-filter="formDemo">确 认</button>
+                <a class="layui-btn" href="{{route('partyUser.index')}}" >返 回</a>
+            </div>
+        </div>
+    </form>
+@endsection
+
+

+ 30 - 5
routes/admin.php

@@ -36,7 +36,7 @@ Route::group(['namespace'=>'Admin','prefix'=>'admin','middleware'=>'auth'],funct
 });
 
 //第三方管理
-Route::group(['namespace'=>'Admin','prefix'=>'admin'],function (){
+Route::group(['namespace'=>'Admin','prefix'=>'admin', 'middleware'=>'auth'],function (){
     //数据表格接口
     Route::get('party/data', 'PartyController@data')->name('admin.party.data');
     Route::get('party','PartyController@index')->name('admin.party');
@@ -48,12 +48,10 @@ Route::group(['namespace'=>'Admin','prefix'=>'admin'],function (){
     Route::put('party/{id}/update','PartyController@update')->name('admin.party.update')->middleware();
     //删除
     Route::delete('party/destroy','PartyController@destroy')->name('admin.party.destroy')->middleware();
-
-
 });
 
 //平台管理
-Route::group(['namespace'=>'Admin','prefix'=>'admin'],function (){
+Route::group(['namespace'=>'Admin','prefix'=>'admin', 'middleware'=>'auth'],function (){
     //数据表格接口
     Route::get('app/data', 'AppController@data')->name('admin.app.data');
     Route::get('app','AppController@index')->name('admin.app');
@@ -65,10 +63,37 @@ Route::group(['namespace'=>'Admin','prefix'=>'admin'],function (){
     Route::put('app/{id}/update','AppController@update')->name('admin.app.update')->middleware();
     //删除
     Route::delete('app/destroy','AppController@destroy')->name('admin.app.destroy')->middleware();
+});
 
-
+//第三方账号管理
+Route::group(['namespace'=>'Admin','prefix'=>'admin', 'middleware'=>'auth'],function (){
+    //数据表格接口
+    Route::get('partyUserUser/data', 'PartyUserController@data')->name('admin.partyUser.data');
+    Route::get('partyUser','PartyUserController@index')->name('admin.partyUser');
+    //添加
+    Route::get('partyUser/create','PartyUserController@create')->name('admin.partyUser.create');
+    Route::post('partyUser/store','PartyUserController@store')->name('admin.partyUser.store')->middleware();
+    //编辑
+    Route::get('partyUser/{id}/edit','PartyUserController@edit')->name('admin.partyUser.edit')->middleware();
+    Route::put('partyUser/{id}/update','PartyUserController@update')->name('admin.partyUser.update')->middleware();
+    //删除
+    Route::delete('partyUser/destroy','PartyUserController@destroy')->name('admin.partyUser.destroy')->middleware();
 });
 
+//平台账号管理
+Route::group(['namespace'=>'Admin','prefix'=>'admin', 'middleware'=>'auth'],function (){
+    //数据表格接口
+    Route::get('appUser/data', 'AppUserController@data')->name('admin.appUser.data');
+    Route::get('appUser','AppUserController@index')->name('admin.appUser');
+    //添加
+    Route::get('appUser/create','AppUserController@create')->name('admin.appUser.create');
+    Route::post('appUser/store','AppUserController@store')->name('admin.appUser.store')->middleware();
+    //编辑
+    Route::get('appUser/{id}/edit','AppUserController@edit')->name('admin.appUser.edit')->middleware();
+    Route::put('appUser/{id}/update','AppUserController@update')->name('admin.appUser.update')->middleware();
+    //删除
+    Route::delete('appUser/destroy','AppUserController@destroy')->name('admin.appUser.destroy')->middleware();
+});
 
 Route::group(['namespace'=>'Admin','middleware'=>'auth'],function (){
     //图片上传