package actions import ( "cold-logistics/common/dto" "cold-logistics/common/model" "errors" "gorm.io/gorm" "net/http" "github.com/gin-gonic/gin" log "gogs.baozhida.cn/zoie/OAuth-core/logger" "gogs.baozhida.cn/zoie/OAuth-core/pkg" "gogs.baozhida.cn/zoie/OAuth-core/pkg/response" ) // ViewAction 通用详情动作 func ViewAction(control dto.Control, f func() interface{}) gin.HandlerFunc { return func(c *gin.Context) { db, err := pkg.GetOrm(c) if err != nil { log.Error(err) return } msgID := pkg.GenerateMsgIDFromContext(c) //查看详情 req := control.Generate() err = req.Bind(c) if err != nil { response.Error(c, http.StatusUnprocessableEntity, err, "参数验证失败") return } var object model.ActiveRecord object, err = req.GenerateM() if err != nil { response.Error(c, 500, err, "模型生成失败") return } var rsp interface{} if f != nil { rsp = f() } else { rsp, _ = req.GenerateM() } //数据权限检查 p := GetPermissionFromContext(c) err = db.Model(object).WithContext(c).Scopes( Permission(object.TableName(), p), ).Where(req.GetId()).First(rsp).Error if err != nil && errors.Is(err, gorm.ErrRecordNotFound) { response.Error(c, http.StatusNotFound, nil, "查看对象不存在或无权查看") return } if err != nil { log.Errorf("MsgID[%s] View error: %s", msgID, err) response.Error(c, 500, err, "查看失败") return } response.OK(c, rsp, "查询成功") c.Next() } }