新增:应用配置管理模块,优化文件系统功能
- 新增 ConfigAPI 和 ConfigService 实现配置管理 - 新增 SettingsPanel 和 UpdateNotification 组件 - 文件系统模块化重构,提升代码质量 - 提取公共函数,优化代码结构 - 版本号更新至 0.2.0
This commit is contained in:
137
internal/api/config_api.go
Normal file
137
internal/api/config_api.go
Normal file
@@ -0,0 +1,137 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"u-desk/internal/service"
|
||||
)
|
||||
|
||||
// ConfigAPI 配置 API
|
||||
type ConfigAPI struct {
|
||||
configService *service.ConfigService
|
||||
}
|
||||
|
||||
// NewConfigAPI 创建配置 API 实例
|
||||
func NewConfigAPI() (*ConfigAPI, error) {
|
||||
configService, err := service.NewConfigService()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &ConfigAPI{
|
||||
configService: configService,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// GetAppConfigResponse 获取应用配置响应
|
||||
type GetAppConfigResponse struct {
|
||||
Tabs []AppTabDefinition `json:"tabs"`
|
||||
VisibleTabs []string `json:"visibleTabs"`
|
||||
DefaultTab string `json:"defaultTab"`
|
||||
}
|
||||
|
||||
// AppTabDefinition 应用 Tab 定义(前端格式)
|
||||
type AppTabDefinition struct {
|
||||
Key string `json:"key"`
|
||||
Title string `json:"title"`
|
||||
Visible bool `json:"visible"`
|
||||
Enabled bool `json:"enabled"`
|
||||
}
|
||||
|
||||
// SaveAppConfigRequest 保存应用配置请求(前端格式)
|
||||
type SaveAppConfigRequest struct {
|
||||
Tabs []AppTabDefinition `json:"tabs"`
|
||||
VisibleTabs []string `json:"visibleTabs"`
|
||||
DefaultTab string `json:"defaultTab"`
|
||||
}
|
||||
|
||||
// GetAppConfig 获取应用配置
|
||||
func (api *ConfigAPI) GetAppConfig() (map[string]interface{}, error) {
|
||||
tabConfig, err := api.configService.GetTabConfig()
|
||||
if err != nil {
|
||||
return map[string]interface{}{
|
||||
"success": false,
|
||||
"message": fmt.Sprintf("获取配置失败: %v", err),
|
||||
}, err
|
||||
}
|
||||
|
||||
// 转换为前端格式
|
||||
tabs := make([]AppTabDefinition, len(tabConfig.AvailableTabs))
|
||||
visibleTabSet := make(map[string]bool)
|
||||
for _, key := range tabConfig.VisibleTabs {
|
||||
visibleTabSet[key] = true
|
||||
}
|
||||
|
||||
for i, tab := range tabConfig.AvailableTabs {
|
||||
tabs[i] = AppTabDefinition{
|
||||
Key: tab.Key,
|
||||
Title: tab.Title,
|
||||
Visible: visibleTabSet[tab.Key],
|
||||
Enabled: tab.Enabled,
|
||||
}
|
||||
}
|
||||
|
||||
return map[string]interface{}{
|
||||
"success": true,
|
||||
"data": GetAppConfigResponse{
|
||||
Tabs: tabs,
|
||||
VisibleTabs: tabConfig.VisibleTabs,
|
||||
DefaultTab: tabConfig.DefaultTab,
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
|
||||
// SaveAppConfig 保存应用配置
|
||||
func (api *ConfigAPI) SaveAppConfig(req SaveAppConfigRequest) (map[string]interface{}, error) {
|
||||
// 验证:至少保留一个可见 Tab
|
||||
if len(req.VisibleTabs) < 1 {
|
||||
return map[string]interface{}{
|
||||
"success": false,
|
||||
"message": "至少需要保留一个可见的 Tab",
|
||||
}, fmt.Errorf("至少需要保留一个可见的 Tab")
|
||||
}
|
||||
|
||||
// 验证:默认 Tab 必须在可见列表中
|
||||
defaultTabExists := false
|
||||
for _, key := range req.VisibleTabs {
|
||||
if key == req.DefaultTab {
|
||||
defaultTabExists = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !defaultTabExists {
|
||||
return map[string]interface{}{
|
||||
"success": false,
|
||||
"message": "默认 Tab 必须在可见列表中",
|
||||
}, fmt.Errorf("默认 Tab 必须在可见列表中")
|
||||
}
|
||||
|
||||
// 转换为服务层格式
|
||||
availableTabs := make([]service.TabDefinition, len(req.Tabs))
|
||||
for i, tab := range req.Tabs {
|
||||
availableTabs[i] = service.TabDefinition{
|
||||
Key: tab.Key,
|
||||
Title: tab.Title,
|
||||
Enabled: tab.Enabled,
|
||||
}
|
||||
}
|
||||
|
||||
tabConfig := &service.TabConfig{
|
||||
AvailableTabs: availableTabs,
|
||||
VisibleTabs: req.VisibleTabs,
|
||||
DefaultTab: req.DefaultTab,
|
||||
}
|
||||
|
||||
// 保存配置
|
||||
if err := api.configService.SaveTabConfig(tabConfig); err != nil {
|
||||
return map[string]interface{}{
|
||||
"success": false,
|
||||
"message": fmt.Sprintf("保存配置失败: %v", err),
|
||||
}, err
|
||||
}
|
||||
|
||||
return map[string]interface{}{
|
||||
"success": true,
|
||||
"message": "配置保存成功",
|
||||
"data": nil,
|
||||
}, nil
|
||||
}
|
||||
Reference in New Issue
Block a user