更新website后端
This commit is contained in:
@@ -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()
|
||||
}
|
||||
@@ -291,6 +291,21 @@ func (c *TenantSiteController) NewsDetail() {
|
||||
})
|
||||
}
|
||||
|
||||
// SiteSetting GET /site/setting 官网前台站点设置(公开接口,无需登录)
|
||||
// 按访问域名识别租户,返回 标签名 -> 值,数据来自 yz_platform_site_setting,与模板标签同源。
|
||||
// 完全数据驱动:表里有什么 tag,这里就返回什么标签,新增设置项无需改代码。
|
||||
// 供 SPA 官网(website/)读取,使 SPA 与 themes 直出模板的站点信息保持一致。
|
||||
func (c *TenantSiteController) SiteSetting() {
|
||||
out := map[string]string{}
|
||||
if tid, ok := c.resolveTid(); ok {
|
||||
for k, v := range tagengine.SiteGlobals(tid) {
|
||||
out[k] = v
|
||||
}
|
||||
}
|
||||
c.Data["json"] = map[string]any{"code": 200, "msg": "success", "data": out}
|
||||
_ = c.ServeJSON()
|
||||
}
|
||||
|
||||
// Page GET /page/:path 单页
|
||||
func (c *TenantSiteController) Page() {
|
||||
path := strings.TrimSpace(c.GetString(":path"))
|
||||
|
||||
Reference in New Issue
Block a user