仪表盘
{{ lastRefresh }}
{{ stats.total_users || 0 }}
总用户数
{{ stats.online_devices || 0 }}
在线设备
{{ stats.unused_cards || 0 }}
未使用卡密
{{ stats.used_cards || 0 }}
已使用卡密
{{ stats.unhandled_risks || 0 }}
待处理风险
最近活动
暂无数据
{{ formatTime(log.created_at) }}
{{ sanitize(log.action) }}
{{ log.status === 1 ? '成功' : '失败' }}
用户管理
批量操作:
| ID | 用户名 | 绑定卡密 | 状态 | 到期时间 | 设备/上限 | 操作 |
|---|---|---|---|---|---|---|
| 暂无数据 | ||||||
| {{ user.id }} | {{ sanitize(user.username) }} | {{ user.card_key }} - | {{ user.status === 1 ? '正常' : '禁用' }} | {{ formatTimeFull(user.expire_at) || '-' }} | {{ user.device_count || 0 }}/{{ user.max_devices || 1 }} |
|
共 {{ pagination.users.total }} 条,第 {{ pagination.users.page }} / {{ Math.ceil(pagination.users.total / pagination.users.pageSize) || 1 }} 页
{{ pagination.users.page }}
卡密管理
{{ cardStats.total || 0 }}
总数
{{ cardStats.unused || 0 }}
未使用
{{ cardStats.used || 0 }}
已使用
{{ cardStats.disabled || 0 }}
已禁用
{{ cardStats.today_created || 0 }}
今日生成
{{ cardStats.today_used || 0 }}
今日使用
已选择 {{ selectedCards.length }} 张卡密
| 卡密 | 类型 | 天数 | 设备 | 状态 | 使用者 | 到期时间 | 备注 | 操作 | |
|---|---|---|---|---|---|---|---|---|---|
| 暂无数据 | |||||||||
| {{ formatCardKey(card.card_key) }} | {{ getCardTypeName(card.card_type) }} | {{ card.days }} | {{ card.device_count || 0 }}/{{ card.max_devices }} | {{ getStatusName(card.status) }} | {{ card.username }} - | {{ formatTime(card.user_expire_at) }} - | {{ card.remark || '-' }} |
|
|
共 {{ pagination.cards.total }} 条,第 {{ pagination.cards.page }} / {{ Math.ceil(pagination.cards.total / pagination.cards.pageSize) || 1 }} 页
{{ pagination.cards.page }}
设备监控
🔧 快速解绑设备
⚡ 支持前缀匹配:输入部分设备ID即可(如表格显示 215ee2a8a535...,直接输入 215ee2a8a535)
✓ 用于解绑"该设备已绑定到其他账户"的设备,解绑后用户可重新登录
✓ 用于解绑"该设备已绑定到其他账户"的设备,解绑后用户可重新登录
{{ deviceStats.total || 0 }}
总设备数
{{ deviceStats.online || 0 }}
在线设备
{{ deviceStats.offline || 0 }}
离线设备
{{ stats.total_heartbeats_today || 0 }}
今日心跳
| 设备ID | 设备名 | 用户 | 系统 | 状态 | 最后IP | 最后活跃 | 操作 |
|---|---|---|---|---|---|---|---|
| 暂无数据 | |||||||
| {{ device.device_id || '-' }} | {{ device.device_name || '未知' }} | {{ device.username || '-' }} | {{ device.os || '-' }} | {{ device.is_online ? '● 在线' : '○ 离线' }} | {{ maskIP(device.last_ip) }} | {{ formatTime(device.last_heartbeat) }} |
|
共 {{ pagination.devices.total }} 条
{{ pagination.devices.page }}
风险管理
{{ riskStats.total || 0 }}
总风险
{{ riskStats.unhandled || 0 }}
待处理
{{ riskStats.low || 0 }}
低风险
{{ riskStats.medium || 0 }}
中风险
{{ (riskStats.high || 0) + (riskStats.critical || 0) }}
高危/严重
| ID | 时间 | 用户 | 类型 | 级别 | 描述 | 状态 | 操作 |
|---|---|---|---|---|---|---|---|
| 暂无风险记录 | |||||||
| {{ risk.id }} | {{ formatTime(risk.created_at) }} | {{ risk.user?.username || '-' }} | {{ getRiskTypeName(risk.risk_type) }} | {{ getRiskLevelName(risk.risk_level) }} | {{ sanitize(risk.description) }} | {{ risk.handled ? '已处理' : '待处理' }} |
|
共 {{ pagination.risks.total }} 条
{{ pagination.risks.page }}
操作日志
| ID | 时间 | 用户ID | 操作 | IP | 状态 |
|---|---|---|---|---|---|
| 暂无数据 | |||||
| {{ log.id }} | {{ formatTime(log.created_at) }} | {{ log.user_id || '-' }} | {{ sanitize(log.action) }} | {{ maskIP(log.ip) }} | {{ log.status === 1 ? '成功' : '失败' }} |
共 {{ pagination.logs.total }} 条
{{ pagination.logs.page }}