feat: add settings schema
This commit is contained in:
@@ -34,7 +34,7 @@
|
||||
|
||||
## 当前阶段
|
||||
|
||||
当前项目处于:可复用桌面应用模板的产品定位校准阶段。
|
||||
当前项目处于:可复用桌面应用模板的 Phase 1 基础模块建设阶段。
|
||||
|
||||
优先路径:
|
||||
|
||||
|
||||
@@ -134,6 +134,7 @@ Windows build 资源:
|
||||
|
||||
## 目标模块技术边界
|
||||
|
||||
- 设置:通过 `settings_schema.go` 集中定义 key、类型、默认值、说明、选项和只读策略。
|
||||
- 登录:通过 `AuthProvider` 支持本地固定账号和真实后端,不在前端写死密码。
|
||||
- 主业务:商品图片 AI 优化通过服务层封装,MVP 可先用本地模拟 provider。
|
||||
- 操作日志:审计日志进 SQLite,运行日志可进 SQLite 或本地滚动日志文件。
|
||||
|
||||
+12
-1
@@ -38,6 +38,7 @@ frontend/src
|
||||
- `internal/services/store.go`:负责 SQLite 连接、迁移和基础读写。
|
||||
- `internal/services/appservice.go`:负责窗口、托盘、语言资源和应用生命周期。
|
||||
- `internal/services/appconfig_service.go`:负责配置读写的 Wails 服务边界。
|
||||
- `internal/services/settings_schema.go`:集中定义设置模块 schema、默认值、选项和初始化 SQL。
|
||||
- `internal/services/hotkey_service.go`:负责热键读取、更新和重新注册。
|
||||
- `internal/services/ocr_service.go`:当前 OCR 存量示例,后续可演进为图片 AI 能力的一部分。
|
||||
- `platform/`:隔离 Windows / macOS 热键和系统能力差异。
|
||||
@@ -45,6 +46,7 @@ frontend/src
|
||||
已实现边界:
|
||||
|
||||
- `AuthService`:登录、退出、会话读取;内部通过 `AuthProvider` 接入本地固定账号或真实后端。当前 `LocalAuthProvider` 可用,`RemoteAuthProvider` 保留边界并返回未配置错误。
|
||||
- `AppConfigService`:通过统一设置 schema 初始化和校验主题、语言、窗口行为、快捷键展示、数据目录、日志策略和登录配置。
|
||||
|
||||
目标新增边界:
|
||||
|
||||
@@ -123,6 +125,15 @@ appconfig(
|
||||
)
|
||||
```
|
||||
|
||||
当前 `appconfig` 默认配置由统一设置 schema 生成:
|
||||
|
||||
- `theme.mode`、`language`
|
||||
- `window.start_state`、`window.width`、`window.height`、`window.remember_state`
|
||||
- `shortcut.open_second_window`、`shortcut.open_main_window`
|
||||
- `data.root_mode`、`data.custom_directory`
|
||||
- `logs.level`、`logs.audit_retention_days`、`logs.app_retention_days`
|
||||
- `auth.provider`、`auth.local.username`、`auth.local.password_salt`、`auth.local.password_hash`
|
||||
|
||||
```sql
|
||||
auth_sessions(
|
||||
id INTEGER PRIMARY KEY,
|
||||
@@ -213,7 +224,7 @@ image_task_results(
|
||||
- 第二窗口保持当前小窗定位,不参与最大化、尺寸恢复和主布局填充逻辑。
|
||||
- 后续增强再保存主窗口尺寸和最大化状态,下次启动恢复用户选择。
|
||||
|
||||
实现状态:主窗口初始尺寸、居中、可调整大小、根容器和主布局填充已落地;主应用路由骨架已落地;登录 provider 边界已落地。窗口尺寸持久化依赖设置 schema 后续实现。
|
||||
实现状态:主窗口初始尺寸、居中、可调整大小、根容器和主布局填充已落地;主应用路由骨架已落地;登录 provider 边界已落地;设置模块统一 schema 已落地。窗口尺寸持久化下一步基于 `window.*` 配置实现。
|
||||
|
||||
## 关键风险
|
||||
|
||||
|
||||
+1
-1
@@ -30,7 +30,7 @@
|
||||
| T-011 | 实现主窗口启动参数与根布局策略 | T-010 | Go 侧设置主窗口初始宽高、居中、可调整大小;前端根容器和主布局填满窗口;阅读型内容有最大宽度,列表/仪表盘/设置页可自适应拉伸 | DONE |
|
||||
| T-012 | 搭建主应用路由骨架 | T-011 | `login`、`dashboard`、`image-optimizer`、`logs`、`statistics`、`settings`、`components` 路由可访问 | DONE |
|
||||
| T-013 | 实现登录 provider 边界 | T-012 | 支持本地固定账号 provider;预留 remote provider;账号密码不写死在前端;登录事件写审计日志 | DONE |
|
||||
| T-014 | 收敛设置模块 schema | T-012 | 主题、语言、窗口行为、快捷键、数据目录、日志策略都有统一配置定义和默认值 | TODO |
|
||||
| T-014 | 收敛设置模块 schema | T-012 | 主题、语言、窗口行为、快捷键、数据目录、日志策略都有统一配置定义和默认值 | DONE |
|
||||
| T-015 | 持久化窗口尺寸和最大化状态 | T-014 | 保存主窗口尺寸和最大化状态;下次启动恢复用户上次选择;第二窗口不参与该逻辑 | TODO |
|
||||
|
||||
## Phase 2 · 业务样例与日志统计
|
||||
|
||||
+5
-1
@@ -24,11 +24,15 @@
|
||||
- `SetAppConfig(key string, value string) error`:保存配置值。
|
||||
- `GetLanguage() string`:读取当前语言。
|
||||
- `SetLanguage(lang string) error`:保存当前语言。
|
||||
- `GetSettingsSchema() ([]models.AppSettingGroup, error)`:返回统一设置 schema、默认值和当前值。
|
||||
|
||||
约束:
|
||||
|
||||
- 配置持久化走 SQLite `appconfig` 表。
|
||||
- 新增配置项时,必须有默认值和迁移逻辑。
|
||||
- 统一设置 schema 定义在 `internal/services/settings_schema.go`,覆盖主题、语言、窗口行为、快捷键、数据目录、日志策略和登录 provider 配置。
|
||||
- 新增配置项时,必须补充 key、类型、默认值、说明和必要选项,并同步初始化 SQL。
|
||||
- `SetAppConfig` 会校验 schema 已知配置项;只读项不能通过通用配置接口修改。
|
||||
- 快捷键 schema 项只用于统一展示,实际热键更新仍走 `HotkeyService`。
|
||||
|
||||
### HotkeyService
|
||||
|
||||
|
||||
+14
-3
@@ -4,9 +4,9 @@
|
||||
|
||||
## 当前阶段
|
||||
|
||||
项目处于可复用桌面应用模板的产品定位校准阶段。目标已经从迁移后的基础工程调整为“Windows-first、可扩展到其他平台的桌面端应用模板”。
|
||||
项目处于可复用桌面应用模板的 Phase 1 基础模块建设阶段。目标已经从迁移后的基础工程调整为“Windows-first、可扩展到其他平台的桌面端应用模板”。
|
||||
|
||||
当前代码已从迁移后的 Wails/Vue/SQLite 基线推进到主应用路由骨架和登录 provider 边界阶段,已具备设置、多语言、主题、本地配置、热键、托盘、OCR 示例、模板级模块入口和本地登录能力。商品图片 AI 优化、完整审计日志查询、运行日志和数据统计仍是骨架页面,尚未接入真实后端服务和业务数据模型。
|
||||
当前代码已从迁移后的 Wails/Vue/SQLite 基线推进到主应用路由骨架、登录 provider 边界和统一设置 schema 阶段,已具备设置、多语言、主题、本地配置、热键、托盘、OCR 示例、模板级模块入口和本地登录能力。商品图片 AI 优化、完整审计日志查询、运行日志和数据统计仍是骨架页面,尚未接入真实后端服务和业务数据模型。
|
||||
|
||||
## 已确认事实
|
||||
|
||||
@@ -35,6 +35,8 @@
|
||||
- 已保留第二窗口策略:保持小窗,不参与主窗口最大化和尺寸恢复逻辑。
|
||||
- 已实现 AuthService:`GetAuthProviders`、`GetAuthMode`、`SetAuthMode`、`Login`、`Logout`、`GetCurrentSession`。
|
||||
- 已实现登录审计留痕:登录成功、登录失败和退出写入 `audit_logs`。
|
||||
- 已实现统一设置 schema:主题、语言、窗口行为、快捷键展示、数据目录、日志策略和登录 provider 配置都有默认值、说明和基础校验。
|
||||
- 已实现设置页 schema 展示:`/#/settings` 可读取后端 `GetSettingsSchema` 并展示分组、当前值、默认值、说明和只读标记。
|
||||
|
||||
## 当前命令
|
||||
|
||||
@@ -136,9 +138,18 @@ wails3 build
|
||||
- 登录成功、失败和退出会写审计日志。
|
||||
- `go test ./...`、`npm run typecheck`、`npm run build`、`npm run build:dev`、`go build -o bin\cmbone.exe .`、`cmd /c build.bat` 和 `dev.bat` 烟测通过。
|
||||
|
||||
同日完成统一设置 schema:
|
||||
|
||||
- 新增 `internal/services/settings_schema.go` 和 `internal/models/settings.go`。
|
||||
- `AppConfigService.GetSettingsSchema` 返回设置分组、配置项、默认值和当前值。
|
||||
- `SetAppConfig` 对 schema 已知项执行 select、boolean、number 和只读校验。
|
||||
- `theme.mode` 改为从后端配置读取,并支持 `light`、`dark`、`systemdefault`。
|
||||
- `/#/settings` 展示统一设置 schema。
|
||||
- `go test ./...`、`npm run typecheck`、`npm run build`、`go build -o bin\cmbone.exe .`、`cmd /c build.bat` 通过。
|
||||
|
||||
## 下一步
|
||||
|
||||
从 [`06-tasks.md`](06-tasks.md) 领取第一个 `TODO` 任务。目前建议先做 `T-014`:收敛设置模块 schema。
|
||||
从 [`06-tasks.md`](06-tasks.md) 领取第一个 `TODO` 任务。目前建议先做 `T-015`:持久化窗口尺寸和最大化状态。
|
||||
|
||||
## 当前 blocker
|
||||
|
||||
|
||||
+4
-1
@@ -23,6 +23,9 @@
|
||||
| --- | --- | --- |
|
||||
| `internal/services/appconfig_service.go` | `GetAppConfig` / `SetAppConfig` | 前端配置读写入口 |
|
||||
| `internal/services/appconfig_service.go` | `GetLanguage` / `SetLanguage` | 语言配置读写入口 |
|
||||
| `internal/services/appconfig_service.go` | `GetSettingsSchema` | 返回设置分组、默认值和当前值 |
|
||||
| `internal/services/settings_schema.go` | settings schema | 集中定义主题、语言、窗口、快捷键、数据目录、日志策略和登录配置 |
|
||||
| `internal/models/settings.go` | `AppSettingGroup` / `AppSettingDefinition` | 设置 schema 前端绑定模型 |
|
||||
|
||||
## 登录
|
||||
|
||||
@@ -66,7 +69,7 @@
|
||||
| `frontend/src/modules/image-optimizer/ImageOptimizerPage.vue` | 主业务骨架 | 商品图片 AI 优化任务入口 |
|
||||
| `frontend/src/modules/logs/LogsPage.vue` | 日志页骨架 | 审计日志和运行日志入口 |
|
||||
| `frontend/src/modules/statistics/StatisticsPage.vue` | 统计页骨架 | P0 指标和 7 天趋势入口 |
|
||||
| `frontend/src/modules/settings/SettingsPage.vue` | 设置页骨架 | 复用存量主题、语言和快捷键设置 |
|
||||
| `frontend/src/modules/settings/SettingsPage.vue` | 设置页 | 复用存量设置组件,并展示后端统一设置 schema |
|
||||
| `frontend/src/modules/components-demo/ComponentsDemoPage.vue` | 组件示例骨架 | 常用表单、筛选、表格和状态标签 |
|
||||
| `frontend/src/pages/Home/Index.vue` | 第二窗口入口 | OCR 示例页面 |
|
||||
| `frontend/src/utils/ThemeManager.ts` | 主题工具 | 主题切换和持久化协作 |
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
| --- | --- | --- |
|
||||
| 项目结构 | B | 已从模板整理为普通工程,目录职责基本清楚 |
|
||||
| 产品定位 | B | 已校准为 Windows-first 可复用桌面应用模板,后续需要代码落地 |
|
||||
| 后端服务 | B | 现有服务边界清晰,登录、日志、统计和业务样例服务尚未实现 |
|
||||
| 后端服务 | B+ | 现有服务边界清晰,登录 provider 和设置 schema 已落地,日志、统计和业务样例服务尚未实现 |
|
||||
| 本地存储 | B | SQLite 初始化和基础测试已存在,目标新增表需要迁移和测试 |
|
||||
| 前端结构 | B | Vue 组件按功能拆分,窗口和布局策略已落地,目标路由骨架尚未实现 |
|
||||
| 前端结构 | B+ | Vue 组件按功能拆分,窗口、布局策略和目标路由骨架已落地,设置页已接入后端 schema |
|
||||
| 构建验证 | B | Go 测试、前端构建、后端编译可运行 |
|
||||
| 文档 | B+ | Harness Coding 文档已接入,并同步了模板愿景 |
|
||||
|
||||
|
||||
+2
-2
@@ -14,7 +14,7 @@
|
||||
| `#/image-optimizer` | `frontend/src/modules/image-optimizer/ImageOptimizerPage.vue` | 主窗口 | 商品图片 AI 优化业务样例骨架 |
|
||||
| `#/logs` | `frontend/src/modules/logs/LogsPage.vue` | 主窗口 | 审计日志和运行日志统一入口骨架 |
|
||||
| `#/statistics` | `frontend/src/modules/statistics/StatisticsPage.vue` | 主窗口 | 第一批统计指标和趋势骨架 |
|
||||
| `#/settings` | `frontend/src/modules/settings/SettingsPage.vue` | 主窗口 | 设置中心,当前复用存量主题、语言和快捷键设置 |
|
||||
| `#/settings` | `frontend/src/modules/settings/SettingsPage.vue` | 主窗口 | 设置中心,复用存量设置组件并展示统一设置 schema |
|
||||
| `#/components` | `frontend/src/modules/components-demo/ComponentsDemoPage.vue` | 主窗口 | 常用输入、选择、文本域、表格、筛选和状态标签示例 |
|
||||
| `#/second` | `frontend/src/pages/Home/Index.vue` | 第二窗口 | 当前 OCR 示例和轻量快捷功能 |
|
||||
| `#/business/image-optimizer` | redirect | 主窗口 | 兼容目标路由,重定向到 `#/image-optimizer` |
|
||||
@@ -29,7 +29,7 @@
|
||||
| `#/image-optimizer` | 商品图片 AI 优化 | `T-020` / `T-023` 接入任务模型、任务列表、状态、结果和失败原因 |
|
||||
| `#/logs` | 操作日志 | `T-021` 接入审计日志和运行日志查询 |
|
||||
| `#/statistics` | 数据统计 | `T-022` 接入趋势、成功率、耗时和失败任务 |
|
||||
| `#/settings` | 设置中心 | `T-014` 接入统一设置 schema |
|
||||
| `#/settings` | 设置中心 | 已接入统一设置 schema,`T-015` 继续使用窗口配置做尺寸恢复 |
|
||||
| `#/components` | 组件示例 | `T-030` 扩充输入框、多选框、下拉框、多行文本、表格、筛选、分页 |
|
||||
|
||||
## 主窗口布局
|
||||
|
||||
Reference in New Issue
Block a user