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 @@