hotgo/server/internal/logic/view/view.go

153 lines
3.6 KiB
Go

// Package view
// @Link https://github.com/bufanyun/hotgo
// @Copyright Copyright (c) 2023 HotGo CLI
// @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
package view
import (
"context"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/util/gconv"
"hotgo/internal/model"
"hotgo/internal/service"
)
type sView struct{}
func init() {
service.RegisterView(New())
}
func New() *sView {
return &sView{}
}
// GetBreadCrumb 前台系统-获取面包屑列表
func (s *sView) GetBreadCrumb(ctx context.Context, in *model.ViewGetBreadCrumbInput) []model.ViewBreadCrumb {
breadcrumb := []model.ViewBreadCrumb{
{Name: "首页", Url: "/"},
}
return breadcrumb
}
// GetTitle 前台系统-获取标题
func (s *sView) GetTitle(ctx context.Context, in *model.ViewGetTitleInput) string {
return "title"
}
// RenderTpl 渲染指定模板页面
func (s *sView) RenderTpl(ctx context.Context, tpl string, data ...model.View) {
var (
viewObj = model.View{}
request = g.RequestFromCtx(ctx)
)
if len(data) > 0 {
viewObj = data[0]
}
if viewObj.Title == "" {
viewObj.Title = g.Cfg().MustGet(ctx, `setting.title`).String()
} else {
viewObj.Title = viewObj.Title + ` - ` + g.Cfg().MustGet(ctx, `setting.title`).String()
}
if viewObj.Keywords == "" {
viewObj.Keywords = g.Cfg().MustGet(ctx, `setting.keywords`).String()
}
if viewObj.Description == "" {
viewObj.Description = g.Cfg().MustGet(ctx, `setting.description`).String()
}
if viewObj.IpcCode == "" {
viewObj.IpcCode = g.Cfg().MustGet(ctx, `setting.icpCode`).String()
}
if viewObj.GET == nil {
viewObj.GET = request.GetQueryMap()
}
// 去掉空数据
viewData := gconv.Map(viewObj)
for k, v := range viewData {
if g.IsEmpty(v) {
delete(viewData, k)
}
}
// 内置对象
viewData["BuildIn"] = &viewBuildIn{httpRequest: request}
// 渲染模板
_ = request.Response.WriteTpl(tpl, viewData)
}
// Render 渲染默认模板页面
func (s *sView) Render(ctx context.Context, data ...model.View) {
s.RenderTpl(ctx, g.Cfg().MustGet(ctx, "viewer.homeLayout").String(), data...)
}
// Render302 跳转中间页面
func (s *sView) Render302(ctx context.Context, data ...model.View) {
view := model.View{}
if len(data) > 0 {
view = data[0]
}
if view.Title == "" {
view.Title = "页面跳转中"
}
s.RenderTpl(ctx, "default/pages/302.html", view)
}
// Render401 401页面
func (s *sView) Render401(ctx context.Context, data ...model.View) {
view := model.View{}
if len(data) > 0 {
view = data[0]
}
if view.Title == "" {
view.Title = "无访问权限"
}
s.RenderTpl(ctx, "default/pages/401.html", view)
}
// Render403 403页面
func (s *sView) Render403(ctx context.Context, data ...model.View) {
view := model.View{}
if len(data) > 0 {
view = data[0]
}
if view.Title == "" {
view.Title = "无访问权限"
}
s.RenderTpl(ctx, "default/pages/403.html", view)
}
// Render404 404页面
func (s *sView) Render404(ctx context.Context, data ...model.View) {
view := model.View{}
if len(data) > 0 {
view = data[0]
}
if view.Title == "" {
view.Title = "资源不存在"
}
s.RenderTpl(ctx, "default/pages/404.html", view)
}
// Render500 500页面
func (s *sView) Render500(ctx context.Context, data ...model.View) {
view := model.View{}
if len(data) > 0 {
view = data[0]
}
if view.Title == "" {
view.Title = "请求执行错误"
}
s.RenderTpl(ctx, "default/pages/500.html", view)
}
func (s *sView) Error(ctx context.Context, err error) {
view := model.View{
Title: "错误提示",
Error: err.Error(),
}
s.RenderTpl(ctx, "default/pages/500.html", view)
}