Browse Source

1.完善节点分组
2.用户加入等级概念
3.登录送积分可以配置时间范围

zhangjiangbin 8 năm trước cách đây
mục cha
commit
e40ce4a016

+ 64 - 13
app/Http/Controllers/AdminController.php

@@ -7,6 +7,7 @@ use App\Http\Models\Config;
 use App\Http\Models\Invite;
 use App\Http\Models\SsConfig;
 use App\Http\Models\SsGroup;
+use App\Http\Models\SsGroupNode;
 use App\Http\Models\SsNode;
 use App\Http\Models\SsNodeInfo;
 use App\Http\Models\SsNodeOnlineLog;
@@ -161,6 +162,7 @@ class AdminController extends BaseController
             $enable_time = $request->get('enable_time');
             $expire_time = $request->get('expire_time');
             $remark = $request->get('remark');
+            $level = $request->get('level');
             $is_admin = $request->get('is_admin');
 
             // 校验username是否已存在
@@ -199,6 +201,7 @@ class AdminController extends BaseController
                 'enable_time' => empty($enable_time) ? date('Y-m-d') : $enable_time,
                 'expire_time' => empty($expire_time) ? date('Y-m-d', strtotime("+365 days")) : $expire_time,
                 'remark' => $remark,
+                'level' => $level,
                 'is_admin' => $is_admin,
                 'reg_ip' => $request->getClientIp()
             ]);
@@ -259,6 +262,7 @@ class AdminController extends BaseController
             $enable_time = $request->get('enable_time');
             $expire_time = $request->get('expire_time');
             $remark = $request->get('remark');
+            $level = $request->get('level');
             $is_admin = $request->get('is_admin');
 
             $data = [
@@ -285,6 +289,7 @@ class AdminController extends BaseController
                 'enable_time' => empty($enable_time) ? date('Y-m-d') : $enable_time,
                 'expire_time' => empty($expire_time) ? date('Y-m-d', strtotime("+365 days")) : $expire_time,
                 'remark' => $remark,
+                'level' => $level,
                 'is_admin' => $is_admin
             ];
 
