github.com/SupenBysz/gf-admin-community@v0.7.4/utility/response/response.go (about)

     1  package response
     2  
     3  import (
     4  	"github.com/SupenBysz/gf-admin-community/api_v1"
     5  	"reflect"
     6  	"strings"
     7  	"unsafe"
     8  
     9  	"github.com/gogf/gf/v2/frame/g"
    10  	"github.com/gogf/gf/v2/net/ghttp"
    11  	"github.com/gogf/gf/v2/os/gtime"
    12  	"github.com/gogf/gf/v2/util/gconv"
    13  )
    14  
    15  // Json 返回标准JSON数据。
    16  func Json(r *ghttp.Request, code int, message string, data ...interface{}) {
    17  	var responseData interface{}
    18  	if len(data) > 0 {
    19  		responseData = data[0]
    20  	} else {
    21  		responseData = g.Map{}
    22  	}
    23  
    24  	if reflect.ValueOf(data) == reflect.ValueOf(api_v1.JsonRes{}) {
    25  		r.Response.WriteJson(data)
    26  	} else {
    27  		if len(data) > 0 && strings.Contains(reflect.ValueOf(data[0]).String(), "JsonRes") && len(data) > 0 && reflect.TypeOf(data[0]).Name() == reflect.TypeOf([]api_v1.JsonRes{}).Name() {
    28  			jsonRes := (*api_v1.JsonRes)(unsafe.Pointer(&data[0]))
    29  
    30  			r.Response.WriteJson(api_v1.JsonRes{
    31  				Code:    code,
    32  				Message: message,
    33  				Data:    gconv.Map(jsonRes.Data)["Data"],
    34  				Time:    gtime.Now().Format("Y-m-d H:i:s"),
    35  			})
    36  			return
    37  		}
    38  
    39  		r.Response.WriteJson(api_v1.JsonRes{
    40  			Code:    code,
    41  			Message: message,
    42  			Data:    responseData,
    43  			Time:    gtime.Now().Format("Y-m-d H:i:s"),
    44  		})
    45  	}
    46  }
    47  
    48  // JsonExit 返回标准JSON数据并退出当前HTTP执行函数。
    49  func JsonExit(r *ghttp.Request, code int, message string, data ...interface{}) {
    50  	Json(r, code, message, data...)
    51  	r.ExitAll()
    52  }
    53  
    54  // JsonRedirect 返回标准JSON数据引导客户端跳转。
    55  func JsonRedirect(r *ghttp.Request, code int, message, redirect string, data ...interface{}) {
    56  	responseData := interface{}(nil)
    57  	if len(data) > 0 {
    58  		responseData = data[0]
    59  	}
    60  	if reflect.ValueOf(data) == reflect.ValueOf(api_v1.JsonRes{}) {
    61  		r.Response.WriteJson(data)
    62  	} else {
    63  		r.Response.WriteJson(api_v1.JsonRes{
    64  			Code:    code,
    65  			Message: message,
    66  			Data:    responseData,
    67  			Time:    gtime.Now().Format("Y-m-d H:i:s"),
    68  		})
    69  	}
    70  }
    71  
    72  // JsonRedirectExit 返回标准JSON数据引导客户端跳转,并退出当前HTTP执行函数。
    73  func JsonRedirectExit(r *ghttp.Request, code int, message, redirect string, data ...interface{}) {
    74  	JsonRedirect(r, code, message, redirect, data...)
    75  	r.Exit()
    76  }