重构:文件系统模块化架构,优化应用启动流程
This commit is contained in:
111
docs/04-功能迭代/GO-DESK-1.尝试/任务规划.md
Normal file
111
docs/04-功能迭代/GO-DESK-1.尝试/任务规划.md
Normal file
@@ -0,0 +1,111 @@
|
||||
# Go Desk 任务规划
|
||||
|
||||
## 阶段一:项目初始化
|
||||
|
||||
- [x] 安装 Wails CLI 和验证环境
|
||||
- [x] 创建项目结构
|
||||
- [x] 配置 `wails.json` 使用 `web` 目录
|
||||
- [x] 初始化前端项目结构
|
||||
- [x] 安装 Arco Design Vue 依赖
|
||||
- [x] 安装 Go 依赖(GORM、MySQL 驱动)
|
||||
|
||||
## 阶段二:基础框架搭建
|
||||
|
||||
- [x] 配置前端构建工具(Vite)
|
||||
- [x] 集成 Arco Design Vue
|
||||
- [x] 设置全局样式和主题
|
||||
- [x] 创建基础布局组件(查询区域 + 表格区域)
|
||||
- [x] 配置数据库连接(MySQL lab_dev)
|
||||
|
||||
## 阶段三:数据库连接和模型
|
||||
|
||||
- [x] 创建数据库连接模块(参考 ops-kit)
|
||||
- [x] 定义 MemberInfo 结构体(参考 ops-kit/internal/model/member_info.go)
|
||||
- [x] 实现数据库连接池配置
|
||||
- [x] 测试数据库连接
|
||||
|
||||
## 阶段四:后端接口开发
|
||||
|
||||
- [x] 实现 Go 后端基础结构(app.go)
|
||||
- [x] 实现用户查询方法(QueryUsers)
|
||||
- [x] 支持关键字搜索(姓名、账号、电话)
|
||||
- [x] 支持状态筛选
|
||||
- [ ] 支持角色筛选(关联查询)- 待完善
|
||||
- [x] 支持机构筛选(关联查询)
|
||||
- [x] 支持分页(limit/offset)
|
||||
- [x] 支持排序
|
||||
- [ ] 实现关联查询(机构名称、角色名称)- 待完善
|
||||
- [x] 错误处理和日志记录
|
||||
|
||||
## 阶段五:前端界面开发
|
||||
|
||||
- [x] 创建用户查询页面组件
|
||||
- [x] 实现查询表单(关键字、状态、角色、机构)
|
||||
- [x] 实现数据表格展示(Arco Table)
|
||||
- [x] 实现分页组件
|
||||
- [x] 实现状态标签显示
|
||||
- [x] 实现前端调用后端方法
|
||||
- [x] 测试前后端通信
|
||||
|
||||
## 阶段六:功能完善和优化
|
||||
|
||||
- [ ] 完善查询功能
|
||||
- [ ] 优化界面交互
|
||||
- [ ] 添加加载状态提示
|
||||
- [ ] 错误提示优化
|
||||
- [ ] 性能优化(查询优化、分页优化)
|
||||
|
||||
## 阶段七:测试与打包
|
||||
|
||||
- [x] 功能测试(查询、筛选、分页)
|
||||
- [x] 数据库连接测试(测试服连接成功)
|
||||
- [x] 前后端通信测试
|
||||
- [x] 打包构建(Windows)
|
||||
- [x] 验证打包后的应用运行
|
||||
|
||||
## 阶段八:设备调用测试功能
|
||||
|
||||
- [ ] 系统信息获取(CPU、内存、磁盘、系统信息)
|
||||
- [ ] 文件系统操作(读取、写入、列出目录、创建、删除)
|
||||
- [ ] 环境变量获取
|
||||
- [ ] 打开文件/目录功能
|
||||
- [ ] 前端测试界面实现
|
||||
- [ ] 错误处理和权限验证
|
||||
|
||||
## 阶段九:更新升级功能
|
||||
|
||||
- [ ] 版本定义和管理
|
||||
- [ ] 版本检查接口实现
|
||||
- [ ] 下载更新包功能
|
||||
- [ ] 下载进度显示
|
||||
- [ ] 文件替换和自动重启
|
||||
- [ ] 前端更新提示界面
|
||||
- [ ] 错误处理和回滚机制
|
||||
|
||||
## 阶段十:后续功能(可选)
|
||||
|
||||
- [ ] 用户修改功能
|
||||
- [ ] 用户新增功能
|
||||
- [ ] 用户删除功能
|
||||
- [ ] 数据导出功能
|
||||
|
||||
## 技术要点
|
||||
|
||||
### 代码规范
|
||||
- Go 方法参数不超过 3 个
|
||||
- 代码风格保持简洁,便于维护
|
||||
- 使用 Arco 基础样式,避免过度自定义
|
||||
- 注意资源嵌入和构建流程
|
||||
|
||||
### 数据库相关
|
||||
- 使用 GORM 连接 MySQL
|
||||
- 数据库:lab_dev
|
||||
- 表:member_info(主表)、organ_info(机构表)、sys_member_role(角色关联表)
|
||||
- 连接配置:localhost:3306, root/123456
|
||||
|
||||
### 参考实现
|
||||
- 前端参考:`lab-admin/src/views/member/index.vue`
|
||||
- 后端参考:`lab-api/src/main/java/cn/casehub/member/MemberService.java`
|
||||
- 数据模型:`ops-kit/internal/model/member_info.go`
|
||||
- 数据库连接:`ops-kit/internal/database/db.go`
|
||||
|
||||
150
docs/04-功能迭代/GO-DESK-1.尝试/启动指南.md
Normal file
150
docs/04-功能迭代/GO-DESK-1.尝试/启动指南.md
Normal file
@@ -0,0 +1,150 @@
|
||||
# Go Desk 启动指南
|
||||
|
||||
## 前置条件
|
||||
|
||||
1. Go v1.25.4 已安装
|
||||
2. Node.js 和 npm 已安装
|
||||
3. MySQL 数据库 lab_dev 已启动
|
||||
|
||||
## 安装 Wails CLI
|
||||
|
||||
```bash
|
||||
go install github.com/wailsapp/wails/v2/cmd/wails@latest
|
||||
```
|
||||
|
||||
**如果 `wails` 命令找不到**:
|
||||
|
||||
1. 获取 GOPATH:
|
||||
```bash
|
||||
go env GOPATH
|
||||
```
|
||||
|
||||
2. 使用完整路径运行(假设 GOPATH 是 `D:\Go\go-workspace`):
|
||||
```bash
|
||||
D:\Go\go-workspace\bin\wails.exe dev
|
||||
```
|
||||
|
||||
3. 或添加到 PATH 环境变量(永久解决):
|
||||
- 将 `%GOPATH%\bin` 添加到系统 PATH
|
||||
- 重新打开终端
|
||||
|
||||
## 首次启动步骤
|
||||
|
||||
### 1. 安装 Go 依赖
|
||||
|
||||
```bash
|
||||
cd go-desk
|
||||
go mod tidy
|
||||
```
|
||||
|
||||
### 2. 安装前端依赖
|
||||
|
||||
```bash
|
||||
cd web
|
||||
npm install
|
||||
```
|
||||
|
||||
### 3. 构建前端(必须)
|
||||
|
||||
```bash
|
||||
npm run build
|
||||
```
|
||||
|
||||
这会生成 `web/dist` 目录,包含前端构建产物。
|
||||
|
||||
### 4. 开发模式运行
|
||||
|
||||
```bash
|
||||
# 回到项目根目录
|
||||
cd ..
|
||||
|
||||
# 启动 Wails 开发服务器
|
||||
wails dev
|
||||
```
|
||||
|
||||
## 开发流程
|
||||
|
||||
### 修改前端代码后
|
||||
|
||||
```bash
|
||||
cd web
|
||||
npm run build
|
||||
cd ..
|
||||
wails dev
|
||||
```
|
||||
|
||||
### 修改后端代码后
|
||||
|
||||
直接重启 `wails dev` 即可。
|
||||
|
||||
## 常见问题
|
||||
|
||||
### 问题1:找不到 web/dist 目录
|
||||
|
||||
**解决**:需要先构建前端
|
||||
```bash
|
||||
cd web
|
||||
npm run build
|
||||
```
|
||||
|
||||
### 问题2:数据库连接失败
|
||||
|
||||
**检查**:
|
||||
1. 测试服 MySQL 是否可访问(外网IP: 39.99.243.191:3306)
|
||||
2. 数据库 lab_dev 是否存在
|
||||
3. 用户名密码是否正确(root/Lake@2019)
|
||||
4. 网络连接是否正常(可能需要VPN或白名单)
|
||||
|
||||
### 问题3:前端调用后端方法失败
|
||||
|
||||
**检查**:
|
||||
1. 确保 `main.go` 中正确设置了 `Services: []interface{}{app}`
|
||||
2. 前端调用方式:`window.go.main.App.QueryUsers(...)`
|
||||
3. 检查浏览器控制台错误信息
|
||||
|
||||
### 问题4:wails 命令找不到
|
||||
|
||||
**解决**:
|
||||
- 使用完整路径:`%GOPATH%\bin\wails.exe`
|
||||
- 或添加到 PATH 环境变量
|
||||
|
||||
## 构建发布版本
|
||||
|
||||
### 1. 确保前端已构建
|
||||
|
||||
```bash
|
||||
cd web
|
||||
npm run build
|
||||
cd ..
|
||||
```
|
||||
|
||||
### 2. 执行构建
|
||||
|
||||
```bash
|
||||
# 构建当前平台(Windows)
|
||||
wails build
|
||||
|
||||
# 或明确指定平台
|
||||
wails build -platform windows/amd64
|
||||
```
|
||||
|
||||
### 3. 构建产物
|
||||
|
||||
构建成功后,可执行文件位于123:
|
||||
```
|
||||
build/bin/go-desk.exe
|
||||
```
|
||||
|
||||
### 4. 运行打包后的应用
|
||||
|
||||
直接双击 `build/bin/go-desk.exe` 运行,或使用命令行:
|
||||
|
||||
```bash
|
||||
build\bin\go-desk.exe
|
||||
```
|
||||
|
||||
**注意事项**:
|
||||
- 打包后的应用是独立的可执行文件,包含所有前端资源
|
||||
- 首次运行需要确保 MySQL 数据库 `lab_dev` 可访问
|
||||
- 数据库连接信息硬编码在代码中(localhost:3306, root/123456)
|
||||
- 如需分发,确保目标机器有 MySQL 数据库或修改为远程数据库连接
|
||||
292
docs/04-功能迭代/GO-DESK-1.尝试/基于Wails的桌面程序搭建.md
Normal file
292
docs/04-功能迭代/GO-DESK-1.尝试/基于Wails的桌面程序搭建.md
Normal file
@@ -0,0 +1,292 @@
|
||||
# 基于 Wails 的桌面程序搭建
|
||||
|
||||
## 技术栈
|
||||
|
||||
- Go v1.25.4
|
||||
- Wails v2
|
||||
- Arco Design Vue
|
||||
- Vue 3
|
||||
|
||||
## 环境准备
|
||||
|
||||
### 1. 安装 Wails CLI
|
||||
|
||||
```bash
|
||||
go install github.com/wailsapp/wails/v2/cmd/wails@latest
|
||||
```
|
||||
|
||||
### 2. 验证安装
|
||||
|
||||
```bash
|
||||
wails version
|
||||
```
|
||||
|
||||
## 项目初始化
|
||||
|
||||
### 1. 创建项目
|
||||
|
||||
```bash
|
||||
wails init -n go-desk -t vanilla
|
||||
```
|
||||
|
||||
### 2. 项目结构
|
||||
|
||||
```
|
||||
go-desk/
|
||||
├── app.go # 应用逻辑,暴露给前端的方法
|
||||
├── main.go # 程序入口,初始化 Wails 应用
|
||||
├── wails.json # Wails 配置文件
|
||||
├── go.mod # Go 模块依赖
|
||||
├── go.sum # Go 依赖校验
|
||||
├── web/ # 前端代码目录
|
||||
│ ├── package.json # 前端依赖配置
|
||||
│ ├── package-lock.json # 依赖锁定文件
|
||||
│ ├── vite.config.js # Vite 构建配置
|
||||
│ ├── index.html # HTML 入口文件
|
||||
│ ├── src/
|
||||
│ │ ├── main.js # Vue 应用入口
|
||||
│ │ ├── App.vue # 根组件
|
||||
│ │ └── style.css # 全局样式
|
||||
│ └── dist/ # 构建产物(构建后生成)
|
||||
│ ├── index.html
|
||||
│ ├── assets/
|
||||
│ └── ...
|
||||
├── build/ # 构建资源目录
|
||||
│ ├── appicon.png # 应用图标
|
||||
│ └── windows/ # Windows 构建资源(可选)
|
||||
│ └── icon.ico
|
||||
└── build/bin/ # 编译后的可执行文件(构建后生成)
|
||||
└── go-desk.exe # Windows 可执行文件
|
||||
```
|
||||
|
||||
**目录说明:**
|
||||
- `app.go`: 定义应用结构体和方法,供前端调用
|
||||
- `main.go`: 程序入口,配置窗口、资源等
|
||||
- `web/`: 前端 Vue 项目,使用 Vite 构建
|
||||
- `web/dist/`: 前端构建产物,会被嵌入到 Go 二进制文件
|
||||
- `build/`: 应用图标等构建资源
|
||||
|
||||
## 配置调整
|
||||
|
||||
### 1. 配置 Wails 使用 web 目录
|
||||
|
||||
如果使用 `web` 作为前端目录(而非默认的 `frontend`),需要在 `wails.json` 中配置:
|
||||
|
||||
```json
|
||||
{
|
||||
"frontend": {
|
||||
"dir": "web"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 2. 安装 Arco Design Vue
|
||||
|
||||
```bash
|
||||
cd web
|
||||
npm install --save @arco-design/web-vue
|
||||
```
|
||||
|
||||
### 3. 修改 `web/src/main.js`
|
||||
|
||||
```javascript
|
||||
import { createApp } from 'vue'
|
||||
import ArcoVue from '@arco-design/web-vue'
|
||||
import '@arco-design/web-vue/dist/arco.css'
|
||||
import './style.css'
|
||||
import App from './App.vue'
|
||||
|
||||
const app = createApp(App)
|
||||
app.use(ArcoVue)
|
||||
app.mount('#app')
|
||||
```
|
||||
|
||||
### 4. 修改 `web/src/App.vue`
|
||||
|
||||
```vue
|
||||
<template>
|
||||
<a-layout class="layout">
|
||||
<a-layout-header>
|
||||
<div class="header-content">
|
||||
<h2>Go Desk Demo</h2>
|
||||
</div>
|
||||
</a-layout-header>
|
||||
<a-layout-content class="content">
|
||||
<a-card>
|
||||
<template #title>欢迎</template>
|
||||
<p>这是一个基于 Wails + Arco-Vue 的最小 Demo</p>
|
||||
<a-button type="primary" @click="handleClick">点击测试</a-button>
|
||||
<p v-if="message">{{ message }}</p>
|
||||
</a-card>
|
||||
</a-layout-content>
|
||||
</a-layout>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'App',
|
||||
data() {
|
||||
return {
|
||||
message: ''
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async handleClick() {
|
||||
// 调用 Go 后端方法
|
||||
if (window.go && window.go.main && window.go.main.Greet) {
|
||||
try {
|
||||
const result = await window.go.main.Greet('World')
|
||||
this.message = result
|
||||
} catch (error) {
|
||||
this.message = '调用失败: ' + error.message
|
||||
}
|
||||
} else {
|
||||
this.message = 'Go 后端未就绪'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.layout {
|
||||
height: 100vh;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.header-content {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
height: 100%;
|
||||
padding: 0 20px;
|
||||
color: var(--color-text-1);
|
||||
}
|
||||
|
||||
.content {
|
||||
padding: 20px;
|
||||
flex: 1;
|
||||
overflow: auto;
|
||||
}
|
||||
</style>
|
||||
```
|
||||
|
||||
### 5. 修改 `app.go` - Go 后端
|
||||
|
||||
```go
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
// App struct
|
||||
type App struct {
|
||||
ctx context.Context
|
||||
}
|
||||
|
||||
// NewApp creates a new App application struct
|
||||
func NewApp() *App {
|
||||
return &App{}
|
||||
}
|
||||
|
||||
// startup is called when the app starts. The context is saved
|
||||
// so we can call the runtime methods
|
||||
func (a *App) startup(ctx context.Context) {
|
||||
a.ctx = ctx
|
||||
}
|
||||
|
||||
// Greet returns a greeting for the given name
|
||||
func (a *App) Greet(name string) string {
|
||||
return fmt.Sprintf("Hello %s, It's show time!", name)
|
||||
}
|
||||
```
|
||||
|
||||
### 6. 修改 `main.go`
|
||||
|
||||
```go
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"embed"
|
||||
|
||||
"github.com/wailsapp/wails/v2"
|
||||
"github.com/wailsapp/wails/v2/pkg/options"
|
||||
"github.com/wailsapp/wails/v2/pkg/options/assetserver"
|
||||
)
|
||||
|
||||
//go:embed all:web/dist
|
||||
var assets embed.FS
|
||||
|
||||
func main() {
|
||||
// Create an instance of the app structure
|
||||
app := NewApp()
|
||||
|
||||
// Create application with options
|
||||
err := wails.Run(&options.App{
|
||||
Title: "Go Desk",
|
||||
Width: 1024,
|
||||
Height: 768,
|
||||
AssetServer: &assetserver.Options{
|
||||
Assets: assets,
|
||||
},
|
||||
BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1},
|
||||
OnStartup: app.startup,
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
println("Error:", err.Error())
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 开发运行
|
||||
|
||||
### 1. 开发模式
|
||||
|
||||
```bash
|
||||
# 终端1:启动前端开发服务器
|
||||
cd web
|
||||
npm run dev
|
||||
|
||||
# 终端2:启动 Wails 开发模式
|
||||
wails dev
|
||||
```
|
||||
|
||||
### 2. 构建前端
|
||||
|
||||
```bash
|
||||
cd web
|
||||
npm run build
|
||||
```
|
||||
|
||||
### 3. 构建应用
|
||||
|
||||
```bash
|
||||
# 构建当前平台
|
||||
wails build
|
||||
|
||||
# 构建 Windows
|
||||
wails build -platform windows/amd64
|
||||
|
||||
# 构建 macOS
|
||||
wails build -platform darwin/amd64
|
||||
|
||||
# 构建 Linux
|
||||
wails build -platform linux/amd64
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **前端构建**:每次修改前端代码后需要重新构建 `npm run build`,Wails 会使用 `web/dist` 目录
|
||||
2. **Go 方法暴露**:在 `app.go` 中定义的方法会自动暴露给前端,通过 `window.go.main.MethodName` 调用
|
||||
3. **热重载**:开发模式下,Go 代码修改需要重启 `wails dev`,前端代码修改需要重新构建
|
||||
4. **资源嵌入**:使用 `//go:embed` 将前端构建产物嵌入到 Go 二进制文件中
|
||||
|
||||
## 参考
|
||||
|
||||
- [Wails 官方文档](https://wails.io/docs/)
|
||||
- [Arco Design Vue](https://arco.design/vue/docs/start)
|
||||
|
||||
250
docs/04-功能迭代/GO-DESK-1.尝试/更新升级功能设计.md
Normal file
250
docs/04-功能迭代/GO-DESK-1.尝试/更新升级功能设计.md
Normal file
@@ -0,0 +1,250 @@
|
||||
# Go Desk 更新升级功能设计
|
||||
|
||||
> **文档版本**:v1.0
|
||||
> **创建时间**:2025-01-XX
|
||||
> **维护者**:JueChen
|
||||
> **状态**:设计阶段
|
||||
|
||||
## 1. 功能概述
|
||||
|
||||
实现应用的自动更新升级功能,包括版本检查、下载更新包、自动替换和重启应用。
|
||||
|
||||
## 2. 功能需求
|
||||
|
||||
### 2.1 核心功能
|
||||
|
||||
- [ ] 版本检查:启动时或手动检查最新版本
|
||||
- [ ] 版本对比:比较当前版本与最新版本
|
||||
- [ ] 更新提示:发现新版本时提示用户
|
||||
- [ ] 下载更新:后台下载更新包(支持进度显示)
|
||||
- [ ] 自动替换:下载完成后自动替换旧版本
|
||||
- [ ] 自动重启:替换完成后自动重启应用
|
||||
|
||||
### 2.2 版本管理
|
||||
|
||||
- **当前版本**:从代码中定义(如 `const Version = "1.0.0"`)
|
||||
- **版本格式**:语义化版本(如 `1.0.0`, `1.0.1`)
|
||||
- **版本检查**:从服务器获取最新版本信息(JSON 格式)
|
||||
|
||||
### 2.3 更新流程
|
||||
|
||||
```
|
||||
应用启动
|
||||
↓
|
||||
检查更新(可选,后台进行)
|
||||
↓
|
||||
发现新版本?
|
||||
↓ 是
|
||||
显示更新提示
|
||||
↓
|
||||
用户确认更新
|
||||
↓
|
||||
下载更新包(显示进度)
|
||||
↓
|
||||
下载完成
|
||||
↓
|
||||
关闭当前应用
|
||||
↓
|
||||
替换旧版本文件
|
||||
↓
|
||||
启动新版本
|
||||
↓
|
||||
完成
|
||||
```
|
||||
|
||||
## 3. 技术实现
|
||||
|
||||
### 3.1 版本信息结构
|
||||
|
||||
```go
|
||||
type VersionInfo struct {
|
||||
Version string `json:"version"` // 版本号,如 "1.0.1"
|
||||
DownloadURL string `json:"download_url"` // 下载地址
|
||||
ReleaseNotes string `json:"release_notes"` // 更新说明
|
||||
Size int64 `json:"size"` // 文件大小(字节)
|
||||
MD5 string `json:"md5"` // 文件 MD5 校验
|
||||
}
|
||||
```
|
||||
|
||||
### 3.2 版本检查接口
|
||||
|
||||
**接口地址**:`https://your-server.com/api/version/check`
|
||||
|
||||
**请求**:
|
||||
```json
|
||||
{
|
||||
"current_version": "1.0.0",
|
||||
"platform": "windows"
|
||||
}
|
||||
```
|
||||
|
||||
**响应**:
|
||||
```json
|
||||
{
|
||||
"has_update": true,
|
||||
"latest_version": "1.0.1",
|
||||
"download_url": "https://your-server.com/releases/go-desk-1.0.1.exe",
|
||||
"release_notes": "修复了若干问题",
|
||||
"size": 13765632,
|
||||
"md5": "abc123..."
|
||||
}
|
||||
```
|
||||
|
||||
### 3.3 Go 后端实现
|
||||
|
||||
#### 3.3.1 版本定义
|
||||
|
||||
```go
|
||||
// app.go 或 version.go
|
||||
const AppVersion = "1.0.0"
|
||||
```
|
||||
|
||||
#### 3.3.2 更新检查方法
|
||||
|
||||
```go
|
||||
// CheckUpdate 检查更新
|
||||
func (a *App) CheckUpdate() (map[string]interface{}, error)
|
||||
```
|
||||
|
||||
#### 3.3.3 下载更新方法
|
||||
|
||||
```go
|
||||
// DownloadUpdate 下载更新包
|
||||
func (a *App) DownloadUpdate(downloadURL string, progressCallback func(int)) error
|
||||
```
|
||||
|
||||
#### 3.3.4 应用更新方法
|
||||
|
||||
```go
|
||||
// ApplyUpdate 应用更新(替换文件并重启)
|
||||
func (a *App) ApplyUpdate(updateFilePath string) error
|
||||
```
|
||||
|
||||
### 3.4 前端实现
|
||||
|
||||
#### 3.4.1 更新检查组件
|
||||
|
||||
- 启动时自动检查(可选)
|
||||
- 手动检查按钮
|
||||
- 更新提示对话框
|
||||
- 下载进度显示
|
||||
|
||||
#### 3.4.2 界面元素
|
||||
|
||||
- 版本号显示
|
||||
- 更新提示对话框(Arco Modal)
|
||||
- 下载进度条(Arco Progress)
|
||||
- 更新说明展示
|
||||
|
||||
## 4. 实现细节
|
||||
|
||||
### 4.1 版本比较
|
||||
|
||||
使用语义化版本比较:
|
||||
- 格式:`主版本号.次版本号.修订号`(如 `1.0.0`)
|
||||
- 比较逻辑:逐级比较版本号
|
||||
|
||||
### 4.2 文件下载
|
||||
|
||||
- 使用 Go 标准库 `net/http` 下载
|
||||
- 支持进度回调
|
||||
- 支持断点续传(可选)
|
||||
- 下载到临时目录(如 `%TEMP%/go-desk-update.exe`)
|
||||
|
||||
### 4.3 文件替换(Windows)
|
||||
|
||||
**方案1:使用批处理脚本**
|
||||
1. 下载完成后,生成批处理脚本
|
||||
2. 脚本内容:等待进程结束 → 替换文件 → 启动新版本 → 删除脚本
|
||||
3. 启动脚本后退出当前应用
|
||||
|
||||
**方案2:使用 Go 实现**
|
||||
1. 创建更新助手程序
|
||||
2. 主程序退出前启动助手程序
|
||||
3. 助手程序等待主程序退出后替换文件并重启
|
||||
|
||||
### 4.4 错误处理
|
||||
|
||||
- 网络错误:提示检查网络连接
|
||||
- 下载失败:支持重试
|
||||
- 文件校验失败:重新下载
|
||||
- 替换失败:提示手动更新
|
||||
|
||||
## 5. 文件结构
|
||||
|
||||
```
|
||||
go-desk/
|
||||
├── internal/
|
||||
│ └── update/
|
||||
│ ├── update.go # 更新核心逻辑
|
||||
│ ├── version.go # 版本管理
|
||||
│ └── download.go # 下载功能
|
||||
├── app.go # 添加更新相关方法
|
||||
└── version.go # 版本常量定义
|
||||
```
|
||||
|
||||
## 6. 配置项
|
||||
|
||||
### 6.1 更新服务器配置
|
||||
|
||||
```go
|
||||
const (
|
||||
UpdateCheckURL = "https://your-server.com/api/version/check"
|
||||
UpdateInterval = 24 * time.Hour // 检查间隔
|
||||
)
|
||||
```
|
||||
|
||||
### 6.2 可选配置
|
||||
|
||||
- 是否自动检查更新
|
||||
- 检查更新间隔
|
||||
- 更新服务器地址
|
||||
|
||||
## 7. 安全考虑
|
||||
|
||||
1. **HTTPS 连接**:版本检查和下载使用 HTTPS
|
||||
2. **文件校验**:下载后验证 MD5/SHA256
|
||||
3. **权限检查**:确保有写入权限
|
||||
4. **回滚机制**:更新失败时保留旧版本
|
||||
|
||||
## 8. 用户体验
|
||||
|
||||
1. **非阻塞**:更新检查在后台进行,不阻塞应用启动
|
||||
2. **可取消**:用户可以选择稍后更新
|
||||
3. **进度显示**:下载时显示进度条
|
||||
4. **友好提示**:清晰的更新说明和操作指引
|
||||
|
||||
## 9. 开发优先级
|
||||
|
||||
### 阶段一:基础功能
|
||||
- [ ] 版本定义和比较
|
||||
- [ ] 版本检查接口
|
||||
- [ ] 简单的更新提示
|
||||
|
||||
### 阶段二:下载功能
|
||||
- [ ] 文件下载实现
|
||||
- [ ] 进度显示
|
||||
- [ ] 错误处理
|
||||
|
||||
### 阶段三:自动更新
|
||||
- [ ] 文件替换逻辑
|
||||
- [ ] 自动重启
|
||||
- [ ] 完整测试
|
||||
|
||||
## 10. 注意事项
|
||||
|
||||
1. **Windows 文件锁定**:需要先关闭应用才能替换
|
||||
2. **权限问题**:确保有写入应用目录的权限
|
||||
3. **网络超时**:设置合理的超时时间
|
||||
4. **更新失败处理**:保留旧版本,不破坏现有功能
|
||||
|
||||
## 11. 参考实现
|
||||
|
||||
- Electron 的 auto-updater 机制
|
||||
- Wails 社区更新方案
|
||||
- Go 应用更新最佳实践
|
||||
|
||||
---
|
||||
|
||||
**下一步**:根据此设计文档开始实现更新功能。
|
||||
|
||||
321
docs/04-功能迭代/GO-DESK-1.尝试/设备调用测试功能设计.md
Normal file
321
docs/04-功能迭代/GO-DESK-1.尝试/设备调用测试功能设计.md
Normal file
@@ -0,0 +1,321 @@
|
||||
# Go Desk 设备调用测试功能设计
|
||||
|
||||
> **文档版本**:v1.0
|
||||
> **创建时间**:2025-01-XX
|
||||
> **维护者**:JueChen
|
||||
> **状态**:设计阶段
|
||||
|
||||
## 1. 功能概述
|
||||
|
||||
实现系统资源访问和设备调用测试功能,验证 Wails 应用与系统资源的交互能力。
|
||||
|
||||
## 2. 功能需求
|
||||
|
||||
### 2.1 系统信息获取
|
||||
|
||||
- [ ] CPU 信息:核心数、使用率、型号
|
||||
- [ ] 内存信息:总内存、已用内存、可用内存
|
||||
- [ ] 磁盘信息:磁盘列表、总容量、已用容量、可用容量
|
||||
- [ ] 系统信息:操作系统、架构、主机名
|
||||
- [ ] 网络信息:IP 地址、网络接口列表
|
||||
|
||||
### 2.2 文件系统操作
|
||||
|
||||
- [ ] 读取文件:读取指定路径的文件内容
|
||||
- [ ] 写入文件:写入内容到指定文件
|
||||
- [ ] 列出目录:获取目录下的文件和文件夹列表
|
||||
- [ ] 创建目录:创建新目录
|
||||
- [ ] 删除文件/目录:删除指定路径的文件或目录
|
||||
- [ ] 文件信息:获取文件大小、修改时间、权限等
|
||||
|
||||
### 2.3 系统操作
|
||||
|
||||
- [ ] 环境变量:读取系统环境变量
|
||||
- [ ] 执行命令:执行系统命令(可选,需谨慎)
|
||||
- [ ] 打开文件/目录:使用系统默认程序打开
|
||||
- [ ] 文件选择对话框:选择文件或目录
|
||||
|
||||
### 2.4 进程信息
|
||||
|
||||
- [ ] 进程列表:获取当前运行的进程列表
|
||||
- [ ] 进程详情:获取指定进程的详细信息
|
||||
|
||||
## 3. 技术实现
|
||||
|
||||
### 3.1 Go 后端实现
|
||||
|
||||
#### 3.1.1 系统信息模块
|
||||
|
||||
```go
|
||||
// internal/system/system.go
|
||||
package system
|
||||
|
||||
// GetSystemInfo 获取系统信息
|
||||
func GetSystemInfo() (map[string]interface{}, error)
|
||||
|
||||
// GetCPUInfo 获取 CPU 信息
|
||||
func GetCPUInfo() (map[string]interface{}, error)
|
||||
|
||||
// GetMemoryInfo 获取内存信息
|
||||
func GetMemoryInfo() (map[string]interface{}, error)
|
||||
|
||||
// GetDiskInfo 获取磁盘信息
|
||||
func GetDiskInfo() ([]map[string]interface{}, error)
|
||||
```
|
||||
|
||||
#### 3.1.2 文件系统模块
|
||||
|
||||
```go
|
||||
// internal/filesystem/fs.go
|
||||
package filesystem
|
||||
|
||||
// ReadFile 读取文件
|
||||
func ReadFile(path string) (string, error)
|
||||
|
||||
// WriteFile 写入文件
|
||||
func WriteFile(path, content string) error
|
||||
|
||||
// ListDir 列出目录
|
||||
func ListDir(path string) ([]map[string]interface{}, error)
|
||||
|
||||
// CreateDir 创建目录
|
||||
func CreateDir(path string) error
|
||||
|
||||
// DeletePath 删除文件或目录
|
||||
func DeletePath(path string) error
|
||||
|
||||
// GetFileInfo 获取文件信息
|
||||
func GetFileInfo(path string) (map[string]interface{}, error)
|
||||
```
|
||||
|
||||
#### 3.1.3 App 方法暴露
|
||||
|
||||
```go
|
||||
// app.go 中添加方法
|
||||
|
||||
// GetSystemInfo 获取系统信息
|
||||
func (a *App) GetSystemInfo() (map[string]interface{}, error)
|
||||
|
||||
// GetCPUInfo 获取 CPU 信息
|
||||
func (a *App) GetCPUInfo() (map[string]interface{}, error)
|
||||
|
||||
// GetMemoryInfo 获取内存信息
|
||||
func (a *App) GetMemoryInfo() (map[string]interface{}, error)
|
||||
|
||||
// GetDiskInfo 获取磁盘信息
|
||||
func (a *App) GetDiskInfo() ([]map[string]interface{}, error)
|
||||
|
||||
// ReadFile 读取文件
|
||||
func (a *App) ReadFile(path string) (string, error)
|
||||
|
||||
// WriteFile 写入文件
|
||||
func (a *App) WriteFile(path, content string) error
|
||||
|
||||
// ListDir 列出目录
|
||||
func (a *App) ListDir(path string) ([]map[string]interface{}, error)
|
||||
|
||||
// CreateDir 创建目录
|
||||
func (a *App) CreateDir(path string) error
|
||||
|
||||
// DeletePath 删除文件或目录
|
||||
func (a *App) DeletePath(path string) error
|
||||
|
||||
// GetFileInfo 获取文件信息
|
||||
func (a *App) GetFileInfo(path string) (map[string]interface{}, error)
|
||||
|
||||
// GetEnvVars 获取环境变量
|
||||
func (a *App) GetEnvVars() (map[string]string, error)
|
||||
|
||||
// OpenPath 打开文件或目录
|
||||
func (a *App) OpenPath(path string) error
|
||||
```
|
||||
|
||||
### 3.2 前端实现
|
||||
|
||||
#### 3.2.1 系统信息展示
|
||||
|
||||
- 系统信息卡片(Arco Card)
|
||||
- 实时刷新按钮
|
||||
- 信息表格展示
|
||||
|
||||
#### 3.2.2 文件系统操作界面
|
||||
|
||||
- 文件浏览器组件
|
||||
- 路径输入框
|
||||
- 操作按钮(读取、写入、删除等)
|
||||
- 文件内容编辑器(文本区域)
|
||||
|
||||
#### 3.2.3 测试页面布局
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────┐
|
||||
│ 系统信息测试 │
|
||||
├─────────────────────────────────────┤
|
||||
│ [刷新] │
|
||||
│ ┌─────────┬─────────┬─────────┐ │
|
||||
│ │ CPU │ 内存 │ 磁盘 │ │
|
||||
│ └─────────┴─────────┴─────────┘ │
|
||||
└─────────────────────────────────────┘
|
||||
|
||||
┌─────────────────────────────────────┐
|
||||
│ 文件系统测试 │
|
||||
├─────────────────────────────────────┤
|
||||
│ 路径: [________________] [浏览] │
|
||||
│ ┌───────────────────────────────┐ │
|
||||
│ │ 文件列表 │ │
|
||||
│ │ - file1.txt │ │
|
||||
│ │ - folder1/ │ │
|
||||
│ └───────────────────────────────┘ │
|
||||
│ [读取] [写入] [删除] [创建目录] │
|
||||
└─────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## 4. 依赖库
|
||||
|
||||
### 4.1 Go 依赖
|
||||
|
||||
```go
|
||||
// 系统信息
|
||||
github.com/shirou/gopsutil/v3/cpu
|
||||
github.com/shirou/gopsutil/v3/mem
|
||||
github.com/shirou/gopsutil/v3/disk
|
||||
github.com/shirou/gopsutil/v3/host
|
||||
|
||||
// 文件操作
|
||||
os
|
||||
path/filepath
|
||||
io/ioutil
|
||||
|
||||
// 系统操作
|
||||
os/exec
|
||||
runtime
|
||||
```
|
||||
|
||||
### 4.2 安装命令
|
||||
|
||||
```bash
|
||||
go get github.com/shirou/gopsutil/v3/cpu
|
||||
go get github.com/shirou/gopsutil/v3/mem
|
||||
go get github.com/shirou/gopsutil/v3/disk
|
||||
go get github.com/shirou/gopsutil/v3/host
|
||||
```
|
||||
|
||||
## 5. 实现细节
|
||||
|
||||
### 5.1 系统信息获取
|
||||
|
||||
**CPU 信息**:
|
||||
- 使用 `gopsutil/cpu` 获取 CPU 核心数、使用率
|
||||
- 使用 `runtime.NumCPU()` 获取逻辑核心数
|
||||
|
||||
**内存信息**:
|
||||
- 使用 `gopsutil/mem` 获取内存统计
|
||||
- 转换为 MB/GB 单位显示
|
||||
|
||||
**磁盘信息**:
|
||||
- 使用 `gopsutil/disk` 获取磁盘分区和使用情况
|
||||
- 过滤系统盘和可访问盘
|
||||
|
||||
**系统信息**:
|
||||
- 使用 `gopsutil/host` 获取主机信息
|
||||
- 使用 `runtime.GOOS` 和 `runtime.GOARCH` 获取平台信息
|
||||
|
||||
### 5.2 文件系统操作
|
||||
|
||||
**路径安全**:
|
||||
- 验证路径合法性
|
||||
- 防止路径遍历攻击
|
||||
- 限制操作范围(可选)
|
||||
|
||||
**错误处理**:
|
||||
- 文件不存在
|
||||
- 权限不足
|
||||
- 路径无效
|
||||
|
||||
**文件编码**:
|
||||
- 文本文件使用 UTF-8
|
||||
- 二进制文件提示用户
|
||||
|
||||
### 5.3 跨平台兼容
|
||||
|
||||
- Windows:使用 `os/exec` 执行系统命令
|
||||
- Linux/Mac:使用相应的系统调用
|
||||
- 路径分隔符:使用 `filepath.Join` 处理
|
||||
|
||||
## 6. 文件结构
|
||||
|
||||
```
|
||||
go-desk/
|
||||
├── internal/
|
||||
│ ├── system/
|
||||
│ │ └── system.go # 系统信息获取
|
||||
│ └── filesystem/
|
||||
│ └── fs.go # 文件系统操作
|
||||
├── app.go # 添加系统调用方法
|
||||
└── web/src/
|
||||
└── components/
|
||||
├── SystemInfo.vue # 系统信息组件
|
||||
└── FileSystem.vue # 文件系统组件
|
||||
```
|
||||
|
||||
## 7. 安全考虑
|
||||
|
||||
1. **路径验证**:防止路径遍历攻击
|
||||
2. **权限检查**:确保有足够的权限执行操作
|
||||
3. **操作限制**:限制危险操作(如删除系统文件)
|
||||
4. **输入验证**:验证所有用户输入
|
||||
5. **错误信息**:不暴露敏感系统信息
|
||||
|
||||
## 8. 测试用例
|
||||
|
||||
### 8.1 系统信息测试
|
||||
|
||||
- [ ] 获取 CPU 信息成功
|
||||
- [ ] 获取内存信息成功
|
||||
- [ ] 获取磁盘信息成功
|
||||
- [ ] 信息格式正确
|
||||
|
||||
### 8.2 文件系统测试
|
||||
|
||||
- [ ] 读取文件成功
|
||||
- [ ] 写入文件成功
|
||||
- [ ] 列出目录成功
|
||||
- [ ] 创建目录成功
|
||||
- [ ] 删除文件成功
|
||||
- [ ] 路径验证有效
|
||||
- [ ] 错误处理正确
|
||||
|
||||
## 9. 开发优先级
|
||||
|
||||
### 阶段一:基础系统信息
|
||||
- [ ] CPU 信息获取
|
||||
- [ ] 内存信息获取
|
||||
- [ ] 系统基本信息
|
||||
|
||||
### 阶段二:文件系统基础操作
|
||||
- [ ] 读取文件
|
||||
- [ ] 列出目录
|
||||
- [ ] 文件信息获取
|
||||
|
||||
### 阶段三:文件系统完整操作
|
||||
- [ ] 写入文件
|
||||
- [ ] 创建目录
|
||||
- [ ] 删除文件/目录
|
||||
|
||||
### 阶段四:高级功能
|
||||
- [ ] 磁盘信息
|
||||
- [ ] 网络信息
|
||||
- [ ] 环境变量
|
||||
- [ ] 打开文件/目录
|
||||
|
||||
## 10. 注意事项
|
||||
|
||||
1. **性能**:系统信息获取可能较慢,考虑异步调用
|
||||
2. **权限**:某些操作需要管理员权限
|
||||
3. **跨平台**:不同平台的行为可能不同
|
||||
4. **错误处理**:完善的错误提示和日志记录
|
||||
|
||||
---
|
||||
|
||||
**下一步**:根据此设计文档开始实现设备调用测试功能。
|
||||
|
||||
247
docs/04-功能迭代/GO-DESK-1.尝试/需求.md
Normal file
247
docs/04-功能迭代/GO-DESK-1.尝试/需求.md
Normal file
@@ -0,0 +1,247 @@
|
||||
# Go Desk 需求文档
|
||||
|
||||
> **文档版本**:v1.0
|
||||
> **创建时间**:2025-12-29
|
||||
> **维护者**:JueChen
|
||||
> **状态**:已确定
|
||||
|
||||
## 1. 产品概述
|
||||
|
||||
### 1.1 产品定位
|
||||
|
||||
Go Desk 是基于 Wails 框架开发的桌面应用程序,用于**测试验证技术栈**。通过实现用户查询功能,验证以下技术能力:
|
||||
- 打包和构建流程
|
||||
- 前后端交互机制
|
||||
- 与系统资源交互(数据库连接、文件操作等)
|
||||
- 跨平台桌面应用开发
|
||||
|
||||
### 1.2 技术栈
|
||||
|
||||
- **后端**:Go v1.25.4
|
||||
- **框架**:Wails v2
|
||||
- **前端**:Vue 3 + Arco Design Vue
|
||||
- **构建工具**:Vite
|
||||
- **数据库**:MySQL (lab_dev)
|
||||
|
||||
## 2. 功能需求
|
||||
|
||||
### 2.1 核心功能:用户查询展示
|
||||
|
||||
#### 功能描述
|
||||
从 MySQL 数据库 `lab_dev` 的 `member_info` 表中查询用户信息,并在桌面应用中展示。参考 `lab-admin` 和 `lab-api` 中的用户管理功能。
|
||||
|
||||
#### 数据表结构
|
||||
- **表名**:`member_info`
|
||||
- **主要字段**:
|
||||
- `memberid`:用户ID(主键)
|
||||
- `membername`:姓名
|
||||
- `account`:账号
|
||||
- `contactphone`:联系电话
|
||||
- `organid`:所属机构ID
|
||||
- `organname`:所属机构名称(需关联查询)
|
||||
- `role`:角色(需关联 `sys_member_role` 表获取角色名称)
|
||||
- `status`:状态(1-正常,2-停用,3-删除)
|
||||
- `createtime`:创建时间
|
||||
- `updatetime`:修改时间
|
||||
|
||||
#### 查询功能
|
||||
- [ ] 用户列表展示(表格形式)
|
||||
- [ ] 关键字搜索(支持姓名、账号、电话模糊查询)
|
||||
- [ ] 状态筛选(全部/正常/停用/已删除)
|
||||
- [ ] 角色筛选(需关联查询角色表)
|
||||
- [ ] 机构筛选(需关联查询机构表)
|
||||
- [ ] 分页显示
|
||||
- [ ] 排序功能(按创建时间、用户ID等)
|
||||
|
||||
#### 展示字段
|
||||
- [ ] 编号(memberid)
|
||||
- [ ] 姓名(membername)
|
||||
- [ ] 账号(account)
|
||||
- [ ] 联系电话(contactphone)
|
||||
- [ ] 所属机构(organname)
|
||||
- [ ] 角色(角色名称,需关联查询)
|
||||
- [ ] 状态(状态标签显示)
|
||||
- [ ] 创建时间(createtime)
|
||||
- [ ] 修改时间(updatetime)
|
||||
|
||||
#### 界面要求
|
||||
- [ ] 使用 Arco Design Vue 组件库
|
||||
- [ ] 查询表单(关键字、状态、角色、机构筛选)
|
||||
- [ ] 数据表格展示
|
||||
- [ ] 分页组件
|
||||
- [ ] 状态标签(正常-绿色,停用-橙色,删除-灰色)
|
||||
|
||||
### 2.2 基础功能
|
||||
|
||||
- [x] 应用启动和窗口管理
|
||||
- [x] 前后端通信机制
|
||||
- [x] 数据库连接(MySQL lab_dev)
|
||||
- [ ] 错误处理和日志记录
|
||||
- [ ] 数据库连接配置管理
|
||||
|
||||
### 2.3 界面需求
|
||||
|
||||
- [ ] 主界面布局(查询区域 + 表格区域)
|
||||
- [ ] 使用 Arco 基础样式,避免过度自定义
|
||||
- [ ] 响应式布局适配
|
||||
|
||||
## 3. 非功能需求
|
||||
|
||||
### 3.1 性能要求
|
||||
|
||||
- [ ] 启动时间:< 3秒
|
||||
- [ ] 查询响应:< 500ms
|
||||
- [ ] 内存占用:< 200MB
|
||||
|
||||
### 3.2 兼容性要求
|
||||
|
||||
- [ ] Windows 10/11(优先)
|
||||
- [ ] macOS(后续考虑)
|
||||
- [ ] Linux(后续考虑)
|
||||
|
||||
### 3.3 用户体验要求
|
||||
|
||||
- [ ] 界面简洁易用
|
||||
- [ ] 查询操作流畅
|
||||
- [ ] 错误提示友好
|
||||
- [ ] 加载状态提示
|
||||
|
||||
## 4. 数据需求
|
||||
|
||||
### 4.1 数据库连接
|
||||
|
||||
- **数据库**:MySQL
|
||||
- **数据库名**:lab_dev
|
||||
- **连接信息**:
|
||||
- Host: localhost
|
||||
- Port: 3306
|
||||
- User: root
|
||||
- Password: 123456
|
||||
- **连接池配置**:
|
||||
- MaxOpenConns: 25
|
||||
- MaxIdleConns: 5
|
||||
- ConnMaxLifetime: 300秒
|
||||
|
||||
### 4.2 数据查询
|
||||
|
||||
- [ ] 直接查询 `member_info` 表
|
||||
- [ ] 关联查询机构表获取机构名称
|
||||
- [ ] 关联查询 `sys_member_role` 表获取角色信息
|
||||
- [ ] 支持分页查询(limit/offset)
|
||||
- [ ] 支持排序(按字段排序)
|
||||
|
||||
### 4.3 数据交互
|
||||
|
||||
- [ ] 前端通过 `window.go.main` 调用 Go 方法
|
||||
- [ ] Go 方法返回 JSON 格式数据
|
||||
- [ ] 查询参数:关键字、状态、角色、机构、分页信息
|
||||
- [ ] 返回数据:用户列表、总数
|
||||
|
||||
## 5. 开发优先级
|
||||
|
||||
### 阶段一:最小可用版本(MVP)
|
||||
- [x] 项目初始化和框架搭建
|
||||
- [ ] 数据库连接配置
|
||||
- [ ] Go 后端:用户查询接口
|
||||
- [ ] 前端:用户列表展示
|
||||
- [ ] 基础查询功能(关键字搜索)
|
||||
|
||||
### 阶段二:功能完善
|
||||
- [ ] 筛选功能(状态、角色、机构)
|
||||
- [ ] 分页功能
|
||||
- [ ] 排序功能
|
||||
- [ ] 关联查询(机构名称、角色名称)
|
||||
- [ ] 界面优化
|
||||
|
||||
### 阶段三:增强功能(后续考虑)
|
||||
- [ ] 用户修改功能
|
||||
- [ ] 用户新增功能
|
||||
- [ ] 用户删除功能
|
||||
- [ ] 数据导出功能
|
||||
- [ ] 性能优化
|
||||
|
||||
## 6. 技术实现要点
|
||||
|
||||
### 6.1 Go 后端
|
||||
|
||||
- 使用 GORM 连接 MySQL
|
||||
- 定义 `MemberInfo` 结构体(参考 `ops-kit/internal/model/member_info.go`)
|
||||
- 实现查询方法,参数不超过 3 个
|
||||
- 返回 JSON 格式数据
|
||||
|
||||
### 6.2 前端
|
||||
|
||||
- 使用 Arco Design Vue 组件
|
||||
- 表格组件:`a-table`
|
||||
- 查询表单:`a-form` + `a-input` + `a-select`
|
||||
- 分页组件:`a-pagination`
|
||||
|
||||
### 6.3 数据库查询
|
||||
|
||||
- 基础查询:`SELECT * FROM member_info WHERE ...`
|
||||
- 关联查询机构:`LEFT JOIN organ_info ON member_info.organid = organ_info.organid`
|
||||
- 关联查询角色:`LEFT JOIN sys_member_role ON member_info.memberid = sys_member_role.memberid`
|
||||
|
||||
## 7. 参考实现
|
||||
|
||||
- **前端参考**:`lab-admin/src/views/member/index.vue`
|
||||
- **后端参考**:`lab-api/src/main/java/cn/casehub/member/MemberService.java`
|
||||
- **数据模型参考**:`ops-kit/internal/model/member_info.go`
|
||||
- **数据库连接参考**:`ops-kit/internal/database/db.go`
|
||||
|
||||
## 8. 项目定位说明
|
||||
|
||||
### 8.1 应用用途
|
||||
**测试验证技术栈** - 通过实际项目验证 Wails + Go + Arco-Vue 技术栈的可行性
|
||||
|
||||
### 8.2 目标用户
|
||||
**开发者自己** - 技术型验证项目,用于学习和验证技术能力
|
||||
|
||||
### 8.3 核心验证点
|
||||
1. **打包构建**:验证 Wails 的打包和构建流程
|
||||
2. **前后端交互**:验证 Go 后端与 Vue 前端的通信机制
|
||||
3. **系统资源交互**:验证数据库连接、文件操作等系统资源访问能力
|
||||
4. **跨平台能力**:验证 Windows/macOS/Linux 平台兼容性
|
||||
|
||||
### 8.4 数据来源
|
||||
- **数据库**:MySQL lab_dev(本地数据库)
|
||||
- **数据表**:member_info(用户表)
|
||||
- **连接方式**:直接连接,无需外部服务
|
||||
|
||||
### 8.5 离线能力
|
||||
- 支持离线使用(连接本地数据库)
|
||||
- 不依赖网络服务
|
||||
|
||||
### 8.6 更新机制评估
|
||||
|
||||
**复杂度评估**:中等复杂度,实现难度不高
|
||||
|
||||
**实现方式**:
|
||||
|
||||
1. **简单方案**(推荐用于验证):
|
||||
- 应用启动时检查版本号(从配置文件或服务器获取)
|
||||
- 提示用户有新版本,引导手动下载更新
|
||||
- **复杂度**:低,实现简单
|
||||
|
||||
2. **完整方案**(如需自动更新):
|
||||
- 版本检查:启动时请求服务器获取最新版本信息
|
||||
- 下载更新:后台下载更新包(zip/exe)
|
||||
- 自动替换:下载完成后替换旧版本,重启应用
|
||||
- **复杂度**:中等,需要处理:
|
||||
- 版本管理(版本号对比)
|
||||
- 文件下载(断点续传、进度显示)
|
||||
- 文件替换(Windows 需要关闭进程后替换)
|
||||
- 错误处理(下载失败、替换失败等)
|
||||
|
||||
**推荐**:
|
||||
- **当前阶段**:暂不实现自动更新,手动更新即可
|
||||
- **后续考虑**:如需实现,建议使用第三方库(如 `wails-updater` 或自行实现简单版本检查)
|
||||
|
||||
**参考实现**:
|
||||
- Wails 社区有相关更新方案示例
|
||||
- 可以参考 Electron 的更新机制设计思路
|
||||
|
||||
---
|
||||
|
||||
**当前阶段**:实现用户查询展示功能,修改维护功能后续考虑。
|
||||
|
||||
Reference in New Issue
Block a user