197 lines
9.7 KiB
PHP
197 lines
9.7 KiB
PHP
<?php
|
|
require_once 'functions.php';
|
|
|
|
if (!isLoggedIn() || !isAdmin()) {
|
|
header('Location: auth.php');
|
|
exit;
|
|
}
|
|
|
|
$pdo = getDB();
|
|
$message = null;
|
|
|
|
// 处理管理操作
|
|
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|
$action = $_POST['action'] ?? '';
|
|
|
|
switch ($action) {
|
|
case 'update_credits':
|
|
$targetUser = intval($_POST['user_id']);
|
|
$amount = intval($_POST['amount']);
|
|
$type = $_POST['type'];
|
|
|
|
if ($type === 'add') {
|
|
addCredits($targetUser, $amount);
|
|
$message = ['success' => true, 'message' => '积分添加成功。'];
|
|
} else {
|
|
$result = deductCredits($targetUser, $amount);
|
|
$message = $result;
|
|
}
|
|
break;
|
|
|
|
case 'delete_user':
|
|
$userId = intval($_POST['user_id']);
|
|
if ($userId == getCurrentUserId()) {
|
|
$message = ['success' => false, 'message' => '不能删除自己的账号。'];
|
|
} else {
|
|
$stmt = $pdo->prepare("DELETE FROM users WHERE id = ?");
|
|
$stmt->execute([$userId]);
|
|
$message = ['success' => true, 'message' => '用户已删除。'];
|
|
}
|
|
break;
|
|
|
|
case 'toggle_admin':
|
|
$userId = intval($_POST['user_id']);
|
|
$isAdmin = intval($_POST['is_admin']);
|
|
$newStatus = $isAdmin ? 0 : 1;
|
|
$stmt = $pdo->prepare("UPDATE users SET is_admin = ? WHERE id = ?");
|
|
$stmt->execute([$newStatus, $userId]);
|
|
$message = ['success' => true, 'message' => '成功更新管理员的状态。'];
|
|
break;
|
|
}
|
|
}
|
|
|
|
// 获取所有用户
|
|
$users = $pdo->query("SELECT * FROM users ORDER BY created_at DESC")->fetchAll();
|
|
|
|
$currentTheme = getTheme();
|
|
?>
|
|
<!DOCTYPE html>
|
|
<html lang="zh-CN" data-theme="<?php echo $currentTheme; ?>">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>后台管理 - <?php echo SITE_NAME; ?></title>
|
|
<link rel="preload" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/7.0.0/css/all.min.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
|
<link rel="stylesheet" href="style.css">
|
|
</head>
|
|
<body>
|
|
<div class="container">
|
|
<header>
|
|
<div class="header-content">
|
|
<h1><i class="fas fa-crown"></i> 管理面板</h1>
|
|
<div class="header-actions">
|
|
<a href="dashboard.php" class="btn btn-primary btn-sm">
|
|
<i class="fas fa-arrow-left"></i> 返回面板
|
|
</a>
|
|
<form method="POST" style="display: inline;">
|
|
<input type="hidden" name="action" value="toggle_theme">
|
|
<button type="submit" class="theme-toggle" title="切换主题">
|
|
<i class="fas <?php echo $currentTheme === 'dark' ? 'fa-sun' : 'fa-moon'; ?>"></i>
|
|
</button>
|
|
</form>
|
|
<form method="POST" style="display: inline;">
|
|
<input type="hidden" name="action" value="logout">
|
|
<button type="submit" class="btn btn-danger btn-sm" style="background:transparent;border:1px solid var(--border-color);color:var(--text-secondary);">
|
|
<i class="fas fa-sign-out-alt"></i> 退出
|
|
</button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</header>
|
|
|
|
<?php if ($message): ?>
|
|
<div class="alert alert-<?php echo $message['success'] ? 'success' : 'error'; ?>">
|
|
<i class="fas <?php echo $message['success'] ? 'fa-check-circle' : 'fa-exclamation-circle'; ?>"></i>
|
|
<?php echo htmlspecialchars($message['message']); ?>
|
|
</div>
|
|
<?php endif; ?>
|
|
|
|
<!-- 统计 -->
|
|
<div class="stats-grid">
|
|
<div class="stat-card">
|
|
<div class="number"><?php echo count($users); ?></div>
|
|
<div class="label"><i class="fas fa-users"></i> 总用户</div>
|
|
</div>
|
|
<div class="stat-card">
|
|
<div class="number" style="color:var(--accent-green);">
|
|
<?php
|
|
$verified = array_filter($users, fn($u) => $u['is_verified']);
|
|
echo count($verified);
|
|
?>
|
|
</div>
|
|
<div class="label"><i class="fas fa-check-circle"></i> 已验证</div>
|
|
</div>
|
|
<div class="stat-card">
|
|
<div class="number" style="color:var(--accent-yellow);">
|
|
<?php
|
|
$admins = array_filter($users, fn($u) => $u['is_admin']);
|
|
echo count($admins);
|
|
?>
|
|
</div>
|
|
<div class="label"><i class="fas fa-crown"></i> 管理员</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 用户列表 -->
|
|
<div class="card">
|
|
<div class="card-header">
|
|
<h2><i class="fas fa-list"></i> 用户管理</h2>
|
|
<span class="badge"><?php echo count($users); ?></span>
|
|
</div>
|
|
<div class="card-body">
|
|
<?php foreach ($users as $user): ?>
|
|
<div class="user-row">
|
|
<div class="user-info">
|
|
<strong><?php echo htmlspecialchars($user['username']); ?></strong>
|
|
<span style="color:var(--text-secondary);font-size:13px;">
|
|
<?php echo htmlspecialchars($user['email']); ?>
|
|
</span>
|
|
<span class="user-badge <?php echo $user['is_admin'] ? 'admin' : 'user'; ?>">
|
|
<?php echo $user['is_admin'] ? '👑 管理员' : '用户'; ?>
|
|
</span>
|
|
<span class="user-badge <?php echo $user['is_verified'] ? 'verified' : 'unverified'; ?>">
|
|
<?php echo $user['is_verified'] ? '✅ 已验证' : '❌ 未验证'; ?>
|
|
</span>
|
|
<span style="color:var(--accent-yellow);font-size:14px;">
|
|
<i class="fas fa-coins"></i> <?php echo $user['credits']; ?>
|
|
</span>
|
|
<span style="font-size:12px;color:var(--text-muted);">
|
|
<?php echo date('Y-m-d', strtotime($user['created_at'])); ?>
|
|
</span>
|
|
<?php if ($user['invite_code']): ?>
|
|
<span style="font-size:12px;color:var(--text-muted);">
|
|
<i class="fas fa-gift"></i> <?php echo htmlspecialchars($user['invite_code']); ?>
|
|
</span>
|
|
<?php endif; ?>
|
|
</div>
|
|
<div class="admin-actions">
|
|
<!-- 修改积分 -->
|
|
<form method="POST" style="display:inline-flex;gap:4px;align-items:center;" onsubmit="return confirm('确定要修改积分吗?');">
|
|
<input type="hidden" name="action" value="update_credits">
|
|
<input type="hidden" name="user_id" value="<?php echo $user['id']; ?>">
|
|
<input type="number" name="amount" value="5" style="width:60px;padding:4px 6px;border-radius:4px;border:1px solid var(--border-color);background:var(--bg-input);color:var(--text-primary);">
|
|
<select name="type" style="padding:4px 6px;border-radius:4px;border:1px solid var(--border-color);background:var(--bg-input);color:var(--text-primary);">
|
|
<option value="add">+</option>
|
|
<option value="deduct">-</option>
|
|
</select>
|
|
<button type="submit" class="btn btn-primary btn-sm" style="padding:4px 10px;">积分</button>
|
|
</form>
|
|
|
|
<!-- 切换管理员 -->
|
|
<form method="POST" style="display:inline;" onsubmit="return confirm('确定要切换管理员状态吗?');">
|
|
<input type="hidden" name="action" value="toggle_admin">
|
|
<input type="hidden" name="user_id" value="<?php echo $user['id']; ?>">
|
|
<input type="hidden" name="is_admin" value="<?php echo $user['is_admin']; ?>">
|
|
<button type="submit" class="btn btn-sm" style="background:var(--bg-primary);border:1px solid var(--border-color);color:var(--text-secondary);padding:4px 10px;">
|
|
<?php echo $user['is_admin'] ? '降级' : '升级'; ?>
|
|
</button>
|
|
</form>
|
|
|
|
<!-- 删除用户 -->
|
|
<?php if ($user['id'] != getCurrentUserId()): ?>
|
|
<form method="POST" style="display:inline;" onsubmit="return confirm('确定要删除用户 <?php echo htmlspecialchars($user['username']); ?> 吗?此操作不可恢复!');">
|
|
<input type="hidden" name="action" value="delete_user">
|
|
<input type="hidden" name="user_id" value="<?php echo $user['id']; ?>">
|
|
<button type="submit" class="btn btn-danger btn-sm" style="padding:4px 10px;">
|
|
<i class="fas fa-trash"></i>
|
|
</button>
|
|
</form>
|
|
<?php endif; ?>
|
|
</div>
|
|
</div>
|
|
<?php endforeach; ?>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|