Prechádzať zdrojové kódy

Merge branch 'master' of http://git.meme100.com:10180/yigao/qpapi

# Conflicts:
#	app/Http/Kernel.php
born 6 rokov pred
rodič
commit
6a3397339c

+ 120 - 0
app/Http/Controllers/Admin/GmenuController.php

@@ -0,0 +1,120 @@
+<?php
+
+namespace App\Http\Controllers\Admin;
+
+use App\Models\Gmenu;
+use Illuminate\Http\Request;
+use App\Http\Controllers\PublicController;
+
+class GmenuController extends PublicController
+{
+    /**
+    * Display a listing of the resource.
+    *
+    * @return \Illuminate\Http\Response
+    */
+    public function index()
+    {
+        return view('admin.gmenu.index');
+    }
+    public function data(Request $request)
+    {
+        $model = Gmenu::query();
+        if ($request->get('parent_id')!=null ){
+            $model = $model->where('parent_id',$request->get('parent_id'));
+        }
+
+        if ($request->get('status')!=null ){
+            $model = $model->where('status',$request->get('status'));
+        }
+
+        if ($request->get('isleaf')!=null ){
+            $model = $model->where('isleaf',$request->get('isleaf'));
+        }
+
+        if ($request->get('gname')){
+            $model = $model->where('gname','like','%'.$request->get('gname').'%');
+        }
+        $res = $model->orderBy('id','desc')->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.gmenu.create');
+    }
+    /**
+     * Store a newly created resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @return \Illuminate\Http\Response
+     */
+    public function store(Request $request)
+    {
+        $data = $request->only(['parent_id','gname','sort','gaction','status','iconUrl','isleaf']);
+        $data['status'] = (trim($data['status']==1)) ? 1 : 0 ;
+        $data['isleaf'] = (trim($data['isleaf'])==1) ? 1 : 0 ;
+
+        if ( Gmenu::create($data) ){
+            return redirect()->to(route('admin.gmenu'))->with(['status'=>'添加成功']);
+        }
+        return redirect()->to(route('admin.gmenu'))->withErrors('系统错误');
+    }
+    /**
+     * Show the form for editing the specified resource.
+     *
+     * @param  int  $id
+     * @return \Illuminate\Http\Response
+     */
+    public function edit($id)
+    {
+        $gmenu = Gmenu::findOrFail($id);
+        return view('admin.gmenu.edit',compact('gmenu'));
+    }
+    /**
+     * Update the specified resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  int  $id
+     * @return \Illuminate\Http\Response
+     */
+    public function update(Request $request, $id)
+    {
+        $gmenu = Gmenu::findOrFail($id);
+        $data =  $request->only('gname','parent_id','sort','iconUrl','gaction','status','isleaf');
+        $data['status'] = (trim($data['status'])==1) ? 1 : 0 ;
+        $data['isleaf'] = (trim($data['isleaf'])==1) ? 1 : 0 ;
+
+        if ($gmenu->update($data)){
+            return redirect()->to(route('admin.gmenu'))->with(['status'=>'更新用户成功']);
+        }
+        return redirect()->to(route('admin.gmenu'))->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 (Gmenu::whereIn('id',$ids)->update(['status'=>0])){
+            return response()->json(['code'=>0,'msg'=>'删除成功']);
+        }
+        return response()->json(['code'=>1,'msg'=>'删除失败']);
+    }
+}

+ 27 - 1
app/Http/Controllers/PublicController.php

@@ -37,7 +37,8 @@ class PublicController extends Controller
             $data['msg'] = $file->getErrorMessage();
             return response()->json($data);
         }
