diff --git a/app/admin/service/sys_menu.go b/app/admin/service/sys_menu.go index 01369085..3d6aab7f 100644 --- a/app/admin/service/sys_menu.go +++ b/app/admin/service/sys_menu.go @@ -90,26 +90,46 @@ func (e *SysMenu) Insert(c *dto.SysMenuInsertReq) *SysMenu { var err error var data models.SysMenu c.Generate(&data) - err = e.Orm.Create(&data).Error + tx := e.Orm.Debug().Begin() + defer func() { + if err != nil { + tx.Rollback() + } else { + tx.Commit() + } + }() + err = tx.Where("id in ?", c.Apis).Find(&data.SysApi).Error if err != nil { + tx.Rollback() + e.Log.Errorf("db error:%s", err) + _ = e.AddError(err) + } + err = tx.Create(&data).Error + if err != nil { + tx.Rollback() e.Log.Errorf("db error:%s", err) _ = e.AddError(err) } c.MenuId = data.MenuId - err = e.initPaths(&data) + err = e.initPaths(tx, &data) if err != nil { + tx.Rollback() e.Log.Errorf("db error:%s", err) _ = e.AddError(err) } + tx.Commit() return e } -func (e *SysMenu) initPaths(menu *models.SysMenu) error { +func (e *SysMenu) initPaths(tx *gorm.DB, menu *models.SysMenu) error { var err error var data models.SysMenu parentMenu := new(models.SysMenu) if menu.ParentId != 0 { - e.Orm.Model(&data).First(parentMenu, menu.ParentId) + err = tx.Model(&data).First(parentMenu, menu.ParentId).Error + if err != nil { + return err + } if parentMenu.Paths == "" { err = errors.New("父级paths异常,请尝试对当前节点父级菜单进行更新操作!") return err @@ -118,7 +138,7 @@ func (e *SysMenu) initPaths(menu *models.SysMenu) error { } else { menu.Paths = "/0/" + pkg.IntToString(menu.MenuId) } - e.Orm.Model(&data).Where("menu_id = ?", menu.MenuId).Update("paths", menu.Paths) + err = tx.Model(&data).Where("menu_id = ?", menu.MenuId).Update("paths", menu.Paths).Error return err } diff --git a/go.mod b/go.mod index 02502f51..0eac81f4 100644 --- a/go.mod +++ b/go.mod @@ -3,43 +3,24 @@ module go-admin go 1.18 require ( - github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 github.com/alibaba/sentinel-golang v1.0.4 github.com/alibaba/sentinel-golang/pkg/adapters/gin v0.0.0-20220808015021-c5f1f1d055c5 github.com/aliyun/aliyun-oss-go-sdk v0.0.0-20190307165228-86c17b95fcd5 github.com/bitly/go-simplejson v0.5.0 - github.com/bsm/redislock v0.5.0 github.com/bytedance/go-tagexpr/v2 v2.7.12 github.com/casbin/casbin/v2 v2.51.2 - github.com/casbin/redis-watcher/v2 v2.0.0-20220614104201-0e70bf2be930 - github.com/chanxuehong/wechat v0.0.0-20201110083048-0180211b69fd github.com/gin-gonic/gin v1.7.7 github.com/go-admin-team/go-admin-core v1.4.1-0.20220809101213-21187928f7d9 - github.com/go-admin-team/go-admin-core/plugins/logger/zap v0.0.0-20210610020726-2db73adb505d github.com/go-admin-team/go-admin-core/sdk v1.4.1-0.20220809101213-21187928f7d9 - github.com/go-admin-team/gorm-adapter/v3 v3.7.8-0.20220809100335-eaf9f67b3d21 - github.com/go-playground/locales v0.14.0 - github.com/go-playground/universal-translator v0.18.0 - github.com/go-playground/validator/v10 v10.8.0 - github.com/go-redis/redis/v7 v7.4.0 - github.com/go-redis/redis/v8 v8.11.5 - github.com/golang-jwt/jwt/v4 v4.4.2 github.com/google/uuid v1.3.0 - github.com/gorilla/websocket v1.4.2 github.com/huaweicloud/huaweicloud-sdk-go-obs v3.21.12+incompatible - github.com/mojocn/base64Captcha v1.3.1 github.com/mssola/user_agent v0.5.2 - github.com/nsqio/go-nsq v1.0.8 github.com/opentracing/opentracing-go v1.1.0 github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.11.0 github.com/qiniu/go-sdk/v7 v7.11.1 github.com/robfig/cron/v3 v3.0.1 - github.com/robinjoseph08/redisqueue/v2 v2.1.0 - github.com/shamsher31/goimgext v1.0.0 github.com/shirou/gopsutil/v3 v3.22.1 - github.com/slok/go-http-metrics v0.9.0 - github.com/smartystreets/goconvey v1.6.4 github.com/spf13/cobra v1.0.0 github.com/swaggo/files v0.0.0-20220728132757-551d4a08d97a github.com/swaggo/gin-swagger v1.5.0 @@ -61,9 +42,11 @@ require ( github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f // indirect github.com/beorn7/perks v1.0.1 // indirect + github.com/bsm/redislock v0.5.0 // indirect + github.com/casbin/redis-watcher/v2 v2.0.0-20220614104201-0e70bf2be930 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/chanxuehong/rand v0.0.0-20201110082127-2f19a1bdd973 // indirect - github.com/cpuguy83/go-md2man/v2 v2.0.0 // indirect + github.com/chanxuehong/wechat v0.0.0-20201110083048-0180211b69fd // indirect github.com/denisenkom/go-mssqldb v0.12.0 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect github.com/fatih/color v1.9.0 // indirect @@ -71,18 +54,26 @@ require ( github.com/ghodss/yaml v1.0.0 // indirect github.com/gin-contrib/sse v0.1.0 // indirect github.com/git-chglog/git-chglog v0.0.0-20190611050339-63a4e637021f // indirect + github.com/go-admin-team/go-admin-core/plugins/logger/zap v0.0.0-20210610020726-2db73adb505d // indirect + github.com/go-admin-team/gorm-adapter/v3 v3.7.8-0.20220809100335-eaf9f67b3d21 // indirect github.com/go-ole/go-ole v1.2.6 // indirect github.com/go-openapi/jsonpointer v0.19.5 // indirect github.com/go-openapi/jsonreference v0.19.6 // indirect github.com/go-openapi/spec v0.20.4 // indirect github.com/go-openapi/swag v0.19.15 // indirect + github.com/go-playground/locales v0.14.0 // indirect + github.com/go-playground/universal-translator v0.18.0 // indirect + github.com/go-playground/validator/v10 v10.8.0 // indirect + github.com/go-redis/redis/v7 v7.4.0 // indirect + github.com/go-redis/redis/v8 v8.11.5 // indirect github.com/go-sql-driver/mysql v1.6.0 // indirect + github.com/golang-jwt/jwt/v4 v4.4.2 // indirect github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 // indirect github.com/golang-sql/sqlexp v0.0.0-20170517235910-f1bb20e5a188 // indirect github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect github.com/golang/protobuf v1.4.3 // indirect github.com/golang/snappy v0.0.1 // indirect - github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 // indirect + github.com/gorilla/websocket v1.4.2 // indirect github.com/henrylee2cn/ameda v1.4.10 // indirect github.com/henrylee2cn/goutil v0.0.0-20210127050712-89660552f6f8 // indirect github.com/imdario/mergo v0.3.9 // indirect @@ -99,7 +90,6 @@ require ( github.com/jinzhu/now v1.1.5 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.11 // indirect - github.com/jtolds/gls v4.20.0+incompatible // indirect github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect github.com/leodido/go-urn v1.2.1 // indirect github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect @@ -112,14 +102,15 @@ require ( github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.1 // indirect + github.com/mojocn/base64Captcha v1.3.1 // indirect + github.com/nsqio/go-nsq v1.0.8 // indirect github.com/nyaruka/phonenumbers v1.0.55 // indirect github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect github.com/prometheus/client_model v0.2.0 // indirect github.com/prometheus/common v0.26.0 // indirect github.com/prometheus/procfs v0.6.0 // indirect - github.com/russross/blackfriday/v2 v2.0.1 // indirect - github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect - github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d // indirect + github.com/robinjoseph08/redisqueue/v2 v2.1.0 // indirect + github.com/shamsher31/goimgext v1.0.0 // indirect github.com/spf13/cast v1.3.1 // indirect github.com/spf13/pflag v1.0.3 // indirect github.com/tklauser/go-sysconf v0.3.9 // indirect