feat: 添加微信二维码及相关国际化配置

新增微信图片资源,补充联系方式相关的中英双语文案,新增复制功能的国际化文本,同步更新 README 格式优化
This commit is contained in:
Yuhang Wu
2026-10-20 10:22:14 +08:00
parent 7cbc80176d
commit bba146fd1a
5 changed files with 91 additions and 64 deletions
+64 -54
View File
@@ -2,22 +2,22 @@
# FrpcPilot
**frp 可视化桌面客户端 —— 告别手写 `frpc.toml`**
**frp 可视化桌面客户端 —— 告别手写** **`frpc.toml`**
下载 frpc、配置服务器、编排隧道、一键启动并实时查看日志,全部在同一个窗口里完成。
[![Release](https://img.shields.io/github/v/release/SparksFly91/FrpcPilot?style=flat-square&color=6366f1)](https://github.com/SparksFly91/FrpcPilot/releases)
[![License](https://img.shields.io/github/license/SparksFly91/FrpcPilot?style=flat-square&color=6366f1)](./LICENSE)
[![Release](https://img.shields.io/github/v/release/SparksFly91/FrpcPilot?style=flat-square\&color=6366f1)](https://github.com/SparksFly91/FrpcPilot/releases)
[![License](https://img.shields.io/github/license/SparksFly91/FrpcPilot?style=flat-square\&color=6366f1)](./LICENSE)
[![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20macOS%20%7C%20Linux-6366f1?style=flat-square)](#-下载安装)
[![Tauri](https://img.shields.io/badge/Tauri-2-24C8DB?style=flat-square&logo=tauri&logoColor=white)](https://v2.tauri.app/)
[![Vue](https://img.shields.io/badge/Vue-3-42B883?style=flat-square&logo=vuedotjs&logoColor=white)](https://vuejs.org/)
[![Tauri](https://img.shields.io/badge/Tauri-2-24C8DB?style=flat-square\&logo=tauri\&logoColor=white)](https://v2.tauri.app/)
[![Vue](https://img.shields.io/badge/Vue-3-42B883?style=flat-square\&logo=vuedotjs\&logoColor=white)](https://vuejs.org/)
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-6366f1?style=flat-square)](https://github.com/SparksFly91/FrpcPilot/pulls)
</div>
> 📘 **新手必读**:第一次搭建内网穿透?请阅读 **[《Frp 内网穿透搭建指南》](docs/Frp搭建内网穿透指南.md)** —— 从公网服务端搭建到用 FrpcPilot 一键开启穿透,手把手带你跑通第一个隧道。
---
***
## 🏷️ 关于「FrpcPilot」这个名字
@@ -28,7 +28,7 @@
一句话:**让 frpc 起飞,你只管掌舵。** ✈️
---
***
## 📖 项目简介
@@ -38,68 +38,76 @@
> 当前版本 **v1.2.1**,已支持 Windows / macOS(Apple Silicon)/ Linux 三平台,并内置应用内自动更新。
---
***
## 🖼️ 界面预览
| 仪表盘 | 服务器 |
| --- | --- |
| 仪表盘 | 服务器 |
| ------------------------------- | ------------------------------- |
| ![仪表盘](docs/snipastes/仪表盘.webp) | ![服务器](docs/snipastes/服务器.webp) |
| 隧道列表 | Frpc 下载 |
| --- | --- |
| 隧道列表 | Frpc 下载 |
| --------------------------------- | -------------------------------------- |
| ![隧道列表](docs/snipastes/隧道列表.webp) | ![Frpc 下载](docs/snipastes/frpc下载.webp) |
| 设置 · 常规 | 设置 · 外观 |
| --- | --- |
| 设置 · 常规 | 设置 · 外观 |
| ---------------------------------- | ------------------------------- |
| ![常规设置](docs/snipastes/设置·常规.webp) | ![外观设置](docs/snipastes/设置.webp) |
<p align="center">
<img src="docs/snipastes/关于.webp" alt="关于" width="49%" />
</p>
---
***
## ✨ 功能特性
### 📊 仪表盘
- 一屏总览:服务器数量、隧道数量,以及主机名 / 系统 / 架构 / IP 地址等系统信息
- 选择 frpc 版本后「**一键启动 / 停止**」,运行状态实时联动
- **实时日志**:通过事件流回显 frpc 运行日志(保留最近 500 行,支持一键清空)
- 侧边栏常驻 **CPU / 内存占用** 与运行状态指示(🟢 运行正常 · 🔴 运行异常 · 🟡 未启动)
### 🖥️ 服务器管理
- frps 服务器的新增 / 编辑 / 删除
- 支持服务器地址、端口、鉴权 Token、传输协议、TLS 开关与备注
- 置顶与排序;启用开关(**同一时间仅允许启用一台**服务器)
### 🔀 隧道管理
- 覆盖 **TCP / UDP / HTTP / HTTPS / STCP / XTCP / SUDP / TCPMUX** 等代理类型
- 本地 IP / 端口、远程端口、自定义域名、子域名、URL 前缀
- 高级配置:密钥、加密、压缩、带宽限制、Proxy Protocol、健康检查、负载均衡
- 统一管理启用 / 置顶 / 排序
### 📦 Frpc 下载管理
- 在线拉取 frp 官方版本列表,按平台与架构筛选,支持「所有架构 frpc / frps」开关
- 一键下载并自动解压,实时显示下载 / 解压进度与状态(支持镜像加速)
- 导入本地已有的 `frpc` / `frps`,删除已下载版本、复制下载直链
- **页面级缓存**:应用运行期间仅首次进入时拉取版本列表,避免重复请求触发限流,需要更新时手动点击「刷新」
### 🚀 一键启动与进程管理
- 依据所选版本、已启用的服务器与隧道,自动生成 `frpc.toml` 并拉起独立进程
- 通过 `frpc-log` / `frpc-exit` 事件实时推送日志与进程退出信息
- 应用退出时自动结束 frpc 子进程,避免残留后台进程
### 🗂️ 系统托盘
- 常驻托盘菜单:**显示窗口 / 启动穿透 / 停止穿透 / 退出**
- 左键单击直达主窗口,右键展开菜单;菜单随运行状态与界面语言自动联动
- 「退出」会先停止正在运行的穿透,再退出整个应用
### 🔔 关闭行为
- 关闭窗口时可选「**最小化到系统托盘**」或「**直接退出**」
- 支持「每次询问」与「保持以上选择」两种策略,也可在「设置 - 常规」中随时修改
### 🎨 界面与体验
- **自定义标题栏**:Windows / macOS 双套方案,窗口可拖拽移动;macOS 还原原生红绿灯
- **明暗主题**:一键切换,Tailwind 暗色变体与 Ant Design Vue 暗色算法同步
- **磨砂玻璃视觉**:侧边栏、内容区与卡片统一为圆角 + `backdrop-filter` 半透明面板,透明度可调
@@ -107,52 +115,54 @@
- **国际化**:内置简体中文 / English,语言选择持久化并与组件库语言包联动
### 🔄 应用内自动更新
- 启动时静默检查更新,支持手动检查
- 更新弹窗以 **Markdown** 渲染更新说明并展示下载进度
- 支持「忽略该版本」、一键更新,安装完成后自动重启
### ⚙️ 设置中心
- **常规**:关闭行为、应用语言
- **外观**:主题模式、背景图片、磨砂玻璃透明度(卡片 / 弹窗,实时预览)
- **关于**:项目介绍、技术栈、使用流程、开源地址与版本信息
---
***
## 📥 下载安装
前往 [**Releases**](https://github.com/SparksFly91/FrpcPilot/releases/latest) 下载对应平台的安装包:
前往 **[Releases](https://github.com/SparksFly91/FrpcPilot/releases/latest)** 下载对应平台的安装包:
| 平台 | 安装包 |
| --- | --- |
| Windows | `.exe`(NSIS 安装程序) |
| macOS(Apple Silicon) | `.dmg` / `.app` |
| Linux | `.deb` / `.AppImage` |
| 平台 | 安装包 |
| -------------------- | -------------------- |
| Windows | `.exe`(NSIS 安装程序) |
| macOS(Apple Silicon) | `.dmg` / `.app` |
| Linux | `.deb` / `.AppImage` |
装好后打开应用即可,后续版本会在应用内自动检查并更新。
> 🧭 **首次使用?** 还不清楚怎么搭建 frps 服务端、怎么配置隧道?请参考 [《Frp 内网穿透搭建指南》](docs/Frp搭建内网穿透指南.md)。
---
***
## 🧱 技术栈
| 分类 | 选型 |
| --- | --- |
| 桌面框架 | [Tauri 2](https://v2.tauri.app/)(Rust 后端) |
| 前端框架 | Vue 3(`<script setup>`)+ TypeScript |
| 构建工具 | Vite 8 |
| UI 组件库 | Ant Design Vue 4 + `@ant-design/icons-vue` |
| 样式 | Tailwind CSS 4(原子化)+ SCSS |
| 状态管理 | Pinia |
| 路由 | Vue Router |
| 国际化 | Vue I18n 11 |
| Markdown | `markdown-it`(更新日志渲染) |
| 工具库 | `@vueuse/core` · `dayjs` |
| 后端 | Rust:`sqlx` + SQLite、`reqwest`(下载)、`sysinfo`(系统采集)、`tokio` |
| Tauri 插件 | `updater` / `process` / `dialog` / `opener` / `store` / `prevent-default` |
| 工程化 | `unplugin-auto-import`、`unplugin-vue-components`(按需自动导入)、`tauri-helper`(命令注册) |
| 分类 | 选型 |
| -------- | ----------------------------------------------------------------------------- |
| 桌面框架 | [Tauri 2](https://v2.tauri.app/)(Rust 后端) |
| 前端框架 | Vue 3(`<script setup>`)+ TypeScript |
| 构建工具 | Vite 8 |
| UI 组件库 | Ant Design Vue 4 + `@ant-design/icons-vue` |
| 样式 | Tailwind CSS 4(原子化)+ SCSS |
| 状态管理 | Pinia |
| 路由 | Vue Router |
| 国际化 | Vue I18n 11 |
| Markdown | `markdown-it`(更新日志渲染) |
| 工具库 | `@vueuse/core` · `dayjs` |
| 后端 | Rust:`sqlx` + SQLite、`reqwest`(下载)、`sysinfo`(系统采集)、`tokio` |
| Tauri 插件 | `updater` / `process` / `dialog` / `opener` / `store` / `prevent-default` |
| 工程化 | `unplugin-auto-import`、`unplugin-vue-components`(按需自动导入)、`tauri-helper`(命令注册) |
---
***
## 📦 环境要求
@@ -164,7 +174,7 @@
- macOS:Xcode Command Line Tools
- Linux:`webkit2gtk`、`libayatana-appindicator`、`librsvg` 等
---
***
## 🚀 快速开始
@@ -185,17 +195,17 @@ pnpm dev
### 常用脚本
| 命令 | 说明 |
| --- | --- |
| `pnpm dev` | 启动 Vite 开发服务器(端口 `1420`) |
| `pnpm tauri dev` | 启动 Tauri 桌面开发环境(自动拉起前端) |
| `pnpm build` | 类型检查(`vue-tsc --noEmit`)+ 构建前端产物到 `dist/` |
| `pnpm preview` | 预览前端构建产物 |
| `pnpm tauri build` | 打包生成各平台安装包 |
| 命令 | 说明 |
| ------------------ | ----------------------------------------- |
| `pnpm dev` | 启动 Vite 开发服务器(端口 `1420`) |
| `pnpm tauri dev` | 启动 Tauri 桌面开发环境(自动拉起前端) |
| `pnpm build` | 类型检查(`vue-tsc --noEmit`)+ 构建前端产物到 `dist/` |
| `pnpm preview` | 预览前端构建产物 |
| `pnpm tauri build` | 打包生成各平台安装包 |
> ⚠️ `pnpm dev` 端口固定为 `1420` 且 `strictPort: true`,被占用时会直接报错退出。
---
***
## 📁 项目结构
@@ -240,7 +250,7 @@ FrpcPilot/
└── package.json
```
---
***
## 🛠️ 开发指南
@@ -287,19 +297,19 @@ FrpcPilot/
- 推送 `v*` tag 会触发 `.github/workflows/release.yml`:构建 **Windows x64 / macOS Apple Silicon / Linux x64** 产物,签名生成更新产物与 `latest.json`,并自动从 `docs/CHANGELOG.md` 提取对应版本说明作为 Release 正文。
- 发布前请在 `docs/CHANGELOG.md` 中补上 `## v<版本号>` 段落。
---
***
## 🗺️ 路线图
- [x] 系统托盘与关闭到托盘
- [ ] 开机自启
- [x] 开机自启
- [ ] 主题跟随系统
- [ ] frpc 配置文件的导入 / 导出与校验
- [ ] frps 服务端信息的集中管理与状态检测
- [ ] 日志持久化与导出
- [ ] 更多语言与更多内置背景
---
***
## 🤝 参与贡献
@@ -311,7 +321,7 @@ FrpcPilot/
如果 FrpcPilot 对你有帮助,欢迎点一个 ⭐ **Star** 支持一下~
---
***
## 📚 参考链接
@@ -323,7 +333,7 @@ FrpcPilot/
- [VueUse](https://vueuse.org/)
- [frp 官方仓库](https://github.com/fatedier/frp)
---
***
## 📄 License
Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

+13 -5
View File
@@ -263,6 +263,10 @@
"about": {
"title": "About FrpcPilot",
"subtitle": "A lightweight, friendly visual client for frp",
"versionTitle": "Version",
"currentVersion": "Current version",
"checkUpdate": "Check for updates",
"newVersion": "New version v{version} is available",
"introTitle": "Introduction",
"intro": "FrpcPilot is a visual client for frp built with Tauri 2 + Vue 3 + TypeScript. Manage frpc versions, servers and tunnels through a friendly GUI — and say goodbye to hand-writing frpc.toml.",
"flowTitle": "How to use",
@@ -279,10 +283,11 @@
"repoTitle": "Open source",
"repoDesc": "Stars, issues and contributions are all welcome~",
"openRepo": "Open GitHub",
"versionTitle": "Version",
"currentVersion": "Current version",
"checkUpdate": "Check for updates",
"newVersion": "New version v{version} is available"
"contactTitle": "Contact",
"contactDesc": "Questions or ideas? Reach me by email or WeChat, or just open an issue on GitHub.",
"email": "Email",
"wechat": "WeChat",
"wechatTip": "Scan the QR code to add me"
},
"update": {
"title": "New version v{version} is available ✨",
@@ -302,6 +307,9 @@
"developing": "This feature is under construction",
"confirm": "OK",
"cancel": "Cancel",
"save": "Save"
"save": "Save",
"copy": "Copy",
"copySuccess": "Copied to clipboard",
"copyFailed": "Copy failed, please copy manually"
}
}
+13 -5
View File
@@ -263,6 +263,10 @@
"about": {
"title": "关于 FrpcPilot",
"subtitle": "轻量、顺手的 frp 可视化桌面客户端",
"versionTitle": "版本信息",
"currentVersion": "当前版本",
"checkUpdate": "检查更新",
"newVersion": "发现新版本 v{version}",
"introTitle": "项目介绍",
"intro": "FrpcPilot 是一个基于 Tauri 2 + Vue 3 + TypeScript 打造的 frp 可视化客户端,帮你用图形界面管理 frpc 版本、服务器与隧道,从此告别手写 frpc.toml。",
"flowTitle": "使用流程",
@@ -279,10 +283,11 @@
"repoTitle": "开源地址",
"repoDesc": "欢迎 Star、提 Issue 或一起参与共建~",
"openRepo": "打开 GitHub",
"versionTitle": "版本信息",
"currentVersion": "当前版本",
"checkUpdate": "检查更新",
"newVersion": "发现新版本 v{version}"
"contactTitle": "联系方式",
"contactDesc": "遇到问题或有新想法,欢迎通过邮箱或微信联系我,也可以在 GitHub 上提 Issue。",
"email": "邮箱",
"wechat": "微信",
"wechatTip": "扫码添加微信"
},
"update": {
"title": "发现新版本 v{version} ✨",
@@ -302,6 +307,9 @@
"developing": "功能开发中,敬请期待",
"confirm": "确定",
"cancel": "取消",
"save": "保存"
"save": "保存",
"copy": "复制",
"copySuccess": "已复制到剪贴板",
"copyFailed": "复制失败,请手动复制"
}
}
+1
View File
@@ -23,6 +23,7 @@ declare module 'vue' {
AEmpty: typeof import('ant-design-vue/es')['Empty']
AForm: typeof import('ant-design-vue/es')['Form']
AFormItem: typeof import('ant-design-vue/es')['FormItem']
AImage: typeof import('ant-design-vue/es')['Image']
AInput: typeof import('ant-design-vue/es')['Input']
AInputNumber: typeof import('ant-design-vue/es')['InputNumber']
AInputPassword: typeof import('ant-design-vue/es')['InputPassword']