-        $newFile = date('Y-m-d')."_".time()."_".uniqid().".".$file->getClientOriginalExtension();
+
+        /*
         $disk = QiniuStorage::disk('qiniu');
         $res = $disk->put($newFile,file_get_contents($file->getRealPath()));
         if($res){
@@ -50,9 +51,34 @@ class PublicController extends Controller
         }else{
             $data['data'] = $file->getErrorMessage();
         }
+        */
+
+        //图片统一存放在  public目录下面的   uupload/年月/日/文件名
+        $newFile = date('Y-m-d')."_".time()."_".uniqid().".".$file->getClientOriginalExtension();
+        $path_my  = DIRECTORY_SEPARATOR.'upload'.DIRECTORY_SEPARATOR.date('Ym').DIRECTORY_SEPARATOR.date('d').DIRECTORY_SEPARATOR ;
+        $Path_base = public_path().$path_my ;
+        createDir($Path_base);
+        $res = move_uploaded_file($file->getRealPath(),$Path_base.$newFile);
+        $path_url =  str_replace("\\",'/',$path_my.$newFile)  ;
+
+        if($res){
+            $data = [
+                'code'  => 0,
+                'msg'   => '上传成功',
+                'data'  => $newFile,
+                'url'   => $path_url ,
+            ];
+        }else{
+            $data['data'] = $file->getErrorMessage();
+        }
+
+
         return response()->json($data);
     }
 
+    public  function Directory( $dir ){
+            return  is_dir ( $dir ) or Directory(dirname( $dir )) and  mkdir ( $dir , 0777);
+    }
 
 
 }

+ 50 - 0
app/Http/Controllers/Sys/UserController.php

@@ -5,9 +5,56 @@ namespace App\Http\Controllers\Sys;
 use Illuminate\Http\Request;
 use App\Http\Controllers\Controller;
 use PHPMailer\PHPMailer\Exception;
