feat: add balance display, user columns, device mgmt and sessions for agent

- Backend: add balance to agent stats API
- Backend: return full user details (balance, expiry, online_status, device_count, application) in agent users API
- Backend: export admin device/session handlers, add agent routes for devices and sessions
- Backend: add card type permission check and balance deduction for agent user creation
- Backend: extract checkAgentUserPermission helper, add user edit API
- Frontend: add balance card to agent dashboard
- Frontend: add application, online_status, device_count, balance, expiry_at columns to agent user table
- Frontend: add agent devices page (reuse admin data-table component)
- Frontend: add agent sessions page (reuse admin data-table component)
- Frontend: add devices and sessions to agent navigation and routes
- Add i18n keys for agent devices, sessions, user columns, dashboard balance
This commit is contained in:
2026-05-11 10:46:29 +08:00
parent a76a30ee78
commit 853c22fdbe
12 changed files with 848 additions and 32 deletions
+50
View File
@@ -2712,6 +2712,8 @@
"totalUsersDesc": "Cumulative registered users",
"totalRevenue": "Total Revenue",
"todayRevenue": "Today",
"balance": "Account Balance",
"balanceDesc": "Available for card generation and recharge",
"quickActions": "Quick Actions",
"generateCards": "Generate Cards",
"appManagement": "App Management",
@@ -2779,10 +2781,25 @@
"columns": {
"username": "Username",
"email": "Email",
"application": "Application",
"onlineStatus": "Online Status",
"deviceCount": "Devices",
"balance": "Balance",
"expiryAt": "Expiry",
"status": "Status",
"createdAt": "Created At",
"lastLoginAt": "Last Login"
},
"onlineStatus": {
"online": "Online",
"offline": "Offline",
"banned": "Banned"
},
"expiry": {
"permanent": "Permanent",
"expired": "Expired",
"daysLeft": "days left"
},
"status": {
"active": "Active",
"disabled": "Disabled",
@@ -2950,6 +2967,39 @@
"generateNow": "Generate Now"
}
},
"devices": {
"title": "Device Management",
"description": "Manage devices under your applications",
"totalDevices": "Total Devices",
"onlineSessions": "Online Sessions",
"normalDevices": "Normal Devices",
"banned": "Banned",
"normal": "Normal",
"application": "Application",
"status": "Status",
"statusUpdateSuccess": "Device status updated successfully",
"statusUpdateFailed": "Failed to update device status",
"forceOffline": "Force Offline",
"forceOfflineTitle": "Force Offline",
"forceOfflineConfirm": "Are you sure you want to force offline all sessions for device \"{deviceId}\"?",
"forceOfflineSuccess": "Forced {count} sessions offline",
"forceOfflineFailed": "Failed to force offline"
},
"sessions": {
"title": "Online Sessions",
"description": "View all online session details",
"onlineSessions": "Online Sessions",
"onlineApps": "Online Apps",
"onlineDevices": "Online Devices",
"onlineUsers": "Online Users",
"application": "Application",
"loadFailed": "Failed to load sessions",
"forceOffline": "Force Offline",
"forceOfflineTitle": "Force Offline",
"forceOfflineConfirm": "Are you sure you want to force offline session \"{instanceId}\"?",
"forceOfflineSuccess": "Session forced offline successfully",
"forceOfflineFailed": "Failed to force offline session"
},
"cloudVariables": {
"title": "Cloud Variables",
"description": "View cloud variables (read-only)",
+50
View File
@@ -2714,6 +2714,8 @@
"totalUsersDesc": "累计注册用户",
"totalRevenue": "累计收入",
"todayRevenue": "今日",
"balance": "账户余额",
"balanceDesc": "可用于生成卡密和充值",
"quickActions": "快捷操作",
"generateCards": "生成卡密",
"appManagement": "应用管理",
@@ -2781,10 +2783,25 @@
"columns": {
"username": "用户名",
"email": "邮箱",
"application": "所属应用",
"onlineStatus": "在线状态",
"deviceCount": "设备数",
"balance": "余额",
"expiryAt": "到期时间",
"status": "状态",
"createdAt": "注册时间",
"lastLoginAt": "最后登录"
},
"onlineStatus": {
"online": "在线",
"offline": "离线",
"banned": "封禁"
},
"expiry": {
"permanent": "永久",
"expired": "已过期",
"daysLeft": "天剩余"
},
"status": {
"active": "正常",
"disabled": "禁用",
@@ -2952,6 +2969,39 @@
"generateNow": "立即生成"
}
},
"devices": {
"title": "设备管理",
"description": "管理您应用下的设备",
"totalDevices": "设备总数",
"onlineSessions": "在线实例",
"normalDevices": "正常设备",
"banned": "已禁用",
"normal": "正常",
"application": "应用",
"status": "状态",
"statusUpdateSuccess": "设备状态更新成功",
"statusUpdateFailed": "设备状态更新失败",
"forceOffline": "强制离线",
"forceOfflineTitle": "强制离线",
"forceOfflineConfirm": "确定要将设备 \"{deviceId}\" 的所有在线实例强制离线吗?",
"forceOfflineSuccess": "已强制离线 {count} 个实例",
"forceOfflineFailed": "强制离线失败"
},
"sessions": {
"title": "在线实例",
"description": "查看所有在线实例详情",
"onlineSessions": "在线实例数",
"onlineApps": "在线应用数",
"onlineDevices": "在线设备数",
"onlineUsers": "在线用户数",
"application": "应用",
"loadFailed": "获取会话列表失败",
"forceOffline": "强制下线",
"forceOfflineTitle": "强制下线",
"forceOfflineConfirm": "确定要将实例 \"{instanceId}\" 强制下线吗?",
"forceOfflineSuccess": "强制下线成功",
"forceOfflineFailed": "强制下线失败"
},
"cloudVariables": {
"title": "云端变量",
"description": "查看云端变量数据(只读)",