108 lines
3.0 KiB
Go
108 lines
3.0 KiB
Go
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()
|
||
}
|