# Thing 一个基于 Tauri 2 + Vue 3 的 Windows 工具集,集成多个实用功能模块。 ## 技术栈 | 层次 | 技术 | 版本 | |------|------|------| | 框架 | Tauri | lastest(2.x) | | 前端 | Vue | latest(3.x) | | 前端构建 | Vite | latest(6.x) | | 状态管理 | Pinia | latest(2.x) | | UI 组件 | shadcn-vue | latest(2.x) | | 语言 | TypeScript | 5.x | | 后端 | Rust | latest | | 包管理 | Bun | latest | ## 项目结构 ``` Thing/ ├── src/ │ ├── components/ # 通用组件 │ │ ├── layout/ # 布局组件(TitleBar、Sidebar、ModuleContainer) │ │ └── ui/ # shadcn-vue UI 组件 │ ├── lib/ # 工具库(logger、use-module-tabs、calc、constants) │ ├── modules/ # 功能模块(每个模块含 index.ts 配置 + Vue 组件) │ │ ├── proxy/ # 代理管理模块 │ │ ├── clipboard/ # 剪贴板增强模块 │ │ ├── screenshot/ # 截图模块 │ │ ├── monitor/ # 硬件监控模块 │ │ ├── downloader/ # 下载器模块 │ │ ├── quickpanel/ # 快速面板模块(含 providers/ 搜索提供器目录) │ │ ├── settings/ # 通用设置模块 │ │ ├── icons.ts # 模块图标映射 │ │ ├── index.ts # 模块聚合入口 │ │ └── registry.ts # 模块注册表单例 │ ├── stores/ # Pinia 状态管理 │ ├── types/ # TypeScript 类型定义 │ ├── App.vue # 主应用组件 │ ├── main.ts # 入口文件 │ └── style.css # 全局样式 ├── src-tauri/ │ ├── binaries/ # 外部内核(mihomo.exe) │ ├── capabilities/ # Tauri 权限配置 │ ├── icons/ # 应用图标 │ ├── resources/ # 打包资源(浏览器扩展等) │ ├── src/ │ │ ├── clipboard/ # 剪贴板模块(reader/monitor/storage/popup) │ │ ├── download_engine/ # 下载引擎(进程内自建,含 engine/storage/http_dl 等) │ │ ├── mihomo_manager/ # mihomo 内核管理(mod/kernel/profiles/system_proxy/commands 等) │ │ ├── quickpanel/ # 快速面板后端(commands/file_index/icon_extractor) │ │ ├── screenshot/ # 截图后端(capture/commands) │ │ ├── constants.rs # 双端常量(窗口 label / 事件名) │ │ ├── logger.rs # 日志系统(进程级全局日志器) │ │ ├── monitor_kernel.rs # 硬件监控内核(SSE 订阅) │ │ ├── network_monitor.rs # 网速监控 │ │ ├── osd_window.rs # OSD 悬浮窗 │ │ ├── process_manager.rs # 子进程统一管理 │ │ ├── setup.rs # 应用初始化 │ │ ├── tray_menu.rs # 系统托盘 │ │ ├── win32_util.rs # Win32 屏幕/DPI 工具 │ │ ├── main.rs # Rust 入口 │ │ └── lib.rs # Rust 库入口(命令注册、事件循环) │ ├── Cargo.toml # Rust 依赖配置 │ └── tauri.conf.json # Tauri 配置 ├── package.json # 前端依赖配置 ├── tsconfig.json # TypeScript 配置 └── vite.config.ts # Vite 配置 ``` ## 开发进程规划 ### 第一阶段:主体架构(当前阶段) - [x] 项目初始化 - [x] 主界面布局(左侧模块导航 + 右侧内容区域) - [x] 基础设置模块(主题切换、开机自启) - [x] 系统托盘基础(Tray) - [x] 日志系统(Log) - [x] 进程管理架构(子进程生命周期管理) - [x] 模块注册机制 ### 第二阶段:核心模块开发 #### 🌐 代理管理 - [x] 下载/内置 mihomo (Clash.Meta) 内核集成 - [x] 系统代理切换 - [x] 规则配置管理 - [x] 延迟测速 - [x] 订阅管理 #### 📋 剪贴板增强 - [x] 剪贴板历史记录(排序,搜索) - [x] 鼠标位置快携键历史弹窗 - [x] 固定常用条目(快捷输入) - [x] 多格式预览(文本、图片、文件) - [x] SQLite 存储 #### 📸 截图 - [x] 截图及相关 - [ ] 滚动截图(后续支持) - [x] 贴图 #### 📊 硬件监控 - [x] 悬浮窗显示 - [x] 硬件监控 - [x] 传感器数据可视化 #### ⬇️ 下载器 - [x] 自建进程内下载引擎(多线程 HTTP/HTTPS,无需外部内核) - [x] 接管浏览器下载,浏览器扩展(Thing Extension) - [x] HTTP 下载支持 - [ ] BT/磁力链接支持(后续支持) - [x] 下载任务管理(历史) - [x] 速度限制 - [x] 断点续传 #### 🔍 快速面板 - [x] 全局弹窗(快捷键触发) - [x] 全局搜索:拼音模糊匹配,正则表达式支持。支持:程序,文件,文件夹,设置项,最近使用,历史命令 - [x] 快捷命令(例:shutdown, hosts) - [x] 计算器 / 单位换算(数学表达式、单位/货币换算;时间转换、进制转换后续支持) ### 第三阶段:优化与完善 - [x] 性能优化(P1/P2:轮询随窗口可见性暂停、批量测速限并发、渲染 memo 化等,见 MODULE_REVIEW.md) - [x] 错误处理与日志完善(B5 进程级全局日志器、异常兜底) - [x] 用户体验优化(混合 DPI 定位、rAF 节流、UI 细节) - [x] 自动更新机制 - [x] 打包发布 ## 模块管理架构 项目采用统一的模块注册机制,每个模块通过 `index.ts` 自描述其配置,由中央注册表统一管理: ### 核心文件 | 文件 | 职责 | |------|------| | `src/types/module.ts` | 模块配置类型定义(`ModuleConfig`、`ModuleMeta`、`ModuleProcessConfig` 等) | | `src/modules/registry.ts` | 模块注册表单例,提供注册、查询、组件懒加载等功能 | | `src/modules/index.ts` | 模块聚合入口,导入并注册所有模块 | | `src/modules/icons.ts` | 模块图标映射表 | | `src/modules//index.ts` | 各模块的配置声明(名称、图标、组件、搜索项、进程配置等) | ### 模块配置示例 ```typescript // src/modules/proxy/index.ts export const moduleConfig: ModuleConfig = { id: 'proxy', name: '代理管理', icon: 'proxy', description: '系统代理切换、订阅管理与延迟测速', category: 'network', loader: () => import('./ProxyModule.vue'), searchItems: [...], process: { name: 'mihomo', executable: '', autoStart: false, restartOnCrash: true, maxRestarts: 3 }, order: 10 } ``` ### 进程管理架构 需要管理外部子进程的模块(如代理的 mihomo)通过 `ModuleProcessConfig` 声明进程配置,由 Rust 端的 `ProcessManager` 统一管理生命周期。下载器模块使用进程内自建下载引擎,无需外部子进程: - **Rust 端** (`src-tauri/src/process_manager.rs`):管理子进程的启动、停止、重启和崩溃检测 - **前端** (`src/stores/processStore.ts`):Pinia store,通过 Tauri IPC 调用 Rust 命令,监听进程状态变更事件 - **后台监控线程**:每 3 秒检查进程状态,崩溃时自动重启(可配置),并通过 Tauri 事件通知前端 - **应用退出清理**:退出时自动停止所有子进程 ### 新增模块流程 1. 创建 `src/modules//` 目录,编写 `ModuleComponent.vue` 和 `index.ts` 2. 在 `index.ts` 中导出 `moduleConfig: ModuleConfig` 3. 在 `src/modules/index.ts` 中添加导入 4. 在 `src/modules/icons.ts` 中添加图标映射 5. 如需 Rust 命令,在 `src-tauri/src/` 中创建对应模块 ## 构建与运行 ### 前置依赖 - Node.js >= 18 - Rust >= 1.75 - Bun(推荐)或 npm/yarn - Windows SDK(用于 Tauri 构建) ### 开发模式 ```bash # 安装依赖 bun install # 启动开发服务器 bun run tauri dev ``` ### 生产构建 ```bash # 构建前端 bun run build # 构建应用 bun run tauri build ``` ## 开发规范 ### 代码风格 - TypeScript 代码遵循 ESLint 规则 - Rust 代码遵循 `cargo fmt` 规范 - 提交信息使用 Conventional Commits 格式 ### 命名规范 - 组件:PascalCase(如 `ProxyManager.vue`) - 函数:camelCase(如 `getSystemProxy()`) - 文件:kebab-case(如 `proxy-manager.ts`) - 常量:UPPER_CASE(如 `MAX_HISTORY_COUNT`) ### 分支策略 - `main`:主分支,稳定版本 - `develop`:开发分支,整合各模块开发 - `feature/*`:功能分支,单个模块开发 - `bugfix/*`:修复分支,bug 修复 ## 许可证 MIT License