Files
Frpilot/src/composables/useSystemStats.ts
T
Yuhang Wu 50bf5f7e36 feat: 实现仪表盘页面及系统信息采集功能
新增系统信息采集后端服务,引入 sysinfo 依赖获取 CPU、内存、主机名、系统版本、架构和 IP 地址等数据;新增系统相关 API 接口和 TypeScript 类型定义;重构仪表盘页面,整合服务器/隧道数量统计、系统信息展示、资源占用监控和 Frpc 运行日志功能;新增中英文国际化文案支持,完善前端交互逻辑。
2026-10-13 15:56:05 +08:00

45 lines
1.3 KiB
TypeScript

import { getSystemInfo } from "@/api/system"
import { isTauri } from "@/utils/window"
/**
* 系统资源占用(CPU / 内存 百分比)。
*
* 调用后端命令 `get_system_info`(返回 `ApiResponse<{ cpu, memory }>`),
* 在非 Tauri 环境或后端不可用时回退到模拟数据,保证界面可用。
*/
export function useSystemStats(interval = 2000) {
const cpu = ref(0)
const memory = ref(0)
const isMock = ref(true)
// 模拟数据:随机游走,避免界面显示为静态 0
let mockCpu = 18
let mockMem = 42
function mock() {
mockCpu = Math.min(95, Math.max(3, mockCpu + (Math.random() - 0.5) * 8))
mockMem = Math.min(95, Math.max(10, mockMem + (Math.random() - 0.5) * 4))
cpu.value = Math.round(mockCpu)
memory.value = Math.round(mockMem)
isMock.value = true
}
async function refresh() {
if (isTauri()) {
try {
const info = await getSystemInfo()
cpu.value = Math.round(info.cpu)
memory.value = Math.round(info.memory)
isMock.value = false
return
} catch {
// 后端命令不可用,回退到模拟数据
}
}
mock()
}
const { pause, resume } = useIntervalFn(refresh, interval, { immediate: true })
return { cpu, memory, isMock, refresh, pause, resume }
}