package controllers import ( "encoding/json" "io" "strings" "server/models" beego "github.com/beego/beego/v2/server/web" ) // PlatformWebsiteSettingController 平台官网站点设置(平台端专用) // 对应前端 views/website/setting/index.vue: // - GET /platform/website/setting/info // - POST /platform/website/setting/save // // 数据落在 yz_platform_site_setting(通用键值结构:title/value/tag/remark)。 // 该表完全数据驱动:表里插一行就是一个新的设置项,模板即可用 {yz:tag} 输出, // platform 端界面也会自动出现该项,无需改动后端代码。 type PlatformWebsiteSettingController struct { beego.Controller } func (c *PlatformWebsiteSettingController) jsonErr(httpStatus, bizCode int, msg string) { c.Ctx.Output.SetStatus(httpStatus) c.Data["json"] = map[string]any{"code": bizCode, "msg": msg} _ = c.ServeJSON() } // Info GET /platform/website/setting/info // 直接把表里所有设置项返回,前端按行渲染(新增设置项无需改代码): // data.list = [{ id, title, value, tag, remark }] // data.values = { "sitename": "云泽科技", ... }(key 即标签名,方便直接使用) func (c *PlatformWebsiteSettingController) Info() { if _, err := requirePlatform(&c.Controller); err != nil { c.jsonErr(401, 401, err.Error()) return } rows := models.GetPlatformSiteSettingRows() list := make([]map[string]any, 0, len(rows)) for _, r := range rows { list = append(list, map[string]any{ "id": r.ID, "title": r.Title, "value": r.Value, "tag": r.Tag, "remark": r.Remark, }) } c.Data["json"] = map[string]any{ "code": 200, "msg": "success", "data": map[string]any{ "list": list, "values": models.GetPlatformSiteTagMap(), }, } _ = c.ServeJSON() } // Save POST /platform/website/setting/save // 入参 { "sitename": "云泽科技", "subtitle": "...", ... },key 为标签名,按标签逐项 upsert。 // 通用:表里已存在或新增的任意合法标签都可写入,不需要登记。 func (c *PlatformWebsiteSettingController) Save() { if _, err := requirePlatform(&c.Controller); err != nil { c.jsonErr(401, 401, err.Error()) return } raw, err := io.ReadAll(c.Ctx.Request.Body) if err != nil { c.jsonErr(400, 400, "参数错误") return } var payload map[string]string if uerr := json.Unmarshal(raw, &payload); uerr != nil { c.jsonErr(400, 400, "参数错误") return } if len(payload) == 0 { c.jsonErr(400, 400, "参数错误") return } if strings.TrimSpace(payload["sitename"]) == "" { c.jsonErr(400, 400, "站点名称不能为空") return } // 统一去掉首尾空格,避免模板里输出多余空白 values := make(map[string]string, len(payload)) for k, v := range payload { values[k] = strings.TrimSpace(v) } if err = models.SavePlatformSiteSettings(values); err != nil { c.jsonErr(500, 500, "保存失败: "+err.Error()) return } c.Data["json"] = map[string]any{"code": 200, "msg": "保存成功"} _ = c.ServeJSON() }