2
0

2 Commity 5205198f1c ... a84f8bef71

Autor SHA1 Správa Dátum
  jekon a84f8bef71 接口签名 6 rokov pred
  jekon c1667e204a 用户管理 6 rokov pred
32 zmenil súbory, kde vykonal 1418 pridanie a 42 odobranie
  1. 7 6
      app/Http/Appadapter/Adapter.php
  2. 108 0
      app/Http/Appadapter/PartySign.php
  3. 178 0
      app/Http/Controllers/Admin/AppUserController.php
  4. 194 0
      app/Http/Controllers/Admin/PartyUserController.php
  5. 6 5
      app/Http/Controllers/Api/PartyController.php
  6. 11 1
      app/Http/Controllers/Sys/AppController.php
  7. 10 19
      app/Http/Middleware/authJWT.php
  8. 32 0
      app/Http/Requests/AppUserCreateRequest.php
  9. 33 0
      app/Http/Requests/AppUserUpdateRequest.php
  10. 32 0
      app/Http/Requests/PartyUserCreateRequest.php
  11. 33 0
      app/Http/Requests/PartyUserUpdateRequest.php
  12. 14 0
      app/Models/AppUser.php
  13. 14 0
      app/Models/PartyUser.php
  14. 1 1
      resources/views/admin/app/index.blade.php
  15. 14 0
      resources/views/admin/appUser/_form.blade.php
  16. 16 0
      resources/views/admin/appUser/create.blade.php
  17. 18 0
      resources/views/admin/appUser/edit.blade.php
  18. 103 0
      resources/views/admin/appUser/index.blade.php
  19. 98 0
      resources/views/admin/appUser/permission.blade.php
  20. 36 0
      resources/views/admin/appUser/role.blade.php
  21. 55 0
      resources/views/admin/appUser/update.blade.php
  22. 2 2
      resources/views/admin/layout.blade.php
  23. 3 3
      resources/views/admin/party/index.blade.php
  24. 14 0
      resources/views/admin/partyUser/_form.blade.php
  25. 16 0
      resources/views/admin/partyUser/create.blade.php
  26. 18 0
      resources/views/admin/partyUser/edit.blade.php
  27. 103 0
      resources/views/admin/partyUser/index.blade.php
  28. 98 0
      resources/views/admin/partyUser/permission.blade.php
  29. 36 0
      resources/views/admin/partyUser/role.blade.php
  30. 55 0
      resources/views/admin/partyUser/update.blade.php
  31. 30 5
      routes/admin.php
  32. 30 0
      routes/sys.php

+ 7 - 6
app/Http/Appadapter/Adapter.php

@@ -44,22 +44,23 @@ class Adapter
      * @param $appUsername
      * @param $password
      * @param $money
+     * @param $billno
      * @return array
      */
