From 0e1efd35fc0708493d7a209a83f2ba26409a7868 Mon Sep 17 00:00:00 2001 From: Jacky Date: Sat, 19 Oct 2024 13:21:33 +0800 Subject: [PATCH] feat(site): add status filter #633 --- api/sites/domain.go | 25 +++++++++++++------ api/sites/router.go | 12 ++++----- .../StdDataEntry/components/StdSelect.vue | 1 + app/src/views/site/SiteList.vue | 9 ++++++- model/config_backup.go | 4 --- 5 files changed, 33 insertions(+), 18 deletions(-) diff --git a/api/sites/domain.go b/api/sites/domain.go index 5ad99c26..00b8c295 100644 --- a/api/sites/domain.go +++ b/api/sites/domain.go @@ -16,8 +16,9 @@ import ( "strings" ) -func GetDomains(c *gin.Context) { +func GetSiteList(c *gin.Context) { name := c.Query("name") + enabled := c.Query("enabled") orderBy := c.Query("order_by") sort := c.DefaultQuery("sort", "desc") @@ -44,9 +45,19 @@ func GetDomains(c *gin.Context) { file := configFiles[i] fileInfo, _ := file.Info() if !file.IsDir() { + // name filter if name != "" && !strings.Contains(file.Name(), name) { continue } + // status filter + if enabled != "" { + if enabled == "true" && !enabledConfigMap[file.Name()] { + continue + } + if enabled == "false" && enabledConfigMap[file.Name()] { + continue + } + } configs = append(configs, config.Config{ Name: file.Name(), ModifiedAt: fileInfo.ModTime(), @@ -64,7 +75,7 @@ func GetDomains(c *gin.Context) { }) } -func GetDomain(c *gin.Context) { +func GetSite(c *gin.Context) { rewriteName, ok := c.Get("rewriteConfigFileName") name := c.Param("name") @@ -164,7 +175,7 @@ func GetDomain(c *gin.Context) { }) } -func SaveDomain(c *gin.Context) { +func SaveSite(c *gin.Context) { name := c.Param("name") if name == "" { @@ -256,10 +267,10 @@ func SaveDomain(c *gin.Context) { } } - GetDomain(c) + GetSite(c) } -func EnableDomain(c *gin.Context) { +func EnableSite(c *gin.Context) { configFilePath := nginx.GetConfPath("sites-available", c.Param("name")) enabledConfigFilePath := nginx.GetConfPath("sites-enabled", c.Param("name")) @@ -303,7 +314,7 @@ func EnableDomain(c *gin.Context) { }) } -func DisableDomain(c *gin.Context) { +func DisableSite(c *gin.Context) { enabledConfigFilePath := nginx.GetConfPath("sites-enabled", c.Param("name")) _, err := os.Stat(enabledConfigFilePath) if err != nil { @@ -338,7 +349,7 @@ func DisableDomain(c *gin.Context) { }) } -func DeleteDomain(c *gin.Context) { +func DeleteSite(c *gin.Context) { var err error name := c.Param("name") availablePath := nginx.GetConfPath("sites-available", name) diff --git a/api/sites/router.go b/api/sites/router.go index 847d223d..2a2f3381 100644 --- a/api/sites/router.go +++ b/api/sites/router.go @@ -3,13 +3,13 @@ package sites import "github.com/gin-gonic/gin" func InitRouter(r *gin.RouterGroup) { - r.GET("domains", GetDomains) - r.GET("domain/:name", GetDomain) - r.POST("domain/:name", SaveDomain) - r.POST("domain/:name/enable", EnableDomain) - r.POST("domain/:name/disable", DisableDomain) + r.GET("domains", GetSiteList) + r.GET("domain/:name", GetSite) + r.POST("domain/:name", SaveSite) + r.POST("domain/:name/enable", EnableSite) + r.POST("domain/:name/disable", DisableSite) r.POST("domain/:name/advance", DomainEditByAdvancedMode) - r.DELETE("domain/:name", DeleteDomain) + r.DELETE("domain/:name", DeleteSite) r.POST("domain/:name/duplicate", DuplicateSite) r.POST("auto_cert/:name", AddDomainToAutoCert) r.DELETE("auto_cert/:name", RemoveDomainFromAutoCert) diff --git a/app/src/components/StdDesign/StdDataEntry/components/StdSelect.vue b/app/src/components/StdDesign/StdDataEntry/components/StdSelect.vue index 5506ed48..3cb757ae 100644 --- a/app/src/components/StdDesign/StdDataEntry/components/StdSelect.vue +++ b/app/src/components/StdDesign/StdDataEntry/components/StdSelect.vue @@ -67,6 +67,7 @@ onMounted(() => { :default-active-first-option="false" :mode="props.multiple ? 'multiple' : undefined" style="min-width: 180px" + allow-clear :get-popup-container="triggerNode => triggerNode.parentNode" /> diff --git a/app/src/views/site/SiteList.vue b/app/src/views/site/SiteList.vue index d50a0d79..9a5a24db 100644 --- a/app/src/views/site/SiteList.vue +++ b/app/src/views/site/SiteList.vue @@ -4,7 +4,7 @@ import StdTable from '@/components/StdDesign/StdDataDisplay/StdTable.vue' import type { customRender } from '@/components/StdDesign/StdDataDisplay/StdTableTransformer' import { datetime } from '@/components/StdDesign/StdDataDisplay/StdTableTransformer' import domain from '@/api/domain' -import { input } from '@/components/StdDesign/StdDataEntry' +import { input, select } from '@/components/StdDesign/StdDataEntry' import SiteDuplicate from '@/views/site/components/SiteDuplicate.vue' import InspectConfig from '@/views/config/InspectConfig.vue' import type { Column, JSXElements } from '@/components/StdDesign/types' @@ -35,6 +35,13 @@ const columns: Column[] = [{ return h('div', template) }, + search: { + type: select, + mask: { + true: $gettext('Enabled'), + false: $gettext('Disabled'), + }, + }, sortable: true, pithy: true, }, { diff --git a/model/config_backup.go b/model/config_backup.go index 54a7c517..7e76ff90 100644 --- a/model/config_backup.go +++ b/model/config_backup.go @@ -8,7 +8,6 @@ import ( type ConfigBackup struct { Model - Name string `json:"name"` FilePath string `json:"filepath"` Content string `json:"content" gorm:"type:text"` @@ -16,7 +15,6 @@ type ConfigBackup struct { type ConfigBackupListItem struct { Model - Name string `json:"name"` FilePath string `json:"filepath"` } @@ -25,13 +23,11 @@ func GetBackupList(path string) (configs []ConfigBackupListItem) { db.Model(&ConfigBackup{}). Where(&ConfigBackup{FilePath: path}). Find(&configs) - return } func GetBackup(id int) (config ConfigBackup) { db.First(&config, id) - return }