From 197781e722630cc5fb1536ae129a7e83caf836cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=97=E5=AD=90?= Date: Mon, 26 Jan 2026 18:14:40 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=BD=91=E7=AB=99=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=9F=9F=E5=90=8D=E7=9B=B4=E6=8E=A5=E6=89=93?= =?UTF-8?q?=E5=BC=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/biz/website.go | 5 ++- internal/data/website.go | 6 +++ web/src/views/file/ListView.vue | 3 +- web/src/views/website/ListView.vue | 66 +++++++++++++++++++++++++++++- 4 files changed, 75 insertions(+), 5 deletions(-) diff --git a/internal/biz/website.go b/internal/biz/website.go index 2f69366a..86dc7fd3 100644 --- a/internal/biz/website.go +++ b/internal/biz/website.go @@ -27,8 +27,9 @@ type Website struct { CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` - CertExpire string `gorm:"-:all" json:"cert_expire"` // 仅显示 - PHP uint `gorm:"-:all" json:"php"` // 仅显示 + CertExpire string `gorm:"-:all" json:"cert_expire"` // 仅显示 + PHP uint `gorm:"-:all" json:"php"` // 仅显示 + Domains []string `gorm:"-:all" json:"domains"` // 仅显示 Cert *Cert `gorm:"foreignKey:WebsiteID" json:"cert"` } diff --git a/internal/data/website.go b/internal/data/website.go index af16d445..323195b6 100644 --- a/internal/data/website.go +++ b/internal/data/website.go @@ -263,6 +263,12 @@ func (r *websiteRepo) List(typ string, page, limit uint) ([]*biz.Website, int64, if website.Type == biz.WebsiteTypePHP { website.PHP = r.getPHPVersion(website.Name) } + // 获取域名 + if vhost, err := r.getVhost(website); err == nil { + if domains, err := punycode.DecodeDomains(vhost.ServerName()); err == nil { + website.Domains = domains + } + } } return websites, total, nil diff --git a/web/src/views/file/ListView.vue b/web/src/views/file/ListView.vue index 506fca33..a2c03013 100644 --- a/web/src/views/file/ListView.vue +++ b/web/src/views/file/ListView.vue @@ -30,6 +30,7 @@ import EditModal from '@/views/file/EditModal.vue' import PreviewModal from '@/views/file/PreviewModal.vue' import PropertyModal from '@/views/file/PropertyModal.vue' import type { FileInfo, Marked } from '@/views/file/types' +import copy2clipboard from '@vavt/copy2clipboard' const { $gettext } = useGettext() const themeVars = useThemeVars() @@ -818,7 +819,7 @@ const deleteFiles = (items: any[]) => { // 复制路径到剪贴板 const copyPath = (item: any) => { - navigator.clipboard.writeText(item.full).then(() => { + copy2clipboard(item.full).then(() => { window.$message.success($gettext('Path copied to clipboard')) }) } diff --git a/web/src/views/website/ListView.vue b/web/src/views/website/ListView.vue index 86c0e4c6..28901ef8 100644 --- a/web/src/views/website/ListView.vue +++ b/web/src/views/website/ListView.vue @@ -1,11 +1,13 @@