201 lines
4.0 KiB
Go
201 lines
4.0 KiB
Go
package controllers
|
|
|
|
import (
|
|
"encoding/json"
|
|
"github.com/beego/beego/v2/core/logs"
|
|
beego "github.com/beego/beego/v2/server/web"
|
|
"github.com/cdle/xdd/models"
|
|
"github.com/go-playground/locales/zh"
|
|
ut "github.com/go-playground/universal-translator"
|
|
"gopkg.in/go-playground/validator.v9"
|
|
zh_translations "gopkg.in/go-playground/validator.v9/translations/zh"
|
|
"net/http"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
var validate *validator.Validate
|
|
var trans ut.Translator
|
|
|
|
func init() {
|
|
//验证器注册翻译器
|
|
var zhCh = zh.New()
|
|
validate = validator.New()
|
|
var uni = ut.New(zhCh)
|
|
trans, _ = uni.GetTranslator("zh")
|
|
zh_translations.RegisterDefaultTranslations(validate, trans)
|
|
}
|
|
|
|
//BaseController 基础控制器
|
|
type BaseController struct {
|
|
beego.Controller
|
|
PtPin string
|
|
Master bool
|
|
}
|
|
|
|
//NextPrepare 下一个准备
|
|
type NextPrepare interface {
|
|
NextPrepare()
|
|
}
|
|
|
|
//Prepare 准备
|
|
func (c *BaseController) Prepare() {
|
|
// c.Ctx.ResponseWriter.Header().Add("Master-IP-Address", models.GetMasteraddr())
|
|
if app, ok := c.AppController.(NextPrepare); ok {
|
|
app.NextPrepare()
|
|
}
|
|
}
|
|
|
|
//Response 响应
|
|
func (c *BaseController) Response(ps ...interface{}) { //数据、信息、状态码
|
|
rsp := struct {
|
|
//状态码
|
|
Code int `json:"code"` // 0 成功 1 失败
|
|
//数据
|
|
Data interface{} `json:"data"`
|
|
//描述信息
|
|
Msg string `json:"msg"`
|
|
}{}
|
|
switch len(ps) {
|
|
case 3:
|
|
rsp.Code = ps[2].(int)
|
|
fallthrough
|
|
case 2:
|
|
switch ps[1].(type) {
|
|
case string:
|
|
rsp.Msg = ps[1].(string)
|
|
case error:
|
|
rsp.Msg = ps[1].(error).Error()
|
|
}
|
|
fallthrough
|
|
case 1:
|
|
rsp.Data = ps[0]
|
|
}
|
|
c.Data["json"] = rsp
|
|
c.ServeJSON()
|
|
c.StopRun()
|
|
}
|
|
|
|
//ResponseError 响应错误
|
|
func (c *BaseController) ResponseError(ps ...interface{}) *BaseController {
|
|
if ps[0] == nil {
|
|
return c
|
|
}
|
|
// var status = http.StatusBadRequest
|
|
var text = ""
|
|
|
|
for _, p := range ps {
|
|
switch t := p.(type) {
|
|
case int: //状态码
|
|
// status = t
|
|
break
|
|
case error: //错误
|
|
text = t.Error()
|
|
break
|
|
case string: //字符描述
|
|
text = t
|
|
break
|
|
}
|
|
}
|
|
// c.Ctx.ResponseWriter.WriteHeader(status)
|
|
// if text != "" {
|
|
// c.Ctx.WriteString(text)
|
|
// }
|
|
c.Response(nil, text, 1)
|
|
// c.StopRun()
|
|
return nil
|
|
}
|
|
|
|
//Logined 登录
|
|
func (c *BaseController) Logined() *BaseController {
|
|
if v := c.GetSession("pin"); v == nil {
|
|
c.Ctx.Redirect(302, "/")
|
|
c.StopRun()
|
|
} else {
|
|
logs.Warn("登录成功")
|
|
c.PtPin = v.(string)
|
|
logs.Info(models.Config.Master)
|
|
if strings.EqualFold(models.Config.Master, v.(string)) {
|
|
c.Master = true
|
|
}
|
|
}
|
|
return c
|
|
}
|
|
|
|
//Validate 表单验证
|
|
func (c *BaseController) Validate(ps interface{}) *BaseController {
|
|
c.ResponseError(json.Unmarshal(c.Ctx.Input.CopyBody(10000000), ps), http.StatusBadRequest)
|
|
if err := validate.Struct(ps); err != nil {
|
|
for _, err := range err.(validator.ValidationErrors) {
|
|
c.ResponseError(err.Translate(trans), http.StatusBadRequest)
|
|
}
|
|
}
|
|
return c
|
|
}
|
|
|
|
//GetPathInt64
|
|
func (c *BaseController) GetPathInt64(v string) int64 {
|
|
r := c.Ctx.Input.Param(":" + v)
|
|
if r == "" {
|
|
return 0
|
|
}
|
|
i, err := strconv.Atoi(r)
|
|
c.ResponseError(err)
|
|
return int64(i)
|
|
}
|
|
|
|
//GetPathInt
|
|
func (c *BaseController) GetPathInt(v string) int {
|
|
r := c.Ctx.Input.Param(":" + v)
|
|
if r == "" {
|
|
return 0
|
|
}
|
|
i, err := strconv.Atoi(r)
|
|
c.ResponseError(err)
|
|
return i
|
|
}
|
|
|
|
//GetPathInt32
|
|
func (c *BaseController) GetPathInt32(v string) int32 {
|
|
r := c.Ctx.Input.Param(":" + v)
|
|
if r == "" {
|
|
return 0
|
|
}
|
|
i, err := strconv.Atoi(r)
|
|
c.ResponseError(err)
|
|
return int32(i)
|
|
}
|
|
|
|
//GetQueryInt64
|
|
func (c *BaseController) GetQueryInt64(v string) int64 {
|
|
r := c.GetString(v)
|
|
if r == "" {
|
|
return 0
|
|
}
|
|
i, err := strconv.Atoi(r)
|
|
c.ResponseError(err)
|
|
return int64(i)
|
|
}
|
|
|
|
//GetQueryInt
|
|
func (c *BaseController) GetQueryInt(v string) int {
|
|
r := c.GetString(v)
|
|
if r == "" {
|
|
return 0
|
|
}
|
|
i, err := strconv.Atoi(r)
|
|
c.ResponseError(err)
|
|
return i
|
|
}
|
|
|
|
//GetQueryInt32
|
|
func (c *BaseController) GetQueryInt32(v string) int32 {
|
|
r := c.GetString(v)
|
|
if r == "" {
|
|
return 0
|
|
}
|
|
i, err := strconv.Atoi(r)
|
|
c.ResponseError(err)
|
|
return int32(i)
|
|
}
|