-    public function login($appid, $appUsername , $password, $money){
+    public function login($appid, $appUsername , $password, $money, $billno=''){
         return array('code' => 1, 'msg'=>'成功');
 
-        $result = array('code'=>-2, 'msg'=>'');
+        $result = array('code'=>-2, 'msg'=>'', 'data'=>array());
         if($appid == 1){//体育
             $config = ['name' => 'agentname', 'key' => 'agentkey', 'secret' => 'agentsecret'];
             $proxy = new Sport();
             $proxy->Init($config);
             $ret = $proxy->tg($appUsername, $password);
-            if($ret['key_error'] == 1){
+            if($ret['status'] == 1){
                 //转账
-                $ret2 = $proxy->ptc($appUsername, $password, '', $money, 'IN');
-                if($ret2['key_error'] != 1){
-                    $result = array('code'=>1, 'msg'=>'成功');
+                $ret2 = $proxy->ptc($appUsername, $password, $billno, $money, 'IN');
+                if($ret2['status'] == 1){
+                    $result = array('code'=>1, 'msg'=>'成功', 'data'=>$ret['data']);
                 }else{
                     $result = array('code'=>-1, 'msg'=>'服务器繁忙');
                 }

+ 108 - 0
app/Http/Appadapter/PartySign.php

@@ -0,0 +1,108 @@
+<?php
+
+namespace App\Http\Appadapter;
+
+class PartySign
+{
+    private $secret = '';
+    public function __construct($secret)
+    {
+        $this->secret =$secret;
+    }
+
+    /**
+     * 发送POST请求
+     *
+     * @param unknown $url
+     * @param unknown $data
+     * @return boolean
+     */
+    public function api_notice_increment($url, $data)
+    {
+        $ch = curl_init();
+        $header = "Accept-Charset: utf-8";
+        curl_setopt($ch, CURLOPT_URL, $url);
+        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 6);
+        curl_setopt($ch, CURLOPT_TIMEOUT, 6);
+        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
+        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
+        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
+        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
+        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
+        curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
+        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
+        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+        $tmpInfo = curl_exec($ch);
+        if (curl_errno($ch)) {
+            return false;
+        } else {
+            return $tmpInfo;
+        }
+
+    }
+    /**
+     * 将数组$data进行签名
+     *
+     * 签名方式:md5
+     *
+     * @param array $data
+     * @return String 签名结果
+     */
+    public function signString($data) {
+        $data = is_array($data) ? $data : json_decode($data, true);
+        $data = $this->arraytolower($data);
+
+        $data =  ksort($data);    //根据键值对数组升序排序
+
+        $content = '';
+        foreach ($data as $k=>$val) {
+            $content .= $k .'='. $val;
+        }
+
+        $content .= $this->secret;
+        $token = md5($content);
+
+        return $token;
+    }
+
+    /**
+     * 验证签名
+     * @param array $receive
+     * @return boolean
+     */
+    public function checkSignature($data)
+    {
+        if(isset($data['token'])) {
+            $token = $data['token'];
+        } else {
+            return false;
+        }
+        unset($data['token']);
+
+        $data = $this->arraytolower($data);
+        $data =  ksort($data);    //根据键值对数组升序排序
+
+        $content = '';
+        foreach ($data as $k=>$val) {
+            $content .= $k .'='. $val;
+        }
+        $content .= $this->secret;
+        $mySignature = md5($content);
+
+        if($mySignature == $token) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+    /**
+     * 将数组$array的key全部转换为大写
+     */
+    public function arraytolower($array) {
+        $new = array();
+        foreach ($array as $key=>$val) {
+            $new[strtolower($key)] = $val;
+        }
+        return $new;
+    }
+}

+ 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'=>'已更新用户直接权限']);
+    }
+
+}

+ 6 - 5
app/Http/Controllers/Api/PartyController.php

@@ -112,9 +112,10 @@ class PartyController extends Controller
             }
 
             //调用内容方的登陆接口
-            $result = $adapter->login($appid, $appUsername, $req->input('password'), $money);
-            if($result['code'] != 1){
-                return toJson(-3, $result['msg'], []);
+            $billno = date('YmdHis', time()).rand(10000, 99999);
+            $appResult = $adapter->login($appid, $appUsername, $req->input('password'), $money, $billno);
+            if($appResult['code'] != 1){
+                return toJson(-3, $appResult['msg'], []);
             }
 
             DB::beginTransaction();
@@ -146,6 +147,7 @@ class PartyController extends Controller
                 'app_username' => $appUsername,
                 'party_id' =>$partyInfo['id'],
                 'party_username' => $partyUserName,
+                'billno' => $billno,
                 //'ctime' =>now()
             ]);
             if($result === false){
@@ -160,7 +162,6 @@ class PartyController extends Controller
 
             return toJson($code, $msg, []);
         } catch (Exception $e) {
-            var_dump($e);die;
             return toJson($code, $msg, []);
         }
 
@@ -188,7 +189,7 @@ class PartyController extends Controller
             return $arr;
         }
         if(empty($req->input('appid'))){
-            $arr['msg'] = '请输appid';
+            $arr['msg'] = '请输appid';
             return $arr;
         }
         if(!preg_match('/^[0-9]{1,8}(.[0-9]{1,2})?$/', $req->input('money'))){

+ 11 - 1
app/Http/Controllers/Sys/AppController.php

@@ -8,8 +8,9 @@ use App\Http\Controllers\Controller;
 use \App\Http\Models;
 use Illuminate\Support\Facades\DB;
 use \Exception;
+use App\Http\Appadapter\PartySign;
 
-/**
+    /**
  * 第三方管理类
  */
 class AppController extends Controller
@@ -96,4 +97,13 @@ class AppController extends Controller
     }
 
 
+    public function getToken(Request $request){
+
+        $data = $request->input();
+        $secret = 'abcds';
+        $partySign = new PartySign($secret);
+        $data = $partySign->signString($data);
+        return $data;
+    }
+
 }

+ 10 - 19
app/Http/Middleware/authJWT.php

@@ -2,7 +2,9 @@
 
 namespace App\Http\Middleware;
 
+use App\Http\Appadapter\PartySign;
 use Closure;
+use \App\Http\Models;
 
 class authJWT
 {
@@ -15,35 +17,24 @@ class authJWT
      */
     public function handle($request, Closure $next)
     {
-
         try {
+            $data = $request->input();
 
-            // 如果用户登陆后的所有请求没有jwt的token抛出异常
-            $token = $request->input('token');
-            if(empty($token)){
-                return toJson(-30001);
-            }
-
-            $myToken = $this->createToken($request);
-            if($token != $myToken){
+            $secret = $this->getToken($data['key']);
+            $partySign = new PartySign($secret);
+            if(!$partySign->checkSignature($data)) {
                 return toJson(-30001);
             }
-
         } catch (Exception $e) {
             return toJson(-30001);
         }
         return $next($request);
     }
 
-    private function createToken($request){
-        $key = $request->input('key');
-        $secret = \App\Models\Party::where('key', $key)->first()['secret'];
-        if(empty($secret)){
-            return false;
-        }
-
-        $token = md5($key.$secret);
-        return $token;
+    private function getToken($key){
+        $partyModel = new Models\Party;
+        $partyInfo = $partyModel->where('key', $key)->first();
+        return $partyInfo['secret'];
     }
 
 }

+ 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 (){
     //图片上传

+ 30 - 0
routes/sys.php

@@ -0,0 +1,30 @@
+<?php
+
+use Illuminate\Http\Request;
+
+/*
+|--------------------------------------------------------------------------
+| API Routes
+|--------------------------------------------------------------------------
+|
+| Here is where you can register API routes for your application. These
+| routes are loaded by the RouteServiceProvider within a group which
+| is assigned the "api" middleware group. Enjoy building your API!
+|
+*/
+
+
+/*Route::any('/{class}/{action}', function ( $class, $action) {
+    $module='api';
+	return appExec($module, $class, $action);
+})->middleware('auth.jwt');*/
+
+/*Route::group(['namespace'=>'Sys','prefix'=>'sys','middleware'=>''],function () {
+    echo 432;die;
+    Route::post('app/loginOut','AppController@loginOut')->name('sys.app.loginOut')->middleware();
+});*/
+
+// Route::middleware('auth:api')->get('/user', function (Request $request) {
+    
+//     return $request->user();
+// });