123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519 |
- <?php
- namespace App\Admin\Controllers\User;
- use App\Admin\Actions\Extensions\ImportRobotUserButton;
- use App\Admin\Actions\Extensions\UserNoticeButton;
- use App\Admin\Actions\Grid\User\UserBanAndMuteAction;
- use App\Admin\Actions\Grid\User\UserGenderManAction;
- use App\Admin\Actions\Grid\User\UserGenderWomanAction;
- use App\Admin\Actions\Grid\User\UserCoinAction;
- use App\Admin\Actions\Grid\User\UserFinancialAction;
- use App\Admin\Actions\Grid\User\UserJewelryAction;
- use App\Admin\Actions\Grid\User\UserMemberAction;
- use App\Admin\Actions\Grid\User\UserPaycodeUpdateAction;
- use App\Admin\Actions\Grid\User\UserRealNameAction;
- use App\Admin\Actions\Grid\User\UserShareAction;
- use App\Admin\Metrics\Users\AuthUsers;
- use App\Admin\Repositories\User\WxUser;
- use App\Jobs\UpdateUserInfoJob;
- use App\Models\User\WxUserOnline;
- use App\Wen\Utils\GatewayUtils;
- use App\Wen\Utils\Settings;
- use App\Wen\Utils\UserUtils;
- use Dcat\Admin\Form;
- use Dcat\Admin\Grid;
- use Dcat\Admin\Show;
- use Dcat\Admin\Http\Controllers\AdminController;
- use App\Admin\Metrics\Users\TotalUsers;
- use App\Admin\Metrics\Users\VipUsers;
- use Dcat\Admin\Layout\Content;
- use Dcat\Admin\Layout\Row;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\Cache;
- use App\Models\Conditions;
- use App\Http\Controllers\Api\ConditionsController;
- class WxUserController extends AdminController
- {
- public function users(Request $request)
- {
- $q = $request->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 .'<br/>'.
- // '会员' . $this->is_member.'<br/>'.
- // '官方' . $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 '<span title="'.($this->country.'-'.$this->province.'-'.$this->city.'-'.$this->district).'">'.$v.'</span>';
- });
- }else if($ip_show == 2){
- $grid->column('province')->display(function ($v){
- return '<span title="'.($this->country.'-'.$this->province.'-'.$this->city.'-'.$this->district).'">'.$v.'</span>';
- });
- }else if($ip_show == 3){
- $grid->column('city')->display(function ($v){
- return '<span title="'.($this->country.'-'.$this->province.'-'.$this->city.'-'.$this->district).'">'.$v.'</span>';
- });
- }else if($ip_show == 3){
- $grid->column('district')->display(function ($v){
- return '<span title="'.($this->country.'-'.$this->province.'-'.$this->city.'-'.$this->district).'">'.$v.'</span>';
- });
- }else{
- $grid->column('city')->display(function ($v){
- return '<span title="'.($this->country.'-'.$this->province.'-'.$this->city.'-'.$this->district).'">'.$v.'</span>';
- });
- }
- $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 '<a href="'.admin_url('users?id='.$v).'" target="_blank">'.UserUtils::get_cached_user_name($v).'</a>';
- }
- 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->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代表默认同步 [<a href="'.admin_url('invite_benefit/config').'" target="_blank">邀请裂变-配置</a>]中的即时邀请收益,但这里的优先级更高,比如你配置为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('权限不足,不可以删除其他分站对象');
- }
- });
- });
- }
- }
|