修改用户列表

This commit is contained in:
manghe 2025-03-20 14:15:34 +00:00
parent 4aba2cb52c
commit 0623f58d7e
4 changed files with 681 additions and 466 deletions

View File

@ -27,52 +27,57 @@ class User extends Base
*/
public function index()
{
$user_id = trim(input('get.user_id'));
$mobile = trim(input('get.mobile'));
$nickname = trim(input('get.nickname'));
$addtime = trim(input('get.addtime'));
$last_login_ip = trim(input('get.last_login_ip'));
$whe = [];
if ($user_id) {
$user_id = $user_id - 1260;
$whe[] = ['id', '=', $user_id];
}
if ($nickname) {
$whe[] = ['nickname', 'like', '%' . $nickname . '%'];
}
if ($mobile) {
$whe[] = ['mobile', '=', $mobile];
}
if ($addtime) {
$time = explode(' - ', $addtime);
$start_time = strtotime($time[0]);
$end_time = strtotime($time[1]) - 1;
if ($start_time > $end_time) {
$this->err('开始时间不能大于结束时间');
}
$whe[] = ['addtime', 'BETWEEN', array($start_time, $end_time)];
}
if ($last_login_ip) {
$last_login_ip = ip2long($last_login_ip);
$user_id_arr = UserAccount::where(['last_login_ip' => $last_login_ip])->column('user_id');
if ($user_id_arr) {
return View::fetch('User/index');
}
$whe[] = ['id', 'in', $user_id_arr];
} else {
$whe[] = ['id', '=', 0];
}
/**
* 获取用户列表
*/
public function list()
{
$param = $this->request->param();
// 构建查询条件
$where = [];
if (!empty($param['user_id'])) {
$where[] = ['id', '=', intval($param['user_id']) - 1260];
}
if (!empty($param['mobile'])) {
$where[] = ['mobile', 'like', "%{$param['mobile']}%"];
}
if (!empty($param['nickname'])) {
$where[] = ['nickname', 'like', "%{$param['nickname']}%"];
}
if (!empty($param['last_login_ip'])) {
$where[] = ['last_login_ip', '=', $param['last_login_ip']];
}
if (!empty($param['addtime'])) {
$times = explode(' - ', $param['addtime']);
$where[] = ['addtime', 'between', [strtotime($times[0]), strtotime($times[1])]];
}
$field = '*';
$order = 'id desc';
$data = UserModel::getList($whe, $field, $order, $this->page);
$data = UserModel::getList($where, $field, $order, $this->page);
foreach ($data['list'] as &$value) {
$pid_info = UserModel::field('id,nickname,headimg')->where(['id' => $value['pid']])->find();
$value['pid_info'] = $pid_info;
#关联user_account
$user_account = UserAccount::where(['user_id' => $value['id']])->field('last_login_ip1,last_login_ip,ip_adcode,ip_province,ip_city')->find();
$user_hegui = OrderList::where('user_id', '=', $value['id'])->where('status', '=', 0)->sum('goodslist_money');
// SELECT sum(goodslist_money) FROM xinglanmh_shequt_test.order_list where user_id=4490 and status=0 and goodslist_type=1
$user_hegui = OrderList::where('user_id', '=', $value['id'])->where('status', '=', 0)->sum('goodslist_money');
//SELECT SUM(order_zhe_total) FROM `order` where `status`=1 and user_id=6153
$user_all_total = Order::where('user_id', '=', $value['id'])->where('status', '=', 1)->sum('order_zhe_total');
//SELECT *FROM `order` where `status`=1 and user_id=6153 and price>1 #微信支付
$user_weixin_total = Order::where('user_id', '=', $value['id'])->where('status', '=', 1)->where('price', '>', 1)->sum('price');
// SELECT sum(use_money) FROM `order` where `status`=1 and user_id=6153 # 余额支付
$user_use_money = Order::where('user_id', '=', $value['id'])->where('status', '=', 1)->sum('use_money');
//SELECT sum(use_integral) FROM `order` where `status`=1 and user_id=6153 #吧唧币抵扣
$user_use_integral = Order::where('user_id', '=', $value['id'])->where('status', '=', 1)->sum('use_integral');
// SELECT sum(goodslist_money) FROM `order_list` where `status`=1 and user_id=6153 # 回收货币
$user_goodslist_money = OrderList::where('user_id', '=', $value['id'])->where('status', '=', 1)->sum('goodslist_money');
// SELECT sum(goodslist_money) FROM `order_list` where `status`=2 and user_id=6153 # 发货价值
$user_goodslist_money2 = OrderList::where('user_id', '=', $value['id'])->where('status', '=', 2)->sum('goodslist_money');
$last_login_ip = 0;
if ($user_account) {
if ($user_account['last_login_ip']) {
@ -87,15 +92,45 @@ class User extends Base
}
$value['user_hegui'] = $user_hegui;
$value['user_all_total'] = $user_all_total;
$value['user_weixin_total'] = $user_weixin_total;
$value['user_use_money'] = $user_use_money;
$value['user_use_integral'] = $user_use_integral;
$value['user_goodslist_money'] = $user_goodslist_money;
$value['user_goodslist_money2'] = $user_goodslist_money2;
$value['last_login_ip'] = $last_login_ip;
$value['ip_adcode'] = $user_account['ip_adcode'];
$value['ip_province'] = $user_account['ip_province'];
$value['ip_city'] = $user_account['ip_city'];
}
View::assign('list', $data['list']);
View::assign('count', $data['count']);
View::assign('page', $data['page']);
return View::fetch('User/index');
// 获取数据
$list = $data['list'];
$count = $data['count'];
// 处理数据
foreach ($list as &$item) {
$item['headimg'] = imageUrl($item['headimg']);
// 格式化余额为两位小数
$item['money'] = number_format($item['money'], 2, '.', '');
// 格式化吧唧币为两位小数
$item['integral'] = number_format($item['integral'], 2, '.', '');
// 格式化积分为两位小数
$item['score'] = number_format($item['score'], 2, '.', '');
// 格式化盒柜价值为两位小数
$item['user_hegui'] = number_format($item['user_hegui'], 2, '.', '');
}
return json([
'code' => 0,
'msg' => '',
'count' => $count,
'data' => $list
]);
}
/**
@ -210,7 +245,7 @@ class User extends Base
{
// \think\facade\Filesystem::disk('public')-/
$id = request()->post('id/d', 0);
$type = request()->post('type/d', 0);
if ($type != 1 && $type != 0 && $type != 2) {

View File

@ -291,4 +291,4 @@ Route::rule('user_invite', 'user/user_invite', 'GET');
Route::rule('user_statistics', 'Statistics/UserStatistics', 'GET');
Route::rule('user_list', 'User/list', 'GET');

View File

@ -1,69 +1,76 @@
{include file="Public:header2"/}
<body style="min-height: 100%;background-color: #fff">
<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 onsubmit="return false;">
<div class="layui-form" wid100 lay-filter="">
<div class="layui-form-item">
<label class="layui-form-label">账户余额</label>
<div class="layui-input-block">
<input type="text" value="{$money}" autocomplete="off" placeholder="请输入账号" class="layui-input" style="width: 300px" disabled>
<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 onsubmit="return false;">
<div class="layui-form" wid100 lay-filter="">
<div class="layui-form-item">
<label class="layui-form-label">账户余额</label>
<div class="layui-input-block">
<input type="text" value="{$money}" autocomplete="off" placeholder="请输入账号"
class="layui-input" style="width: 300px" disabled>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">类型</label>
<div class="layui-input-inline" style="width: 300px">
<input type="radio" name="type_is" value="1" lay-verify="required"
class="layui-input" title="充值" checked>
<input type="radio" name="type_is" value="2" lay-verify="required"
class="layui-input" title="扣除">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">修改数量</label>
<div class="layui-input-block">
<input type="text" name="money" value="" autocomplete="off"
placeholder="请输入修改数量" class="layui-input" style="width: 300px">
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<input type="hidden" name="id" value="{$id}">
<input type="hidden" name="type" value="{$type}">
<button class="layui-btn" onclick="return check()">确认保存</button>
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">类型</label>
<div class="layui-input-inline" style="width: 300px">
<input type="radio" name="type_is" value="1" lay-verify="required" class="layui-input" title="充值" checked>
<input type="radio" name="type_is" value="2" lay-verify="required" class="layui-input" title="扣除" >
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">修改数量</label>
<div class="layui-input-block">
<input type="text" name="money" value="" autocomplete="off" placeholder="请输入修改数量" class="layui-input" style="width: 300px">
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<input type="hidden" name="id" value="{$id}">
<input type="hidden" name="type" value="{$type}">
<button class="layui-btn" onclick="return check()">确认保存</button>
</div>
</div>
</div>
</form>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
{include file="Public:footer"/}
{include file="Public:footer"/}
</body>
</html>
<script type="text/javascript">
layui.use(['layer','form'], function(){
layui.use(['layer', 'form'], function () {
});
function check(){
var url="{:url('/admin/chongzhi')}";
function check() {
var url = "{:url('/admin/chongzhi')}";
var $ = layui.$;
var load=layer.load(2);
$.post(url,$("form").serialize(),function(data){
if(data.status==1){
layer.msg(data.msg,{icon:1,time:1500},function(){
var load = layer.load(2);
$.post(url, $("form").serialize(), function (data) {
if (data.status == 1) {
layer.msg(data.msg, { icon: 1, time: 1500 }, function () {
var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
parent.layer.close(index);
parent.location.reload();
// parent.location.reload();
parent.table.reload('LAY-user-table');
});
}else{
layer.msg(data.msg,{icon:2,anim:6,time:1500},function(){
} else {
layer.msg(data.msg, { icon: 2, anim: 6, time: 1500 }, function () {
layer.close(load);
});
}
})
}
</script>
</script>

View File

@ -1,380 +1,553 @@
{include file="Public:header2"/}
<body>
<div class="layui-fluid">
<div class="layui-card">
<form method="get" class="layui-form layui-card-header layuiadmin-card-header-auto">
<div class="layui-form-item">
<div class="layui-inline">
<div class="layui-input-inline" style="width: 150px;margin-left: 0px">
<input type="text" name="user_id" value="{$Request.get.user_id}" placeholder="请输入UID"
autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-inline">
<div class="layui-input-inline" style="width: 150px;margin-left: 0px">
<input type="text" name="mobile" value="{$Request.get.mobile}" placeholder="请输入手机号"
autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-inline">
<div class="layui-input-inline" style="width: 150px;margin-left: 0px">
<input type="text" name="nickname" value="{$Request.get.nickname}" placeholder="请输入昵称"
autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-inline">
<div class="layui-input-inline" style="width: 300px;margin-left: 0px">
<input type="text" id="last_login_ip" name="last_login_ip"
value="{$Request.get.last_login_ip}" class="layui-input" placeholder="ip查询"
autocomplete="off">
</div>
</div>
<div class="layui-inline">
<div class="layui-input-inline" style="width: 300px;margin-left: 0px">
<input type="text" id="addtime" name="addtime" value="{$Request.get.addtime}"
class="layui-input" placeholder="登录时间" autocomplete="off">
</div>
</div>
<div class="layui-inline">
<button class="layui-btn layuiadmin-btn-useradmin" lay-submit
lay-filter="LAY-user-front-search">
<i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>
</button>
</div>
</div>
</form>
<div class="layui-card-body">
<xblock>
<div style="padding-bottom: 10px;">
<span style="line-height:40px;float:right;">共有数据: {$count}条</span>
</div>
</xblock>
<table class="layui-table">
<thead>
<tr>
<th>用户信息</th>
<th>推荐人</th>
<th>余额</th>
<th>吧唧币</th>
<th>积分</th>
<th>盒柜价值(吧唧币)</th>
<th>状态</th>
<th>时间</th>
<th>ip</th>
<th>ip地址</th>
<th>ip邮编</th>
<th>操作</th>
</tr>
</thead>
<tbody>
{volist name="list" id="vo"}
<tr>
<td style="text-align: left">
<div style="display: flex;">
<div><img src="{:imageUrl($vo['headimg'])}" alt="" width="50px" height="50px"></div>
<div style="margin-left: 10px">
<p style="color: #e91e63;font-size: 9px">UID{$vo['id']+1260}</p>
<p style="color: #666666ba;font-size: 9px">{$vo['mobile']}</p>
<p style="color: #666666ba;font-size: 9px">{$vo['nickname']}</p>
</div>
</div>
</td>
<td style="text-align: left">
{if $vo.pid_info}
<div style="display: flex;">
<div><img src="{:imageUrl($vo['pid_info']['headimg'])}" alt="" width="50px"
height="50px"></div>
<div style="margin-left: 10px">
<p style="color: #e91e63;font-size: 9px">UID{$vo['pid_info']['id']+1260}</p>
<p style="color: #666666ba;font-size: 9px">{$vo['pid_info']['nickname']}</p>
</div>
</div>
{/if}
</td>
<td>{$vo['money']}
<br /><a style="text-decoration:none" name="{$vo.nickname}"
onClick="chongzhi({$vo.id},this.name,1,'余额')"
class="layui-btn layui-btn-danger layui-btn-xs">充值</a>
</td>
<td>{$vo['integral']}
<br /><a style="text-decoration:none" name="{$vo.nickname}"
onClick="chongzhi({$vo.id},this.name,2,'吧唧币')"
class="layui-btn layui-btn-danger layui-btn-xs">充值</a>
</td>
<td>{$vo['score']}
<br /><a style="text-decoration:none" name="{$vo.nickname}"
onClick="chongzhi({$vo.id},this.name,3,'积分')"
class="layui-btn layui-btn-danger layui-btn-xs">充值</a>
</td>
<td>{$vo['user_hegui']*100}
<td>
{if condition="$vo['status'] eq 1"}
<button class="layui-btn layui-btn-success layui-btn-radius layui-btn-sm">正常</button>
{else /}
<button class="layui-btn layui-btn-danger layui-btn-radius layui-btn-sm">封号</button>
{/if}
</td>
<td>{$vo['addtime']|date="Y-m-d H:i:s"}</td>
<td>{$vo['last_login_ip']}</td>
<td>{$vo['ip_province'].$vo['ip_city']}</td>
<td>{$vo['ip_adcode']}</td>
<td>
<!--<a style="text-decoration:none" name="{$vo.nickname}" onClick="give_goodslist({$vo.id},this.name)" class="layui-btn layui-btn-success layui-btn-xs">赠送卡册</a>-->
<div style="padding: 5px;">
<a style="text-decoration:none" title="赠送优惠券" href="javscript:;"
onclick="give('优惠券','{$vo['mobile']}','{$vo['id']}')"
class="layui-btn layui-btn-default layui-btn-xs">赠送优惠券</a>
{if condition="$vo['status'] eq 1"}
<a style="text-decoration:none" name="{$vo.nickname}"
onClick="del({$vo.id},2,this.name,'封号')"
class="layui-btn layui-btn-danger layui-btn-xs">封号</a>
{else /}
<a style="text-decoration:none" name="{$vo.nickname}"
onClick="del({$vo.id},1,this.name,'解封')"
class="layui-btn layui-btn-success layui-btn-xs">解封</a>
{/if}
{if condition="$vo['istest'] eq 0"}
<a style="text-decoration:none" name="{$vo.nickname}"
onClick="test({$vo.id},1,this.name,'设为推广账号')"
class="layui-btn layui-btn-danger layui-btn-xs">推广账号</a>
<a style="text-decoration:none" name="{$vo.nickname}"
onClick="test({$vo.id},2,this.name,'设为测试账号')"
class="layui-btn layui-btn-danger layui-btn-xs">测试账号</a>
{/if}
{if condition="$vo['istest'] eq 1" /}
<a style="text-decoration:none" name="{$vo.nickname}"
onClick="test({$vo.id},0,this.name,'取消推广账号')"
class="layui-btn layui-btn-success layui-btn-xs">取消推广账号</a>
{/if}
{if condition="$vo['istest'] eq 2" /}
<a style="text-decoration:none" name="{$vo.nickname}"
onClick="test({$vo.id},0,this.name,'取消测试账号')"
class="layui-btn layui-btn-success layui-btn-xs">取消测试账号</a>
{/if}
<a title="查看详情" onClick="detail({$vo.id})"
class="layui-btn layui-btn-normal layui-btn-xs">查看下级</a>
<a title="查看ip登录列表" onClick="ipdetail({$vo.id})"
class="layui-btn layui-btn-normal layui-btn-xs">查看ip登录列表</a>
{if condition="$vo['ip_adcode'] eq 1"}
<a style="text-decoration:none" name="{$vo.nickname}"
onClick="ipzh({$vo.id},2,this.name,'ip转换')"
class="layui-btn layui-btn-danger layui-btn-xs">ip转换</a>
{/if}
</div>
<div style="padding: 10px;">
<a style="text-decoration:none" name="{$vo.nickname}"
onClick="usermobileclear({$vo.id},2,this.name)"
class="layui-btn layui-btn-danger layui-btn-xs">清空手机号</a>
<a style="text-decoration:none" name="{$vo.nickname}"
onClick="userwxclear({$vo.id},2,this.name)"
class="layui-btn layui-btn-danger layui-btn-xs">重置微信登录</a>
</div>
</td>
</tr>
{/volist}
{if condition="empty($list)"}
<tr>
<td colspan='10' style="text-align:center;">暂时没有数据!</td>
</tr>
{/if}
</tbody>
</table>
<div class="my_page layui-box layui-laypage layui-laypage-default">
{$page|raw}
</div>
</div>
</div>
</div>
{include file="Public:footer"/}
<script type="text/javascript">
layui.use(['table', 'laydate'], function () {
//执行一个laydate实例
var laydate = layui.laydate;
laydate.render({
elem: '#addtime'
, type: 'datetime'
, range: true
});
});
//赠送优惠劵
function give(title, mobile, user_id) {
layer.open({
type: 2,
title: '赠送给' + mobile + title,
shadeClose: true,
shade: 0.8,
area: ['600px', '400px'],
content: "/admin/user_give_add/user_id/" + user_id, //iframe的url
});
}
//赠送卡册
function give_goodslist(id, nickname) {
title_str = nickname + ' 赠送卡册';
var url = "{:url('/admin/give_goodslist?id=" + id + "')}";
layer.open({
type: 2,
title: title_str,
shadeClose: false,
shade: 0.3,
area: ['60%', '60%'],
content: url,
});
}
//充值
function chongzhi(id, username, type, type_name) {
title_str = username + ' 充值' + type_name;
var url = "{:url('/admin/chongzhi?id=" + id + "&type=" + type + "&c')}";
layer.open({
type: 2,
title: title_str,
shadeClose: false,
shade: 0.3,
area: ['40%', '40%'],
content: url,
});
}
//解封/封号
function del(id, type, username, type_name) {
title_str = '确认要执行' + username + '的' + type_name + '操作吗?';
layer.confirm(title_str, function () {
var url = "{:url('/admin/userdel')}";
var load = layer.load(2);
var $ = layui.$;
$.post(url, { "id": id, 'type': type }, function (data) {
if (data.status == 1) {
layer.msg(data.msg, { icon: 1, time: 1000 }, function () {
location.reload();
});
} else {
layer.msg(data.msg, { icon: 2, anim: 6, time: 1500 }, function () {
layer.close(load);
});
}
})
});
}
function test(id, type, username, type_name) {
title_str = '确认要执行' + username + '的' + type_name + '操作吗?';
layer.confirm(title_str, function () {
var url = "{:url('/admin/usertest')}";
var load = layer.load(2);
var $ = layui.$;
$.post(url, { "id": id, 'type': type }, function (data) {
if (data.status == 1) {
layer.msg(data.msg, { icon: 1, time: 1000 }, function () {
location.reload();
});
} else {
layer.msg(data.msg, { icon: 2, anim: 6, time: 1500 }, function () {
layer.close(load);
});
}
})
});
}
//ip转换
function ipzh(id, type, username, type_name) {
title_str = '确认要执行' + username + '的' + type_name + '操作吗?';
layer.confirm(title_str, function () {
var url = "{:url('/admin/ipzh')}";
var load = layer.load(2);
var $ = layui.$;
$.post(url, { "id": id, 'type': type }, function (data) {
if (data.status == 1) {
layer.msg(data.msg, { icon: 1, time: 1000 }, function () {
location.reload();
});
} else {
layer.msg(data.msg, { icon: 2, anim: 6, time: 1500 }, function () {
layer.close(load);
});
}
})
});
}
//详情
function detail(id) {
var url = "{:url('/admin/user_team?id=" + id + "')}";
layer.open({
type: 2,
title: '下级用户',
shadeClose: false,
shade: 0.3,
area: ['80%', '80%'],
content: url,
});
}
//ip详情
function ipdetail(id) {
var url = "{:url('/admin/ip_list?id=" + id + "')}";
layer.open({
type: 2,
title: '下级用户',
shadeClose: false,
shade: 0.3,
area: ['80%', '80%'],
content: url,
});
}
//删除手机号
function usermobileclear(id, type, username) {
title_str = '确认要执行' + username + '的清空手机号操作吗?清空后通过手机号将搜索不到用户!同时用户需要重新绑定手机号才能抽奖!';
layer.confirm(title_str, { icon: 2, title: '清除手机号' }, function () {
var url = "{:url('/admin/usermobileclear')}";
var load = layer.load(2);
var $ = layui.$;
$.post(url, { "id": id }, function (data) {
if (data.status == 1) {
layer.msg(data.msg + ";请手动刷新页面!", { icon: 1, time: 1000 }, function () {
// location.reload();
layer.close(load);
});
} else {
layer.msg(data.msg, { icon: 2, anim: 6, time: 1500 }, function () {
layer.close(load);
});
}
})
});
}
//清除微信
function userwxclear(id, type, username) {
title_str = '确认要执行' + username + '的清空微信关联数据操作吗?清空后通过微信号将关联不到此账号!微信设为新账号需要同时清除手机号操作!!!';
layer.confirm(title_str, { icon: 2, title: '清除微信号' }, function () {
var url = "{:url('/admin/userwxclear')}";
var load = layer.load(2);
var $ = layui.$;
$.post(url, { "id": id }, function (data) {
if (data.status == 1) {
layer.msg(data.msg + ";请手动刷新页面!", { icon: 1, time: 1000 }, function () {
// location.reload();
layer.close(load);
});
} else {
layer.msg(data.msg, { icon: 2, anim: 6, time: 1500 }, function () {
layer.close(load);
});
}
})
});
}
</script>
</body>
{include file="Public:header2"/}
<body>
<div class="layui-fluid">
<div class="layui-card">
<!-- 搜索表单 -->
<div class="layui-form layui-card-header layuiadmin-card-header-auto">
<div class="layui-form-item">
<div class="layui-inline">
<div class="layui-input-inline">
<input type="text" name="user_id" placeholder="请输入UID" autocomplete="off"
class="layui-input">
</div>
</div>
<div class="layui-inline">
<div class="layui-input-inline">
<input type="text" name="mobile" placeholder="请输入手机号" autocomplete="off"
class="layui-input">
</div>
</div>
<div class="layui-inline">
<div class="layui-input-inline">
<input type="text" name="nickname" placeholder="请输入昵称" autocomplete="off"
class="layui-input">
</div>
</div>
<div class="layui-inline">
<div class="layui-input-inline">
<input type="text" id="last_login_ip" name="last_login_ip" class="layui-input"
placeholder="ip查询">
</div>
</div>
<div class="layui-inline">
<div class="layui-input-inline">
<input type="text" id="addtime" name="addtime" class="layui-input" placeholder="登录时间">
</div>
</div>
<div class="layui-inline">
<button class="layui-btn layuiadmin-btn-useradmin" data-type="search">
<i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>
</button>
</div>
</div>
</div>
<!-- 数据表格 -->
<div class="layui-card-body">
<table id="LAY-user-table" lay-filter="LAY-user-table"></table>
</div>
</div>
</div>
<!-- 用户信息模板 -->
<script type="text/html" id="userInfoTpl">
<div class="user-card">
<img src="{{d.headimg}}" alt="{{d.nickname}}" class="user-avatar">
<div class="user-info">
<p class="user-detail">{{d.nickname}}</p>
<p class="user-id">UID{{d.id + 1260}}</p>
<p class="user-detail">{{d.mobile}}</p>
</div>
</div>
</script>
<!-- 添加推荐人信息模板 -->
<script type="text/html" id="pidInfoTpl">
{{# if(d.pid_info) { }}
<div class="user-card">
<img src="{{d.pid_info.headimg}}" alt="" class="user-avatar">
<div class="user-info">
<p class="user-id">UID{{d.pid_info.id + 1260}}</p>
<p class="user-detail">{{d.pid_info.nickname}}</p>
</div>
</div>
{{# } else { }}
-
{{# } }}
</script>
<!-- 操作按钮模板 -->
<script type="text/html" id="operationTpl">
<div class="btn-group">
<a class="layui-btn layui-btn-default layui-btn-xs" lay-event="give">赠送优惠券</a>
<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="detail">查看下级</a>
<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="ipDetail">查看ip登录列表</a>
{{# if(d.ip_adcode == 1){ }}
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="ipConvert">ip转换</a>
{{# } }}
<div style="margin-top: 8px;">
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="clearMobile">清空手机号</a>
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="clearWechat">重置微信登录</a>
</div>
</div>
</script>
<!-- 添加充值按钮模板 -->
<script type="text/html" id="moneyTpl">
<span class="value-display">{{d.money}}</span>
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="rechargeMoney">充值</a>
</script>
<script type="text/html" id="integralTpl">
<span class="value-display">{{d.integral}}</span>
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="rechargeIntegral">充值</a>
</script>
<script type="text/html" id="scoreTpl">
<span class="value-display">{{d.score}}</span>
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="rechargeScore">充值</a>
</script>
<!-- 修改状态模板 -->
<script type="text/html" id="statusTpl">
<div class="status-group">
<div class="status-text">
账号状态:
{{# if(d.status == 1) { }}
正常
{{# if(d.istest == 1) { }}
/推广账号
{{# } else if(d.istest == 2) { }}
/测试账号
{{# } }}
{{# } else { }}
封号
{{# } }}
</div>
<div class="status-actions">
{{# if(d.status == 1) { }}
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="ban">封号</a>
{{# if(d.istest == 0) { }}
<a class="layui-btn layui-btn-warm layui-btn-xs" lay-event="setPromotion">推广</a>
<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="setTest">测试</a>
{{# } }}
{{# if(d.istest == 1) { }}
<a class="layui-btn layui-btn-warm layui-btn-xs" lay-event="cancelPromotion">取消推广</a>
{{# } }}
{{# if(d.istest == 2) { }}
<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="cancelTest">取消测试</a>
{{# } }}
{{# } else { }}
<a class="layui-btn layui-btn-success layui-btn-xs" lay-event="unban">解封</a>
{{# } }}
</div>
</div>
</script>
<!-- 修改合并列模板 -->
<script type="text/html" id="combinedTpl">
<div class="combined-values">
<div>盒柜价值:{{(Number(d.user_hegui) * 100).toFixed(2)}}</div>
<div>总消费:{{Number(d.user_all_total).toFixed(2)}}</div>
<div>微信消费:{{Number(d.user_weixin_total).toFixed(2)}}</div>
<div>余额消费:{{Number(d.user_use_money).toFixed(2)}}</div>
<div>吧唧币消费:{{Number(d.user_use_integral).toFixed(2)}}</div>
<div>回收货币:{{Number(d.user_goodslist_money).toFixed(2)}}</div>
<div>发货价值:{{Number(d.user_goodslist_money2).toFixed(2)}}</div>
</div>
</script>
{include file="Public:footer"/}
<script>
var table;
var form;
var laydate;
layui.use(['table', 'form', 'laydate'], function () {
table = layui.table;
form = layui.form;
laydate = layui.laydate;
// 日期时间范围
laydate.render({
elem: '#addtime'
, type: 'datetime'
, range: true
});
// 表格实例
table.render({
elem: '#LAY-user-table'
, url: '{:url("/admin/user_list")}'
, cellMinWidth: 80 // 设置最小列宽
, lineStyle: 'height: 80px;' // 设置行高
, height: 'full-150'
, cols: [[
{ field: 'userInfo', title: '用户信息', templet: '#userInfoTpl', width: 200 }
, { field: 'pid_info', title: '推荐人', templet: '#pidInfoTpl', width: 200 }
, { field: 'money', title: '余额', templet: '#moneyTpl', width: 120 }
, { field: 'integral', title: '吧唧币', templet: '#integralTpl', width: 120 }
, { field: 'score', title: '积分', templet: '#scoreTpl', width: 120 }
, { field: 'combined', title: '货币信息', templet: '#combinedTpl', width: 200 }
, {
field: 'status', title: '用户状态', templet: '#statusTpl', width: 200
}
, {
field: 'addtime', title: '注册时间', width: 160, templet: function (d) {
var date = new Date(d.addtime * 1000);
var year = date.getFullYear();
var month = ('0' + (date.getMonth() + 1)).slice(-2);
var day = ('0' + date.getDate()).slice(-2);
var hours = ('0' + date.getHours()).slice(-2);
var minutes = ('0' + date.getMinutes()).slice(-2);
var seconds = ('0' + date.getSeconds()).slice(-2);
return year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds;
}
}
, { field: 'last_login_ip', title: 'IP', width: 150 }
, { field: 'ip_province', title: 'IP地址', width: 160 }
, { field: 'ip_adcode', title: 'IP邮编', width: 100 }
, { title: '操作', toolbar: '#operationTpl', width: 300, fixed: 'right' }
]]
, page: true
, limit: 20
, text: {
none: '暂无相关数据'
}
});
// 监听工具条事件
table.on('tool(LAY-user-table)', function (obj) {
var data = obj.data;
switch (obj.event) {
case 'give':
layer.open({
type: 2
, title: '赠送优惠券'
, content: '/admin/user_give_add/user_id/' + data.id
, area: ['600px', '400px']
});
break;
case 'ban':
userStatusChange(data.id, 2, data.nickname, '封号');
break;
case 'unban':
userStatusChange(data.id, 1, data.nickname, '解封');
break;
case 'setPromotion':
testAccountChange(data.id, 1, data.nickname, '设为推广账号');
break;
case 'setTest':
testAccountChange(data.id, 2, data.nickname, '设为测试账号');
break;
case 'cancelPromotion':
testAccountChange(data.id, 0, data.nickname, '取消推广账号');
break;
case 'cancelTest':
testAccountChange(data.id, 0, data.nickname, '取消测试账号');
break;
case 'detail':
layer.open({
type: 2
, title: '下级用户'
, content: '/admin/user_team?id=' + data.id
, area: ['80%', '80%']
});
break;
case 'ipDetail':
layer.open({
type: 2
, title: 'IP登录记录'
, content: '/admin/ip_list?id=' + data.id
, area: ['80%', '80%']
});
break;
case 'ipConvert':
ipConvert(data.id, 2, data.nickname);
break;
case 'clearMobile':
clearMobile(data.id, data.nickname);
break;
case 'clearWechat':
clearWechat(data.id, data.nickname);
break;
case 'rechargeMoney':
recharge(data.id, data.nickname, 1, '余额');
break;
case 'rechargeIntegral':
recharge(data.id, data.nickname, 2, '吧唧币');
break;
case 'rechargeScore':
recharge(data.id, data.nickname, 3, '积分');
break;
}
});
// 搜索
var active = {
search: function () {
var user_id = $('input[name="user_id"]').val()
, mobile = $('input[name="mobile"]').val()
, nickname = $('input[name="nickname"]').val()
, last_login_ip = $('input[name="last_login_ip"]').val()
, addtime = $('input[name="addtime"]').val();
table.reload('LAY-user-table', {
where: {
user_id: user_id
, mobile: mobile
, nickname: nickname
, last_login_ip: last_login_ip
, addtime: addtime
}
, page: {
curr: 1
}
});
}
};
$('.layui-btn').on('click', function () {
var type = $(this).data('type');
active[type] ? active[type].call(this) : '';
});
// 用户状态变更
function userStatusChange(id, type, username, typeName) {
layer.confirm('确认要执行' + username + '的' + typeName + '操作吗?', function (index) {
$.post('{:url("/admin/userdel")}', {
id: id,
type: type
}, function (res) {
if (res.status === 1) {
layer.msg(res.msg, { icon: 1 });
table.reload('LAY-user-table');
} else {
layer.msg(res.msg, { icon: 2 });
}
});
layer.close(index);
});
}
// 充值功能
function recharge(id, username, type, typeName) {
layer.open({
type: 2
, title: username + ' 充值' + typeName
, content: '/admin/chongzhi?id=' + id + '&type=' + type
, area: ['40%', '40%']
});
}
// 测试/推广账号状态变更
function testAccountChange(id, type, username, typeName) {
layer.confirm('确认要执行' + username + '的' + typeName + '操作吗?', function (index) {
$.post('{:url("/admin/usertest")}', {
id: id,
type: type
}, function (res) {
if (res.status === 1) {
layer.msg(res.msg, { icon: 1 });
table.reload('LAY-user-table');
} else {
layer.msg(res.msg, { icon: 2 });
}
});
layer.close(index);
});
}
// IP转换
function ipConvert(id, type, username) {
layer.confirm('确认要执行' + username + '的IP转换操作吗?', function (index) {
$.post('{:url("/admin/ipzh")}', {
id: id,
type: type
}, function (res) {
if (res.status === 1) {
layer.msg(res.msg, { icon: 1 });
table.reload('LAY-user-table');
} else {
layer.msg(res.msg, { icon: 2 });
}
});
layer.close(index);
});
}
// 清空手机号
function clearMobile(id, username) {
layer.confirm('确认要执行' + username + '的清空手机号操作吗?清空后通过手机号将搜索不到用户!同时用户需要重新绑定手机号才能抽奖!', {
icon: 2,
title: '清除手机号'
}, function (index) {
$.post('{:url("/admin/usermobileclear")}', {
id: id
}, function (res) {
if (res.status === 1) {
layer.msg(res.msg + ';请手动刷新页面!', { icon: 1 });
} else {
layer.msg(res.msg, { icon: 2 });
}
});
layer.close(index);
});
}
// 清除微信
function clearWechat(id, username) {
layer.confirm('确认要执行' + username + '的清空微信关联数据操作吗?清空后通过微信号将关联不到此账号!微信设为新账号需要同时清除手机号操作!!!', {
icon: 2,
title: '清除微信号'
}, function (index) {
$.post('{:url("/admin/userwxclear")}', {
id: id
}, function (res) {
if (res.status === 1) {
layer.msg(res.msg + ';请手动刷新页面!', { icon: 1 });
} else {
layer.msg(res.msg, { icon: 2 });
}
});
layer.close(index);
});
}
});
</script>
<style>
/* 用户信息卡片样式 */
.user-card {
display: flex;
align-items: center;
padding: 8px;
}
.user-avatar {
width: 50px;
height: 50px;
border-radius: 50%;
object-fit: cover;
}
.user-info {
margin-left: 12px;
}
.user-id {
color: #e91e63;
font-size: 12px;
margin-bottom: 4px;
}
.user-detail {
color: rgba(102, 102, 102, 0.73);
font-size: 12px;
margin-bottom: 2px;
}
/* 操作按钮组样式 */
.btn-group {
display: flex;
flex-wrap: wrap;
gap: 8px;
padding: 8px 0;
}
/* 搜索表单样式 */
.search-form {
display: flex;
flex-wrap: wrap;
gap: 12px;
padding: 16px;
}
.search-item {
min-width: 150px;
}
/* 表格样式优化 */
.layui-table {
margin-top: 16px;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
}
.layui-table thead th {
background-color: #f8f8f8;
font-weight: bold;
}
.layui-table td,
.layui-table th {
padding: 10px 15px;
/* 调整单元格内边距 */
height: 80px !important;
}
/* 充值按钮样式 */
.layui-table .layui-btn-xs {
margin-top: 5px;
/* 给充值按钮添加上边距 */
height: 22px;
line-height: 22px;
padding: 0 5px;
}
/* 数值显示样式 */
.value-display {
margin-bottom: 5px;
/* 数值和按钮之间的间距 */
display: block;
}
.layui-table-cell {
height: 100% !important;
line-height: 28px;
padding: 0 15px;
position: relative;
box-sizing: border-box
}
.status-group {
display: flex;
flex-direction: column;
gap: 8px;
}
.status-text {
color: #333;
font-size: 13px;
}
.status-actions {
display: flex;
flex-wrap: wrap;
gap: 4px;
}
.status-actions .layui-btn-xs {
height: 22px;
line-height: 22px;
padding: 0 8px;
}
.combined-values div {
margin: 0;
padding: 2px 0;
}
</style>
</body>
</html>