From f94a04b0677eafd707bfa1eddd708499bd166d7c Mon Sep 17 00:00:00 2001 From: ChengPlay <31820853+zhengkunwang223@users.noreply.github.com> Date: Wed, 30 Apr 2025 18:39:53 +0800 Subject: [PATCH] feat: add config for appstore (#8524) --- agent/app/api/v2/setting.go | 17 ++++ agent/app/dto/request/app.go | 3 +- agent/app/dto/response/app.go | 4 +- agent/app/repo/setting.go | 2 +- agent/app/service/app.go | 16 +++- agent/app/service/setting.go | 11 +++ agent/i18n/i18n.go | 2 +- agent/router/ro_setting.go | 1 + core/i18n/i18n.go | 6 +- core/server/server.go | 4 +- frontend/src/api/interface/app.ts | 9 +- frontend/src/api/modules/app.ts | 2 +- frontend/src/api/modules/setting.ts | 3 + frontend/src/components/task-list/index.vue | 10 ++- frontend/src/lang/modules/en.ts | 3 + frontend/src/lang/modules/ja.ts | 3 + frontend/src/lang/modules/ko.ts | 3 + frontend/src/lang/modules/ms.ts | 3 + frontend/src/lang/modules/pt-br.ts | 3 + frontend/src/lang/modules/ru.ts | 3 + frontend/src/lang/modules/zh-Hant.ts | 3 + frontend/src/lang/modules/zh.ts | 3 + frontend/src/views/app-store/index.vue | 9 -- .../app-store/installed/delete/index.vue | 7 +- .../app-store/installed/detail/index.vue | 38 +++++++-- .../src/views/app-store/installed/index.vue | 12 +-- .../app-store/installed/upgrade/index.vue | 7 +- .../setting/default-domain/index.vue | 73 ---------------- .../src/views/app-store/setting/index.vue | 85 +++++++++++++------ .../setting/panel/api-interface/index.vue | 64 +++++++------- .../views/website/website/create/index.vue | 9 +- 31 files changed, 240 insertions(+), 178 deletions(-) delete mode 100644 frontend/src/views/app-store/setting/default-domain/index.vue diff --git a/agent/app/api/v2/setting.go b/agent/app/api/v2/setting.go index cf21f960d..62b30c983 100644 --- a/agent/app/api/v2/setting.go +++ b/agent/app/api/v2/setting.go @@ -142,3 +142,20 @@ func loadLocalConn() (*ssh.SSHClient, error) { } return ssh.NewClient(connInDB) } + +// @Tags System Setting +// @Summary Load system setting by key +// @Param key path string true "key" +// @Success 200 {object} dto.SettingInfo +// @Security ApiKeyAuth +// @Security Timestamp +// @Router /settings/get/{key} [get] +func (b *BaseApi) GetSettingByKey(c *gin.Context) { + key := c.Param("key") + if len(key) == 0 { + helper.BadRequest(c, errors.New("key is empty")) + return + } + value := settingService.GetSettingByKey(key) + helper.SuccessWithData(c, value) +} diff --git a/agent/app/dto/request/app.go b/agent/app/dto/request/app.go index b0c2b5ee5..8e289bcc5 100644 --- a/agent/app/dto/request/app.go +++ b/agent/app/dto/request/app.go @@ -129,5 +129,6 @@ type AppUpdateVersion struct { } type AppstoreUpdate struct { - DefaultDomain string `json:"defaultDomain"` + Scope string `json:"scope" validate:"required,oneof=UninstallDeleteImage UpgradeBackup UninstallDeleteBackup"` + Status string `json:"status"` } diff --git a/agent/app/dto/response/app.go b/agent/app/dto/response/app.go index c7604c9d9..4063a55c1 100644 --- a/agent/app/dto/response/app.go +++ b/agent/app/dto/response/app.go @@ -165,5 +165,7 @@ type AppConfig struct { } type AppstoreConfig struct { - DefaultDomain string `json:"defaultDomain"` + UninstallDeleteImage string `json:"uninstallDeleteImage"` + UpgradeBackup string `json:"upgradeBackup"` + UninstallDeleteBackup string `json:"uninstallDeleteBackup"` } diff --git a/agent/app/repo/setting.go b/agent/app/repo/setting.go index 95e97d89c..346cad431 100644 --- a/agent/app/repo/setting.go +++ b/agent/app/repo/setting.go @@ -103,7 +103,7 @@ func (s *SettingRepo) UpdateOrCreate(key, value string) error { result := global.DB.Where("key = ?", key).First(&setting) if result.Error != nil { if errors.Is(result.Error, gorm.ErrRecordNotFound) { - return global.DB.Create(&model.Setting{Key: key, Value: value}).Error + return global.DB.Debug().Create(&model.Setting{Key: key, Value: value}).Error } return result.Error } diff --git a/agent/app/service/app.go b/agent/app/service/app.go index 88156e370..59c7d8cc4 100644 --- a/agent/app/service/app.go +++ b/agent/app/service/app.go @@ -1160,12 +1160,22 @@ func (a AppService) SyncAppListFromRemote(taskID string) (err error) { func (a AppService) UpdateAppstoreConfig(req request.AppstoreUpdate) error { settingService := NewISettingService() - return settingService.Update("AppDefaultDomain", req.DefaultDomain) + return settingService.Update(req.Scope, req.Status) } func (a AppService) GetAppstoreConfig() (*response.AppstoreConfig, error) { - defaultDomain, _ := settingRepo.Get(settingRepo.WithByKey("AppDefaultDomain")) res := &response.AppstoreConfig{} - res.DefaultDomain = defaultDomain.Value + res.UninstallDeleteImage, _ = settingRepo.GetValueByKey("UninstallDeleteImage") + if res.UninstallDeleteImage == "" { + res.UninstallDeleteImage = "False" + } + res.UpgradeBackup, _ = settingRepo.GetValueByKey("UpgradeBackup") + if res.UpgradeBackup == "" { + res.UpgradeBackup = "False" + } + res.UninstallDeleteBackup, _ = settingRepo.GetValueByKey("UninstallDeleteBackup") + if res.UninstallDeleteBackup == "" { + res.UninstallDeleteBackup = "False" + } return res, nil } diff --git a/agent/app/service/setting.go b/agent/app/service/setting.go index de69a807a..8240e3a54 100644 --- a/agent/app/service/setting.go +++ b/agent/app/service/setting.go @@ -22,6 +22,7 @@ type ISettingService interface { TestConnByInfo(req dto.SSHConnData) bool SaveConnInfo(req dto.SSHConnData) error GetSystemProxy() (*dto.SystemProxy, error) + GetSettingByKey(key string) string } func NewISettingService() ISettingService { @@ -136,3 +137,13 @@ func (u *SettingService) GetSystemProxy() (*dto.SystemProxy, error) { systemProxy.Password, _ = encrypt.StringDecrypt(passwd) return &systemProxy, nil } + +func (u *SettingService) GetSettingByKey(key string) string { + switch key { + case "SystemIP": + value, _ := settingRepo.GetValueByKey(key) + return value + default: + return "" + } +} diff --git a/agent/i18n/i18n.go b/agent/i18n/i18n.go index d7a73e468..aa1b83afb 100644 --- a/agent/i18n/i18n.go +++ b/agent/i18n/i18n.go @@ -113,7 +113,7 @@ func UseI18n() gin.HandlerFunc { return func(context *gin.Context) { lang := context.GetHeader("Accept-Language") if lang == "" { - lang = "zh" + lang = "en" } global.I18n = i18n.NewLocalizer(bundle, lang) } diff --git a/agent/router/ro_setting.go b/agent/router/ro_setting.go index 9f9ebf729..79686e669 100644 --- a/agent/router/ro_setting.go +++ b/agent/router/ro_setting.go @@ -14,6 +14,7 @@ func (s *SettingRouter) InitRouter(Router *gin.RouterGroup) { settingRouter.POST("/search", baseApi.GetSettingInfo) settingRouter.GET("/search/available", baseApi.GetSystemAvailable) settingRouter.POST("/update", baseApi.UpdateSetting) + settingRouter.GET("/get/:key", baseApi.GetSettingByKey) settingRouter.GET("/snapshot/load", baseApi.LoadSnapshotData) settingRouter.POST("/snapshot", baseApi.CreateSnapshot) diff --git a/core/i18n/i18n.go b/core/i18n/i18n.go index dcbff8f38..62744135f 100644 --- a/core/i18n/i18n.go +++ b/core/i18n/i18n.go @@ -113,7 +113,7 @@ func UseI18n() gin.HandlerFunc { return func(context *gin.Context) { lang := context.GetHeader("Accept-Language") if lang == "" { - lang = "zh" + lang = "en" } global.I18n = i18n.NewLocalizer(bundle, lang) } @@ -176,3 +176,7 @@ func GetMsgWithMapForCmd(key string, maps map[string]interface{}) string { return content } } + +func GetLanguageFromDB() { + +} diff --git a/core/server/server.go b/core/server/server.go index 18a850495..fd953b69c 100644 --- a/core/server/server.go +++ b/core/server/server.go @@ -4,6 +4,7 @@ import ( "crypto/tls" "encoding/gob" "fmt" + "github.com/1Panel-dev/1Panel/core/init/db" "net" "net/http" "os" @@ -13,7 +14,6 @@ import ( "github.com/1Panel-dev/1Panel/core/global" "github.com/1Panel-dev/1Panel/core/i18n" "github.com/1Panel-dev/1Panel/core/init/cron" - "github.com/1Panel-dev/1Panel/core/init/db" "github.com/1Panel-dev/1Panel/core/init/hook" "github.com/1Panel-dev/1Panel/core/init/lang" "github.com/1Panel-dev/1Panel/core/init/log" @@ -29,9 +29,9 @@ import ( func Start() { viper.Init() + db.Init() i18n.Init() log.Init() - db.Init() migration.Init() validator.Init() lang.Init() diff --git a/frontend/src/api/interface/app.ts b/frontend/src/api/interface/app.ts index 02d2fbf4b..9d34235ba 100644 --- a/frontend/src/api/interface/app.ts +++ b/frontend/src/api/interface/app.ts @@ -295,7 +295,14 @@ export namespace App { } export interface AppStoreConfig { - defaultDomain: string; + uninstallDeleteImage: string; + uninstallDeleteBackup: string; + upgradeBackup: string; + } + + export interface AppStoreConfigUpdate { + scope: string; + status: string; } export interface CustomAppStoreConfig { diff --git a/frontend/src/api/modules/app.ts b/frontend/src/api/modules/app.ts index 872d8279d..a60b717c1 100644 --- a/frontend/src/api/modules/app.ts +++ b/frontend/src/api/modules/app.ts @@ -115,7 +115,7 @@ export const getAppStoreConfig = () => { return http.get(`apps/store/config`); }; -export const updateAppStoreConfig = (req: App.AppStoreConfig) => { +export const updateAppStoreConfig = (req: App.AppStoreConfigUpdate) => { return http.post(`apps/store/update`, req); }; diff --git a/frontend/src/api/modules/setting.ts b/frontend/src/api/modules/setting.ts index 4bbcef74c..3207eaa09 100644 --- a/frontend/src/api/modules/setting.ts +++ b/frontend/src/api/modules/setting.ts @@ -60,6 +60,9 @@ export const updateAgentSetting = (param: Setting.SettingUpdate) => { export const getAgentSettingInfo = () => { return http.post(`/settings/search`); }; +export const getAgentSettingByKey = (key: string) => { + return http.get(`/settings/get/${key}`); +}; // core export const getSettingInfo = () => { diff --git a/frontend/src/components/task-list/index.vue b/frontend/src/components/task-list/index.vue index 2da70670d..2e6d552e0 100644 --- a/frontend/src/components/task-list/index.vue +++ b/frontend/src/components/task-list/index.vue @@ -1,5 +1,11 @@ -