fix(admin): 修复多页面设置加载失败 — renderOtherSettings 空指针崩溃
Some checks failed
CI / Lint + Build (push) Has been cancelled
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:
@ -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()
|
||||
|
||||
Reference in New Issue
Block a user