+use Illuminate\Support\Facades\DB;
+
 
 class UserController extends Controller
 {
+
+    //游客注册登录 133
+    public function hideLogin(){
+        $ip = GETIP();
+
+        //检测是否注册过
+        $member=DB::table('members')->where('user_ip',$ip)->first();
+        if(!empty($member)){
+            if(($member->deleted_at) > date('Y-m-d H:i:s')){
+                $token=\App\Vendor\Jwt::getToken($member->id);
+                DB::table('members')
+                    ->where('id', $member->id)
+                    ->update(['remember_token' => $token]);
+                return toJson(1,'',array('token'=>$token));
+            }
+            return toJson(-20004);
+        }
+        //没有注册,生成游客用户
+        $seed = time();
+        $name = rand(0,$seed);
+        $pwd = '123456';
+        $uuid = getUUID();
+        $userData = [
+            'name' =>'youke_'.$name,
+            'phone' =>'180'.rand(10000000,99999999),
+            'uuid' =>$uuid,
+            'password' =>createPasswd(trim($pwd),$uuid),
+            'identity' => 2,
+            'user_ip' =>$ip,
+            'created_at' =>date('Y-m-d H:i:s'),
+            'updated_at' =>date('Y-m-d H:i:s'),
+            'deleted_at' =>date('Y-m-d H:i:s',strtotime("+2 day"))
+        ];
+
+        try{
+            $ret = DB::table('members')->insertGetId($userData);
+            $token=\App\Vendor\Jwt::getToken($ret);
+            DB::table('members')
+                ->where('id', $ret)
+                ->update(['remember_token' => $token]);
+        }catch(Exception $ex){
+            return toJson(-20001);
+        }
+        return toJson(1,'',array('token'=>$token));
+    }
     public function register(Request $req)
     {
         $user=[];
@@ -38,6 +85,9 @@ class UserController extends Controller
         }
         // echo $member['id'];
         $token=\App\Vendor\Jwt::getToken($member['id']);
+        DB::table('members')
+            ->where('id', $member['id'])
+            ->update(['remember_token' => $token]);
         return toJson(1,'',array('token'=>$token));
     }
     public function logout(){

+ 2 - 1
app/Http/Kernel.php

@@ -19,7 +19,8 @@ class Kernel extends HttpKernel
         \App\Http\Middleware\TrimStrings::class,
         \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
         \App\Http\Middleware\TrustProxies::class,
-        \App\Http\Middleware\CORS::class
+        \App\Http\Middleware\CORS::class,
+
     ];
 
     /**

+ 4 - 2
app/Http/Middleware/CORS.php

@@ -15,11 +15,13 @@ class CORS
      */
     public function handle($request, Closure $next)
     {
-        header('Access-Control-Allow-Origin: *');
+//        header('Access-Control-Allow-Origin: *');
 
         $headers = [
+            'Access-Control-Allow-Origin'=> '*',
             'Access-Control-Allow-Methods'=> 'POST, GET, OPTIONS, PUT, DELETE',
-            'Access-Control-Allow-Headers'=> 'Content-Type, X-Auth-Token, Origin'
+            'Access-Control-Allow-Headers'=> 'Content-Type, X-Auth-Token, Origin',
+            'Access-Control-Allow-Credentials'=> 'false',
         ];
         if($request->getMethod() == "OPTIONS") {
             return Response::make('OK', 200, $headers);

+ 17 - 0
app/Models/Gmenu.php

@@ -0,0 +1,17 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Model;
+
+class Gmenu extends Model
+{
+    protected $table = 'gmenu';
+    protected $fillable =  ['id','parent_id','status','sort','gname','iconUrl','gaction','updated_at','isleaf'];
+
+    public function  getByPid($pid=0){
+        $data = $this->select('id','parent_id','gname','iconUrl','gaction','updated_at','isleaf')->where(['parent_id'=>$pid,'status'=>1])->orderby('sort','asc')->get()->toArray();
+        return $data;
+    }
+
+}

+ 0 - 1
app/Models/Member.php

@@ -13,5 +13,4 @@ class Member extends Authenticatable
     protected $fillable = ['phone','name','password','avatar','remember_token','uuid'];
     protected $hidden = ['password','remember_token'];
 
-
 }

+ 27 - 1
public/function.php

@@ -88,4 +88,30 @@ function randcode($num=6)
 
 function createPasswd($passwd,$solt){
     return md5(md5($solt.$passwd));
-}
+}
+
+/**
+ * 获取客户端真实IP
+ */
+function GETIP() {
+    global $ip;
+
+    if (getenv("HTTP_CLIENT_IP")) {
+        $ip = getenv("HTTP_CLIENT_IP");
+    } else if (getenv("HTTP_X_FORWARDED_FOR")) {
+        $ip = getenv("HTTP_X_FORWARDED_FOR");
+    } else if (getenv("REMOTE_ADDR")) {
+        $ip = getenv("REMOTE_ADDR");
+    } else {
+        $ip = "Unknow";
+    }
+
+    return $ip;
+
+}
+
+//创建目录
+function  createDir($path){
+    if  (is_dir($path)) { return true ; }
+    return  mkdir($path,0777,true);
+}

+ 4 - 0
resources/lang/zh-CN/error.php

