twin-api/app/api/response/response.go

68 lines
1.2 KiB
Go

package response
import (
"fmt"
"time"
"twin-api/base/config"
"github.com/gin-gonic/gin"
)
const defaultTitle = "温馨提示"
type Button struct {
Text string `json:"text"`
Url string `json:"url"`
Type string `json:"type"`
}
type Window struct {
Title string `json:"title"`
Close bool `json:"close"`
}
type Data struct {
Buttons []*Button `json:"buttons"`
Window Window `json:"window"`
}
type Response struct {
Code int `json:"code"`
Msg string `json:"message"`
Trace string `json:"trace"`
Data Data `json:"data"`
}
func New(ctx *gin.Context, code int, message string) *Response {
trace, ok := ctx.Keys[config.TraceId].(string)
if !ok {
trace = fmt.Sprintf("%d", time.Now().UnixMicro())
}
return &Response{
Code: code,
Msg: message,
Trace: trace,
Data: Data{
Buttons: make([]*Button, 0),
Window: Window{Title: defaultTitle, Close: true},
},
}
}
// Button 用传入的一组按钮替换掉原有的全部按钮
func (r *Response) Button(b ...*Button) *Response {
r.Data.Buttons = append(r.Data.Buttons[:0], b...)
return r
}
func (r *Response) Message(message string) *Response {
r.Msg = message
return r
}
func (r *Response) Closable(b bool) *Response {
r.Data.Window.Close = b
return r
}