# Go-Wails 桌面应用脚手架文档 > 基于 Wails + React + TypeScript 的现代化桌面应用开发脚手架 ## 目录 - [项目概述](#项目概述) - [技术栈](#技术栈) - [快速开始](#快速开始) - [项目结构](#项目结构) - [核心功能](#核心功能) - [组件库](#组件库) - [数据管理](#数据管理) - [开发指南](#开发指南) - [构建部署](#构建部署) - [专项方案](#专项方案) --- ## 项目概述 这是一个功能完整的桌面应用脚手架,提供了: - ✅ 完整的项目结构和开发规范 - ✅ 24+ 个常用 UI 组件 - ✅ 数据管理模块(CRUD + 分页) - ✅ 主题切换(亮色/暗色) - ✅ 日志系统 - ✅ 配置管理 - ✅ 响应式布局 --- ## 技术栈 ### 后端 - **Go 1.21+** - 主要编程语言 - **Wails v2** - 桌面应用框架 - **SQLite** - 嵌入式数据库 - **modernc.org/sqlite** - 纯 Go SQLite 驱动 ### 前端 - **React 18** - UI 框架 - **TypeScript** - 类型安全 - **Vite** - 构建工具 - **TailwindCSS** - 样式框架 - **Zustand** - 状态管理 - **React Router** - 路由管理 - **Lucide React** - 图标库 --- ## 快速开始 ### 环境要求 - Go 1.21+ - Node.js 18+ - Wails CLI v2 ### 安装依赖 ```bash # 安装 Wails CLI go install github.com/wailsapp/wails/v2/cmd/wails@latest # 安装项目依赖 go mod tidy cd frontend && npm install ``` ### 开发模式 ```bash # Windows bat\dev.bat # 或直接使用 Wails wails dev ``` ### 构建应用 ```bash # Windows bat\build.bat # 或直接使用 Wails wails build ``` 构建产物位于 `build/bin/` 目录。 --- ## 项目结构 ``` . ├── bat/ # Windows 批处理脚本 │ ├── build.bat # 构建脚本 │ ├── dev.bat # 开发脚本 │ └── generate-bindings.bat # 生成绑定脚本 ├── docs/ # 项目文档 ├── frontend/ # 前端代码 │ ├── src/ │ │ ├── config/ # 配置文件 │ │ ├── modules/ # 功能模块 │ │ │ ├── dashboard/ # 控制台 │ │ │ ├── data/ # 数据管理 │ │ │ ├── components/# 组件展示 │ │ │ └── settings/ # 系统设置 │ │ ├── shared/ # 共享资源 │ │ │ ├── components/# UI 组件库 │ │ │ ├── layout/ # 布局组件 │ │ │ └── theme/ # 主题系统 │ │ ├── store/ # 状态管理 │ │ └── wailsjs/ # Wails 绑定 │ ├── index.html │ ├── package.json │ └── vite.config.ts ├── internal/ # 后端内部包 │ ├── config/ # 配置管理 │ ├── data/ # 数据模块 │ │ ├── controller.go # 控制器 │ │ ├── service.go # 业务逻辑 │ │ ├── dao.go # 数据访问 │ │ ├── model.go # 数据模型 │ │ └── mock.go # 模拟数据 │ ├── database/ # 数据库 │ └── logger/ # 日志系统 ├── app.go # 应用主逻辑 ├── main.go # 程序入口 ├── config.yaml # 配置文件 ├── go.mod └── wails.json # Wails 配置 ``` --- ## 核心功能 ### 1. 数据管理模块 **功能特性:** - ✅ 完整的 CRUD 操作 - ✅ 分页查询(默认 10 条/页) - ✅ 多条件筛选(关键词、分类、状态) - ✅ 30 条模拟数据自动生成 - ✅ 表格固定高度内滚动 - ✅ 固定表头 **后端实现:** - `internal/data/service.go` - 业务逻辑层 - `internal/data/dao.go` - 数据访问层(SQLite) - `internal/data/mock.go` - 模拟数据生成 - `app.go` - API 绑定 **前端实现:** - `frontend/src/modules/data/DataPage.tsx` - 数据管理页面 - `frontend/src/modules/data/api.ts` - API 调用 - 支持分页、筛选、新建、编辑、删除 **数据结构:** ```typescript interface DataRecord { id: string name: string category: string status: string createdAt: string updatedAt: string } ``` ### 2. 指纹浏览器基础环境管理 **功能特性:** - ✅ 多套浏览器环境配置与切换 - ✅ 默认环境一键设置 - ✅ 核心路径与连接类型配置 - ✅ 启动时自动检测环境路径 **入口位置:** - 侧边栏:指纹浏览器 -> 基础环境 **环境字段:** - coreId:环境标识 - coreName:环境名称 - corePath:核心路径(支持相对路径) - connectorType:连接类型 - isDefault:是否默认 **环境示例:** ```json { "coreId": "chrome-114", "coreName": "Chrome 114", "corePath": "chrome/114", "connectorType": "standard", "isDefault": true } ``` **默认行为:** - 默认环境用于实例启动时的核心解析 - corePath 支持相对路径,会自动解析到可执行目录或工作目录 ### 3. 表格组件 **特性:** - 固定高度容器(默认 `calc(100vh - 320px)`) - 内容在表格内滚动 - 固定表头(sticky 定位) - 自定义列渲染 - 加载状态 - 空数据提示 **使用示例:** ```tsx ``` ### 4. 分页组件 **特性:** - 首页/末页快速跳转 - 上一页/下一页导航 - 智能页码显示(超过 5 页显示省略号) - 每页条数选择(10/20/50) - 总数显示 **使用示例:** ```tsx ``` ### 5. 主题系统 **特性:** - 亮色/暗色主题切换 - CSS 变量管理颜色 - 平滑过渡动画 - 持久化存储 **主题切换:** ```tsx ``` --- ## 组件库 ### 组件总览(24 个) #### 基础组件 - **Button** - 按钮(4种变体,3种尺寸) - **Card** - 卡片容器 - **Badge** - 徽章标签 #### 表单组件 - **Input** - 输入框 - **Textarea** - 文本域 - **Select** - 选择器 - **Switch** - 开关 - **FormItem** - 表单项容器 #### 数据展示 - **Table** - 表格 - **Pagination** - 分页器 - **StatCard** - 统计卡片 - **Progress** - 进度条 - **CircleProgress** - 圆形进度条 - **Skeleton** - 骨架屏 #### 反馈组件 - **Alert** - 警告提示 - **Toast** - 消息提示 - **Loading** - 加载状态 - **Modal** - 弹窗 - **ConfirmModal** - 确认对话框 - **Drawer** - 抽屉 #### 导航组件 - **Tabs** - 标签页 #### 浮层组件 - **Popover** - 气泡卡片 - **Dropdown** - 下拉菜单 #### 其他 - **ThemeSwitcher** - 主题切换器 ### 组件使用示例 #### Alert(警告提示) ```tsx console.log('closed')} /> ``` **类型:** success | error | warning | info #### Toast(消息提示) ```tsx import { toast } from '@/shared/components' toast.success('操作成功') toast.error('操作失败') toast.warning('警告信息') toast.info('提示信息', 5000) // 5秒后消失 ``` #### Modal(弹窗) ```tsx setVisible(false)} title="标题" footer={ <> } >
弹窗内容
``` #### Drawer(抽屉) ```tsx setVisible(false)} title="侧边抽屉" placement="right" width="400px" >
抽屉内容
``` **方向:** left | right | top | bottom #### Popover(气泡卡片) ```tsx 提示内容} placement="top" trigger="hover" > ``` **触发方式:** click | hover **位置:** top | bottom | left | right #### Dropdown(下拉菜单) ```tsx const items = [ { key: 'copy', label: '复制', icon: }, { key: 'divider', label: '', divider: true }, { key: 'delete', label: '删除', danger: true }, ] console.log(key)} /> ``` #### Progress(进度条) ```tsx // 线性进度条 // 圆形进度条 ``` **状态:** normal | success | error | warning #### Loading & Skeleton ```tsx // 加载器 // 骨架屏 ``` ### 组件展示页面 访问 `/components` 路由查看所有组件的实时示例和交互演示。 --- ## 数据管理 ### 后端 API 所有数据管理 API 都通过 Wails 绑定暴露给前端: ```go // 获取数据列表(支持分页) func (a *App) DataGetList(filters data.DataFilters, page, pageSize int) (*data.DataListResponse, error) // 获取单条数据 func (a *App) DataGetByID(id string) (*data.DataRecord, error) // 创建数据 func (a *App) DataCreate(req data.CreateDataRequest) (*data.DataRecord, error) // 更新数据 func (a *App) DataUpdate(id string, req data.UpdateDataRequest) (*data.DataRecord, error) // 删除数据 func (a *App) DataDelete(id string) error // 批量删除 func (a *App) DataBatchDelete(ids []string) (int, error) // 获取统计信息 func (a *App) DataGetStats() (*data.DataStats, error) ``` ### 前端调用 ```typescript import { fetchDataList, createData, updateData, deleteData } from '@/modules/data/api' // 获取列表 const result = await fetchDataList(filters, page, pageSize) // 创建 await createData({ name: '名称', category: '分类', status: 'active' }) // 更新 await updateData(id, { name: '新名称' }) // 删除 await deleteData(id) ``` ### 模拟数据 应用首次启动时会自动检查数据库: - 如果数据库为空,自动生成 30 条模拟数据 - 如果已有数据,跳过初始化 模拟数据包含: - 多种分类:技术、商业、设计、产品、其他 - 多种状态:启用、禁用、待处理 - 随机的创建和更新时间 --- ## 开发指南 ### 添加新页面 1. 在 `frontend/src/modules/` 创建新模块目录 2. 创建页面组件 3. 在 `App.tsx` 添加路由 4. 在 `config/project.config.ts` 添加导航菜单 ### 添加新组件 1. 在 `frontend/src/shared/components/` 创建组件文件 2. 在 `index.ts` 导出组件 3. 遵循现有组件的设计模式 4. 添加 TypeScript 类型定义 ### 添加后端 API 1. 在 `internal/` 创建新模块 2. 实现 Service、DAO、Model 层 3. 在 `app.go` 添加 API 绑定方法 4. 运行 `wails dev` 自动生成前端绑定 ### 配置管理 编辑 `config.yaml` 修改应用配置: ```yaml app: name: "应用名称" runtime: max_memory_mb: 512 gc_percent: 100 logging: level: "info" file_enabled: true file_path: "data/logs/app.log" database: sqlite: path: "app.db" ``` ### 主题定制 在 `frontend/src/config/project.config.ts` 修改: ```typescript export const projectConfig = { name: '应用名称', shortName: '简称', primaryColor: 'primary', } ``` --- ## 构建部署 ### Windows 构建 ```bash bat\build.bat ``` 构建产物:`build/bin/news-platform.exe` ### 跨平台构建 ```bash # macOS wails build -platform darwin/universal # Linux wails build -platform linux/amd64 ``` ### 构建选项 编辑 `wails.json` 配置构建选项: ```json { "name": "news-platform", "outputfilename": "news-platform", "frontend:install": "npm install", "frontend:build": "npm run build", "wailsjsdir": "./frontend/src/wailsjs" } ``` --- ## 专项方案 - [配置发布与增量迁移方案(2026-03-09)](./CONFIG_RELEASE_AND_MIGRATION_PLAN_20260309.md) --- ## 最佳实践 ### 组件使用建议 | 场景 | 推荐组件 | 说明 | |------|---------|------| | 操作反馈 | Toast | 轻量级,自动消失 | | 重要提示 | Alert | 持久显示 | | 确认操作 | ConfirmModal | 需用户确认 | | 详细信息 | Modal | 复杂内容 | | 侧边表单 | Drawer | 不遮挡主内容 | | 简单提示 | Popover | 轻量级浮层 | | 操作菜单 | Dropdown | 结构化菜单 | ### 性能优化 1. **表格分页** - 大数据量使用分页,避免一次加载过多 2. **虚拟滚动** - 超长列表考虑虚拟滚动 3. **懒加载** - 路由懒加载,按需加载模块 4. **图片优化** - 压缩图片,使用合适的格式 5. **代码分割** - Vite 自动代码分割 ### 代码规范 1. **TypeScript** - 所有代码使用 TypeScript 2. **组件命名** - PascalCase(如 `DataPage`) 3. **文件命名** - PascalCase(如 `DataPage.tsx`) 4. **函数命名** - camelCase(如 `fetchData`) 5. **常量命名** - UPPER_SNAKE_CASE(如 `API_URL`) --- ## 常见问题 ### Q: 如何修改应用名称? A: 修改以下文件: - `frontend/src/config/project.config.ts` - 前端显示名称 - `wails.json` - 构建产物名称 - `config.yaml` - 应用配置名称 ### Q: 如何添加新的数据表? A: 1. 在 `internal/database/sqlite.go` 的 `Migrate()` 方法添加建表 SQL 2. 创建对应的 Model、DAO、Service 3. 在 `app.go` 添加 API 绑定 ### Q: 如何自定义主题颜色? A: 修改 `frontend/src/index.css` 中的 CSS 变量: ```css :root { --color-accent: #your-color; } ``` ### Q: 如何禁用某个功能模块? A: 在 `frontend/src/config/project.config.ts` 修改: ```typescript export const featuresConfig = { dashboard: true, data: false, // 禁用数据管理 settings: true, } ``` --- ## 更新日志 ### 2026-01-06 **新增功能:** - ✅ 数据管理模块(CRUD + 分页) - ✅ 30 条模拟数据自动生成 - ✅ 表格固定高度内滚动 - ✅ 分页组件 - ✅ 24 个 UI 组件 - ✅ 组件展示页面 **组件库:** - Alert、Toast、Loading、Skeleton - Modal、ConfirmModal、Drawer - Popover、Dropdown - Progress、CircleProgress - Badge、Tabs **优化:** - 表格支持固定表头 - 统一的设计语言和动画 - 完整的 TypeScript 类型支持 --- ## 技术支持 - **文档位置:** `docs/README.md` - **组件展示:** 运行应用访问 `/components` - **示例代码:** 查看 `frontend/src/modules/` 各模块 --- ## 许可证 MIT License --- **构建时间:** 2026-01-06 **版本:** 1.0.0 **状态:** ✅ 生产就绪