From 502b656bc54bf4fc341833c8d1f384f04c04ce2d Mon Sep 17 00:00:00 2001 From: Jacky Date: Mon, 14 Apr 2025 02:11:53 +0000 Subject: [PATCH] feat(site): implement site status management and update related components --- api/sites/site.go | 13 ++--- app/src/api/site.ts | 7 +-- app/src/views/site/cert/Cert.vue | 6 ++- .../components/SiteStatusSegmented.vue | 47 +++++-------------- .../views/site/ngx_conf/NgxConfigEditor.vue | 27 ++++------- app/src/views/site/ngx_conf/NgxServer.vue | 7 ++- .../views/site/site_edit/RightSettings.vue | 18 ++----- app/src/views/site/site_edit/SiteEdit.vue | 19 ++++---- app/src/views/site/site_list/columns.tsx | 6 +-- internal/performance/perf_opt.go | 6 ++- internal/site/status.go | 21 +++++++++ {api/sites => internal/site}/type.go | 15 ++++-- 12 files changed, 93 insertions(+), 99 deletions(-) rename app/src/views/site/{site_edit => }/components/SiteStatusSegmented.vue (87%) create mode 100644 internal/site/status.go rename {api/sites => internal/site}/type.go (75%) diff --git a/api/sites/site.go b/api/sites/site.go index 8e9e94ee..f112b276 100644 --- a/api/sites/site.go +++ b/api/sites/site.go @@ -28,11 +28,6 @@ func GetSite(c *gin.Context) { return } - enabled := true - if _, err := os.Stat(nginx.GetConfPath("sites-enabled", name)); os.IsNotExist(err) { - enabled = false - } - g := query.ChatGPTLog chatgpt, err := g.Where(g.Name.Eq(path)).FirstOrCreate() if err != nil { @@ -63,15 +58,15 @@ func GetSite(c *gin.Context) { return } - c.JSON(http.StatusOK, Site{ + c.JSON(http.StatusOK, site.Site{ ModifiedAt: file.ModTime(), Site: siteModel, - Enabled: enabled, Name: name, Config: string(origContent), AutoCert: certModel.AutoCert == model.AutoCertEnabled, ChatGPTMessages: chatgpt.Content, Filepath: path, + Status: site.GetSiteStatus(name), }) return } @@ -96,10 +91,9 @@ func GetSite(c *gin.Context) { } } - c.JSON(http.StatusOK, Site{ + c.JSON(http.StatusOK, site.Site{ Site: siteModel, ModifiedAt: file.ModTime(), - Enabled: enabled, Name: name, Config: nginxConfig.FmtCode(), Tokenized: nginxConfig, @@ -107,6 +101,7 @@ func GetSite(c *gin.Context) { CertInfo: certInfoMap, ChatGPTMessages: chatgpt.Content, Filepath: path, + Status: site.GetSiteStatus(name), }) } diff --git a/app/src/api/site.ts b/app/src/api/site.ts index ab696947..b78b59c6 100644 --- a/app/src/api/site.ts +++ b/app/src/api/site.ts @@ -3,15 +3,16 @@ import type { ModelBase } from '@/api/curd' import type { EnvGroup } from '@/api/env_group' import type { NgxConfig } from '@/api/ngx' import type { ChatComplicationMessage } from '@/api/openai' -import type { PrivateKeyType } from '@/constants' +import type { ConfigStatus, PrivateKeyType } from '@/constants' import Curd from '@/api/curd' import http from '@/lib/http' +export type SiteStatus = ConfigStatus.Enabled | ConfigStatus.Disabled | ConfigStatus.Maintenance + export interface Site extends ModelBase { modified_at: string path: string advanced: boolean - enabled: boolean name: string filepath: string config: string @@ -23,7 +24,7 @@ export interface Site extends ModelBase { env_group?: EnvGroup sync_node_ids: number[] urls?: string[] - status: string + status: SiteStatus } export interface AutoCertRequest { diff --git a/app/src/views/site/cert/Cert.vue b/app/src/views/site/cert/Cert.vue index b8029301..b83b95db 100644 --- a/app/src/views/site/cert/Cert.vue +++ b/app/src/views/site/cert/Cert.vue @@ -1,6 +1,8 @@ @@ -54,9 +45,8 @@ function handleStatusChanged(event: { status: string, enabled: boolean }) { diff --git a/app/src/views/site/site_edit/SiteEdit.vue b/app/src/views/site/site_edit/SiteEdit.vue index a2372d70..ca158b88 100644 --- a/app/src/views/site/site_edit/SiteEdit.vue +++ b/app/src/views/site/site_edit/SiteEdit.vue @@ -2,7 +2,6 @@ import type { CertificateInfo } from '@/api/cert' import type { NgxConfig } from '@/api/ngx' import type { ChatComplicationMessage } from '@/api/openai' - import type { Site } from '@/api/site' import type { CheckedType } from '@/types' import config from '@/api/config' @@ -11,6 +10,7 @@ import site from '@/api/site' import CodeEditor from '@/components/CodeEditor/CodeEditor.vue' import { ConfigHistory } from '@/components/ConfigHistory' import FooterToolBar from '@/components/FooterToolbar/FooterToolBar.vue' +import { ConfigStatus } from '@/constants' import NgxConfigEditor from '@/views/site/ngx_conf/NgxConfigEditor.vue' import RightSettings from '@/views/site/site_edit/RightSettings.vue' import { HistoryOutlined } from '@ant-design/icons-vue' @@ -30,7 +30,6 @@ const ngx_config: NgxConfig = reactive({ const certInfoMap: Ref> = ref({}) const autoCert = ref(false) -const enabled = ref(false) const filepath = ref('') const configText = ref('') const advanceModeRef = ref(false) @@ -64,7 +63,6 @@ async function handleResponse(r: Site) { filename.value = r.name filepath.value = r.filepath configText.value = r.config - enabled.value = r.enabled autoCert.value = r.auto_cert historyChatgptRecord.value = r.chatgpt_messages data.value = r @@ -168,7 +166,6 @@ provide('save_config', save) provide('configText', configText) provide('ngx_config', ngx_config) provide('history_chatgpt_record', historyChatgptRecord) -provide('enabled', enabled) provide('name', name) provide('filepath', filepath) provide('data', data) @@ -187,17 +184,23 @@ provide('data', data)