feat: 完成 Frpilot 桌面应用核心布局与多语言支持

实现内容:
- 新增多语言支持(中文/英文),包含完整翻译文件
- 适配 Windows 和 macOS 自定义标题栏,支持窗口控制与主题切换
- 新增侧边栏菜单,显示系统 CPU/内存占用与运行状态
- 配置 Tauri 窗口属性与权限,支持窗口拖拽、最大化等操作
- 新增 Pinia 状态管理,处理主题、语言与应用状态
- 新增系统统计数据获取与模拟逻辑,支持 Tauri 后端调用回退
- 新增路由配置,完成页面布局与视图组件初始化
This commit is contained in:
Yuhang Wu
2026-10-12 17:54:05 +08:00
parent b885919b1d
commit 9ca10fdd2f
25 changed files with 907 additions and 92 deletions
+51
View File
@@ -0,0 +1,51 @@
import { invoke } from "@tauri-apps/api/core"
import { isTauri } from "@/utils/window"
interface SystemInfo {
cpu: number
memory: number
}
/**
* 系统资源占用(CPU / 内存 百分比)。
*
* 优先调用后端命令 `get_system_info`(返回 { cpu, memory }),
* 后端尚未实现时回退到模拟数据,保证界面可用。
*/
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 res = await invoke<SystemInfo>("get_system_info")
if (res) {
cpu.value = Math.round(res.cpu)
memory.value = Math.round(res.memory)
isMock.value = false
return
}
} catch {
// 后端命令未实现,回退到模拟数据
}
}
mock()
}
const { pause, resume } = useIntervalFn(refresh, interval, { immediate: true })
return { cpu, memory, isMock, refresh, pause, resume }
}