This commit is contained in:
tsf 2024-03-29 18:34:01 +08:00
parent b6b094ce92
commit 623943606e
11 changed files with 997 additions and 154 deletions

View File

@ -1,6 +1,6 @@
<?php <?php
namespace app\test\controller; namespace app\admin\controller;
use think\Controller; use think\Controller;
use think\Db; use think\Db;
@ -8,7 +8,7 @@ use app\bj\controller\Common;
use think\Log; use think\Log;
use \think\Validate; use \think\Validate;
class Text extends Controller{ class Card extends Controller{
public function demo(){ public function demo(){
echo '你好'; echo '你好';
} }

View File

@ -1,15 +0,0 @@
<?php
namespace app\test\controller;
use think\Controller;
use think\Db;
use app\bj\controller\Common;
use think\Log;
use \think\Validate;
class Text extends Controller{
public function demo(){
echo '你好';
}
}

View File

@ -1,6 +1,6 @@
<?php <?php
namespace app\test\controller; namespace app\admin\controller;
use think\Controller; use think\Controller;
use think\Db; use think\Db;

View File

@ -0,0 +1,153 @@
<?php
namespace app\admin\controller;
use think\Controller;
use think\Db;
use app\bj\controller\Common;
use think\Log;
use \think\Validate;
class Member extends Controller{
################################################################账号################################################################
################################################################账号################################################################
################################################################账号################################################################
// 用户账号列表
public function member_list($page = 1){
$data = input();
$pd = true;
$parameter = [];
if(array_key_exists('tt', $data)){
$page = $data['page_num'];
unset($data['page_num']);
unset($data['tt']);
$pd = false;
if($data['status_num'] === "0" || $data['status_num'] === "1"){
$parameter['is_del'] = $data['status_num'];
}
if($data['tel']){
$parameter['tel'] = $data['tel'];
}
if($data['email']){
$parameter['email'] = $data['email'];
}
if($data['s_time']){
$parameter['create_time'] = ['>=',$data['s_time']];
}
if($data['e_time']){
$parameter['create_time'] = ['<=',$data['e_time']];
}
}
$num = Db::table('app_account_number')->where($parameter)->count();
$member_list = Db::table('app_account_number')->where($parameter)->page("$page,10")->order('is_del,id desc')->select();
if(!$pd){
$result['num'] = $num;
$result['data'] = $member_list;
return $this->msg(0,'success',$result);
}
$this->assign([
'result' => $member_list,
'num' => $num,
]);
return $this->fetch();
}
// 用户账号停用
public function member_is_del(){
$data = input();
if(is_array($data['id'])){
$data['id'] = implode(',',$data['id']);
$result = Db::table('app_account_number')->where("id in (".$data['id'].")")->update(['is_del'=>$data['is_del']]);
}else{
$result = Db::table('app_account_number')->where(['id'=>$data['id']])->update(['is_del'=>$data['is_del']]);
}
if($result){
return $this->msg(0,'success');
}else{
return $this->msg(10001,'success');
}
}
################################################################角色################################################################
################################################################角色################################################################
################################################################角色################################################################
// 角色列表
public function user_list($page = 1){
$data = input();
$pd = true;
$parameter = [];
if(array_key_exists('tt', $data)){
$status = ['0', '1', '2'];
$page = $data['page_num'];
unset($data['page_num']);
unset($data['tt']);
$pd = false;
if(in_array($data['status_num'], $status)){
$parameter['is_del'] = $data['status_num'];
}
if($data['aan_id']){
$parameter['aan_id'] = $data['aan_id'];
}
if($data['nickname']){
$parameter['nickname'] = $data['nickname'];
}
if(in_array($data['gender'], $status)){
$parameter['gender'] = $data['gender'];
}
// if($data['s_time']){
// $parameter['create_time'] = ['>=',$data['s_time']];
// }
// if($data['e_time']){
// $parameter['create_time'] = ['<=',$data['e_time']];
// }
}
// dump($parameter);
// die;
$num = Db::table('app_user_data')->where($parameter)->count();
$member_list = Db::table('app_user_data')->where($parameter)->page("$page,10")->order('is_del,id desc')->select();
if(!$pd){
$result['num'] = $num;
$result['data'] = $member_list;
return $this->msg(0,'success',$result);
}
$this->assign([
'result' => $member_list,
'num' => $num,
]);
return $this->fetch();
}
// 角色停用
public function user_is_del(){
$data = input();
if(is_array($data['id'])){
// dump($data['id']);
$data['id'] = implode(',',$data['id']);
// dump($data['id']);
// die;
$result = Db::table('app_user_data')->where("id in (".$data['id'].")")->update(['is_del'=>$data['is_del']]);
}else{
$result = Db::table('app_user_data')->where(['id'=>$data['id']])->update(['is_del'=>$data['is_del']]);
}
if($result){
return $this->msg(0,'success');
}else{
return $this->msg(10001,'success');
}
}
################################################################other################################################################
################################################################other################################################################
################################################################other################################################################
public function msg($code,$msg='',$data=[]){
return json(['code'=>$code,'msg'=>$msg,'data'=>$data]);
}
}

View File

@ -12,11 +12,6 @@
<!-- <link rel="stylesheet" href="./css/theme5.css"> --> <!-- <link rel="stylesheet" href="./css/theme5.css"> -->
<script src="/x_admin/lib/layui/layui.js" charset="utf-8"></script> <script src="/x_admin/lib/layui/layui.js" charset="utf-8"></script>
<script type="text/javascript" src="/x_admin/js/xadmin.js"></script> <script type="text/javascript" src="/x_admin/js/xadmin.js"></script>
<!-- 让IE8/9支持媒体查询从而兼容栅格 -->
<!--[if lt IE 9]>
<script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
<script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
<script> <script>
// 是否开启刷新记忆tab功能 // 是否开启刷新记忆tab功能
// var is_remember = false; // var is_remember = false;
@ -30,44 +25,18 @@
<div class="left_open"> <div class="left_open">
<a><i title="展开左侧栏" class="iconfont">&#xe699;</i></a> <a><i title="展开左侧栏" class="iconfont">&#xe699;</i></a>
</div> </div>
<ul class="layui-nav left fast-add" lay-filter="">
<li class="layui-nav-item">
<a href="javascript:;">+新增</a>
<dl class="layui-nav-child">
<!-- 二级菜单 -->
<dd>
<a onclick="xadmin.open('最大化','http://www.baidu.com','','',true)">
<i class="iconfont">&#xe6a2;</i>弹出最大化</a></dd>
<dd>
<a onclick="xadmin.open('弹出自动宽高','http://www.baidu.com')">
<i class="iconfont">&#xe6a8;</i>弹出自动宽高</a></dd>
<dd>
<a onclick="xadmin.open('弹出指定宽高','http://www.baidu.com',500,300)">
<i class="iconfont">&#xe6a8;</i>弹出指定宽高</a></dd>
<dd>
<a onclick="xadmin.add_tab('在tab打开','member-list.html')">
<i class="iconfont">&#xe6b8;</i>在tab打开</a></dd>
<dd>
<a onclick="xadmin.add_tab('在tab打开刷新','member-del.html',true)">
<i class="iconfont">&#xe6b8;</i>在tab打开刷新</a></dd>
</dl>
</li>
</ul>
<ul class="layui-nav right" lay-filter=""> <ul class="layui-nav right" lay-filter="">
<li class="layui-nav-item"> <li class="layui-nav-item">
<a href="javascript:;">admin</a> <a href="javascript:;">admin</a>
<dl class="layui-nav-child"> <dl class="layui-nav-child">
<!-- 二级菜单 --> <!-- 二级菜单 -->
<dd>
<a onclick="xadmin.open('个人信息','http://www.baidu.com')">个人信息</a></dd>
<dd> <dd>
<a onclick="xadmin.open('切换帐号','http://www.baidu.com')">切换帐号</a></dd> <a onclick="xadmin.open('切换帐号','http://www.baidu.com')">切换帐号</a></dd>
<dd> <dd>
<a href="./login.html">退出</a></dd> <a href="./login.html">退出</a></dd>
</dl> </dl>
</li> </li>
<li class="layui-nav-item to-index">
<a href="/">前台首页</a></li>
</ul> </ul>
</div> </div>
<!-- 顶部结束 --> <!-- 顶部结束 -->
@ -78,29 +47,24 @@
<ul id="nav"> <ul id="nav">
<li> <li>
<a href="javascript:;"> <a href="javascript:;">
<i class="iconfont left-nav-li" lay-tips="会员管理">&#xe6b8;</i> <i class="iconfont left-nav-li" lay-tips="APP账号角色管理">&#xe6b8;</i>
<cite>会员管理</cite> <cite>APP账号角色管理</cite>
<i class="iconfont nav_right">&#xe697;</i></a> <i class="iconfont nav_right">&#xe697;</i></a>
<ul class="sub-menu"> <ul class="sub-menu">
<li> <li>
<a onclick="xadmin.add_tab('统计页面','/welcome')"> <a onclick="xadmin.add_tab('APP账号数据列表','/admin/member/member_list')">
<i class="iconfont">&#xe6a7;</i> <i class="iconfont">&#xe6a7;</i>
<cite>统计页面</cite></a> <cite>APP账号数据列表</cite></a>
</li> </li>
<li> <li>
<a onclick="xadmin.add_tab('会员列表(静态表格)','member-list.html')"> <a onclick="xadmin.add_tab('APP角色数据列表','/admin/member/user_list',true)">
<i class="iconfont">&#xe6a7;</i> <i class="iconfont">&#xe6a7;</i>
<cite>会员列表(静态表格)</cite></a> <cite>APP角色数据列表</cite></a>
</li> </li>
<li> <!-- <li>
<a onclick="xadmin.add_tab('会员列表(动态表格)','member-list1.html',true)">
<i class="iconfont">&#xe6a7;</i>
<cite>会员列表(动态表格)</cite></a>
</li>
<li>
<a onclick="xadmin.add_tab('会员删除','member-del.html')"> <a onclick="xadmin.add_tab('会员删除','member-del.html')">
<i class="iconfont">&#xe6a7;</i> <i class="iconfont">&#xe6a7;</i>
<cite>会员删除</cite></a> <cite>app角色数据列表</cite></a>
</li> </li>
<li> <li>
<a href="javascript:;"> <a href="javascript:;">
@ -119,13 +83,31 @@
<cite>等级管理</cite></a> <cite>等级管理</cite></a>
</li> </li>
</ul> </ul>
</li> -->
</ul>
</li>
<li>
<a href="javascript:;">
<i class="iconfont left-nav-li" lay-tips="卡片管理">&#xe723;</i>
<cite>卡片管理</cite>
<i class="iconfont nav_right">&#xe697;</i></a>
<ul class="sub-menu">
<li>
<a onclick="xadmin.add_tab('APP用户自建卡片','order-list.html')">
<i class="iconfont">&#xe6a7;</i>
<cite>APP用户自建卡片</cite></a>
</li>
<li>
<a onclick="xadmin.add_tab('系统默认卡片','order-list1.html')">
<i class="iconfont">&#xe6a7;</i>
<cite>系统默认卡片</cite></a>
</li> </li>
</ul> </ul>
</li> </li>
<li> <li>
<a href="javascript:;"> <a href="javascript:;">
<i class="iconfont left-nav-li" lay-tips="订单管理">&#xe723;</i> <i class="iconfont left-nav-li" lay-tips="订单管理">&#xe723;</i>
<cite>订单管理</cite> <cite>设备管理</cite>
<i class="iconfont nav_right">&#xe697;</i></a> <i class="iconfont nav_right">&#xe697;</i></a>
<ul class="sub-menu"> <ul class="sub-menu">
<li> <li>
@ -355,13 +337,6 @@
<style id="theme_style"></style> <style id="theme_style"></style>
<!-- 右侧主体结束 --> <!-- 右侧主体结束 -->
<!-- 中部结束 --> <!-- 中部结束 -->
<script>//
var _hmt = _hmt || []; (function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?b393d153aeb26b46e9431fabaf0f6190";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();</script>
</body> </body>
</html> </html>

View File

@ -215,14 +215,5 @@
// 使用刚指定的配置项和数据显示图表。 // 使用刚指定的配置项和数据显示图表。
myChart.setOption(option); myChart.setOption(option);
</script> </script>
<script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?b393d153aeb26b46e9431fabaf0f6190";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
</body> </body>
</html> </html>

View File

@ -0,0 +1,359 @@
<!DOCTYPE html>
<html class="x-admin-sm">
<head>
<meta charset="UTF-8">
<title>欢迎页面-X-admin2.2</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
<link rel="stylesheet" href="/x_admin/css/font.css">
<link rel="stylesheet" href="/x_admin/css/xadmin.css">
<script src="/x_admin/lib/layui/layui.js" charset="utf-8"></script>
<script type="text/javascript" src="/x_admin/js/xadmin.js"></script>
<style>
/* th{
min-width:30px;
} */
</style>
</head>
<body>
<div class="x-nav">
<span class="layui-breadcrumb">
<a href="">首页</a>
<a href="">演示</a>
<a>
<cite>导航元素</cite></a>
</span>
<a class="layui-btn layui-btn-small" style="line-height:1.6em;margin-top:3px;float:right" onclick="location.reload()" title="刷新">
<i class="layui-icon layui-icon-refresh" style="line-height:30px"></i></a>
</div>
<div class="layui-fluid">
<div class="layui-row layui-col-space15">
<div class="layui-col-md12">
<div class="layui-card">
<div class="layui-card-body ">
<form class="layui-form layui-col-space5">
<div class="layui-inline layui-show-xs-block">
<input class="layui-input" autocomplete="off" placeholder="开始日" name="start" id="s_time">
</div>
<div class="layui-inline layui-show-xs-block">
<input class="layui-input" autocomplete="off" placeholder="截止日" name="end" id="e_time">
</div>
<div class="layui-inline layui-show-xs-block">
<input type="text" name="username" placeholder="请输入用户手机" autocomplete="off" class="layui-input" id="tel">
</div>
<div class="layui-inline layui-show-xs-block">
<input type="text" name="username" placeholder="请输入用户邮箱" autocomplete="off" class="layui-input" id="email">
</div>
<div class="layui-input-inline layui-show-xs-block">
<select name="contrller" id="status_num">
<option value="">状态</option>
<option value="0">启用</option>
<option value="1">停用</option>
</select>
</div>
<div class="layui-inline layui-show-xs-block">
<div class="layui-btn" lay-submit="" lay-filter="sreach" onclick="find('y')"><i class="layui-icon">&#xe615;</i></div>
</div>
</form>
</div>
<div class="layui-card-header">
<button class="layui-btn layui-btn-danger" onclick="delAll()"><i class="layui-icon"></i>批量停用</button>
<!-- <button class="layui-btn" onclick="xadmin.open('添加用户','./member-add.html',600,400)"><i class="layui-icon"></i>添加</button> -->
</div>
<div class="layui-card-body layui-table-body layui-table-main">
<table class="layui-table layui-form">
<thead>
<tr>
<th><input type="checkbox" lay-filter="checkall" name="" lay-skin="primary"></th>
<th>ID</th>
<th>唯一token</th>
<th>手机</th>
<th>邮箱</th>
<th>创建时间</th>
<th>状态</th>
<!-- <th>操作</th></tr> -->
</thead>
<tbody id='content'>
{volist name="result" id="vo"}
<tr>
<td><input type="checkbox" name="id" value="{$vo.id}" lay-skin="primary"></td>
<td>{$vo.id}</td>
<td>{$vo.token}</td>
<td>{$vo.tel}</td>
<td>{$vo.email}</td>
<td>{$vo.create_time}</td>
<td class="td-status">
{if condition="$vo.is_del == 1"}
<span onclick="member_stop(this,'{$vo.id}')" class="layui-btn layui-btn-normal layui-btn-mini layui-btn-disabled" title="停用">已停用</span>
{else /}
<span onclick="member_stop(this,'{$vo.id}')" class="layui-btn layui-btn-normal layui-btn-mini" title="启用">已启用</span>
{/if}
</td>
<!-- <td class="td-manage">
<span class="layui-btn layui-btn-normal layui-btn-mini" title="启用">详细</span>
</td> -->
</tr>
{/volist}
</tbody>
</table>
</div>
<div class="layui-card-body ">
<div id="page" style="text-align: center;">
</div>
</div>
<!-- <div class="layui-card-body ">
<div class="page">
<div>
<a class="prev" href="">&lt;&lt;</a>
<a class="num" href="">1</a>
<span class="current">2</span>
<a class="num" href="">3</a>
<a class="num" href="">489</a>
<a class="next" href="">&gt;&gt;</a>
</div>
</div>
</div> -->
</div>
</div>
</div>
</div>
</body>
<script>
var form
layui.use(['laydate','form'], function(){
var laydate = layui.laydate;
form = layui.form;
// 监听全选
form.on('checkbox(checkall)', function(data){
if(data.elem.checked){
$('tbody input').prop('checked',true);
}else{
$('tbody input').prop('checked',false);
}
form.render('checkbox');
});
//执行一个laydate实例
laydate.render({
elem: '#s_time' //指定元素
});
//执行一个laydate实例
laydate.render({
elem: '#e_time' //指定元素
});
});
var page_num;
var laypage;
var all_page = "{$num}";
layui.use('laypage', function () {
laypage = layui.laypage;
//执行一个laypage实例
laypage.render({
elem: 'page',
count: all_page, //数据总数,从服务端得到
limit: 10,
groups:10,
jump: function (obj, first) {
//首次不执行
if (!first) {
//obj包含了当前分页的所有参数比如
console.log(obj.curr); //得到当前页,以便向服务端请求对应页的数据。
console.log(obj.limit); //得到每页显示的条数
page_num = obj.curr;
find("n")
}
}
});
});
/*用户-停用*/
function member_stop(obj,id){
// return
var title = '',is_del,num
if($(obj).attr('title')=='启用'){
title = '停用'
is_del = 1
num = 5
}else{
title = '启用'
is_del = 0
num = 6
}
// console.log('点击时'+$(obj).attr('title')+'====='+id+'===传到后台是否删除:'+is_del)
layer.confirm('确认要'+ title +'吗?',function(index){
load()
$.ajax({
url:"member_is_del", //请求的url地址
dataType:"json", //返回格式为json
async:true,//请求是否异步默认为异步这也是ajax重要特性
data:{"id":id,'is_del':is_del}, //参数值
type:"POST", //请求方式
success:function(req){
c_load()
//请求成功时处理
if(req['code'] == 0){
//发异步把用户状态进行更改
$(obj).attr('title',title)
if(is_del == 1){
$(obj).parents("tr").find(".td-status").find('span').addClass('layui-btn-disabled').html('已'+ title);
}else{
$(obj).parents("tr").find(".td-status").find('span').removeClass('layui-btn-disabled').html('已'+ title);
}
layer.msg('已停用!',{icon: num});
}else{
layer.msg('操作失败!',{icon: 5});
}
},
error:function(){
//请求出错处理
}});
});
}
function delAll (argument) {
// layer.msg('停用成功', {icon: 2});
// return
var ids = [];
// 获取选中的id
$('tbody input').each(function(index, el) {
if($(this).prop('checked')){
ids.push($(this).val())
}
});
if(ids.length <= 0){
return
}
console.log(ids);
layer.confirm('确认要停用吗ID为'+ids.toString(),function(index){
//捉到所有被选中的,发异步进行删除
$.ajax({
url:"member_is_del", //请求的url地址
dataType:"json", //返回格式为json
async:true,//请求是否异步默认为异步这也是ajax重要特性
data:{"id":ids,'is_del':1}, //参数值
type:"POST", //请求方式
success:function(req){
c_load()
//请求成功时处理
if(req['code'] == 0){
//发异步把用户状态进行更改
layer.msg('停用成功', {icon: 1});
$(".layui-form-checked").not('.header').parents('tr').find(".td-status").find('span').addClass('layui-btn-disabled').html('已停用');
}else{
layer.msg('操作失败!',{icon: 2});
}
},
error:function(){
//请求出错处理
}});
});
}
function find(pd) {
if(!page_num || pd == 'y'){
page_num = 1;
}
page({
"status_num":$('#status_num').val(),
"tel":$('#tel').val(),
"email":$('#email').val(),
"s_time":$('#s_time').val(),
"e_time":$('#e_time').val(),
"page_num":page_num,
"tt":1},pd);
}
function page(data,pd) {
console.log(data)
load()
$.ajax({
url: "member_list", //请求的url地址s
dataType: "json", //返回格式为json
async: true,//请求是否异步默认为异步这也是ajax重要特性
data: data, //参数值
type: "POST", //请求方式
success: function (req) {
console.log(req)
c_load();
if (req['code'] == 0) {
var str,str_s,str_c,str_all="";
for (let i = 0; i < req['data']['data'].length; i++) {
if(req['data']['data'][i]['is_del'] == 1){
str = '<span onclick="member_stop(this,\''+req['data']['data'][i]['id']+'\')" class="layui-btn layui-btn-normal layui-btn-mini layui-btn-disabled" title="停用">已停用</span>'
}else{
str = '<span onclick="member_stop(this,\''+ req['data']['data'][i]['id'] +'\')" class="layui-btn layui-btn-normal layui-btn-mini" title="启用">已启用</span>'
}
str_c = "<tr>"+
'<td><input type="checkbox" name="id" value="'+req['data']['data'][i]['id']+'" lay-skin="primary"></td>'+
'<td>'+req['data']['data'][i]['id']+'</td>'+
'<td>'+req['data']['data'][i]['token']+'</td>'+
'<td>'+req['data']['data'][i]['tel']+'</td>'+
'<td>'+req['data']['data'][i]['email']+'</td>'+
'<td>'+req['data']['data'][i]['create_time']+'</td>'+
'<td class="td-status">'+
str+
'</td>'
'</tr>'
str_all = str_all+str_c;
}
$('#content').html(str_all);
form.render();
if(pd == 'y'){
$("#page").html("")
laypage.render({
elem: 'page',
count: req['data']['num'], //数据总数,从服务端得到
limit: 10,
groups:10,
jump: function (obj, first) {
//首次不执行
if (!first) {
//obj包含了当前分页的所有参数比如
console.log(obj.curr); //得到当前页,以便向服务端请求对应页的数据。
console.log(obj.limit); //得到每页显示的条数
page_num = obj.curr;
// page({"page":page_num,"tt":1});
find("n")
}
}
});
}
} else {
layer.msg(req['msg'])
}
},
error: function () {
//请求出错处理
}
});
}
//加载提示开启
function load() {
var index = layer.load(1, {
shade: [0.1, '#fff'] //0.1透明度的白色背景
});
}
// 关闭加载提示
function c_load() {
layer.close(layer.index)
}
</script>
</html>

View File

@ -0,0 +1,372 @@
<!DOCTYPE html>
<html class="x-admin-sm">
<head>
<meta charset="UTF-8">
<title>欢迎页面-X-admin2.2</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
<link rel="stylesheet" href="/x_admin/css/font.css">
<link rel="stylesheet" href="/x_admin/css/xadmin.css">
<script src="/x_admin/lib/layui/layui.js" charset="utf-8"></script>
<script type="text/javascript" src="/x_admin/js/xadmin.js"></script>
<style>
/* th{
min-width:30px;
} */
</style>
</head>
<body>
<div class="x-nav">
<span class="layui-breadcrumb">
<a href="">首页</a>
<a href="">演示</a>
<a>
<cite>导航元素</cite></a>
</span>
<a class="layui-btn layui-btn-small" style="line-height:1.6em;margin-top:3px;float:right" onclick="location.reload()" title="刷新">
<i class="layui-icon layui-icon-refresh" style="line-height:30px"></i></a>
</div>
<div class="layui-fluid">
<div class="layui-row layui-col-space15">
<div class="layui-col-md12">
<div class="layui-card">
<div class="layui-card-body ">
<form class="layui-form layui-col-space5">
<!-- <div class="layui-inline layui-show-xs-block">
<input class="layui-input" autocomplete="off" placeholder="开始日" name="start" id="s_time">
</div>
<div class="layui-inline layui-show-xs-block">
<input class="layui-input" autocomplete="off" placeholder="截止日" name="end" id="e_time">
</div> -->
<div class="layui-inline layui-show-xs-block">
<input type="text" name="username" placeholder="请输入Aan_ID" autocomplete="off" class="layui-input" id="aan_id">
</div>
<div class="layui-inline layui-show-xs-block">
<input type="text" name="username" placeholder="请输入昵称" autocomplete="off" class="layui-input" id="nickname">
</div>
<div class="layui-input-inline layui-show-xs-block">
<select name="contrller" id="gender">
<option value="">请选择性别</option>
<option value="1"></option>
<option value="2"></option>
<option value="0">未知</option>
</select>
</div>
<div class="layui-input-inline layui-show-xs-block">
<select name="contrller" id="status_num">
<option value="">状态</option>
<option value="0">启用</option>
<option value="1">停用</option>
</select>
</div>
<div class="layui-inline layui-show-xs-block">
<div class="layui-btn" lay-submit="" lay-filter="sreach" onclick="find('y')"><i class="layui-icon">&#xe615;</i></div>
</div>
</form>
</div>
<div class="layui-card-header">
<button class="layui-btn layui-btn-danger" onclick="delAll()"><i class="layui-icon"></i>批量停用</button>
<!-- <button class="layui-btn" onclick="xadmin.open('添加用户','./member-add.html',600,400)"><i class="layui-icon"></i>添加</button> -->
</div>
<div class="layui-card-body layui-table-body layui-table-main">
<table class="layui-table layui-form">
<thead>
<tr>
<th><input type="checkbox" lay-filter="checkall" name="" lay-skin="primary"></th>
<th>ID</th>
<th>Aan_ID</th>
<th>昵称</th>
<th>生日</th>
<th>性别</th>
<th>创建时间</th>
<th>最后修改时间</th>
<th>状态</th>
<!-- <th>操作</th></tr> -->
</thead>
<tbody id='content'>
{volist name="result" id="vo"}
<tr>
<td><input type="checkbox" name="id" value="{$vo.id}" lay-skin="primary"></td>
<td>{$vo.id}</td>
<td>{$vo.aan_id}</td>
<td>{$vo.nickname}</td>
<td>{$vo.birthday}</td>
{if condition="$vo.gender == 1"}
<td></td>
{elseif condition="$vo.gender == 2"/}
<td></td>
{else /}
<td>未知</td>
{/if}
<td>{$vo.create_time}</td>
<td>{$vo.last_update_time}</td>
<td class="td-status">
{if condition="$vo.is_del == 1"}
<span onclick="user_stop(this,'{$vo.id}')" class="layui-btn layui-btn-normal layui-btn-mini layui-btn-disabled" title="停用">已停用</span>
{else /}
<span onclick="user_stop(this,'{$vo.id}')" class="layui-btn layui-btn-normal layui-btn-mini" title="启用">已启用</span>
{/if}
</td>
</tr>
{/volist}
</tbody>
</table>
</div>
<div class="layui-card-body ">
<div id="page" style="text-align: center;">
</div>
</div>
</div>
</div>
</div>
</div>
</body>
<script>
var form
layui.use(['laydate','form'], function(){
var laydate = layui.laydate;
form = layui.form;
// 监听全选
form.on('checkbox(checkall)', function(data){
if(data.elem.checked){
$('tbody input').prop('checked',true);
}else{
$('tbody input').prop('checked',false);
}
form.render('checkbox');
});
// //执行一个laydate实例
// laydate.render({
// elem: '#s_time' //指定元素
// });
// //执行一个laydate实例
// laydate.render({
// elem: '#e_time' //指定元素
// });
});
var page_num;
var laypage;
var all_page = "{$num}";
layui.use('laypage', function () {
laypage = layui.laypage;
//执行一个laypage实例
laypage.render({
elem: 'page',
count: all_page, //数据总数,从服务端得到
limit: 10,
groups:10,
jump: function (obj, first) {
//首次不执行
if (!first) {
//obj包含了当前分页的所有参数比如
console.log(obj.curr); //得到当前页,以便向服务端请求对应页的数据。
console.log(obj.limit); //得到每页显示的条数
page_num = obj.curr;
find("n")
}
}
});
});
/*用户-停用*/
function user_stop(obj,id){
// return
var title = '',is_del,num
if($(obj).attr('title')=='启用'){
title = '停用'
is_del = 1
num = 5
}else{
title = '启用'
is_del = 0
num = 6
}
// console.log('点击时'+$(obj).attr('title')+'====='+id+'===传到后台是否删除:'+is_del)
layer.confirm('确认要'+ title +'吗?',function(index){
load()
$.ajax({
url:"user_is_del", //请求的url地址
dataType:"json", //返回格式为json
async:true,//请求是否异步默认为异步这也是ajax重要特性
data:{"id":id,'is_del':is_del}, //参数值
type:"POST", //请求方式
success:function(req){
c_load()
//请求成功时处理
if(req['code'] == 0){
//发异步把用户状态进行更改
$(obj).attr('title',title)
if(is_del == 1){
$(obj).parents("tr").find(".td-status").find('span').addClass('layui-btn-disabled').html('已'+ title);
}else{
$(obj).parents("tr").find(".td-status").find('span').removeClass('layui-btn-disabled').html('已'+ title);
}
layer.msg('已停用!',{icon: num});
}else{
layer.msg('操作失败!',{icon: 5});
}
},
error:function(){
//请求出错处理
}});
});
}
function delAll (argument) {
// layer.msg('停用成功', {icon: 2});
// return
var ids = [];
// 获取选中的id
$('tbody input').each(function(index, el) {
if($(this).prop('checked')){
ids.push($(this).val())
}
});
if(ids.length <= 0){
return
}
console.log(ids);
layer.confirm('确认要停用吗ID为'+ids.toString(),function(index){
//捉到所有被选中的,发异步进行删除
$.ajax({
url:"user_is_del", //请求的url地址
dataType:"json", //返回格式为json
async:true,//请求是否异步默认为异步这也是ajax重要特性
data:{"id":ids,'is_del':1}, //参数值
type:"POST", //请求方式
success:function(req){
c_load()
//请求成功时处理
if(req['code'] == 0){
//发异步把用户状态进行更改
layer.msg('停用成功', {icon: 1});
location.reload()
$(".layui-form-checked").not('.header').parents('tr').find(".td-status").find('span').addClass('layui-btn-disabled').html('已停用');
}else{
layer.msg('操作失败!',{icon: 2});
}
},
error:function(){
//请求出错处理
}});
});
}
function find(pd) {
if(!page_num || pd == 'y'){
page_num = 1;
}
page({
"status_num":$('#status_num').val(),
"aan_id":$('#aan_id').val(),
"nickname":$('#nickname').val(),
"gender":$('#gender').val(),
// "s_time":$('#s_time').val(),
// "e_time":$('#e_time').val(),
"page_num":page_num,
"tt":1},pd);
}
function page(data,pd) {
console.log(data)
load()
$.ajax({
url: "user_list", //请求的url地址s
dataType: "json", //返回格式为json
async: true,//请求是否异步默认为异步这也是ajax重要特性
data: data, //参数值
type: "POST", //请求方式
success: function (req) {
console.log(req)
c_load();
if (req['code'] == 0) {
var str,str_s,str_c,str_all="";
for (let i = 0; i < req['data']['data'].length; i++) {
if(req['data']['data'][i]['is_del'] == 1){
str = '<span onclick="user_stop(this,\''+req['data']['data'][i]['id']+'\')" class="layui-btn layui-btn-normal layui-btn-mini layui-btn-disabled" title="停用">已停用</span>'
}else{
str = '<span onclick="user_stop(this,\''+ req['data']['data'][i]['id'] +'\')" class="layui-btn layui-btn-normal layui-btn-mini" title="启用">已启用</span>'
}
if(req['data']['data'][i]['gender'] == 1){
str_s = '<td></td>'
}else if(req['data']['data'][i]['gender'] == 2){
str_s = '<td></td>'
}else{
str_s = '<td>未知</td>'
}
str_c = "<tr>"+
'<td><input type="checkbox" name="id" value="'+req['data']['data'][i]['id']+'" lay-skin="primary"></td>'+
'<td>'+req['data']['data'][i]['id']+'</td>'+
'<td>'+req['data']['data'][i]['aan_id']+'</td>'+
'<td>'+req['data']['data'][i]['nickname']+'</td>'+
'<td>'+req['data']['data'][i]['birthday']+'</td>'+
str_s+
'<td>'+req['data']['data'][i]['create_time']+'</td>'+
'<td>'+req['data']['data'][i]['last_update_time']+'</td>'+
'<td class="td-status">'+
str+
'</td>'
'</tr>'
str_all = str_all+str_c;
}
$('#content').html(str_all);
form.render();
if(pd == 'y'){
$("#page").html("")
laypage.render({
elem: 'page',
count: req['data']['num'], //数据总数,从服务端得到
limit: 10,
groups:10,
jump: function (obj, first) {
//首次不执行
if (!first) {
//obj包含了当前分页的所有参数比如
console.log(obj.curr); //得到当前页,以便向服务端请求对应页的数据。
console.log(obj.limit); //得到每页显示的条数
page_num = obj.curr;
// page({"page":page_num,"tt":1});
find("n")
}
}
});
}
} else {
layer.msg(req['msg'])
}
},
error: function () {
//请求出错处理
}
});
}
//加载提示开启
function load() {
var index = layer.load(1, {
shade: [0.1, '#fff'] //0.1透明度的白色背景
});
}
// 关闭加载提示
function c_load() {
layer.close(layer.index)
}
</script>
</html>

View File

@ -11,46 +11,52 @@ use \think\Validate;
class Card extends Controller{ class Card extends Controller{
################################################################个人资料卡################################################################ ################################################################接口################################################################
################################################################个人资料卡################################################################ ################################################################接口################################################################
################################################################个人资料卡################################################################ ################################################################接口################################################################
// 获取默认卡片信息 // 存储卡片顺序
// $type 1获取列表2获取详细信息 // $data = ['user_token'=>'xxxxxxxxxxxxxxx','order_list'=>[1,2,3,4,5]]
public function get_card_msg($type=1){ public function save_card_order(){
$result = Db::table('app_card_data')->select(); $data = input();
$data = []; if(!array_key_exists('order_list', $data) || !array_key_exists('user_token', $data)){
if($type == 1){ return $this->msg(10001,'数据格式错误');
for ($i=0; $i < count($result); $i++) {
array_push($data,['id'=>$result[$i]['id'],'name'=>$result[$i]['name']]);
} }
if(!$this->isNumericArray($data['order_list'])){
return $this->msg(10002,'数据内参数格式或值错误');
}
$data['order_list'] = json_encode($data['order_list']);
$result = Db::table('app_user_data')->where(['id'=>$data['user_token']])->update(['card_order'=>$data['order_list']]);
if($result){
return $this->msg(0,'success');
}else{ }else{
// 如果需要详细信息再从中编辑信息 return $this->msg(10003,'修改失败');
$data = $result;
} }
return $this->msg(0,'success',$data);
} }
// 获取默认卡片规则 // 添加卡片规则
// $type 1获取列表2获取详细信息 // $data = ['user_token'=>'xxxxxxxxxxxxxxx','order_list'=>[1,2,3,4,5]]
public function get_card_rule(){ public function add_card_rule(){
$result = Db::table('app_card_data')->select(); $data = input();
$data = []; if(!array_key_exists('order_list', $data) || !array_key_exists('user_token', $data)){
if($type == 1){ return $this->msg(10001,'数据格式错误');
for ($i=0; $i < count($result); $i++) {
array_push($data,['id'=>$result[$i]['id'],'name'=>$result[$i]['name']]);
} }
if(!$this->isNumericArray($data['order_list'])){
return $this->msg(10002,'数据内参数格式或值错误');
}
$data['order_list'] = json_encode($data['order_list']);
$result = Db::table('app_user_data')->where(['id'=>$data['user_token']])->update(['card_order'=>$data['order_list']]);
if($result){
return $this->msg(0,'success');
}else{ }else{
// 如果需要详细信息再从中编辑信息 return $this->msg(10003,'修改失败');
$data = $result;
} }
return $this->msg(0,'success',$data);
} }
// 新建卡片
public function create_card(){
}
@ -60,43 +66,26 @@ class Card extends Controller{
################################################################other################################################################ ################################################################other################################################################
################################################################other################################################################ ################################################################other################################################################
public function verify_parameters($data,$type){ // 检查变量是否是一个只有数字的一维数组
// 设置验证 function isNumericArray($array) {
$rule = [ if (!is_array($array)) {
'aan_id' => 'require|number', return false; // 变量不是数组
'nickname' => 'require|chsAlpha', }
'birthday' => 'require|date', foreach ($array as $value) {
'gender' => 'require|number|in:0,1,2', if (!is_numeric($value)) {
]; return false; // 数组中包含非数字元素
$msg = [ }
'aan_id.require' => '账号信息缺失', }
'nickname.require' => '昵称缺失', $result = Db::table('app_card_data')->where(['is_del'=>1])->cache(true,3600)->column('id');//查询结果缓存3600秒
'birthday.require' => '生日缺失', if(empty(array_diff($array, $result))){
'gender.require' => '性别缺失', return true;// 数组是一维的且只包含数字,且已经跟数据库比对过,每个数值都是有效
}else{
'aan_id.number' => '账号信息格式错误', return false;//跟数据库比对过,存在无效数值
'nickname.chsAlpha' => '昵称只能是只能是汉字、字母',
'birthday.date' => '生日信息格式错误',
'gender.number' => '性别格式错误',
'gender.in' => '性别信息错误',
];
$validate = new Validate($rule,$msg);
$result = $validate->check($data);
if(!$result){
return $validate->getError();
} }
$parameter['aan_id'] = $data['aan_id'];
$parameter['nickname'] = $data['nickname'];
$parameter['birthday'] = $data['birthday'];
$parameter['gender'] = $data['gender'];
$parameter['create_time'] = date('Y-m-d H:i:s');
$parameter['last_update_time'] = date('Y-m-d H:i:s');
return $parameter;
} }
public function msg($code,$msg='',$data=[]){ public function msg($code,$msg='',$data=[]){
return json(['code'=>$code,'msg'=>$msg,'data'=>$data]); return json(['code'=>$code,'msg'=>$msg,'data'=>$data]);
} }

View File

@ -26,7 +26,7 @@ class Index extends Controller{
// 创建用户卡片 // 创建用户卡片
public function create_user_data(){ public function create_user_data(){
$data = input(); $data = input();
$verify_result = $this->verify_parameters($data,'register');
$result = Db::table('app_user_data')->insert($verify_result); $result = Db::table('app_user_data')->insert($verify_result);
if($result){ if($result){
return $this->msg(0,'success'); return $this->msg(0,'success');
@ -136,12 +136,14 @@ class Index extends Controller{
'nickname' => 'require|chsAlpha', 'nickname' => 'require|chsAlpha',
'birthday' => 'require|date', 'birthday' => 'require|date',
'gender' => 'require|number|in:0,1,2', 'gender' => 'require|number|in:0,1,2',
'grade' => 'require',
]; ];
$msg = [ $msg = [
'aan_id.require' => '账号信息缺失', 'aan_id.require' => '账号信息缺失',
'nickname.require' => '昵称缺失', 'nickname.require' => '昵称缺失',
'birthday.require' => '生日缺失', 'birthday.require' => '生日缺失',
'gender.require' => '性别缺失', 'gender.require' => '性别缺失',
'grade.require' => '年级缺失',
'aan_id.number' => '账号信息格式错误', 'aan_id.number' => '账号信息格式错误',
'nickname.chsAlpha' => '昵称只能是只能是汉字、字母', 'nickname.chsAlpha' => '昵称只能是只能是汉字、字母',
@ -159,6 +161,7 @@ class Index extends Controller{
$parameter['nickname'] = $data['nickname']; $parameter['nickname'] = $data['nickname'];
$parameter['birthday'] = $data['birthday']; $parameter['birthday'] = $data['birthday'];
$parameter['gender'] = $data['gender']; $parameter['gender'] = $data['gender'];
$parameter['grade'] = $data['grade'];
$parameter['create_time'] = date('Y-m-d H:i:s'); $parameter['create_time'] = date('Y-m-d H:i:s');
$parameter['last_update_time'] = date('Y-m-d H:i:s'); $parameter['last_update_time'] = date('Y-m-d H:i:s');
@ -166,6 +169,8 @@ class Index extends Controller{
return $parameter; return $parameter;
} }
public function msg($code,$msg='',$data=[]){ public function msg($code,$msg='',$data=[]){
return json(['code'=>$code,'msg'=>$msg,'data'=>$data]); return json(['code'=>$code,'msg'=>$msg,'data'=>$data]);
} }

View File

@ -43,8 +43,8 @@ class Login extends Controller{
return $this->msg(10001,$verify_result); return $this->msg(10001,$verify_result);
} }
$result = Db::table('app_register')->where($verify_result)->field('id')->find(); $result = Db::table('app_register')->where($verify_result)->field('id')->find();
dump($result); // dump($result);
die; // die;
if($result){ if($result){
$user_data = Db::table('app_user_data')->where(['aan_id'=>$result['id']])->field('id,nickname')->select(); $user_data = Db::table('app_user_data')->where(['aan_id'=>$result['id']])->field('id,nickname')->select();
return $this->msg(0,'success'); return $this->msg(0,'success');
@ -66,13 +66,14 @@ class Login extends Controller{
} }
$num = $this->rand_int(); $num = $this->rand_int();
if($data['road'] == 'tel'){ if($data['road'] == 'tel'){
$result = $this->send_tel_code($data['tel'],$num); $result = $this->send_tel_code($data['data'],$num);
}else if($data['road'] == 'email'){ }else if($data['road'] == 'email'){
$result = $this->send_email_code($data['data'],['title'=>'体测APP验证码','from_user_name'=>'体测APP','content'=>$num]);
} }
if(is_array($result) && $result['code'] == 0){ if(is_array($result) && $result['code'] == 0){
cache($data['data']."_".$data['road']."_".$data['type'], $num, 20); cache($data['data']."_".$data['road']."_".$data['type'], $num, 60);
// dump($data['data']."_".$data['road']."_".$data['type']);
return $this->msg(0,'success'); return $this->msg(0,'success');
}else{ }else{
return $this->msg(10001,'error'); return $this->msg(10001,'error');
@ -232,6 +233,7 @@ class Login extends Controller{
if($type == 'register'){ if($type == 'register'){
if(array_key_exists('code', $data)){ if(array_key_exists('code', $data)){
// dump($parameter[$montage_data]."_".$montage_data."_register".'='.cache($parameter[$montage_data]."_".$montage_data."_register"));
if(cache($parameter[$montage_data]."_".$montage_data."_register") == false){ if(cache($parameter[$montage_data]."_".$montage_data."_register") == false){
return '验证码过期'; return '验证码过期';
}else{ }else{
@ -243,11 +245,23 @@ class Login extends Controller{
return '验证码必须'; return '验证码必须';
} }
$parameter['create_time'] = date('Y-m-d H:i:s'); $parameter['create_time'] = date('Y-m-d H:i:s');
$parameter['token'] = md5($parameter['tel'].$this->create_random_string(12).time());
} }
return $parameter; return $parameter;
} }
public function create_random_string($length = 12)
{
//创建随机字符
$chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
$str = "";
for ($i = 0; $i < $length; $i++) {
$str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
}
return $str;
}
public function msg($code,$msg='',$data=[]){ public function msg($code,$msg='',$data=[]){
return json(['code'=>$code,'msg'=>$msg,'data'=>$data]); return json(['code'=>$code,'msg'=>$msg,'data'=>$data]);
} }