Files
YwxAppThink/addon/blog/controller/backend/User.php
T

159 lines
4.9 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
// +----------------------------------------------------------------------
// | YwxApp [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2026-2036 http://ywxapp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: ywxapp<admin@ywxapp.cn>
// +----------------------------------------------------------------------
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 <admin@ywxapp.cn>
*/
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' => '批量删除成功']);
}
}