// +---------------------------------------------------------------------- declare (strict_types = 1); namespace addon\blog\controller\backend; use ywxapp\model\MemberUser as UserModel; use addon\blog\model\BlogArticle as ArticleModel; use think\facade\Request; use think\facade\View; use ywxapp\controller\BackendBase; /** * Member 类 * * @author ywxapp */ class Member extends BackendBase { protected $noNeedVerify = ['*']; protected function initialize() {} /** * 用户列表(ajax 请求返回 layui table 所需 JSON,普通请求渲染视图) * 这里管理的是全站用户(博客作者 / 会员),与博客文章通过 uid 关联。 */ public function index() { $status = Request::param('status', 'all'); $keyword = Request::param('keyword', ''); $page = Request::param('page', 1); $limit = Request::param('limit', 15); if (Request::isAjax()) { $query = UserModel::where('delete_at', null); if ($status !== 'all') { $query->where('status', $status); } if ($keyword) { $query->where('account|nickname|email|mobile', 'like', "%{$keyword}%"); } $paginator = $query->order('create_at', 'desc') ->paginate(['list_rows' => $limit, 'page' => $page]); $items = $paginator->items(); $uids = array_column($items, 'uid'); $counts = []; if ($uids) { $counts = ArticleModel::whereIn('uid', $uids) ->group('uid') ->column('COUNT(*)', 'uid'); } $statusMap = [1 => '正常', 0 => '禁用', -1 => '删除']; $rows = []; foreach ($items as $u) { $rows[] = [ 'uid' => $u->uid, 'account' => $u->account, 'nickname' => $u->nickname, 'email' => $u->email, 'mobile' => $u->mobile, 'status' => $u->status, 'status_text' => $statusMap[$u->status] ?? '未知', 'article_count' => $counts[$u->uid] ?? 0, 'create_at' => $u->create_at ? date('Y-m-d H:i', $u->create_at) : '-', 'update_at' => $u->update_at ? date('Y-m-d H:i', $u->update_at) : '从未登录', 'edit_url' => (string) url('blog/backend.user/edit', ['id' => $u->uid]), ]; } return json([ 'code' => 0, 'msg' => '', 'count' => $paginator->total(), 'data' => $rows, ]); } return View::fetch('user/index', [ 'status' => $status, 'keyword' => $keyword, ]); } /** * 编辑用户页面 */ public function edit($id = null) { $user = UserModel::find($id); if (! $user) { return redirect('/blog/backend/user'); } return View::fetch('user/edit', ['member' => $user]); } /** * 更新用户 */ public function update($id) { $user = UserModel::find($id); if (! $user) { return json(['code' => 0, 'msg' => '用户不存在']); } $data = Request::post(); $user->nickname = $data['nickname'] ?? $user->nickname; $user->email = $data['email'] ?? $user->email; $user->mobile = $data['mobile'] ?? $user->mobile; $user->status = (int) ($data['status'] ?? $user->status); $user->update_at = time(); $user->save(); return json(['code' => 1, 'msg' => '用户更新成功', 'url' => '/blog/backend/user']); } /** * 删除用户(软删除,Member 模型已启用 SoftDelete) */ public function delete($id) { $user = UserModel::find($id); if ($user) { $user->delete(); return json(['code' => 1, 'msg' => '用户已删除']); } return json(['code' => 0, 'msg' => '用户不存在']); } /** * 批量删除用户 */ public function batch() { $ids = Request::post('ids/a'); if (empty($ids)) { return json(['code' => 0, 'msg' => '请选择用户']); } UserModel::destroy($ids); return json(['code' => 1, 'msg' => '批量删除成功']); } }