@@ -384,6 +389,7 @@ class AdminController extends BaseController
 
         if ($request->method() == 'POST') {
             $name = $request->get('name');
+            $group_id = $request->get('group_id');
             $server = $request->get('server');
             $method = $request->get('method');
             //$custom_method = $request->get('custom_method');
@@ -399,8 +405,9 @@ class AdminController extends BaseController
             $sort = $request->get('sort');
             $status = $request->get('status');
 
-            SsNode::create([
+            $node = SsNode::create([
                 'name' => $name,
+                'group_id' => $group_id,
                 'server' => $server,
                 'method' => $method,
                 'custom_method' => $method,
@@ -417,12 +424,21 @@ class AdminController extends BaseController
                 'status' => $status,
             ]);
 
+            // 建立分组关联
+            if ($group_id) {
+                SsGroupNode::create([
+                    'group_id' => $group_id,
+                    'node_id' => $node->id
+                ]);
+            }
+
             return Response::json(['status' => 'success', 'data' => '', 'message' => '添加成功']);
         } else {
             // 加密方式、协议、混淆
             $view['method_list'] =  $this->methodList();
             $view['protocol_list'] =  $this->protocolList();
             $view['obfs_list'] =  $this->obfsList();
+            $view['group_list'] =  SsGroup::get();
 
             return Response::view('admin/addNode', $view);
         }
@@ -442,6 +458,7 @@ class AdminController extends BaseController
         $id = $request->get('id');
         if ($request->method() == 'POST') {
             $name = $request->get('name');
+            $group_id = $request->get('group_id');
             $server = $request->get('server');
             $method = $request->get('method');
             //$custom_method = $request->get('custom_method');
@@ -459,6 +476,7 @@ class AdminController extends BaseController
 
             $data = [
                 'name' => $name,
+                'group_id' => $group_id,
                 'server' => $server,
                 'method' => $method,
                 'custom_method' => $method,
@@ -477,6 +495,17 @@ class AdminController extends BaseController
 
             $ret = SsNode::where('id', $id)->update($data);
             if ($ret) {
+                // 建立分组关联
+                if ($group_id) {
+                    // 先删除该节点所有关联
+                    SsGroupNode::where('node_id', $id)->delete();
+
+                    SsGroupNode::create([
+                        'group_id' => $group_id,
+                        'node_id' => $id
+                    ]);
+                }
+
                 return Response::json(['status' => 'success', 'data' => '', 'message' => '编辑成功']);
             } else {
                 return Response::json(['status' => 'fail', 'data' => '', 'message' => '编辑失败']);
@@ -488,6 +517,7 @@ class AdminController extends BaseController
             $view['method_list'] =  $this->methodList();
             $view['protocol_list'] =  $this->protocolList();
             $view['obfs_list'] =  $this->obfsList();
+            $view['group_list'] =  SsGroup::get();
 
             return Response::view('admin/editNode', $view);
         }
@@ -645,13 +675,11 @@ class AdminController extends BaseController
 
         if ($request->method() == 'POST') {
             $name = $request->get('name');
-            $server = $request->get('server');
-            $method = $request->get('method');
+            $level = $request->get('level');
 
-            SsNode::create([
+            SsGroup::create([
                 'name' => $name,
-                'server' => $server,
-                'method' => $method
+                'level' => $level
             ]);
 
             return Response::json(['status' => 'success', 'data' => '', 'message' => '添加成功']);
@@ -674,25 +702,23 @@ class AdminController extends BaseController
         $id = $request->get('id');
         if ($request->method() == 'POST') {
             $name = $request->get('name');
-            $server = $request->get('server');
-            $method = $request->get('method');
+            $level = $request->get('level');
 
             $data = [
                 'name' => $name,
-                'server' => $server,
-                'method' => $method
+                'level' => $level
             ];
 
-            $ret = SsNode::where('id', $id)->update($data);
+            $ret = SsGroup::where('id', $id)->update($data);
             if ($ret) {
                 return Response::json(['status' => 'success', 'data' => '', 'message' => '编辑成功']);
             } else {
                 return Response::json(['status' => 'fail', 'data' => '', 'message' => '编辑失败']);
             }
         } else {
-            $view['group'] = SsNode::where('id', $id)->first();
+            $view['group'] = SsGroup::where('id', $id)->first();
 
-            return Response::view('admin/editNode', $view);
+            return Response::view('admin/editGroup', $view);
         }
     }
 
@@ -708,6 +734,13 @@ class AdminController extends BaseController
         }
 
         $id = $request->get('id');
+
+        // 检查是否该分组下是否有节点
+        $group_node = SsGroupNode::where('group_id', $id)->get();
+        if (!$group_node->isEmpty()) {
+            return Response::json(['status' => 'fail', 'data' => '', 'message' => '删除失败:该分组下有节点关联,请先解除关联']);
+        }
+
         $user = SsGroup::where('id', $id)->delete();
         if ($user) {
             return Response::json(['status' => 'success', 'data' => '', 'message' => '删除成功']);
@@ -1375,6 +1408,24 @@ TXT;
         return Response::json(['status' => 'success', 'data' => '', 'message' => '设置成功']);
     }
 
+    // 设置激活账号次数
+    public function setAddScoreRange(Request $request)
+    {
+        if (!$request->session()->has('user')) {
+            return Redirect::to('login');
+        }
+
+        if (!$request->session()->get('user')['is_admin']) {
+            return Redirect::to('login');
+        }
+
+        $value = intval($request->get('value'));
+
+        Config::where('name', 'login_add_score_range')->update(['value' => $value]);
+
+        return Response::json(['status' => 'success', 'data' => '', 'message' => '设置成功']);
+    }
+
     // 设置微信、支付宝二维码
     public function setQrcode(Request $request)
     {

+ 2 - 1
app/Http/Controllers/LoginController.php

@@ -69,7 +69,8 @@ class LoginController extends BaseController
                         $obj->created_at = date('Y-m-d H:i:s');
                         $obj->save();
 
-                        Cache::put('loginAddScore_' . md5($username), '1', 1440);
+                        $ttl = !empty(static::$config['login_add_score_range']) ? static::$config['login_add_score_range'] : 1440;
+                        Cache::put('loginAddScore_' . md5($username), '1', $ttl);
                         $request->session()->flash('successMsg', '欢迎回来,系统自动赠送您 ' . $score . ' 积分,您可以用它兑换流量包');
                     }
                 }

+ 11 - 4
app/Http/Controllers/UserController.php

@@ -43,14 +43,16 @@ class UserController extends BaseController
             return Redirect::to('login');
         }
 
-        $view['articleList'] = Article::where('is_del', 0)->orderBy('sort', 'desc')->orderBy('id', 'desc')->paginate(5);
         $user = $request->session()->get('user');
+
+        $view['articleList'] = Article::where('is_del', 0)->orderBy('sort', 'desc')->orderBy('id', 'desc')->paginate(5);
+        $view['wechat_qrcode'] = static::$config['wechat_qrcode'];
+        $view['alipay_qrcode'] = static::$config['alipay_qrcode'];
+
         $user['totalTransfer'] = $this->flowAutoShow($user['transfer_enable'] - $user['u'] - $user['d']);
         $user['usedTransfer'] = $this->flowAutoShow($user['u'] + $user['d']);
         $user['usedPercent'] = round(($user['u'] + $user['d']) / $user['transfer_enable'], 2);
         $view['info'] = $user;
-        $view['wechat_qrcode'] = static::$config['wechat_qrcode'];
-        $view['alipay_qrcode'] = static::$config['alipay_qrcode'];
 
         return Response::view('user/index', $view);
     }
@@ -170,7 +172,12 @@ class UserController extends BaseController
 
         $user = $request->session()->get('user');
 
-        $nodeList = SsNode::paginate(10);
+        $nodeList = DB::table('ss_group_node')
+            ->leftJoin('ss_group', 'ss_group.id', '=', 'ss_group_node.group_id')
+            ->leftJoin('ss_node', 'ss_node.id', '=', 'ss_group_node.node_id')
+            ->where('ss_group.level', '<=', $user['level'])
+            ->paginate(10);
+
         foreach ($nodeList as &$node) {
             // 在线人数
             $online_log = SsNodeOnlineLog::where('node_id', $node->id)->orderBy('id', 'desc')->first();

+ 16 - 20
resources/views/admin/addGroup.blade.php

@@ -41,7 +41,7 @@
                             </div>
                         @endif
                         <!-- BEGIN FORM-->
-                        <form action="{{url('admin/addGroup')}}" method="post" enctype="multipart/form-data" class="form-horizontal form-bordered" onsubmit="return do_submit();">
+                        <form action="#" method="post" enctype="multipart/form-data" class="form-horizontal form-bordered" onsubmit="return do_submit();">
                             <div class="form-body">
                                 <div class="form-group">
                                     <label class="control-label col-md-3">分组名称</label>
@@ -51,9 +51,18 @@
                                     </div>
                                 </div>
                                 <div class="form-group">
-                                    <label class="control-label col-md-3">级别</label>
+                                    <label class="control-label col-md-3">可见级别</label>
                                     <div class="col-md-6">
-                                        <input type="text" class="form-control" name="level" value="" id="level" required />
+                                        <select class="form-control" name="level" id="level" required>
+                                            <option value="1" selected>倔强青铜</option>
+                                            <option value="2">秩序白银</option>
+                                            <option value="3">荣耀黄金</option>
+                                            <option value="4">尊贵铂金</option>
+                                            <option value="5">永恒钻石</option>
+                                            <option value="6">至尊黑曜</option>
+                                            <option value="7">最强王者</option>
+                                        </select>
+                                        <span class="help-block">对应账号级别可见该分组下的节点(向下兼容)</span>
                                     </div>
                                 </div>
                             </div>
@@ -83,31 +92,18 @@
         function do_submit() {
             var _token = '{{csrf_token()}}';
             var name = $('#name').val();
-            var server = $('#server').val();
-            var method = $('#method').val();
-            var custom_method = $('#custom_method').val();
-            var traffic_rate = $('#traffic_rate').val();
-            var protocol = $('#protocol').val();
-            var protocol_param = $('#protocol_param').val();
-            var obfs = $('#obfs').val();
-            var obfs_param = $('#obfs_param').val();
-            var bandwidth = $('#bandwidth').val();
-            var traffic = $('#traffic').val();
-            var monitor_url = $('#monitor_url').val();
-            var compatible = $('#compatible').val();
-            var sort = $('#sort').val();
-            var status = $('#status').val();
+            var level = $("#level option:selected").val();
 
             $.ajax({
                 type: "POST",
-                url: "{{url('admin/addNode')}}",
+                url: "{{url('admin/addGroup')}}",
                 async: false,
-                data: {_token:_token, name: name, server:server, method:method, custom_method:custom_method, traffic_rate:traffic_rate, protocol:protocol, protocol_param:protocol_param, obfs:obfs, obfs_param:obfs_param, bandwidth:bandwidth, traffic:traffic, monitor_url:monitor_url, compatible:compatible, sort:sort, status:status},
+                data: {_token:_token, name:name, level:level},
                 dataType: 'json',
                 success: function (ret) {
                     if (ret.status == 'success') {
                         bootbox.alert(ret.message, function () {
-                            window.location.href = '{{url('admin/nodeList')}}';
+                            window.location.href = '{{url('admin/groupList')}}';
                         });
                     } else {
                         bootbox.alert(ret.message);

+ 16 - 1
resources/views/admin/addNode.blade.php

@@ -45,6 +45,20 @@
                                                             <input type="hidden" name="_token" value="{{csrf_token()}}">
                                                         </div>
                                                     </div>
+                                                    <div class="form-group">
+                                                        <label for="group_id" class="col-md-3 control-label"> 所属分组 </label>
+                                                        <div class="col-md-8">
+                                                            <select class="form-control" name="group_id" id="group_id">
+                                                                <option value="0">请选择</option>
+                                                                @if(!$group_list->isEmpty())
+                                                                    @foreach($group_list as $group)
+                                                                        <option value="{{$group->id}}">{{$group->name}}</option>
+                                                                    @endforeach
+                                                                @endif
+                                                            </select>
+                                                            <span class="help-block">没有关联任何分组时则节点不可见</span>
+                                                        </div>
+                                                    </div>
                                                     <div class="form-group">
                                                         <label for="server" class="col-md-3 control-label"> 服务器地址 </label>
                                                         <div class="col-md-8">
@@ -201,6 +215,7 @@
         function do_submit() {
             var _token = '{{csrf_token()}}';
             var name = $('#name').val();
+            var group_id = $("#group_id option:selected").val();
             var server = $('#server').val();
             var method = $('#method').val();
             var custom_method = $('#custom_method').val();
@@ -220,7 +235,7 @@
                 type: "POST",
                 url: "{{url('admin/addNode')}}",
                 async: false,
-                data: {_token:_token, name: name, server:server, method:method, custom_method:custom_method, traffic_rate:traffic_rate, protocol:protocol, protocol_param:protocol_param, obfs:obfs, obfs_param:obfs_param, bandwidth:bandwidth, traffic:traffic, monitor_url:monitor_url, compatible:compatible, sort:sort, status:status},
+                data: {_token:_token, name: name, group_id:group_id, server:server, method:method, custom_method:custom_method, traffic_rate:traffic_rate, protocol:protocol, protocol_param:protocol_param, obfs:obfs, obfs_param:obfs_param, bandwidth:bandwidth, traffic:traffic, monitor_url:monitor_url, compatible:compatible, sort:sort, status:status},
                 dataType: 'json',
                 success: function (ret) {
                     if (ret.status == 'success') {

+ 23 - 4
resources/views/admin/addUser.blade.php

@@ -57,7 +57,7 @@
                                                             <span></span>
                                                         </label>
                                                         <label class="mt-radio">
-                                                            <input type="radio" name="usage" value="2" checked> 电脑
+                                                            <input type="radio" name="usage" value="2"> 电脑
                                                             <span></span>
                                                         </label>
                                                         <label class="mt-radio">
@@ -65,7 +65,7 @@
                                                             <span></span>
                                                         </label>
                                                         <label class="mt-radio">
-                                                            <input type="radio" name="usage" value="4"> 其他
+                                                            <input type="radio" name="usage" value="4" checked> 其他
                                                             <span></span>
                                                         </label>
                                                     </div>
@@ -75,6 +75,10 @@
                                                 <label for="pay_way" class="col-md-3 control-label">付费方式</label>
                                                 <div class="col-md-8">
                                                     <div class="mt-radio-inline">
+                                                        <label class="mt-radio">
+                                                            <input type="radio" name="pay_way" value="0" checked> 免费
+                                                            <span></span>
+                                                        </label>
                                                         <label class="mt-radio">
                                                             <input type="radio" name="pay_way" value="1"> 月付
                                                             <span></span>
@@ -84,12 +88,26 @@
                                                             <span></span>
                                                         </label>
                                                         <label class="mt-radio">
-                                                            <input type="radio" name="pay_way" value="3" checked> 年付
+                                                            <input type="radio" name="pay_way" value="3"> 年付
                                                             <span></span>
                                                         </label>
                                                     </div>
                                                 </div>
                                             </div>
+                                            <div class="form-group">
+                                                <label for="balance" class="col-md-3 control-label">级别</label>
+                                                <div class="col-md-8">
+                                                    <select class="form-control" name="level" id="level">
+                                                        <option value="1" selected>倔强青铜</option>
+                                                        <option value="2">秩序白银</option>
+                                                        <option value="3">荣耀黄金</option>
+                                                        <option value="4">尊贵铂金</option>
+                                                        <option value="5">永恒钻石</option>
+                                                        <option value="6">至尊黑曜</option>
+                                                        <option value="7">最强王者</option>
+                                                    </select>
+                                                </div>
+                                            </div>
                                             <div class="form-group">
                                                 <label for="balance" class="col-md-3 control-label">余额</label>
                                                 <div class="col-md-8">
@@ -310,6 +328,7 @@
             var qq = $('#qq').val();
             var is_admin = $('#is_admin').val();
             var remark = $('#remark').val();
+            var level = $("#level option:selected").val();
             var port = $('#port').val();
             var passwd = $('#passwd').val();
             var method = $('#method').val();
@@ -327,7 +346,7 @@
                 type: "POST",
                 url: "{{url('admin/addUser')}}",
                 async: false,
-                data: {_token:_token, username: username, password:password, usage:usage, pay_way:pay_way, balance:balance, score:score, enable_time:enable_time, expire_time:expire_time, wechat:wechat, qq:qq, is_admin:is_admin, remark:remark, port:port, passwd:passwd, method:method, custom_method:custom_method, transfer_enable:transfer_enable, enable:enable, protocol:protocol, protocol_param:protocol_param, obfs:obfs, obfs_param:obfs_param, speed_limit_per_con:speed_limit_per_con, speed_limit_per_user:speed_limit_per_user},
+                data: {_token:_token, username: username, password:password, usage:usage, pay_way:pay_way, balance:balance, score:score, enable_time:enable_time, expire_time:expire_time, wechat:wechat, qq:qq, is_admin:is_admin, remark:remark, level:level, port:port, passwd:passwd, method:method, custom_method:custom_method, transfer_enable:transfer_enable, enable:enable, protocol:protocol, protocol_param:protocol_param, obfs:obfs, obfs_param:obfs_param, speed_limit_per_con:speed_limit_per_con, speed_limit_per_user:speed_limit_per_user},
                 dataType: 'json',
                 success: function (ret) {
                     if (ret.status == 'success') {

+ 117 - 0
resources/views/admin/editGroup.blade.php

@@ -0,0 +1,117 @@
+@extends('admin.layouts')
+
+@section('css')
+    <link href="/assets/global/plugins/bootstrap-datepicker/css/bootstrap-datepicker3.min.css" rel="stylesheet" type="text/css" />
+@endsection
+@section('title', '控制面板')
+@section('content')
+    <!-- BEGIN CONTENT BODY -->
+    <div class="page-content">
+        <!-- BEGIN PAGE BREADCRUMB -->
+        <ul class="page-breadcrumb breadcrumb">
+            <li>
+                <a href="javascript:;">节点管理</a>
+                <i class="fa fa-circle"></i>
+            </li>
+            <li>
+                <a href="{{url('admin/groupList')}}">节点分组</a>
+                <i class="fa fa-circle"></i>
+            </li>
+            <li>
+                <a href="javascript:;">编辑节点分组</a>
+            </li>
+        </ul>
+        <!-- END PAGE BREADCRUMB -->
+        <!-- BEGIN PAGE BASE CONTENT -->
+        <div class="row">
+            <div class="col-md-12">
+                <!-- BEGIN PORTLET-->
+                <div class="portlet light form-fit bordered">
+                    <div class="portlet-title">
+                        <div class="caption">
+                            <span class="caption-subject font-green sbold uppercase">编辑节点分组</span>
+                        </div>
+                        <div class="actions"></div>
+                    </div>
+                    <div class="portlet-body form">
+                        @if (Session::has('errorMsg'))
+                            <div class="alert alert-danger">
+                                <button class="close" data-close="alert"></button>
+                                <strong>错误:</strong> {{Session::get('errorMsg')}}
+                            </div>
+                        @endif
+                        <!-- BEGIN FORM-->
+                        <form action="#" method="post" enctype="multipart/form-data" class="form-horizontal form-bordered" onsubmit="return do_submit();">
+                            <div class="form-body">
+                                <div class="form-group">
+                                    <label class="control-label col-md-3">分组名称</label>
+                                    <div class="col-md-6">
+                                        <input type="text" class="form-control" name="name" value="{{$group->name}}" id="name" placeholder="" autofocus required>
+                                        <input type="hidden" name="_token" value="{{csrf_token()}}">
+                                    </div>
+                                </div>
+                                <div class="form-group">
+                                    <label class="control-label col-md-3">可见级别</label>
+                                    <div class="col-md-6">
+                                        <select class="form-control" name="level" id="level" required>
+                                            <option value="1" {{$group->level == 1 ? 'selected' : ''}}>倔强青铜</option>
+                                            <option value="2" {{$group->level == 2 ? 'selected' : ''}}>秩序白银</option>
+                                            <option value="3" {{$group->level == 3 ? 'selected' : ''}}>荣耀黄金</option>
+                                            <option value="4" {{$group->level == 4 ? 'selected' : ''}}>尊贵铂金</option>
+                                            <option value="5" {{$group->level == 5 ? 'selected' : ''}}>永恒钻石</option>
+                                            <option value="6" {{$group->level == 6 ? 'selected' : ''}}>至尊黑曜</option>
+                                            <option value="7" {{$group->level == 7 ? 'selected' : ''}}>最强王者</option>
+                                        </select>
+                                        <span class="help-block">对应账号级别可见该分组下的节点(向下兼容)</span>
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="form-actions">
+                                <div class="row">
+                                    <div class="col-md-offset-3 col-md-9">
+                                        <button type="submit" class="btn green"> <i class="fa fa-check"></i> 提 交</button>
+                                    </div>
+                                </div>
+                            </div>
+                        </form>
+                        <!-- END FORM-->
+                    </div>
+                </div>
+                <!-- END PORTLET-->
+            </div>
+        </div>
+        <!-- END PAGE BASE CONTENT -->
+    </div>
+    <!-- END CONTENT BODY -->
+@endsection
+@section('script')
+    <script src="/assets/global/plugins/bootbox/bootbox.min.js" type="text/javascript"></script>
+
+    <script type="text/javascript">
+        // ajax同步提交
+        function do_submit() {
+            var _token = '{{csrf_token()}}';
+            var name = $('#name').val();
+            var level = $("#level option:selected").val();
+
+            $.ajax({
+                type: "POST",
+                url: "{{url('admin/editGroup')}}",
+                async: false,
+                data: {_token:_token, id:'{{$group->id}}', name:name, level:level},
+                dataType: 'json',
+                success: function (ret) {
+                    if (ret.status == 'success') {
+                        bootbox.alert(ret.message, function () {
+                            window.location.href = '{{url('admin/groupList')}}';
+                        });
+                    } else {
+                        bootbox.alert(ret.message);
+                    }
+                }
+            });
+
+            return false;
+        }
+    </script>
+@endsection

+ 16 - 1
resources/views/admin/editNode.blade.php

@@ -45,6 +45,20 @@
                                                             <input type="hidden" name="_token" value="{{csrf_token()}}">
                                                         </div>
                                                     </div>
+                                                    <div class="form-group">
+                                                        <label for="group_id" class="col-md-3 control-label"> 所属分组 </label>
+                                                        <div class="col-md-8">
+                                                            <select class="form-control" name="group_id" id="group_id">
+                                                                <option value="0">请选择</option>
+                                                                @if(!$group_list->isEmpty())
+                                                                    @foreach($group_list as $group)
+                                                                        <option value="{{$group->id}}" {{$node->group_id == $group->id ? 'selected' : ''}}>{{$group->name}}</option>
+                                                                    @endforeach
+                                                                @endif
+                                                            </select>
+                                                            <span class="help-block">没有关联任何分组时则节点不可见</span>
+                                                        </div>
+                                                    </div>
                                                     <div class="form-group">
                                                         <label for="server" class="col-md-3 control-label"> 服务器地址 </label>
                                                         <div class="col-md-8">
@@ -202,6 +216,7 @@
             var _token = '{{csrf_token()}}';
             var id = '{{Request::get('id')}}';
             var name = $('#name').val();
+            var group_id = $("#group_id option:selected").val();
             var server = $('#server').val();
             var method = $('#method').val();
             var custom_method = $('#custom_method').val();
@@ -221,7 +236,7 @@
                 type: "POST",
                 url: "{{url('admin/editNode')}}",
                 async: false,
-                data: {_token:_token, id:id, name: name, server:server, method:method, custom_method:custom_method, traffic_rate:traffic_rate, protocol:protocol, protocol_param:protocol_param, obfs:obfs, obfs_param:obfs_param, bandwidth:bandwidth, traffic:traffic, monitor_url:monitor_url, compatible:compatible, sort:sort, status:status},
+                data: {_token:_token, id:id, name: name, group_id:group_id, server:server, method:method, custom_method:custom_method, traffic_rate:traffic_rate, protocol:protocol, protocol_param:protocol_param, obfs:obfs, obfs_param:obfs_param, bandwidth:bandwidth, traffic:traffic, monitor_url:monitor_url, compatible:compatible, sort:sort, status:status},
                 dataType: 'json',
                 success: function (ret) {
                     if (ret.status == 'success') {

+ 20 - 1
resources/views/admin/editUser.blade.php

@@ -76,6 +76,10 @@
                                                 <label for="pay_way" class="col-md-3 control-label">付费方式</label>
                                                 <div class="col-md-8">
                                                     <div class="mt-radio-inline">
+                                                        <label class="mt-radio">
+                                                            <input type="radio" name="pay_way" value="0" {{$user->pay_way == 0 ? 'checked' : ''}}> 月付
+                                                            <span></span>
+                                                        </label>
                                                         <label class="mt-radio">
                                                             <input type="radio" name="pay_way" value="1" {{$user->pay_way == 1 ? 'checked' : ''}}> 月付
                                                             <span></span>
@@ -91,6 +95,20 @@
                                                     </div>
                                                 </div>
                                             </div>
+                                            <div class="form-group">
+                                                <label for="balance" class="col-md-3 control-label">级别</label>
+                                                <div class="col-md-8">
+                                                    <select class="form-control" name="level" id="level">
+                                                        <option value="1" {{$user->level == 1 ? 'selected' : ''}}>倔强青铜</option>
+                                                        <option value="2" {{$user->level == 2 ? 'selected' : ''}}>秩序白银</option>
+                                                        <option value="3" {{$user->level == 3 ? 'selected' : ''}}>荣耀黄金</option>
+                                                        <option value="4" {{$user->level == 4 ? 'selected' : ''}}>尊贵铂金</option>
+                                                        <option value="5" {{$user->level == 5 ? 'selected' : ''}}>永恒钻石</option>
+                                                        <option value="6" {{$user->level == 6 ? 'selected' : ''}}>至尊黑曜</option>
+                                                        <option value="7" {{$user->level == 7 ? 'selected' : ''}}>最强王者</option>
+                                                    </select>
+                                                </div>
+                                            </div>
                                             <div class="form-group">
                                                 <label for="balance" class="col-md-3 control-label">余额</label>
                                                 <div class="col-md-8">
@@ -320,6 +338,7 @@
             var qq = $('#qq').val();
             var is_admin = $('#is_admin').val();
             var remark = $('#remark').val();
+            var level = $("#level option:selected").val();
             var port = $('#port').val();
             var passwd = $('#passwd').val();
             var method = $('#method').val();
@@ -337,7 +356,7 @@
                 type: "POST",
                 url: "{{url('admin/editUser')}}",
                 async: false,
-                data: {_token:_token, id:id, username: username, password:password, usage:usage, pay_way:pay_way, balance:balance, score:score, status:status, enable_time:enable_time, expire_time:expire_time, wechat:wechat, qq:qq, is_admin:is_admin, remark:remark, port:port, passwd:passwd, method:method, custom_method:custom_method, transfer_enable:transfer_enable, enable:enable, protocol:protocol, protocol_param:protocol_param, obfs:obfs, obfs_param:obfs_param, speed_limit_per_con:speed_limit_per_con, speed_limit_per_user:speed_limit_per_user},
+                data: {_token:_token, id:id, username: username, password:password, usage:usage, pay_way:pay_way, balance:balance, score:score, status:status, enable_time:enable_time, expire_time:expire_time, wechat:wechat, qq:qq, is_admin:is_admin, remark:remark, level:level, port:port, passwd:passwd, method:method, custom_method:custom_method, transfer_enable:transfer_enable, enable:enable, protocol:protocol, protocol_param:protocol_param, obfs:obfs, obfs_param:obfs_param, speed_limit_per_con:speed_limit_per_con, speed_limit_per_user:speed_limit_per_user},
                 dataType: 'json',
                 success: function (ret) {
                     if (ret.status == 'success') {

+ 21 - 7
resources/views/admin/groupList.blade.php

@@ -44,7 +44,7 @@
                                 <tr>
                                     <th> ID </th>
                                     <th> 分组名称 </th>
-                                    <th> 限制 </th>
+                                    <th> 可见级别 </th>
                                     <th> 操作 </th>
                                 </tr>
                                 </thead>
@@ -58,10 +58,26 @@
                                             <tr class="odd gradeX">
                                                 <td> {{$group->id}} </td>
                                                 <td> {{$group->name}} </td>
-                                                <td> {{$node->level}} </td>
                                                 <td>
-                                                    <button type="button" class="btn btn-sm blue btn-outline" onclick="editNode('{{$node->id}}')">编辑</button>
-                                                    <button type="button" class="btn btn-sm red btn-outline" onclick="delNode('{{$node->id}}')">删除</button>
+                                                    @if($group->level == 1)
+                                                        <span class="label label-default">倔强青铜</span>
+                                                    @elseif ($group->level == 2)
+                                                        <span class="label label-primary">秩序白银</span>
+                                                    @elseif ($group->level == 3)
+                                                        <span class="label label-info">荣耀黄金</span>
+                                                    @elseif ($group->level == 4)
+                                                        <span class="label label-success">尊贵铂金</span>
+                                                    @elseif ($group->level == 5)
+                                                        <span class="label label-warning">永恒钻石</span>
+                                                    @elseif ($group->level == 6)
+                                                        <span class="label label-danger">至尊黑曜</span>
+                                                    @else
+                                                        <span class="label label-danger">最强王者</span>
+                                                    @endif
+                                                </td>
+                                                <td>
+                                                    <button type="button" class="btn btn-sm blue btn-outline" onclick="editGroup('{{$group->id}}')">编辑</button>
+                                                    <button type="button" class="btn btn-sm red btn-outline" onclick="delGroup('{{$group->id}}')">删除</button>
                                                 </td>
                                             </tr>
                                         @endforeach
@@ -104,8 +120,6 @@
 
         // 删除节点分组
         function delGroup(id) {
-            var _token = '{{csrf_token()}}';
-
             bootbox.confirm({
                 message: "确定删除节点?",
                 buttons: {
@@ -120,7 +134,7 @@
                 },
                 callback: function (result) {
                     if (result) {
-                        $.post("{{url('admin/delGroup')}}", {id:id, _token:_token}, function(ret){
+                        $.post("{{url('admin/delGroup')}}", {_token:'{{csrf_token()}}', id:id}, function(ret){
                             if (ret.status == 'success') {
                                 bootbox.alert(ret.message, function(){
                                     window.location.reload();

+ 26 - 1
resources/views/admin/system.blade.php

@@ -167,7 +167,19 @@
                                                         <label for="login_add_score" class="col-md-2 control-label">登录加积分</label>
                                                         <div class="col-md-6">
                                                             <input type="checkbox" class="make-switch" @if($login_add_score) checked @endif id="login_add_score" data-on-color="success" data-off-color="danger" data-on-text="启用" data-off-text="关闭">
-                                                            <span class="help-block"> 登录时将根据积分范围得到积分(24小时内) </span>
+                                                            <span class="help-block"> 登录时将根据积分范围得到积分 </span>
+                                                        </div>
+                                                    </div>
+                                                    <div class="form-group">
+                                                        <label for="login_add_score_range" class="col-md-2 control-label">时间间隔</label>
+                                                        <div class="col-md-2">
+                                                            <div class="input-group">
+                                                                <input class="form-control" type="text" name="login_add_score_range" value="{{$login_add_score_range}}" id="login_add_score_range" />
+                                                                <span class="input-group-btn">
+                                                                    <button class="btn btn-success" type="button" onclick="setLoginAddScoreRange()">修改</button>
+                                                                </span>
+                                                            </div>
+                                                            <span class="help-block"> 每隔多久登录才会加积分(单位分钟) </span>
                                                         </div>
                                                     </div>
                                                     <div class="form-group">
@@ -439,5 +451,18 @@
                 }
             });
         }
+
+        // 登录加积分的时间间隔
+        function setLoginAddScoreRange() {
+            var login_add_score_range = $("#login_add_score_range").val();
+
+            $.post("{{url('admin/setAddScoreRange')}}", {_token:'{{csrf_token()}}', value:login_add_score_range}, function (ret) {
+                if (ret.status == 'success') {
+                    bootbox.alert(ret.message, function() {
+                        window.location.reload();
+                    });
+                }
+            });
+        }
     </script>
 @endsection

+ 1 - 0
routes/web.php

@@ -45,6 +45,7 @@ Route::post('admin/setWebsiteName', 'AdminController@setWebsiteName'); // 设置
 Route::post('admin/setWebsiteUrl', 'AdminController@setWebsiteUrl'); // 设置网站地址
 Route::post('admin/setResetPasswordTimes', 'AdminController@setResetPasswordTimes'); // 设置重置密码次数
 Route::post('admin/setActiveTimes', 'AdminController@setActiveTimes'); // 设置激活账号次数
+Route::post('admin/setAddScoreRange', 'AdminController@setAddScoreRange'); // 设置登录加积分时间间隔
 Route::post('admin/setQrcode', 'AdminController@setQrcode'); // 设置充值二维码
 Route::get('makePasswd', 'AdminController@makePasswd'); // 获取随机密码
 Route::get('download', 'AdminController@download'); // 下载转换过的JSON配置

+ 6 - 3
sql/db.sql

@@ -26,6 +26,7 @@
 CREATE TABLE `ss_node` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `name` varchar(128) NOT NULL DEFAULT '' COMMENT '名称',
+  `group_id` int(11) NOT NULL DEFAULT '0' COMMENT '所属分组',
   `server` varchar(128) NOT NULL DEFAULT '' COMMENT '服务器地址',
   `method` varchar(32) NOT NULL DEFAULT 'aes-192-ctr' COMMENT '加密方式',
   `custom_method` varchar(30) NOT NULL DEFAULT 'aes-192-ctr' COMMENT '自定义加密方式',
@@ -102,13 +103,14 @@ CREATE TABLE `user` (
   `speed_limit_per_user` int(255) NOT NULL DEFAULT '204800' COMMENT '单用户限速,默认200M,单位KB',
   `wechat` varchar(30) DEFAULT '' COMMENT '微信',
   `qq` varchar(20) DEFAULT '' COMMENT 'QQ',
-  `usage` tinyint(4) NOT NULL DEFAULT '1' COMMENT '用途:1-手机、2-电脑、3-路由器、4-其他',
-  `pay_way` tinyint(4) NOT NULL DEFAULT '3' COMMENT '付费方式:1-月付、2-半年付、3-年付',
+  `usage` tinyint(4) NOT NULL DEFAULT '4' COMMENT '用途:1-手机、2-电脑、3-路由器、4-其他',
+  `pay_way` tinyint(4) NOT NULL DEFAULT '0' COMMENT '付费方式:0-免费、1-月付、2-半年付、3-年付',
   `balance` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '余额',
   `score` int(11) NOT NULL DEFAULT '0' COMMENT '积分',
   `enable_time` date DEFAULT NULL COMMENT '开通日期',
   `expire_time` date NOT NULL DEFAULT '2099-01-01' COMMENT '过期时间',
   `remark` text COMMENT '备注',
+  `level` tinyint(4) NOT NULL DEFAULT '1' COMMENT '等级:1-倔强青铜、2-秩序白银、3-荣耀黄金、4-尊贵铂金、5-永恒钻石、6-至尊黑曜、7-最强王者',
   `is_admin` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否管理员:0-否、1-是',
   `reg_ip` varchar(20) NOT NULL DEFAULT '127.0.0.1' COMMENT '注册IP',
   `last_login` int(11) NOT NULL DEFAULT '0' COMMENT '最后一次登录时间',
@@ -227,6 +229,7 @@ INSERT INTO `config` VALUES ('13', 'min_rand_score', 1);
 INSERT INTO `config` VALUES ('14', 'max_rand_score', 100);
 INSERT INTO `config` VALUES ('15', 'wechat_qrcode', '');
 INSERT INTO `config` VALUES ('16', 'alipay_qrcode', '');
+INSERT INTO `config` VALUES ('17', 'login_add_score_range', 1440);
 
 
 -- ----------------------------
@@ -281,7 +284,7 @@ CREATE TABLE `verify` (
 CREATE TABLE `ss_group` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '分组名称',
-  `level` tinyint(4) NOT NULL DEFAULT '1' COMMENT '分组级别',
+  `level` tinyint(4) NOT NULL DEFAULT '1' COMMENT '分组级别,对应账号级别',
   `created_at` datetime DEFAULT NULL,
   `updated_at` datetime DEFAULT NULL,
   PRIMARY KEY (`id`)