filled('q')) { $search = '%' . $request->input('q'). '%'; $query->where(fn($q) => $q->where('phone', 'like', $search)->orWhere('name', 'like', $search)); } if ($request->filled('none_merchant') || $request->filled('amp;none_merchant')) { $query->whereDoesntHave('merchants'); } $query->select(['id', 'phone as text']); if ($request->filled('_paginate')) { $list = $query->paginate(); } else { $list = $query->get(); } return $list; } protected function grid() { return Grid::make(User::with(['inviter']), function (Grid $grid) { $grid->model()->sort(); $grid->disableRowSelector(); $grid->column('id'); $grid->column('name')->display(function () { return ($this->avatar ? '' : '') . $this->name; }); $grid->column('phone'); $grid->column('balance'); $grid->column('inviter.phone'); $grid->column('created_at'); $user = Admin::user(); $grid->showCreateButton($user->can('dcat.admin.users.create')); $grid->showViewButton($user->can('dcat.admin.users.show')); $grid->showEditButton($user->can('dcat.admin.users.edit')); $grid->showDeleteButton($user->can('dcat.admin.users.destroy')); $grid->filter(function (Filter $filter) { $filter->panel(); $filter->where('name', function ($q) { $search = '%'.$this->input.'%'; $q->where(fn($q) => $q->where('username', 'like', $search)->orWhere('name', 'like', $search)->orWhere('phone', 'like', $search)); }, '搜索')->placeholder('姓名/手机号')->width(3); }); }); } protected function form() { return Form::make(new User(), function (Form $form) { $uniquePhone = Rule::unique('users', 'phone'); if ($form->isEditing()) { $uniquePhone->ignore($form->model()->id); } $form->text('phone')->rules([$uniquePhone])->required(); $form->text('name')->required(); $form->image('avatar')->autoUpload()->saveFullUrl()->move('user/avatar'); $form->select('inviter_id')->model(User::class, 'id', 'name')->ajax('api/user?_paginate=1'); $form->hidden('inviter_path'); $form->hidden('invite_code'); $form->saving(function (Form $form) { $form->inviter_path = $form->inviter_id ? User::where('id', $form->inviter_id)->value('inviter_path') . $form->inviter_id.'-' : null; if (!$form->invite_code) { do { $invite_code = strtoupper(Str::random(6)); } while(User::where('invite_code', $invite_code)->exists()); $form->invite_code = $invite_code; } }); $form->deleting(function (Form $form) { $data = $form->model()->toArray(); $ids = array_column($data, 'id'); // 删除用户的登录信息 UserSocialite::whereIn('user_id', $ids)->delete(); foreach($ids as $id) { $current = User::findOrFail($id); // 删除用户的邀请信息 $users = User::where('inviter_path', 'like', '%-'.$id.'-%')->get(); foreach($users as $user) { $user->inviter_path = str_replace('-'.$id.'-', '-', $user->inviter_path); $ids = explode('-', $user->inviter_path); $user->inviter_id = count($ids) > 2 ? $ids[count($ids) - 2] : null; $user->save(); } } }); }); } protected function detail($id) { $info = User::with(['inviter', 'inviteUsers', 'socialites'])->findOrFail($id); $show = Show::make($info); $show->field('name'); $show->field('gender'); $show->field('phone'); $show->field('avatar')->image('', 64); $show->field('inviter.phone'); $show->field('invite_code'); $show->field('balance'); $show->field('profit'); $show->field('created_at'); $show->tools(function (Tools $tools) { $tools->disableBack(); $tools->disableList(false); }); $tab = new Tab(); $keys = ['id', 'username', 'name', 'phone', 'created_at']; $inviteUsers = $info->inviteUsers->map(function ($item) { return [$item->id, $item->username, $item->name, $item->phone, $item->created_at->format('Y-m-d H:i:s')]; }); $headers = array_map(fn($v) => __($this->translation . '.fields.' . $v), $keys); $table = new Table($headers, $inviteUsers, ['table-hover']); $tab->add('邀请用户', $table); $keys = ['type', 'openid', 'created_at']; $socialites = $info->socialites->map(function ($item) { return [$item->type->text(), $item->openid, $item->created_at->format('Y-m-d H:i:s')]; }); $table = new Table($keys, $socialites, ['table-hover']); $tab->add('绑定账户', $table); $row = new Row(); $row->column(6, $show); $row->column(6, (new Card('', $tab))); return $row; } }