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);