feat: 新增平台
This commit is contained in:
@@ -19,6 +19,7 @@
|
||||
<a href="/admin/dashboard" class="nav-item">仪表板</a>
|
||||
<a href="/admin/users" class="nav-item active">用户管理</a>
|
||||
<a href="/admin/apis" class="nav-item">接口管理</a>
|
||||
<a href="/admin/redeem-codes" class="nav-item">兑换码</a>
|
||||
<a href="/admin/config" class="nav-item">系统配置</a>
|
||||
<a href="/admin/logs" class="nav-item">日志审计</a>
|
||||
</nav>
|
||||
@@ -105,7 +106,12 @@
|
||||
<input type="hidden" id="editUserId">
|
||||
<div class="form-group">
|
||||
<label>用户分组</label>
|
||||
<select id="editGroupId" class="ui-input"></select>
|
||||
<select id="editGroupId" class="ui-input" onchange="onGroupChange()"></select>
|
||||
</div>
|
||||
<div class="form-group" id="expiryGroup" style="display: none;">
|
||||
<label>套餐到期时间</label>
|
||||
<input type="datetime-local" id="editExpiresAt" class="ui-input">
|
||||
<small style="color: var(--text-muted); font-size: 0.75rem;">游客和普通用户无需设置到期时间</small>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>账号状态</label>
|
||||
@@ -234,7 +240,10 @@
|
||||
<td>#${u.id}</td>
|
||||
<td><span class="font-medium">${u.username}</span></td>
|
||||
<td class="text-muted">${u.email}</td>
|
||||
<td><span class="badge badge-info">${u.group_name}</span></td>
|
||||
<td>
|
||||
<span class="badge badge-info">${u.group_name}</span>
|
||||
${u.group_id > 2 && u.expires_at ? `<br><small class="text-muted">${u.is_expired ? '已过期' : '至 ' + u.expires_at}</small>` : ''}
|
||||
</td>
|
||||
<td>${u.total_parse_count}</td>
|
||||
<td>
|
||||
<span class="badge ${u.is_active ? 'badge-success' : 'badge-error'}">
|
||||
@@ -243,8 +252,8 @@
|
||||
</td>
|
||||
<td class="text-muted text-sm">${new Date(u.created_at).toLocaleString('zh-CN')}</td>
|
||||
<td>
|
||||
<button class="ui-btn ui-btn-secondary ui-btn-sm"
|
||||
onclick="editUser(${u.id}, ${u.group_id}, ${u.is_active})">
|
||||
<button class="ui-btn ui-btn-secondary ui-btn-sm"
|
||||
onclick="editUser(${u.id}, ${u.group_id}, ${u.is_active}, ${u.expires_at ? `'${u.expires_at}'` : null})">
|
||||
编辑
|
||||
</button>
|
||||
</td>
|
||||
@@ -268,13 +277,35 @@
|
||||
}
|
||||
}
|
||||
|
||||
function editUser(id, groupId, isActive) {
|
||||
function editUser(id, groupId, isActive, expiresAt) {
|
||||
document.getElementById('editUserId').value = id;
|
||||
document.getElementById('editGroupId').value = groupId;
|
||||
document.getElementById('editIsActive').value = isActive;
|
||||
|
||||
// 设置到期时间
|
||||
if (expiresAt) {
|
||||
document.getElementById('editExpiresAt').value = expiresAt.slice(0, 16);
|
||||
} else {
|
||||
document.getElementById('editExpiresAt').value = '';
|
||||
}
|
||||
|
||||
// 根据用户组显示/隐藏到期时间
|
||||
onGroupChange();
|
||||
document.getElementById('editModal').classList.add('show');
|
||||
}
|
||||
|
||||
function onGroupChange() {
|
||||
const groupId = parseInt(document.getElementById('editGroupId').value);
|
||||
const expiryGroup = document.getElementById('expiryGroup');
|
||||
// 游客(1)和普通用户(2)不显示到期时间
|
||||
if (groupId > 2) {
|
||||
expiryGroup.style.display = 'block';
|
||||
} else {
|
||||
expiryGroup.style.display = 'none';
|
||||
document.getElementById('editExpiresAt').value = '';
|
||||
}
|
||||
}
|
||||
|
||||
function closeModal() {
|
||||
document.getElementById('editModal').classList.remove('show');
|
||||
}
|
||||
@@ -337,11 +368,19 @@
|
||||
document.getElementById('editForm').addEventListener('submit', async (e) => {
|
||||
e.preventDefault();
|
||||
const userId = document.getElementById('editUserId').value;
|
||||
const groupId = parseInt(document.getElementById('editGroupId').value);
|
||||
const expiresAt = document.getElementById('editExpiresAt').value;
|
||||
|
||||
const data = {
|
||||
group_id: parseInt(document.getElementById('editGroupId').value),
|
||||
group_id: groupId,
|
||||
is_active: document.getElementById('editIsActive').value === 'true'
|
||||
};
|
||||
|
||||
// VIP/SVIP 需要设置到期时间
|
||||
if (groupId > 2) {
|
||||
data.expires_at = expiresAt || null;
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await fetch(`/admin/api/users/${userId}`, {
|
||||
method: 'PUT',
|
||||
@@ -354,6 +393,7 @@
|
||||
UI.notify('更新成功', 'success');
|
||||
closeModal();
|
||||
loadUsers(currentPage);
|
||||
loadUserStats();
|
||||
} else {
|
||||
UI.notify(result.message || '更新失败', 'error');
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user