Procházet zdrojové kódy

用途可以多选

bingo před 7 roky
rodič
revize
96db61f5d3

+ 4 - 0
app/Http/Controllers/AdminController.php

@@ -412,11 +412,15 @@ class AdminController extends Controller
             if ($user) {
                 $user->transfer_enable = flowToGB($user->transfer_enable);
 
+                // 处理标签
                 $label = [];
                 foreach ($user->label as $vo) {
                     $label[] = $vo->label_id;
                 }
                 $user->labels = $label;
+
+                // 处理用途
+                $user->usage = explode(',', $user->usage);
             }
 
             $view['user'] = $user;

+ 50 - 22
app/Http/Controllers/Api/LoginController.php

@@ -5,9 +5,11 @@ namespace App\Http\Controllers\Api;
 use App\Http\Controllers\Controller;
 use App\Http\Models\User;
 use App\Http\Models\UserSubscribe;
+use App\Http\Models\UserSubscribeLog;
 use Illuminate\Http\Request;
 use Response;
 use Cache;
+use DB;
 
 /**
  * 登录接口
@@ -27,8 +29,8 @@ class LoginController extends Controller
     // 登录返回订阅信息
     public function login(Request $request)
     {
-        $username = $request->get('username');
-        $password = $request->get('password');
+        $username = trim($request->get('username'));
+        $password = trim($request->get('password'));
         $cacheKey = 'request_times_' . md5($request->getClientIp());
 
         // 10分钟内请求失败15次,则封IP一小时
@@ -43,37 +45,63 @@ class LoginController extends Controller
         if (!$username || !$password) {
             Cache::increment($cacheKey);
 
-            return Response::json(['status' => 'fail', 'data' => [], 'message' => '账号密码不能为空']);
+            return Response::json(['status' => 'fail', 'data' => [], 'message' => '账号或密码错误']);
         }
 
-        $user = User::query()->where('username', trim($username))->where('password', md5($password))->where('status', '>=', 0)->first();
+        $user = User::query()->where('username', $username)->where('password', md5($password))->where('status', '>=', 0)->first();
         if (!$user) {
             Cache::increment($cacheKey);
 
             return Response::json(['status' => 'fail', 'data' => [], 'message' => '账号不存在或已被禁用']);
         }
 
-        // 如果生成过订阅链接则生成一个
-        $subscribe = UserSubscribe::query()->where('user_id', $user->id)->first();
-        if (!$subscribe) {
-            $code = $this->makeSubscribeCode();
+        DB::beginTransaction();
+        try {
+            // 如果未生成过订阅链接则生成一个
+            $subscribe = UserSubscribe::query()->where('user_id', $user->id)->first();
+            if (!$subscribe) {
+                $code = $this->makeSubscribeCode();
 
-            $obj = new UserSubscribe();
-            $obj->user_id = $user->id;
-            $obj->code = $code;
-            $obj->times = 0;
-            $obj->save();
-        } else {
-            $code = $subscribe->code;
-        }
+                $subscribe = new UserSubscribe();
+                $subscribe->user_id = $user->id;
+                $subscribe->code = $code;
+                $subscribe->times = 0;
+                $subscribe->save();
+            } else {
+                $code = $subscribe->code;
+            }
+
+            // 更新订阅链接访问次数
+            $subscribe->increment('times', 1);
+
+            // 记录每次请求
+            $this->log($subscribe->id, $request->getClientIp(), 'API访问');
+
+            // 处理用户信息
+            unset($user->password, $user->remember_token);
+            $data['user'] = $user;
 
-        // 用户信息
-        unset($user->password, $user->remember_token);
-        $data['user'] = $user;
+            // 订阅链接
+            $data['link'] = self::$config['subscribe_domain'] ? self::$config['subscribe_domain'] . '/s/' . $code : self::$config['website_url'] . '/s/' . $code;
 
-        // 订阅链接
-        $data['link'] = self::$config['subscribe_domain'] ? self::$config['subscribe_domain'] . '/s/' . $code : self::$config['website_url'] . '/s/' . $code;
+            DB::commit();
 
-        return Response::json(['status' => 'success', 'data' => $data, 'message' => '登录成功']);
+            return Response::json(['status' => 'success', 'data' => $data, 'message' => '登录成功']);
+        } catch (\Exception $e) {
+            DB::rollBack();
+
+            return Response::json(['status' => 'success', 'data' => [], 'message' => '登录失败']);
+        }
+    }
+
+    // 写入订阅访问日志
+    private function log($subscribeId, $ip, $headers)
+    {
+        $log = new UserSubscribeLog();
+        $log->sid = $subscribeId;
+        $log->request_ip = $ip;
+        $log->request_time = date('Y-m-d H:i:s');
+        $log->request_header = $headers;
+        $log->save();
     }
 }

+ 19 - 11
resources/views/admin/addUser.blade.php

@@ -40,23 +40,23 @@
                                                 </div>
                                             </div>
                                             <div class="form-group">
-                                                <label for="usage" class="col-md-3 control-label">用途</label>
+                                                <label 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="usage" value="1"> 手机
+                                                    <div class="mt-checkbox-inline">
+                                                        <label class="mt-checkbox">
+                                                            <input type="checkbox" name="usage" value="1"> 手机
                                                             <span></span>
                                                         </label>
-                                                        <label class="mt-radio">
-                                                            <input type="radio" name="usage" value="2"> 电脑
+                                                        <label class="mt-checkbox">
+                                                            <input type="checkbox" name="usage" value="2"> 电脑
                                                             <span></span>
                                                         </label>
-                                                        <label class="mt-radio">
-                                                            <input type="radio" name="usage" value="3"> 路由器
+                                                        <label class="mt-checkbox">
+                                                            <input type="checkbox" name="usage" value="3"> 路由器
                                                             <span></span>
                                                         </label>
-                                                        <label class="mt-radio">
-                                                            <input type="radio" name="usage" value="4" checked> 其他
+                                                        <label class="mt-checkbox">
+                                                            <input type="checkbox" name="usage" value="4" checked> 其他
                                                             <span></span>
                                                         </label>
                                                     </div>
@@ -325,7 +325,6 @@
             var _token = '{{csrf_token()}}';
             var username = $('#username').val();
             var password = $('#password').val();
-            var usage = $("input:radio[name='usage']:checked").val();
             var pay_way = $("input:radio[name='pay_way']:checked").val();
             var labels = $('#labels').val();
             var enable_time = $('#enable_time').val();
@@ -348,6 +347,15 @@
             var speed_limit_per_con = $('#speed_limit_per_con').val();
             var speed_limit_per_user = $('#speed_limit_per_user').val();
 
+            // 用途
+            var usage = '';
+            $.each($("input:checkbox[name='usage']"), function(){
+                if (this.checked) {
+                    usage += $(this).val() + ',';
+                }
+            });
+            usage = usage.substring(0, usage.length - 1);
+
             $.ajax({
                 type: "POST",
                 url: "{{url('admin/addUser')}}",

+ 19 - 11
resources/views/admin/editUser.blade.php

@@ -46,23 +46,23 @@
                                                 </div>
                                             </div>
                                             <div class="form-group">
-                                                <label for="usage" class="col-md-3 control-label">用途</label>
+                                                <label 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="usage" value="1" {{$user->usage == 1 ? 'checked' : ''}}> 手机
+                                                    <div class="mt-checkbox-inline">
+                                                        <label class="mt-checkbox">
+                                                            <input type="checkbox" name="usage" value="1" {{in_array(1, $user->usage) ? 'checked' : ''}}> 手机
                                                             <span></span>
                                                         </label>
-                                                        <label class="mt-radio">
-                                                            <input type="radio" name="usage" value="2" {{$user->usage == 2 ? 'checked' : ''}}> 电脑
+                                                        <label class="mt-checkbox">
+                                                            <input type="checkbox" name="usage" value="2" {{in_array(2, $user->usage) ? 'checked' : ''}}> 电脑
                                                             <span></span>
                                                         </label>
-                                                        <label class="mt-radio">
-                                                            <input type="radio" name="usage" value="3" {{$user->usage == 3 ? 'checked' : ''}}> 路由器
+                                                        <label class="mt-checkbox">
+                                                            <input type="checkbox" name="usage" value="3" {{in_array(3, $user->usage) ? 'checked' : ''}}> 路由器
                                                             <span></span>
                                                         </label>
-                                                        <label class="mt-radio">
-                                                            <input type="radio" name="usage" value="4" {{$user->usage == 4 ? 'checked' : ''}}> 其他
+                                                        <label class="mt-checkbox">
+                                                            <input type="checkbox" name="usage" value="4" {{in_array(4, $user->usage) ? 'checked' : ''}}> 其他
                                                             <span></span>
                                                         </label>
                                                     </div>
@@ -413,7 +413,6 @@
             var id = '{{Request::get('id')}}';
             var username = $('#username').val();
             var password = $('#password').val();
-            var usage = $("input:radio[name='usage']:checked").val();
             var pay_way = $("input:radio[name='pay_way']:checked").val();
             var balance = $('#balance').val();
             var score = $('#score').val();
@@ -439,6 +438,15 @@
             var speed_limit_per_con = $('#speed_limit_per_con').val();
             var speed_limit_per_user = $('#speed_limit_per_user').val();
 
+            // 用途
+            var usage = '';
+            $.each($("input:checkbox[name='usage']"), function(){
+                if (this.checked) {
+                    usage += $(this).val() + ',';
+                }
+            });
+            usage = usage.substring(0, usage.length - 1);
+
             $.ajax({
                 type: "POST",
                 url: "{{url('admin/editUser')}}",

+ 1 - 1
sql/db.sql

@@ -123,7 +123,7 @@ CREATE TABLE `user` (
   `gender` tinyint(4) NOT NULL DEFAULT '1' COMMENT '性别:0-女、1-男',
   `wechat` varchar(30) DEFAULT '' COMMENT '微信',
   `qq` varchar(20) DEFAULT '' COMMENT 'QQ',
-  `usage` tinyint(4) NOT NULL DEFAULT '4' COMMENT '用途:1-手机、2-电脑、3-路由器、4-其他',
+  `usage` VARCHAR(10) NOT NULL DEFAULT '4' COMMENT '用途:1-手机、2-电脑、3-路由器、4-其他',
   `pay_way` tinyint(4) NOT NULL DEFAULT '0' COMMENT '付费方式:0-免费、1-月付、2-半年付、3-年付',
   `balance` int(11) NOT NULL DEFAULT '0' COMMENT '余额,单位分',
   `score` int(11) NOT NULL DEFAULT '0' COMMENT '积分',

+ 3 - 0
sql/update/20180705.sql

@@ -0,0 +1,3 @@
+-- 用途可以多选
+ALTER TABLE `user`
+	CHANGE COLUMN `usage` `usage` VARCHAR(10) NOT NULL DEFAULT '4' COMMENT '用途:1-手机、2-电脑、3-路由器、4-其他' AFTER `qq`;