小程序一些功能更新
This commit is contained in:
82
internal/logic/setting_admin.go
Normal file
82
internal/logic/setting_admin.go
Normal file
@@ -0,0 +1,82 @@
|
||||
package logic
|
||||
|
||||
import (
|
||||
"context"
|
||||
"strings"
|
||||
|
||||
"github.com/gogf/gf/v2/errors/gerror"
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
|
||||
adminv1 "tool-api/api/admin/v1"
|
||||
"tool-api/internal/consts"
|
||||
)
|
||||
|
||||
// ============================================================================
|
||||
// 管理端系统配置(迭代-2026-09-29)
|
||||
//
|
||||
// 走 settings 表(约定 S9:配置一律走 settings 表,不写 config.yaml)。
|
||||
// 只开放白名单键:管理端可读可写的键集中在这里登记,避免把 settings 全表暴露。
|
||||
// ============================================================================
|
||||
|
||||
// adminSettingWhitelist 管理端可读写的配置键白名单
|
||||
var adminSettingWhitelist = []struct {
|
||||
Key string
|
||||
Remark string
|
||||
// Normalize 保存前的归一化(可为 nil)
|
||||
Normalize func(string) string
|
||||
}{
|
||||
{
|
||||
Key: consts.SettingSiteBaseUrl,
|
||||
Remark: "图片等静态资源的对外拼接前缀(如 https://api.example.com),留空 = 按请求域名动态拼接",
|
||||
Normalize: func(v string) string {
|
||||
return strings.TrimRight(strings.TrimSpace(v), "/")
|
||||
},
|
||||
},
|
||||
{
|
||||
Key: consts.SettingHomeFeatureCovers,
|
||||
Remark: "首页便捷功能卡背景图,JSON:{\"note\":\"/static/...\",\"event\":\"...\"}(key 对齐小程序 features.ts)",
|
||||
Normalize: func(v string) string {
|
||||
return strings.TrimSpace(v)
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
// AdminSettingGet 读取白名单配置项(含当前值与说明)
|
||||
func AdminSettingGet(ctx context.Context) (*adminv1.AdminSettingGetRes, error) {
|
||||
res := &adminv1.AdminSettingGetRes{Items: make([]adminv1.AdminSettingItem, 0, len(adminSettingWhitelist))}
|
||||
for _, def := range adminSettingWhitelist {
|
||||
res.Items = append(res.Items, adminv1.AdminSettingItem{
|
||||
Key: def.Key,
|
||||
Value: SettingValue(ctx, def.Key),
|
||||
Remark: def.Remark,
|
||||
})
|
||||
}
|
||||
return res, nil
|
||||
}
|
||||
|
||||
// AdminSettingSave 保存一项配置(key 必须在白名单内;保存立即生效,SettingValue 缓存同步失效)
|
||||
func AdminSettingSave(ctx context.Context, key, value string) (*adminv1.AdminSettingSaveRes, error) {
|
||||
for _, def := range adminSettingWhitelist {
|
||||
if def.Key != key {
|
||||
continue
|
||||
}
|
||||
v := value
|
||||
if def.Normalize != nil {
|
||||
v = def.Normalize(v)
|
||||
}
|
||||
before := SettingValue(ctx, key)
|
||||
if err := SettingSave(ctx, key, v, def.Remark); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
WriteAudit(ctx, AuditEntry{
|
||||
Action: "setting.save",
|
||||
TargetType: "setting",
|
||||
TargetId: key,
|
||||
Before: g.Map{"v": before},
|
||||
After: g.Map{"v": v},
|
||||
Result: consts.AuditResultSuccess,
|
||||
})
|
||||
return &adminv1.AdminSettingSaveRes{}, nil
|
||||
}
|
||||
return nil, gerror.New("不支持的配置项")
|
||||
}
|
||||
Reference in New Issue
Block a user