@@ -1,6 +1,10 @@
 <?php
 return array(
     '1'=>'成功',
+
+    '-1' => '没有数据' ,
+    '-2' => '操作失败',
+
     //-20000开头用户
     '-20001' => '注册用户失败,可能用户名已存在',
     '-20002' => '用户不存在',

+ 78 - 0
resources/views/admin/gmenu/_form.blade.php

@@ -0,0 +1,78 @@
+{{csrf_field()}}
+<div class="layui-form-item">
+    <label for="" class="layui-form-label">名称</label>
+    <div class="layui-input-inline">
+        <input type="text" name="gname" value="{{ $gmenu->gname ?? old('gname') }}" lay-verify="required" placeholder="请输入名称" class="layui-input" >
+    </div>
+</div>
+
+<div class="layui-form-item">
+    <label for="" class="layui-form-label">PID</label>
+    <div class="layui-input-inline">
+        <input type="text" name="parent_id" value="{{$gmenu->parent_id??old('parent_id')}}" required="required" placeholder="请输入PID" 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="sort" value="{{ $gmenu->sort ?? old('sort',500) }}" lay-verify="required"  placeholder="排序" class="layui-input">
+    </div>
+    <div class="layui-form-mid layui-word-aux">数字小排前面,默认500</div>
+</div>
+
+<div class="layui-form-item">
+    <label for="" class="layui-form-label">图标URL</label>
+    <div class="layui-input-inline">
+        <input type="text" name="iconUrl" id="iconUrl" value="{{ $gmenu->iconUrl ?? old('iconUrl') }}" lay-verify="required"  placeholder="图标URL" 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="gaction" value="{{ $gmenu->gaction ?? old('gaction') }}"  placeholder="目标" 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="status"  value="{{ $gmenu->status ?? old('status',1) }}"  placeholder="状态" class="layui-input">
+    </div>
+    <div class="layui-form-mid layui-word-aux">1代表启用 0代表禁用</div>
+</div>
+
+<div class="layui-form-item">
+    <label for="" class="layui-form-label">节点</label>
+    <div class="layui-input-inline">
+        <input type="text" name="isleaf"  value="{{ $gmenu->isleaf ?? old('isleaf',0) }}"  placeholder="节点" class="layui-input">
+    </div>
+    <div class="layui-form-mid layui-word-aux">1代表节点  0代表还有子节点</div>
+</div>
+
+
+<div class="layui-form-item">
+    <label for="" class="layui-form-label">图片上传</label>
+    <div class="layui-input-block">
+        <div class="layui-upload">
+            <button type="button" class="layui-btn" id="uploadPic"><i class="layui-icon">&#xe67c;</i>图片上传</button>
+            <div class="layui-upload-list" >
+                <ul id="layui-upload-box" class="layui-clear">
+                    @if(isset($gmenu->iconUrl))
+                        <li><img src="{{ $gmenu->iconUrl }}" /><p>上传成功</p></li>
+                    @endif
+                </ul>
+                <input type="hidden" name="UpiconUrl" id="UpiconUrl" value="{{ $gmenu->iconUrl??'' }}">
+            </div>
+        </div>
+    </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.gmenu')}}" >返 回</a>
+    </div>
+</div>

+ 69 - 0
resources/views/admin/gmenu/_js.blade.php

@@ -0,0 +1,69 @@
+<style>
+    #layui-upload-box li{
+        width: 120px;
+        height: 100px;
+        float: left;
+        position: relative;
+        overflow: hidden;
+        margin-right: 10px;
+        border:1px solid #ddd;
+    }
+    #layui-upload-box li img{
+        width: 100%;
+    }
+    #layui-upload-box li p{
+        width: 100%;
+        height: 22px;
+        font-size: 12px;
+        position: absolute;
+        left: 0;
+        bottom: 0;
+        line-height: 22px;
+        text-align: center;
+        color: #fff;
+        background-color: #333;
+        opacity: 0.6;
+    }
+    #layui-upload-box li i{
+        display: block;
+        width: 20px;
+        height:20px;
+        position: absolute;
+        text-align: center;
+        top: 2px;
+        right:2px;
+        z-index:999;
+        cursor: pointer;
+    }
+</style>
+<script>
+    layui.use(['upload'],function () {
+        var upload = layui.upload
+        //普通图片上传
+        var uploadInst = upload.render({
+            elem: '#uploadPic'
+            ,url: '{{ route("admin.uploadImg") }}'
+            ,multiple: false
+            ,data:{"_token":"{{ csrf_token() }}"}
+            ,before: function(obj){
+                //预读本地文件示例,不支持ie8
+                /*obj.preview(function(index, file, result){
+                 $('#layui-upload-box').append('<li><img src="'+result+'" /><p>待上传</p></li>')
+                 });*/
+                obj.preview(function(index, file, result){
+                    $('#layui-upload-box').html('<li><img src="'+result+'" /><p>上传中</p></li>')
+                });
+
+            }
+            ,done: function(res){
+                //如果上传失败
+                if(res.code == 0){
+                    $("#iconUrl").val(res.url);
+                    $('#layui-upload-box li p').text('上传成功');
+                    return layer.msg(res.msg,{icon:6});
+                }
+                return layer.msg(res.msg,{icon:5});
+            }
+        });
+    });
+</script>

