mirror of
https://github.com/black-ant/Ant-Browser.git
synced 2026-07-14 18:48:55 +08:00
channel: release version: 1.0.0 source-ref: master published-at-utc: 2026-03-13T13:17:53Z
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
安装依赖
# 安装 Wails CLI
go install github.com/wailsapp/wails/v2/cmd/wails@latest
# 安装项目依赖
go mod tidy
cd frontend && npm install
开发模式
# Windows
bat\dev.bat
# 或直接使用 Wails
wails dev
构建应用
# 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 调用- 支持分页、筛选、新建、编辑、删除
数据结构:
interface DataRecord {
id: string
name: string
category: string
status: string
createdAt: string
updatedAt: string
}
2. 指纹浏览器基础环境管理
功能特性:
- ✅ 多套浏览器环境配置与切换
- ✅ 默认环境一键设置
- ✅ 核心路径与连接类型配置
- ✅ 启动时自动检测环境路径
入口位置:
- 侧边栏:指纹浏览器 -> 基础环境
环境字段:
- coreId:环境标识
- coreName:环境名称
- corePath:核心路径(支持相对路径)
- connectorType:连接类型
- isDefault:是否默认
环境示例:
{
"coreId": "chrome-114",
"coreName": "Chrome 114",
"corePath": "chrome/114",
"connectorType": "standard",
"isDefault": true
}
默认行为:
- 默认环境用于实例启动时的核心解析
- corePath 支持相对路径,会自动解析到可执行目录或工作目录
3. 表格组件
特性:
- 固定高度容器(默认
calc(100vh - 320px)) - 内容在表格内滚动
- 固定表头(sticky 定位)
- 自定义列渲染
- 加载状态
- 空数据提示
使用示例:
<Table
columns={columns}
data={data}
rowKey="id"
maxHeight="500px"
stickyHeader
/>
4. 分页组件
特性:
- 首页/末页快速跳转
- 上一页/下一页导航
- 智能页码显示(超过 5 页显示省略号)
- 每页条数选择(10/20/50)
- 总数显示
使用示例:
<Pagination
current={page}
total={total}
pageSize={pageSize}
onChange={setPage}
onPageSizeChange={setPageSize}
/>
5. 主题系统
特性:
- 亮色/暗色主题切换
- CSS 变量管理颜色
- 平滑过渡动画
- 持久化存储
主题切换:
<ThemeSwitcher />
组件库
组件总览(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(警告提示)
<Alert
type="success"
title="成功"
message="操作已完成"
closable
onClose={() => console.log('closed')}
/>
类型: success | error | warning | info
Toast(消息提示)
import { toast } from '@/shared/components'
toast.success('操作成功')
toast.error('操作失败')
toast.warning('警告信息')
toast.info('提示信息', 5000) // 5秒后消失
Modal(弹窗)
<Modal
open={visible}
onClose={() => setVisible(false)}
title="标题"
footer={
<>
<Button variant="secondary" onClick={onClose}>取消</Button>
<Button onClick={onConfirm}>确定</Button>
</>
}
>
<div>弹窗内容</div>
</Modal>
Drawer(抽屉)
<Drawer
open={visible}
onClose={() => setVisible(false)}
title="侧边抽屉"
placement="right"
width="400px"
>
<div>抽屉内容</div>
</Drawer>
方向: left | right | top | bottom
Popover(气泡卡片)
<Popover
content={<div>提示内容</div>}
placement="top"
trigger="hover"
>
<Button>悬停显示</Button>
</Popover>
触发方式: click | hover
位置: top | bottom | left | right
Dropdown(下拉菜单)
const items = [
{ key: 'copy', label: '复制', icon: <Copy /> },
{ key: 'divider', label: '', divider: true },
{ key: 'delete', label: '删除', danger: true },
]
<Dropdown
items={items}
onSelect={(key) => console.log(key)}
/>
Progress(进度条)
// 线性进度条
<Progress percent={60} />
<Progress percent={100} status="success" size="lg" />
// 圆形进度条
<CircleProgress percent={75} size={120} />
状态: normal | success | error | warning
Loading & Skeleton
// 加载器
<Loading size="md" text="加载中..." />
<Loading fullscreen />
// 骨架屏
<Skeleton width="100%" height="20px" />
<Skeleton width="48px" height="48px" circle />
组件展示页面
访问 /components 路由查看所有组件的实时示例和交互演示。
数据管理
后端 API
所有数据管理 API 都通过 Wails 绑定暴露给前端:
// 获取数据列表(支持分页)
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)
前端调用
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 条模拟数据
- 如果已有数据,跳过初始化
模拟数据包含:
- 多种分类:技术、商业、设计、产品、其他
- 多种状态:启用、禁用、待处理
- 随机的创建和更新时间
开发指南
添加新页面
- 在
frontend/src/modules/创建新模块目录 - 创建页面组件
- 在
App.tsx添加路由 - 在
config/project.config.ts添加导航菜单
添加新组件
- 在
frontend/src/shared/components/创建组件文件 - 在
index.ts导出组件 - 遵循现有组件的设计模式
- 添加 TypeScript 类型定义
添加后端 API
- 在
internal/创建新模块 - 实现 Service、DAO、Model 层
- 在
app.go添加 API 绑定方法 - 运行
wails dev自动生成前端绑定
配置管理
编辑 config.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 修改:
export const projectConfig = {
name: '应用名称',
shortName: '简称',
primaryColor: 'primary',
}
构建部署
Windows 构建
bat\build.bat
构建产物:build/bin/news-platform.exe
跨平台构建
# macOS
wails build -platform darwin/universal
# Linux
wails build -platform linux/amd64
构建选项
编辑 wails.json 配置构建选项:
{
"name": "news-platform",
"outputfilename": "news-platform",
"frontend:install": "npm install",
"frontend:build": "npm run build",
"wailsjsdir": "./frontend/src/wailsjs"
}
专项方案
最佳实践
组件使用建议
| 场景 | 推荐组件 | 说明 |
|---|---|---|
| 操作反馈 | Toast | 轻量级,自动消失 |
| 重要提示 | Alert | 持久显示 |
| 确认操作 | ConfirmModal | 需用户确认 |
| 详细信息 | Modal | 复杂内容 |
| 侧边表单 | Drawer | 不遮挡主内容 |
| 简单提示 | Popover | 轻量级浮层 |
| 操作菜单 | Dropdown | 结构化菜单 |
性能优化
- 表格分页 - 大数据量使用分页,避免一次加载过多
- 虚拟滚动 - 超长列表考虑虚拟滚动
- 懒加载 - 路由懒加载,按需加载模块
- 图片优化 - 压缩图片,使用合适的格式
- 代码分割 - Vite 自动代码分割
代码规范
- TypeScript - 所有代码使用 TypeScript
- 组件命名 - PascalCase(如
DataPage) - 文件命名 - PascalCase(如
DataPage.tsx) - 函数命名 - camelCase(如
fetchData) - 常量命名 - UPPER_SNAKE_CASE(如
API_URL)
常见问题
Q: 如何修改应用名称?
A: 修改以下文件:
frontend/src/config/project.config.ts- 前端显示名称wails.json- 构建产物名称config.yaml- 应用配置名称
Q: 如何添加新的数据表?
A:
- 在
internal/database/sqlite.go的Migrate()方法添加建表 SQL - 创建对应的 Model、DAO、Service
- 在
app.go添加 API 绑定
Q: 如何自定义主题颜色?
A: 修改 frontend/src/index.css 中的 CSS 变量:
:root {
--color-accent: #your-color;
}
Q: 如何禁用某个功能模块?
A: 在 frontend/src/config/project.config.ts 修改:
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
状态: ✅ 生产就绪