fix(admin): 修复多页面设置加载失败 — renderOtherSettings 空指针崩溃
Some checks failed
CI / Lint + Build (push) Has been cancelled

根因: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
This commit is contained in:
2026-06-30 18:56:42 +08:00
parent ecbae7c4fa
commit 20067f7640
3 changed files with 12 additions and 4 deletions

View File

@ -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()