+ 18 - 0
resources/views/admin/gmenu/create.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.gmenu.store')}}" method="post">
+                @include('admin.gmenu._form')
+            </form>
+        </div>
+    </div>
+@endsection
+
+@section('script')
+    @include('admin.gmenu._js')
+@endsection

+ 20 - 0
resources/views/admin/gmenu/edit.blade.php

@@ -0,0 +1,20 @@
+@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.gmenu.update',['gmenu'=>$gmenu])}}" method="post">
+                <input type="hidden" name="id" value="{{$gmenu->id}}">
+                {{method_field('put')}}
+                @include('admin.gmenu._form')
+            </form>
+        </div>
+    </div>
+@endsection
+
+@section('script')
+    @include('admin.gmenu._js')
+@endsection

+ 145 - 0
resources/views/admin/gmenu/index.blade.php

@@ -0,0 +1,145 @@
+@extends('admin.base')
+
+@section('content')
+    <div class="layui-card">
+        <div class="layui-card-header layuiadmin-card-header-auto">
+            <div class="layui-btn-group ">
+                @can('config.gmenu.destroy')
+                    <button class="layui-btn layui-btn-sm layui-btn-danger" id="listDelete">删除</button>
+                @endcan
+                @can('config.gmenu.create')
+                    <a class="layui-btn layui-btn-sm" href="{{ route('admin.gmenu.create') }}">添加</a>
+                @endcan
+                <button class="layui-btn layui-btn-sm" id="memberSearch">搜索</button>
+            </div>
+            <div class="layui-form">
+                <div class="layui-input-inline">
+                    <input type="text" name="parent_id" id="parent_id" placeholder="父ID" class="layui-input">
+                </div>
+
+                <div class="layui-input-inline">
+                    <input type="text" name="gname" id="gname" placeholder="名称" class="layui-input">
+                </div>
+
+                <div class="layui-input-inline">
+                    <input type="text" name="status" id="status" placeholder="状态" class="layui-input">
+                </div>
+
+                <div class="layui-input-inline">
+                    <input type="text" name="isleaf" id="isleaf" placeholder="节点" class="layui-input">
+                </div>
+
+            </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">
+                    @can('config.gmenu.create')
+                        <a class="layui-btn layui-btn-sm" lay-event="edit">编辑</a>
+                    @endcan
+                    @can('config.gmenu.destroy')
+                        <a class="layui-btn layui-btn-danger layui-btn-sm" lay-event="del">删除</a>
+                    @endcan
+                </div>
+            </script>
+            <script type="text/html" id="avatar">
+                <a href="@{{d.avatar}}" target="_blank" title="点击查看"><img src="@{{d.avatar}}" alt="" width="28" height="28"></a>
+            </script>
+        </div>
+    </div>
+@endsection
+
+@section('script')
+    @can('config.gmenu')
+        <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.gmenu.data') }}" //数据接口
+                    ,where:{model:"gmenu"}
+                    ,page: true //开启分页
+                    ,cols: [[ //表头
+                        {checkbox: true,fixed: true}
+                        ,{field: 'id', title: 'ID', sort: true,width:80}
+                        ,{field: 'gname', title: '名称'}
+                        ,{field: 'parent_id', title: '父ID'}
+                        ,{field: 'sort', title: '排序'}
+                        ,{field: 'created_at', title: '创建时间'}
+                        ,{field: 'updated_at', title: '更新时间'}
+                        ,{field: 'status', title: '状态'}
+                        ,{field: 'iconUrl', title: '图片URL', templet:function (d) { if ( d.iconUrl==null || d.iconUrl=='')  { return '';}else{ return '<a href="'+d.iconUrl+'" target="_blank"><img src="'+d.iconUrl+'"></a>'; }} }
+                        ,{field: 'gaction', title: '目标'}
+                        ,{field: 'isleaf', title: '节点'}
+
+                        ,{fixed: 'right', width: 120, 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.gmenu.destroy') }}",{_method:'delete',ids:[data.id]},function (result) {
+                                if (result.code==0){
+                                    obj.del(); //删除对应行(tr)的DOM结构
+                                }
+                                layer.close(index);
+                                layer.msg(result.msg)
+                            });
+                        });
+                    } else if(layEvent === 'edit'){
+                        location.href = '/admin/gmenu/'+data.id+'/edit';
+                    }
+                });
+
+                //按钮批量删除
+                $("#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.gmenu.destroy') }}",{_method:'delete',ids:ids},function (result) {
+                                if (result.code==0){
+                                    dataTable.reload()
+                                }
+                                layer.close(index);
+                                layer.msg(result.msg)
+                            });
+                        })
+                    }else {
+                        layer.msg('请选择删除项')
+                    }
+                })
+                //搜索
+                $("#memberSearch").click(function () {
+                    var parent_id = $("#parent_id").val();
+                    var gname = $("#gname").val();
+                    var status = $("#status").val();
+                    var isleaf = $("#isleaf").val();
+                    dataTable.reload({
+                        where:{parent_id:parent_id,gname:gname,status:status,isleaf:isleaf},
+                        page:{curr:1}
+                    })
+                })
+            })
+        </script>
+    @endcan
+@endsection
+
+
+

