浏览代码

用户列表改为分页加载。删除【查找用户】功能。

CGDF 7 年之前
父节点
当前提交
6e447a6f1e

+ 1 - 0
README.md

@@ -73,6 +73,7 @@ Wiki已经启用,欢迎为此面板维护wiki
 - 财务报表
 - xcat一键update
 - 适配SSD
+- 用户列表分页加载
 
 [**CHEN**](https://github.com/ChenSee)
 

+ 115 - 0
app/Controllers/Admin/UserController.php

@@ -279,4 +279,119 @@ class UserController extends AdminController
         }
 		return $this->echoJson($response, $res);    
 	}
+
+	public function ajax_post($request, $response, $args)
+	{		
+        //得到排序的方式
+        $order = $request->getParam('order')[0]['dir'];
+        //得到排序字段的下标
+        $order_column = $request->getParam('order')[0]['column'];
+        //根据排序字段的下标得到排序字段
+        $order_field = $request->getParam('columns')[$order_column]['data'];
+        $limit_start = $request->getParam('start');
+        $limit_length = $request->getParam('length');
+        $search = $request->getParam('search')['value'];
+        
+		$users=array();
+		$count_filtered=0;
+
+        if ($search) {
+            $users = User::orderBy($order_field,$order)
+                    ->skip($limit_start)->limit($limit_length)
+                    ->where(
+                        function ($query) use ($search) {
+                            $query->where('id','LIKE',"%$search%")
+								->orwhere('user_name','LIKE',"%$search%")
+								->orwhere('email','LIKE',"%$search%")
+								->orwhere('im_value','LIKE',"%$search%")
+								->orwhere('port','LIKE',"%$search%");
+							}
+						)
+                    ->get();
+            $count_filtered = User::where(
+                        function ($query)use($search) {
+                            $query->where('id','LIKE',"%$search%")
+								->orwhere('user_name','LIKE',"%$search%")
+								->orwhere('email','LIKE',"%$search%")
+								->orwhere('im_value','LIKE',"%$search%")
+								->orwhere('port','LIKE',"%$search%");
+							}
+						)->count();
+		}
+		else{
+            $users = User::orderBy('id',$order)
+                ->skip($limit_start)->limit($limit_length)
+                ->get();
+            $count_filtered = User::count();
+        }
+		        
+		$data=array();
+		foreach ($users as $user) {
+			$tempdata=array();
+			$tempdata['op']='<a class="btn btn-brand" href="/admin/user/'.$user->id.'/edit">编辑</a>
+                    <a class="btn btn-brand-accent" id="delete" href="javascript:void(0);" onClick="delete_modal_show(\''.$user->id.'\')">删除</a>
+                    <a class="btn btn-brand" id="changetouser" href="javascript:void(0);" onClick="changetouser_modal_show(\''.$user->id.'\')">切换为该用户</a>';;
+			$tempdata['id']=$user->id;
+			$tempdata['user_name']=$user->user_name;
+			$tempdata['remark']=$user->remark;
+			$tempdata['email']=$user->email;
+			$tempdata['money']=$user->money;
+			$tempdata['im_value']=$user->im_value;			
+			switch($user->im_type) {
+				case 1:
+				$tempdata['im_type'] = '微信';
+				break;
+            case 2:
+				$tempdata['im_type'] = 'QQ';
+				break;
+            case 3:
+				$tempdata['im_type'] = 'Google+';
+				break;
+            default:
+				$tempdata['im_type'] = 'Telegram';
+				$tempdata['im_value'] = '<a href="https://telegram.me/'.$user->im_value.'">'.$user->im_value.'</a>';
+			}
+			$tempdata['node_group']=$user->node_group;
+			$tempdata['account_expire_in']=$user->expire_in;
+			$tempdata['class']=$user->class;
+			$tempdata['class_expire']=$user->class_expire;
+			$tempdata['passwd']=$user->passwd;
+			$tempdata['port']=$user->port;
+			$tempdata['method']=$user->method;
+			$tempdata['protocol']=$user->protocol;
+			$tempdata['obfs']=$user->obfs;
+			$tempdata['online_ip_count']=$user->online_ip_count();
+			$tempdata['last_ss_time']=$user->lastSsTime();
+			$tempdata['used_traffic']=Tools::flowToGB($user->u + $user->d);
+			$tempdata['enable_traffic']=Tools::flowToGB($user->transfer_enable);
+			$tempdata['last_checkin_time']=$user->lastCheckInTime();
+			$tempdata['today_traffic']=$tempdata['used_traffic']-$user->last_day_t;
+			$tempdata['is_enable']=$user->enable == 1 ? "可用" : "禁用";
+			$tempdata['reg_date']=$user->reg_date;
+			$tempdata['reg_location']=$user->reg_ip;
+			$tempdata['auto_reset_day']=$user->auto_reset_day;
+			$tempdata['auto_reset_bandwidth']=$user->auto_reset_bandwidth;			
+            $tempdata['ref_by']= $user->ref_by;
+			if ($user->ref_by == 0) {
+				$tempdata['ref_by_user_name'] = "系统邀请";
+			}
+			else {
+				$ref_user = User::find($user->ref_by);
+				if ($ref_user == null) {
+					$tempdata['ref_by_user_name'] = "邀请人已经被删除";
+				}
+				else {
+					$tempdata['ref_by_user_name'] = $ref_user->user_name;
+				}
+			}
+			array_push($data,$tempdata);
+		}         
+        $info = [
+           'draw'=> $request->getParam('draw'), // ajax请求次数,作为标识符
+           'recordsTotal'=>User::count(),
+           'recordsFiltered'=>$count_filtered,
+           'data'=>$data,
+        ];
+        return json_encode($info,true);
+	}
 }

