get('q');
global $__MINI_GLOBAL_TENANT_ID__;
if($__MINI_GLOBAL_TENANT_ID__ > 0){
return \App\Models\User\WxUser::where('tenant_id', $__MINI_GLOBAL_TENANT_ID__)->where('user_name', 'like', "%$q%")->where(
function ($query) use ($q){
$query->orWhere('id', (int)$q);
}
)->paginate(null, ['id', 'user_name as text']);
}
return \App\Models\User\WxUser::where('user_name', 'like', "%$q%")->orWhere('id', (int)$q)->paginate(null, ['id', 'user_name as text']);
}
public function index(Content $content)
{
return $content
->header('用户')
->description('全部用户')
->body(function (Row $row) {
$row->column(4,new TotalUsers());
$row->column(4,new AuthUsers());
$row->column(4,new VipUsers());
})
->body($this->grid());
}
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
$ip_show = Settings::get('app_ip_user_show', 3);
return Grid::make(new WxUser(), function (Grid $grid) use ($ip_show){
$grid->simplePaginate();
$grid->model()->leftJoin('wx_user_online', 'wx_user.id', '=', 'wx_user_online.user_id');
global $__MINI_GLOBAL_TENANT_ID__;
if($__MINI_GLOBAL_TENANT_ID__ > 0){
$grid->model()->where('tenant_id', '=', $__MINI_GLOBAL_TENANT_ID__);
}
$grid->quickSearch(['id', 'user_name', 'phone', 'email', 'weixin_openid', 'weixin_unionid', 'weixin_app_openid', 'weixin_mp_openid', 'weixin_web_openid', 'weixin_shop_openid'])->placeholder('搜索与用户id,用户名,手机号,邮箱...')->width(35);
$grid->model()->orderBy('id','desc');
$grid->showColumnSelector();
$grid->column('id')->sortable();
$grid->column('user_name');
$grid->column('user_avatar')->image('',50);
// $grid->column('user_background_maps')->image('',50);
// $grid->column('user_background_maps');
// $grid->column('user_introduce');
// $grid->column('user_birthday');
// $grid->column('user_mobile');
// $grid->column('weixin_name')->explode()->label();
// $grid->column('weixin_openid');
$grid->column('a','其他')->display('更多内容')->modal('详情',function ($res){
$user = $this;
$user->origin_phone = _get_origin_attribute('wx_user', [['id', '=', $user->id]], 'phone');
$user->online = WxUserOnline::where('user_id', $user->id)->first();
return view('admin/user/info',compact('user'));
});
// $grid->column('country');
// $grid->column('province');
// $grid->column('city');
// $grid->column('others')->display(function () {
// return '认证:'. $this->is_authentication .'
'.
// '会员' . $this->is_member.'
'.
// '官方' . $this->is_official ? '是':'否';
// });
$grid->column('gender')->using([0 => '未知',1 => '男',2 => '女'])->label([
0 => 'default',
1 => '#1E9FFF',
2 => '#FF69B4'
])->sortable();
// $grid->column('authentication_id');
if($__MINI_GLOBAL_TENANT_ID__ > 0){
$grid->column('is_official')->display(function ($v) use ($__MINI_GLOBAL_TENANT_ID__){
if(get_user_meta($this->id, 'tenant_id_'.$__MINI_GLOBAL_TENANT_ID__, 'n') == 1){
return true;
}else{
return false;
}
})->switch();
}else{
$grid->column('is_official')->switch()->sortable();
}
$grid->column('is_authentication')->switch()->sortable();;
$grid->column('is_yy')->switch()->sortable();
$grid->column('real_name','真实姓名');
$grid->column('is_member')->using([0=>'否',1=>'是'])->label([
0 => 'gray',
1 => 'primary'
])->sortable();
$grid->column('is_xiangqin_status','相亲展示')->switch()->sortable();
if($ip_show == 1){
$grid->column('country')->display(function ($v){
return ''.$v.'';
});
}else if($ip_show == 2){
$grid->column('province')->display(function ($v){
return ''.$v.'';
});
}else if($ip_show == 3){
$grid->column('city')->display(function ($v){
return ''.$v.'';
});
}else if($ip_show == 3){
$grid->column('district')->display(function ($v){
return ''.$v.'';
});
}else{
$grid->column('city')->display(function ($v){
return ''.$v.'';
});
}
$grid->column('user_state')->using([0=>'正常',1=>'用户注销',2=>'管理员封号', 3=>'禁言'])->label([
0 => 'primary',
1 => 'red',
2 =>'gray',
3 => 'gray'
])->sortable();
// $grid->column('follow_mp_state', '服务号')->using([0=>'未知',1=>'取关',2=>'已关'])->label([
// 0 => 'gray',
// 1 => 'gray',
// 2 =>'primary'
// ]);
// $grid->column('push_client_id', '推送cid');
$grid->column('who')->display(function ($v){
if($v > 0){
return ''.UserUtils::get_cached_user_name($v).'';
}
return '';
})->sortable();
if($__MINI_GLOBAL_TENANT_ID__ === 0){
$grid->column('invite_benefit')->display(function ($v){
if($v == -1){
return '';
}
return $v;
})->editable()->sortable();
$grid->column('invite_benefit_layer')->select([1=>'普通用户', 2=>'推广专员', 3=>'合伙人']);
}
$grid->column('invite_count')->display(function ($v){
return $v > 0 ? $v.'人' : 0;
})->modal('邀请列表',function ($res){
$user_list = \App\Models\User\WxUser::where('who', $this->id)->where('user_state', 0)->orderBy('created_at', 'desc')->get()->toArray();
return view('admin/user/invite',compact('user_list'));
});
$grid->column('created_at','注册于')->sortable()->display(function ($v){
if($v){
return format_datetime($v->timestamp, 2);
}
return '未知';
});
//$grid->column('online', '最后在线')->display(function ($v){
// return UserUtils::get_user_online_time($this->id, true);
// });
$grid->column('online', '最后在线')->sortable()->display(function ($v){
return UserUtils::get_user_online_time($this->id, true);
});
// $grid->model()->with('online')
// ->leftJoin('wx_user_online', 'wx_user.id', '=', 'wx_user_online.user_id')
// ->orderBy('wx_user_online.online', 'desc');
$grid->column('b','相亲信息')->display('相亲详情')->modal('相亲详情',function ($res){
$user = $this;
$user->origin_phone = _get_origin_attribute('wx_user', [['id', '=', $user->id]], 'phone');
$user->online = WxUserOnline::where('user_id', $user->id)->first();
$conditions = (new ConditionsController())->getConditionsDetailAdmin($user->id);
$getSettings = (new ConditionsController())->getSettings(2);
// 获取 choose_content 所选中的数据
$choose_content = $conditions['choose_content'] ?? [];
$arr_ss = array_filter($getSettings['choose_content'], function($val) use ($choose_content) {
return in_array(trim($val['id']), $choose_content);
});
$arr_ss = array_values($arr_ss);
$conditions['choose_content_list'] = $arr_ss;
//print_r($conditions);exit;
return view('admin/user/xiangqin',compact('user','conditions'));
});
$grid->filter(function (Grid\Filter $filter) {
$filter->equal('id');
$filter->like('user_name');
$filter->equal('gender')->select([0 => '未知',1 => '男',2 => '女']);
$filter->like('city');
$filter->equal('is_official')->select([0=>'否',1=>'是']);
$filter->equal('is_robot')->select([0=>'普通用户', 1=>'待绑定机器人', 2=>'已绑定机器人']);
$filter->equal('who');
$filter->equal('user_state')->select([0=>'正常',1 => '用户注销', 2 => '管理员封号', 3 => '禁言']);
});
// $grid->disableBatchDelete();
// $grid->disableDeleteButton();
if($__MINI_GLOBAL_TENANT_ID__ > 0){
$grid->disableCreateButton();
$grid->disableDeleteButton();
$grid->disableBatchDelete();
}
$grid->batchActions(function ($batch) {
$batch->add(new UserGenderManAction());
$batch->add(new UserGenderWomanAction());
});
$grid->actions(function (Grid\Displayers\Actions $actions) {
global $__MINI_GLOBAL_TENANT_ID__;
if($__MINI_GLOBAL_TENANT_ID__ === 0){
// 编辑
$actions->edit();
$actions->append((new UserPaycodeUpdateAction())->setKey($this->id));
$actions->append((new UserMemberAction())->setKey($this->id));
$actions->append((new UserCoinAction())->setKey($this->id));
$actions->append((new UserFinancialAction())->setKey($this->id));
$actions->append((new UserRealNameAction())->setKey($this->id));
}
$actions->append((new UserJewelryAction())->setKey($this->id));
$actions->append((new UserBanAndMuteAction())->setKey($this->id));
$actions->append((new UserShareAction())->setKey($this->id));
});
if($__MINI_GLOBAL_TENANT_ID__ === 0){
$grid->tools([
new UserNoticeButton(),
new ImportRobotUserButton(),
]);
}
});
}
/**
* Make a show builder.
*
* @param mixed $id
*
* @return Show
*/
protected function detail($id)
{
return Show::make($id, new WxUser(), function (Show $show) {
global $__MINI_GLOBAL_TENANT_ID__;
$show->field('id');
$show->field('user_name');
$show->field('user_avatar');
$show->field('user_background_maps')->image();
$show->field('user_introduce');
$show->field('user_birthday');
$show->field('user_mobile');
$show->field('weixin_name');
$show->field('weixin_openid');
$show->field('weixin_unionid');
$show->field('weixin_mp_openid');
$show->field('weixin_app_openid');
$show->field('weixin_web_openid');
$show->field('weixin_shop_openid');
$show->field('phone');
$show->field('real_name');
$show->field('real_id_card');
$show->field('country_code');
$show->field('email');
$show->field('country');
$show->field('province');
$show->field('city');
$show->field('authentication_id');
$show->field('is_authentication');
$show->field('is_yy');
$show->field('is_xiangqin_status');
$show->field('is_member');
$show->field('is_official');
$show->field('who');
$show->field('invite_benefit');
$show->field('invite_benefit_layer');
$show->field('user_state');
$show->field('shop_id');
$show->field('push_client_id');
$show->field('is_robot');
$show->field('black_reason');
$show->field('created_at');
$show->field('updated_at');
$show->disableDeleteButton();
if($__MINI_GLOBAL_TENANT_ID__ > 0){
$show->disableEditButton();
}
});
}
/**
* Make a form builder.
*
* @return Form
*/
protected function form()
{
global $__MINI_GLOBAL_REQUEST_ENV__;
$__MINI_GLOBAL_REQUEST_ENV__ = 'api';
return Form::make(new WxUser(), function (Form $form) {
$uid = $form->model()->id;
$tenant_id = $form->model()->tenant_id;
global $__MINI_GLOBAL_TENANT_ID__;
if($__MINI_GLOBAL_TENANT_ID__ > 0){
if(get_user_meta($uid, 'tenant_id_'.$__MINI_GLOBAL_TENANT_ID__, 'n') == 1){
$form->model()->is_official = 1;
}else{
$form->model()->is_official = 0;
}
}
$is_xiangqin_status = $form->input('is_xiangqin_status');
if (isset($is_xiangqin_status)) {
if ($is_xiangqin_status == 1) {
Conditions::where('user_id', $uid)->update(['is_xiangqin_status' => 1]);
} else {
Conditions::where('user_id', $uid)->update(['is_xiangqin_status' => 0]);
}
// 更新当前用户 is_xiangqin_status 状态
\App\Models\User\WxUser::where('id', $uid)->update(['is_xiangqin_status' => $is_xiangqin_status]);
}
// 获取提交的值
$is_yy = $form->input('is_yy');
// 检测is_yy 是否提交
if (isset($is_yy)) {
if ($is_yy == 1) {
// 更新亿友
Conditions::where('user_id', $uid)->update(['is_yy' => 1]);
} else {
Conditions::where('user_id', $uid)->update(['is_yy' => 0]);
}
// 更新当前用户 is_yy 状态
\App\Models\User\WxUser::where('id', $uid)->update(['is_yy' => $is_yy]);
}
// 修改性别
$gender = $form->input('gender');
if (isset($gender)) {
if ($gender != 0) {
Conditions::where('user_id', $uid)->update(['sex' => $gender]);
}
\App\Models\User\WxUser::where('id', $uid)->update(['gender' => $gender]);
}
$old_user_name = $form->model()->user_name;
$old_user_avatar = $form->model()->user_avatar;
$old_user_state = $form->model()->user_state;
$form->display('id');
$form->radio('gender')->options([0 => '未知',1 => '男',2 => '女']);
$form->text('user_name');
$form->image('user_avatar')->url('files/uploads')->uniqueName()->autoUpload()->default(Settings::get('img_default_avatar', ''));
$form->image('user_background_maps')->url('files/uploads')->uniqueName()->autoUpload()->default(Settings::get('user_background_maps', ''));
$form->radio('is_authentication')->options([0=>'否',1=>'是'])->default(0);
$form->radio('is_official')->options([0=>'否',1=>'是'])->default(0);
// $form->radio('user_state')->options([0=>'正常',1=>'用户注销',2=>'管理员封号', 3=>'禁言']);
// $form->text('black_reason');
if($__MINI_GLOBAL_TENANT_ID__ === 0){
$form->select('who')->options(function ($id) {
if($id){
$user = \App\Models\User\WxUser::find($id);
if ($user) {
return [$user->id => $user->user_name];
}
}
return null;
})->ajax('select/users');
$form->decimal('invite_benefit')->help('-1代表默认同步 [邀请裂变-配置]中的即时邀请收益,但这里的优先级更高,比如你配置为0.5,则该用户邀请每人获益0.5元');
$form->select('invite_benefit_layer')->options([1=>'普通用户', 2=>'推广专员', 3=>'合伙人'])->default(1);
}
global $__MINI_GLOBAL_TENANT_ID__;
if($__MINI_GLOBAL_TENANT_ID__ > 0){
$form->text('tenant_id', '本站分应用id')->help('忽略这个配置')->default($__MINI_GLOBAL_TENANT_ID__);
}
$form->saving(function (Form $form) use ($uid, $tenant_id){
if(!_empty_($form->input('user_name'))){
$form->user_name = str_replace([' 💙🤖', ' 💗🤖', ' 🤖'], '', $form->input('user_name'));
if(\App\Models\User\WxUser::where('id', '<>', $uid)->where('user_name', $form->input('user_name'))->exists()){
return $form->response()->error('该用户名已存在,请换个名称');
}
}
global $__MINI_GLOBAL_TENANT_ID__;
if($form->isEditing()){
if($__MINI_GLOBAL_TENANT_ID__ > 0){
if($tenant_id != $__MINI_GLOBAL_TENANT_ID__){
return $form->response()->warning('分站不能修改其他分站的用户信息');
}
}
}else if($form->isCreating()){
$form->tenant_id = $__MINI_GLOBAL_TENANT_ID__;
}
if($__MINI_GLOBAL_TENANT_ID__ === 0){
if(_empty_($form->input('who'))){
$form->who = 0;
}
if(_empty_($form->input('invite_benefit')) || $form->input('invite_benefit') < 0){
$form->invite_benefit = -1;
}else{
$form->invite_benefit = round($form->input('invite_benefit'), 2);
}
}else{
$form->deleteInput('who');
$form->deleteInput('invite_benefit');
$form->deleteInput('invite_benefit_layer');
}
$form->weixin_openid = null;
$form->weixin_shop_openid = null;
if(!_empty_($form->is_official, true)){
if($__MINI_GLOBAL_TENANT_ID__ > 0){
if($form->is_official){
update_user_meta($uid, 'tenant_id_'.$__MINI_GLOBAL_TENANT_ID__, 1, 'n');
}else{
update_user_meta($uid, 'tenant_id_'.$__MINI_GLOBAL_TENANT_ID__, null, 'n');
}
$form->deleteInput('is_official');
}
}
});
$form->saved(function (Form $form) use ($old_user_name, $old_user_avatar, $uid, $old_user_state){
$data = $form->updates();
if(isset($data['user_name']) && ($old_user_name != $data['user_name'] || $old_user_avatar != $data['user_avatar'])){
UpdateUserInfoJob::dispatch($uid);
}
Cache::forget('get:cached:user:'.$uid);
GatewayUtils::success(GatewayUtils::uid2client_id($uid), 12);
// if($old_user_state == 2 && $data['user_state'] != 2){
// update_user_meta($uid, 'sql_injection_times', 0, 'n');
// }
$is_official = \App\Models\User\WxUser::where('is_official', 1)->pluck('id')->toArray();
if($is_official){
_update_env([
'APP_ADMIN_USER_ID' => implode(',', $is_official),
], [], 1);
}else{
_update_env([
'APP_ADMIN_USER_ID' => '',
], [], 1);
}
});
$form->deleting(function (Form $form){
global $__MINI_GLOBAL_TENANT_ID__;
if($__MINI_GLOBAL_TENANT_ID__ > 0){
return $form->response()->error('权限不足,不可以删除其他分站对象');
}
});
});
}
}