+ 23 - 0
routes/admin.php

@@ -35,6 +35,11 @@ Route::group(['namespace'=>'Admin','prefix'=>'admin','middleware'=>'auth'],funct
     Route::get('icons','IndexController@icons')->name('admin.icons');
 });
 
+Route::group(['namespace'=>'Admin','middleware'=>'auth'],function (){
+    //图片上传
+    Route::post('gmenu/uploadImg','GmenuController@uploadImg')->name('admin.uploadImg');
+});
+
 //系统管理
 Route::group(['namespace'=>'Admin','prefix'=>'admin','middleware'=>['auth','permission:system.manage']],function (){
     //数据表格接口
@@ -149,6 +154,24 @@ Route::group(['namespace' => 'Admin', 'prefix' => 'admin', 'middleware' => ['aut
         Route::get('site', 'SiteController@index')->name('admin.site');
         Route::put('site', 'SiteController@update')->name('admin.site.update')->middleware('permission:config.site.update');
     });
+
+    //游戏导航菜单
+    Route::group(['middleware' => 'permission:config.gmenu'], function () {
+
+        Route::get('gmenu/data', 'GmenuController@data')->name('admin.gmenu.data');
+        Route::get('gmenu', 'GmenuController@index')->name('admin.gmenu');
+        //添加
+        Route::get('gmenu/create', 'GmenuController@create')->name('admin.gmenu.create')->middleware('permission:config.gmenu.create');
+        Route::post('gmenu/store', 'GmenuController@store')->name('admin.gmenu.store')->middleware('permission:config.gmenu.create');
+        //编辑
+        Route::get('gmenu/{id}/edit', 'GmenuController@edit')->name('admin.gmenu.edit')->middleware('permission:config.gmenu.edit');
+        Route::put('gmenu/{id}/update', 'GmenuController@update')->name('admin.gmenu.update')->middleware('permission:config.gmenu.edit');
+        //删除
+        Route::delete('gmenu/destroy', 'GmenuController@destroy')->name('admin.gmenu.destroy')->middleware('permission:config.gmenu.destroy');
+
+
+    });
+
     //广告位
     Route::group(['middleware' => 'permission:config.position'], function () {
         Route::get('position/data', 'PositionController@data')->name('admin.position.data');