+ 0 - 49
app/Controllers/AdminController.php

@@ -64,55 +64,6 @@ class AdminController extends UserController
         return $this->view()->assign('table_config', $table_config)->display('admin/invite.tpl');
     }
 	
-    public function find($request, $response, $args)
-    {
-		$id =  $request->getParam('id');
-		$view=0;
-		if ($id) {
-		$view=1;
-		$userf=User::where("id", "=", $id)->first();
-		}
-	    	else {
-		$view=0;
-		$userf=User::where("id", "=", 0)->first();
-		}
-		
-        return $this->view()->assign('view', $view)->assign('userf', $userf)->display('admin/find.tpl');
-    }
-    public function finduser($request, $response, $args)
-    {
-        $username = $request->getParam('username');
-        $email = $request->getParam('email');
-		$port = $request->getParam('port');
-		if (!$username && !$email && !$port)
-		{
-			 $res['ret'] = 0;
-             $res['msg'] = "没输入呀";
-             return $response->getBody()->write(json_encode($res));
-		}
-		if($username) {
-				$user=User::where("user_name", "=", $username)->first();
-		$id=$user->id;
-		}
-		if($email) {
-				$user=User::where("email", "=", $email)->first();
-		$id=$user->id;
-		}
-		if($port) {
-				$user=User::where("port", "=", $port)->first();
-		$id=$user->id;
-		}
-		if (!$id) {
-			 $res['ret'] = 0;
-             $res['msg'] = "查无此人";
-             return $response->getBody()->write(json_encode($res));
-		
-		}
-		$res['id']=$id;
-        $res['ret'] = 1;
-        $res['msg'] = "稍等一下,正在查询";
-        return $response->getBody()->write(json_encode($res));
-    }
     public function addInvite($request, $response, $args)
     {
         $num = $request->getParam('num');

+ 2 - 7
config/.config.php.example

@@ -153,7 +153,7 @@ $System_Config['enable_geetest_checkin']='false';	//启用签到验证码
 
 
 //支付系统设置----------------------------------------------------------------------------------------
-#取值 codepay,doiampay,paymentwall,zfbjk,spay,f2fpay,yftpay,none,f2fpay_codepay,chenAlipay
+#取值 none,codepay,doiampay,paymentwall,zfbjk,spay,f2fpay,yftpay,f2fpay_codepay,chenAlipay
 $System_Config['payment_system']='none';
 
 #codepay码支付
@@ -214,8 +214,8 @@ $System_Config['zfbjk_key']='';
 $System_Config['zfbjk_qrcodeurl']='';
 
 #Trimepay
-$System_Config['trimepay_secret']='';		//AppSecret
 $System_Config['trimepay_appid']='';		//AppID
+$System_Config['trimepay_secret']='';		//AppSecret
 
 
 //财务报告设置-------------------------------------------------------------------------------------------
@@ -245,11 +245,6 @@ $System_Config['v2ray_protocol']='HTTP/2 + TLS';	//V2Ray协议
 $System_Config['v2ray_alter_id']='32';
 $System_Config['v2ray_level']='0';
 
-
-//前端页面加载模式设置-------------------------------------------------------------------------------------
-$System_Config['load_mode_js']='local';	//JS加载方式,local为从panel本地加载,jsdelivr为从CDN加载
-
-
 //以下所有均为高级设置(一般用不上,不用改---------------------------------------------------------------------
 #杂项
 $System_Config['enable_login_bind_ip']='false';		//是否将登陆线程和IP绑定

+ 1 - 2
config/routes.php

@@ -288,14 +288,13 @@ $app->group('/admin', function () {
     $this->post('/code/ajax', 'App\Controllers\Admin\CodeController:ajax_code');
 
     // User Mange
-    $this->get('/find', 'App\Controllers\AdminController:find');
-    $this->post('/finduser', 'App\Controllers\AdminController:finduser');
     $this->get('/user', 'App\Controllers\Admin\UserController:index');
     $this->get('/user/{id}/edit', 'App\Controllers\Admin\UserController:edit');
     $this->put('/user/{id}', 'App\Controllers\Admin\UserController:update');
     $this->delete('/user', 'App\Controllers\Admin\UserController:delete');
     $this->post('/user/changetouser', 'App\Controllers\Admin\UserController:changetouser');
     $this->get('/user/ajax', 'App\Controllers\Admin\UserController:ajax');
+    $this->post('/user/ajax', 'App\Controllers\Admin\UserController:ajax_post');
 
 
     $this->get('/coupon', 'App\Controllers\AdminController:coupon');

+ 0 - 231
resources/views/material/admin/find.tpl

@@ -1,231 +0,0 @@
-{include file='admin/main.tpl'}
-
-
-
-
-
-
-
-	<main class="content">
-		<div class="content-header ui-content-header">
-			<div class="container">
-				<center><h2 class="content-heading">用户查询</h2></center>
-			</div>
-		</div>
-		<div class="container">
-				<section class="content-inner margin-top-no">
-
-
-
-					<div class="card">
-						<div class="card-main">
-							<div class="card-inner">
-
-
-								<p>快速查看用户状态</p>
-
-			
-
-							</div>
-						</div>
-					</div>
-
-
-
-					<div class="card">
-						<div class="card-main">
-							<div class="card-inner">
-								<div class="form-group form-group-label">
-									<label class="floating-label" for="username">用户名</label>
-									<input class="form-control" id="username" type="text">
-								</div>
-
-								<div class="form-group form-group-label">
-									<label class="floating-label" for="email">邮箱</label>
-									<input class="form-control" id="email" type="text">
-								</div>
-
-								<div class="form-group form-group-label">
-									<label class="floating-label" for="port">端口</label>
-									<input class="form-control" id="port" type="number">
-								</div>
-
-								
-
-			
-
-
-								<div class="form-group">
-									<div class="row">
-										<div class="col-md-10 col-md-push-1">
-											<button id="find" type="submit" class="btn btn-block btn-brand waves-attach waves-light">查找</button>
-										</div>
-									</div>
-								</div>
-							</div>
-						</div>
-					</div>
-{if $view==1}
-	                                        <div class="card">
-                                                <div class="card-main">
-                                                        <div class="card-inner">
-														<p>用户名:{$userf->user_name}</p>
-                                                        <p>邮箱:{$userf->email}</p>
-                                                        <p>端口:{$userf->port}</p>
-<hr>
-                                                        <p>等级:{$userf->class}</p>
-                                                        <p>账户过期时间:{$userf->expire_in}</p>   
-														<p>等级过期时间:{$userf->class_expire}</p>
-<hr>
-                                                        <p>总流量:{$userf->enableTraffic()}</p>
-                                                        <p>已用流量:{$userf->LastusedTraffic()}</p>
-                                                        <p>金钱:{$userf->money}</p>
-<hr>
-														<a class="btn btn-brand btn-flat waves-attach" href="/admin/user/{$userf->id}/edit" target="_blank" ><font style="color:green"><span class="icon">check</span>&nbsp;编辑</font></a>
-                                                        &nbsp;&nbsp;<a class="btn btn-brand btn-flat waves-attach" id="delete"  ><font style="color:red"><span class="icon">close</span>&nbsp;删除</font></a>
-
-                                                       
-                                               
-	
-							</div>
-						</div>
-						</div>
-
-				<div aria-hidden="true" class="modal modal-va-middle fade" id="delete_modal" role="dialog" tabindex="-1">
-					<div class="modal-dialog modal-xs">
-						<div class="modal-content">
-							<div class="modal-heading">
-								<a class="modal-close" data-dismiss="modal">×</a>
-								<h2 class="modal-title">确认要删除?</h2>
-							</div>
-							<div class="modal-inner">
-								<p>请您确认。</p>
-							</div>
-							<div class="modal-footer">
-								<p class="text-right"><button class="btn btn-flat btn-brand-accent waves-attach waves-effect" data-dismiss="modal" type="button">取消</button><button class="btn btn-flat btn-brand-accent waves-attach" data-dismiss="modal" id="delete_input" type="button">确定</button></p>
-							</div>
-						</div>
-					</div>
-				</div>
-{/if}
-					{include file='dialog.tpl'}
-	
-
-			</div>
-
-
-
-	</main>
-
-
-
-
-
-
-
-
-
-
-
-
-{include file='admin/footer.tpl'}
-
-
-
-
-
-<script>
-
-
-
-$(document).ready(function () {
-		
-
-		$("#find").click(function () {
-
-				
-
-	      $.ajax({
-		          type: "POST",
-		          url: "/admin/finduser",
-		          dataType: "json",
-		          data: {
-		          username: $("#username").val(),
-		          email: $("#email").val(),
-			  port: $("#port").val(),
-
-		          },
-		          success: function (data) {
-		              if (data.ret) {
-		                  $("#result").modal();
-		                  $("#msg").html(data.msg);
-		                  window.setTimeout(location.href='/admin/find?id='+data.id,1000);
-		              }else {
-                        	$("#result").modal();
-				$("#msg").html(data.msg);
-				}
-		              // window.location.reload();
-		          },
-		          error: function (jqXHR) {
-                            $("#result").modal();
-		            $("#msg").html("发生错误:" + jqXHR.status + data.msg);
-		          }
-	      })
-		})
-
-})
-
-
-</script>
-{if $view==1}
-<script>
-
-
-
-$(document).ready(function () {
-
-
-$("#delete").click(function () {
-
- $("#delete_modal").modal();
-
-})
-
-	function delete_id(){
-		$.ajax({
-			type:"DELETE",
-			url:"/admin/user",
-			dataType:"json",
-			data:{ 
-				id:{$userf->id}
-			},
-			success:function(data){
-				if(data.ret){
-					$("#result").modal();
-					$("#msg").html(data.msg);
-					window.setTimeout(location.href='/admin/find',3000);
-				}else{
-					$("#result").modal();
-					$("#msg").html(data.msg);
-				}
-			},
-			error:function(jqXHR){
-				$("#result").modal();
-				$("#msg").html(data.msg+"  发生错误了。");
-			}
-		});
-	}
-
-	$("#delete_input").click(function(){
-		delete_id();
-	});
-
-
-
-})
-</script>
-
-{/if}
-
-
-

+ 0 - 1
resources/views/material/admin/main.tpl

@@ -88,7 +88,6 @@
 
 						<a class="waves-attach" data-toggle="collapse" href="#ui_menu_user">用户</a>
 						<ul class="menu-collapse collapse in" id="ui_menu_user">
-						        <li><a href="/admin/find"><i class="icon icon-lg">search</i>&nbsp;查找用户</a></li>
 							<li><a href="/admin/user"><i class="icon icon-lg">supervisor_account</i>&nbsp;用户列表</a></li>
 							<li><a href="/admin/relay"><i class="icon icon-lg">compare_arrows</i>&nbsp;中转规则</a></li>
 							<li><a href="/admin/invite"><i class="icon icon-lg">loyalty</i>&nbsp;邀请与返利</a></li>

+ 1 - 1
resources/views/material/admin/node/create.tpl

@@ -139,7 +139,7 @@
 
 									<div class="form-group form-group-label">
 										<label class="floating-label" for="bandwidthlimit_resetday">节点流量上限清空日</label>
-										<input class="form-control" id="bandwidthlimit_resetday" type="text" value="0" name="bandwidthlimit_resetday">
+										<input class="form-control" id="bandwidthlimit_resetday" type="text" value="1" name="bandwidthlimit_resetday">
 									</div>
 
 									<div class="form-group form-group-label">

+ 42 - 29
resources/views/material/admin/user/index.tpl

@@ -91,11 +91,48 @@ function changetouser_modal_show(id) {
 
 $(document).ready(function(){
  	table_1 = $('#table_1').DataTable({
-			"stateSave": true,
+			stateSave: true,
+			serverSide: true,
+			ajax: {
+				url :"/admin/user/ajax",
+                type: "POST",
+			},
+			"columns": [
+				{ "data": "op" },
+				{ "data": "id" },
+				{ "data": "user_name" },
+				{ "data": "remark" },
+				{ "data": "email" },
+				{ "data": "money" },
+				{ "data": "im_type" },
+				{ "data": "im_value" },
+				{ "data": "node_group" },
+				{ "data": "account_expire_in" },
+				{ "data": "class" },
+				{ "data": "class_expire" },
+				{ "data": "passwd" },
+				{ "data": "port" },
+				{ "data": "method" },
+				{ "data": "protocol" },
+				{ "data": "obfs" },
+				{ "data": "online_ip_count" },
+				{ "data": "last_ss_time" },
+				{ "data": "used_traffic" },
+				{ "data": "enable_traffic" },
+				{ "data": "last_checkin_time" },
+				{ "data": "today_traffic" },
+				{ "data": "is_enable" },
+				{ "data": "reg_date" },
+				{ "data": "reg_location" },
+				{ "data": "auto_reset_day" },
+				{ "data": "auto_reset_bandwidth" },
+				{ "data": "ref_by" },
+				{ "data": "ref_by_user_name" }
+			],
 			"columnDefs": [
 				{
-						targets: [ '_all' ],
-						className: 'mdl-data-table__cell--non-numeric'
+					targets: [ '_all' ],
+					className: 'mdl-data-table__cell--non-numeric'
 				}
 			],
 			{include file='table/lang_chinese.tpl'}
@@ -153,30 +190,7 @@ $(document).ready(function(){
 		{
 			search();
 		}
-	});
-
-	$.ajaxSettings.async = false;
-	page = 1;
-	while (1) {
-			next = 1;
-			$.getJSON("user/ajax?page=" + page, function( data ) {
-					if (data.next == 0) {
-						next = 0;
-					}
-					for ( var i=0, ien=data.data.length ; i<ien ; i++ ) {
-						data.data[i][0] = '<a class="btn btn-brand" href="/admin/user/' + data.data[i][0] + '/edit">编辑</a>' +
-						'<a class="btn btn-brand-accent" id="delete" href="javascript:void(0);" onClick="delete_modal_show(\'' + data.data[i][0] + '\')">删除</a>'+
-						'<a class="btn btn-brand-accent" id="changetouser" href="javascript:void(0);" onClick="changetouser_modal_show(\'' + data.data[i][0] + '\')">切换为此用户</a>';
-					}
-					table_1.rows.add(data.data).draw();
-			});
-
-			if (next == 0) break;
-
-			page++;
-	}
-	$.ajaxSettings.async = true;
-	
+	});	
 	
 	function changetouser_id(){
 		$.ajax({
@@ -210,5 +224,4 @@ $(document).ready(function(){
 })
 
 
-</script>
-s
+</script>