From 20067f76402c32a546ce8ae49212dc53f75e7390 Mon Sep 17 00:00:00 2001 From: Victor_Jay Date: Tue, 30 Jun 2026 18:56:42 +0800 Subject: [PATCH] =?UTF-8?q?fix(admin):=20=E4=BF=AE=E5=A4=8D=E5=A4=9A?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E8=AE=BE=E7=BD=AE=E5=8A=A0=E8=BD=BD=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=20=E2=80=94=20renderOtherSettings=20=E7=A9=BA?= =?UTF-8?q?=E6=8C=87=E9=92=88=E5=B4=A9=E6=BA=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因:site-settings.js 的 renderOtherSettings() 无条件访问 #general-settings 元素,但 brand/security/registration 三个模板 无此容器,导致 TypeError 被 catch 吞掉 → '加载设置失败'。 额外修复: - footer.html: ExtraJS 添加 ?v= 缓存版本哈希 - site-settings.js: API 失败时显式展示服务端错误消息(不再静默 return) - site_settings.go: Set() 改用 UPSERT(clause.OnConflict), 修复 GORM Save() 对不存在 key 首次保存时返回 ErrRecordNotFound --- internal/config/site_settings.go | 8 ++++++-- templates/admin/html/layout/footer.html | 2 +- templates/admin/static/js/site-settings.js | 6 +++++- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/internal/config/site_settings.go b/internal/config/site_settings.go index 0e7e513..11fd894 100644 --- a/internal/config/site_settings.go +++ b/internal/config/site_settings.go @@ -7,6 +7,7 @@ import ( "metazone.cc/mce/internal/model" "gorm.io/gorm" + "gorm.io/gorm/clause" ) // SiteSettings 站点设置管理器(DB 持久化 + 内存缓存,不重启生效) @@ -69,10 +70,13 @@ func (s *SiteSettings) GetBool(key string, defaultVal bool) bool { return b } -// Set 写入设置(同步写 DB + 更新内存) +// Set 写入设置(同步写 DB + 更新内存,使用 UPSERT 兼容首次保存) func (s *SiteSettings) Set(key, value string) error { entry := model.SiteSetting{Key: key, Value: value} - if err := s.db.Save(&entry).Error; err != nil { + if err := s.db.Clauses(clause.OnConflict{ + Columns: []clause.Column{{Name: "key"}}, + DoUpdates: clause.AssignmentColumns([]string{"value"}), + }).Create(&entry).Error; err != nil { return err } s.mu.Lock() diff --git a/templates/admin/html/layout/footer.html b/templates/admin/html/layout/footer.html index 02684c5..9a23e23 100644 --- a/templates/admin/html/layout/footer.html +++ b/templates/admin/html/layout/footer.html @@ -3,7 +3,7 @@ {{if .ExtraJS}} - + {{end}} diff --git a/templates/admin/static/js/site-settings.js b/templates/admin/static/js/site-settings.js index a364047..5c27a6a 100644 --- a/templates/admin/static/js/site-settings.js +++ b/templates/admin/static/js/site-settings.js @@ -36,7 +36,10 @@ async function loadSettings() { try { var res = await api.get('/api/admin/site-settings'); - if (!res.success) return; + if (!res.success) { + showToast(res.message || '加载设置失败', 'error'); + return; + } // 所有开关 var audit = res.data.audit || {}; @@ -138,6 +141,7 @@ // --- 渲染其他设置(过滤已有专属UI的key) --- function renderOtherSettings(all) { var container = document.getElementById('general-settings'); + if (!container) return; // 部分页面无此容器 var filtered = []; Object.keys(all).forEach(function(k) { if (!DEDICATED_KEYS[k]) filtered.push(k);