From f986d0f28362453af4df2dd2a7439c0a3bd0653b Mon Sep 17 00:00:00 2001 From: guoyuqi Date: Wed, 14 Oct 2026 16:41:12 +0800 Subject: [PATCH] fix: container list search --- core/app/api/v2/auth.go | 1 + core/app/dto/setting.go | 13 ++ core/app/service/setting.go | 27 +++ core/init/validator/validator.go | 1 + frontend/src/api/interface/auth.ts | 1 + frontend/src/api/interface/setting.ts | 2 + .../src/components/table/TableSetting.vue | 88 +++++---- .../components/table/complex/ComplexTable.vue | 23 ++- frontend/src/components/task-list/index.vue | 3 +- frontend/src/composables/useSearchReset.ts | 24 --- frontend/src/lang/modules/en.ts | 14 ++ frontend/src/lang/modules/es-es.ts | 14 ++ frontend/src/lang/modules/fa.ts | 14 ++ frontend/src/lang/modules/ja.ts | 14 ++ frontend/src/lang/modules/ko.ts | 14 ++ frontend/src/lang/modules/lo.ts | 14 ++ frontend/src/lang/modules/ms.ts | 14 ++ frontend/src/lang/modules/pt-br.ts | 14 ++ frontend/src/lang/modules/ru.ts | 14 ++ frontend/src/lang/modules/tr.ts | 14 ++ frontend/src/lang/modules/zh-Hant.ts | 14 ++ frontend/src/lang/modules/zh.ts | 14 ++ .../src/layout/components/Sidebar/index.vue | 2 + frontend/src/layout/index.vue | 4 + frontend/src/routers/index.ts | 32 ++-- frontend/src/store/interface/index.ts | 3 + frontend/src/store/modules/global.ts | 4 + frontend/src/store/modules/process.ts | 9 +- frontend/src/utils/panel-cache.ts | 130 ++++++++++++++ frontend/src/utils/rbac.ts | 2 + frontend/src/utils/search-reset.ts | 167 +++++++++++++++++- frontend/src/utils/xpack.ts | 2 + .../ai/agents/agent/config/tabs/plugins.vue | 5 +- .../agent/config/tabs/skills/hermes.vue | 5 +- .../agent/config/tabs/skills/openclaw.vue | 5 +- frontend/src/views/ai/agents/agent/index.vue | 8 +- frontend/src/views/ai/agents/model/index.vue | 8 +- frontend/src/views/ai/mcp/server/index.vue | 13 +- frontend/src/views/ai/model/ollama/index.vue | 11 +- .../src/views/ai/model/tensorrt/index.vue | 10 ++ frontend/src/views/app-store/apps/index.vue | 15 +- .../src/views/app-store/installed/index.vue | 16 +- .../src/views/container/compose/index.vue | 4 +- .../src/views/container/container/index.vue | 19 +- frontend/src/views/container/image/index.vue | 14 +- .../src/views/container/network/index.vue | 11 +- frontend/src/views/container/repo/index.vue | 11 +- .../src/views/container/template/index.vue | 11 +- frontend/src/views/container/volume/index.vue | 11 +- frontend/src/views/cronjob/cronjob/index.vue | 11 +- .../views/cronjob/cronjob/record/index.vue | 5 +- frontend/src/views/cronjob/library/index.vue | 11 +- frontend/src/views/database/mongodb/index.vue | 11 +- .../views/database/mongodb/remote/index.vue | 11 +- frontend/src/views/database/mysql/index.vue | 11 +- .../src/views/database/mysql/remote/index.vue | 11 +- .../src/views/database/postgresql/index.vue | 11 +- .../database/postgresql/remote/index.vue | 11 +- .../src/views/database/redis/remote/index.vue | 11 +- .../redis/setting/persistence/index.vue | 3 +- .../code-editor/history/index.vue | 3 +- .../host/file-management/convert/index.vue | 3 +- .../host/file-management/favorite/index.vue | 3 +- .../src/views/host/file-management/index.vue | 14 +- .../file-management/recycle-bin/index.vue | 3 +- .../host/file-management/share-list/index.vue | 3 +- .../src/views/host/firewall/docker/index.vue | 5 +- .../src/views/host/firewall/forward/index.vue | 11 +- .../src/views/host/firewall/rule/index.vue | 11 +- .../src/views/host/process/network/index.vue | 2 + .../src/views/host/process/process/index.vue | 2 + frontend/src/views/host/ssh/log/log.vue | 11 +- frontend/src/views/host/ssh/session/index.vue | 4 +- .../host/ssh/ssh/certification/index.vue | 3 +- frontend/src/views/log/host-system/index.vue | 9 +- frontend/src/views/log/login/index.vue | 11 +- frontend/src/views/log/operation/index.vue | 11 +- frontend/src/views/log/task/index.vue | 13 +- .../src/views/login/components/login-form.vue | 2 + .../src/views/setting/alert/dash/index.vue | 13 +- .../src/views/setting/alert/log/index.vue | 13 +- .../src/views/setting/alert/setting/index.vue | 13 +- .../views/setting/backup-account/index.vue | 14 +- frontend/src/views/setting/license/index.vue | 13 +- .../src/views/setting/panel/cache/index.vue | 82 +++++++++ frontend/src/views/setting/panel/index.vue | 11 ++ frontend/src/views/setting/snapshot/index.vue | 11 +- frontend/src/views/terminal/command/index.vue | 11 +- frontend/src/views/terminal/host/index.vue | 11 +- frontend/src/views/toolbox/clam/index.vue | 11 +- .../src/views/toolbox/clam/record/index.vue | 5 +- frontend/src/views/toolbox/ftp/index.vue | 11 +- frontend/src/views/toolbox/ftp/log/index.vue | 3 +- .../views/website/runtime/dotnet/index.vue | 13 +- .../src/views/website/runtime/go/index.vue | 13 +- .../src/views/website/runtime/java/index.vue | 13 +- .../src/views/website/runtime/node/index.vue | 13 +- .../php/extension-management/index.vue | 8 +- .../runtime/php/extension-template/index.vue | 3 +- .../src/views/website/runtime/php/index.vue | 13 +- .../views/website/runtime/python/index.vue | 13 +- .../views/website/ssl/acme-account/index.vue | 3 +- frontend/src/views/website/ssl/ca/index.vue | 3 +- .../views/website/ssl/dns-account/index.vue | 3 +- frontend/src/views/website/ssl/index.vue | 14 +- frontend/src/views/website/template/index.vue | 9 +- frontend/src/views/website/website/index.vue | 14 +- 107 files changed, 1175 insertions(+), 296 deletions(-) delete mode 100644 frontend/src/composables/useSearchReset.ts create mode 100644 frontend/src/utils/panel-cache.ts create mode 100644 frontend/src/views/setting/panel/cache/index.vue 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 @@