diff --git a/core/app/api/v2/auth.go b/core/app/api/v2/auth.go index 62ad8488a..8b2bd98c9 100644 --- a/core/app/api/v2/auth.go +++ b/core/app/api/v2/auth.go @@ -266,6 +266,7 @@ func (b *BaseApi) GetLoginSetting(c *gin.Context) { Language: settingInfo.Language, MenuTabs: settingInfo.MenuTabs, MenuAccordion: settingInfo.MenuAccordion, + PanelCache: settingInfo.PanelCache, PanelName: settingInfo.PanelName, Theme: settingInfo.Theme, NeedCaptcha: needCaptcha, diff --git a/core/app/dto/setting.go b/core/app/dto/setting.go index a8d68b13f..8b9c90a40 100644 --- a/core/app/dto/setting.go +++ b/core/app/dto/setting.go @@ -4,6 +4,16 @@ import ( "time" ) +const DefaultPanelCache = `{"tabs":true,"pagination":true,"refresh":true,"search":false,"duration":"24h"}` + +type PanelCache struct { + Tabs *bool `json:"tabs"` + Pagination *bool `json:"pagination"` + Refresh *bool `json:"refresh"` + Search *bool `json:"search"` + Duration string `json:"duration"` +} + type SettingInfo struct { SystemVersion string `json:"systemVersion"` DeveloperMode string `json:"developerMode"` @@ -18,6 +28,7 @@ type SettingInfo struct { Theme string `json:"theme"` MenuTabs string `json:"menuTabs"` MenuAccordion string `json:"menuAccordion"` + PanelCache string `json:"panelCache"` Language string `json:"language"` DocSource string `json:"docSource"` @@ -62,6 +73,7 @@ type SettingBaseInfo struct { Theme string `json:"theme"` MenuTabs string `json:"menuTabs"` MenuAccordion string `json:"menuAccordion"` + PanelCache string `json:"panelCache"` Language string `json:"language"` HideMenu string `json:"hideMenu"` DocSource string `json:"docSource"` @@ -288,6 +300,7 @@ type LoginSetting struct { Language string `json:"language"` MenuTabs string `json:"menuTabs"` MenuAccordion string `json:"menuAccordion"` + PanelCache string `json:"panelCache"` PanelName string `json:"panelName"` Theme string `json:"theme"` NeedCaptcha bool `json:"needCaptcha"` diff --git a/core/app/service/setting.go b/core/app/service/setting.go index b72af01c5..9b73e67de 100644 --- a/core/app/service/setting.go +++ b/core/app/service/setting.go @@ -120,6 +120,9 @@ func (u *SettingService) GetSettingInfo() (*dto.SettingInfo, error) { for _, set := range setting { settingMap[set.Key] = set.Value } + if settingMap["PanelCache"] == "" { + settingMap["PanelCache"] = dto.DefaultPanelCache + } repairAndSortHideMenu(settingMap) var info dto.SettingInfo arr, err := json.Marshal(settingMap) @@ -155,6 +158,9 @@ func (u *SettingService) GetSettingBaseInfo() (*dto.SettingBaseInfo, error) { for _, set := range setting { settingMap[set.Key] = set.Value } + if settingMap["PanelCache"] == "" { + settingMap["PanelCache"] = dto.DefaultPanelCache + } repairAndSortHideMenu(settingMap) var info dto.SettingBaseInfo arr, err := json.Marshal(settingMap) @@ -224,6 +230,27 @@ func (u *SettingService) Update(c *gin.Context, key, value string) error { if auth.IsAPICredentialSetting(key) { return buserr.New("ErrInvalidParams") } + if key == "PanelCache" { + var config dto.PanelCache + decoder := json.NewDecoder(strings.NewReader(value)) + decoder.DisallowUnknownFields() + if err := decoder.Decode(&config); err != nil { + return buserr.New("ErrInvalidParams") + } + if err := decoder.Decode(new(any)); err != io.EOF { + return buserr.New("ErrInvalidParams") + } + if config.Tabs == nil || config.Pagination == nil || config.Refresh == nil || config.Search == nil { + return buserr.New("ErrInvalidParams") + } + switch config.Duration { + case "24h", "week", "month", "forever": + default: + return buserr.New("ErrInvalidParams") + } + data, _ := json.Marshal(config) + return settingRepo.UpdateOrCreate(key, string(data)) + } oldVal, err := settingRepo.Get(repo.WithByKey(key)) if err != nil { return err diff --git a/core/init/validator/validator.go b/core/init/validator/validator.go index 9a00a7e82..dfe68e8eb 100644 --- a/core/init/validator/validator.go +++ b/core/init/validator/validator.go @@ -26,6 +26,7 @@ func Init() { } var baseSettingKeys = map[string]struct{}{ + "PanelCache": {}, "PanelName": {}, "Theme": {}, "MenuTabs": {}, diff --git a/frontend/src/api/interface/auth.ts b/frontend/src/api/interface/auth.ts index fe3ad7f74..0d72557e6 100644 --- a/frontend/src/api/interface/auth.ts +++ b/frontend/src/api/interface/auth.ts @@ -77,6 +77,7 @@ export namespace Login { language: string; menuTabs: string; menuAccordion: string; + panelCache: string; panelName: string; theme: string; isOffline: boolean; diff --git a/frontend/src/api/interface/setting.ts b/frontend/src/api/interface/setting.ts index c2f4ff189..e9b6cabbf 100644 --- a/frontend/src/api/interface/setting.ts +++ b/frontend/src/api/interface/setting.ts @@ -41,6 +41,7 @@ export namespace Setting { theme: string; menuTabs: string; menuAccordion: string; + panelCache: string; language: string; docSource: string; @@ -86,6 +87,7 @@ export namespace Setting { theme: string; menuTabs: string; menuAccordion: string; + panelCache: string; language: string; hideMenu: string; docSource: string; diff --git a/frontend/src/components/table/TableSetting.vue b/frontend/src/components/table/TableSetting.vue index f45a35be0..5a2f440a1 100644 --- a/frontend/src/components/table/TableSetting.vue +++ b/frontend/src/components/table/TableSetting.vue @@ -20,57 +20,55 @@