feat: 新增 Frp 下载管理功能,支持版本拉取、下载、导入和删除

新增 Frp 下载相关的后端命令、前端组件和类型定义,包括:
- 后端:添加 frp 模块,实现版本拉取、下载、导入、删除逻辑,新增数据库表
- 前端:新增 FrpCard 组件、下载页面,集成版本选择和下载进度展示
- 国际化:新增中英双语的 Frp 相关文案
- 依赖:添加 reqwest、futures-util、tokio 等网络和异步处理依赖
This commit is contained in:
Yuhang Wu
2026-10-13 16:39:29 +08:00
parent 50bf5f7e36
commit db7b1096d1
16 changed files with 1608 additions and 19 deletions
+44
View File
@@ -0,0 +1,44 @@
import { invoke } from "@tauri-apps/api/core"
import type { ApiResponse } from "@/types/api"
import type { FrpDownload, FrpDownloadPayload, FrpRelease } from "@/types/frp"
/**
* 调用后端命令并统一解包 ApiResponse。
*
* 后端所有 Frp 下载相关命令均返回 `ApiResponse<T>`,业务失败时
* `success === false`,此处统一抛出异常,交由调用方提示。
*/
async function call<T>(command: string, args?: Record<string, unknown>): Promise<T> {
const res = await invoke<ApiResponse<T>>(command, args)
if (!res?.success) {
throw new Error(res?.msg || "操作失败")
}
return res.data as T
}
/**
* 获取 Frp 版本列表(返回所有架构,前端按开关过滤)
*/
export function getFrpReleases() {
return call<FrpRelease[]>("get_frp_releases")
}
/** 下载并解压指定 Frp 发行包 */
export function downloadFrp(payload: FrpDownloadPayload) {
return call<FrpDownload>("download_frp", { payload })
}
/** 获取本机已下载 / 已导入的 Frp 版本列表(仪表盘选择 frpc 版本用) */
export function getFrpDownloads() {
return call<FrpDownload[]>("get_frp_downloads")
}
/** 删除已下载 / 已导入的版本 */
export function deleteFrp(id: number) {
return call<null>("delete_frp", { id })
}
/** 导入本地已下载的 frpc / frps(返回导入后的记录) */
export function importFrp() {
return call<FrpDownload[]>("import_frp")
}