# 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
**状态:** ✅ 生产就绪