更新website后端

This commit is contained in:
2026-09-15 00:08:36 +08:00
parent 7e6a3e969f
commit 9875832019
30 changed files with 1428 additions and 38 deletions
+107
View File
@@ -0,0 +1,107 @@
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()
}