package response import ( "fmt" "time" "twin-api/base/config" "github.com/gin-gonic/gin" ) type Button struct { Color string `json:"-"` Text string `json:"text"` Url string `json:"url"` } 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 { ctx *gin.Context 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 { var trace string var ok bool if ctx.Keys != nil { if trace, ok = ctx.Keys["req_id"].(string); !ok { trace = fmt.Sprintf("%d", time.Now().UnixMicro()) } } response := new(Response) response.Code = code response.Msg = message response.Trace = trace response.Data.Buttons = make([]Button, 0) response.Data.Window = Window{Title: "温馨提示", Close: true} return response } func (r *Response) Success(ctx *gin.Context) *Response { resp := New(ctx, config.Success, "success") resp.Window(&Window{Title: "", Close: true}) resp.Data.Buttons = make([]Button, 0) return resp } func (r *Response) Botton(b *Button) *Response { r.Data.Buttons = append(r.Data.Buttons, *b) return r } func (r *Response) Window(win *Window) *Response { if win.Title != "" { r.Data.Window.Title = win.Title } r.Data.Window.Close = win.Close return r }