package scripts import ( "fmt" "mygo/dbhelper" "mygo/libs" "mygo/model" "mygo/response" "mygo/say" "mygo/validator" "github.com/labstack/echo/v4" "gorm.io/gorm" ) // 获取所有菜单 func GetRouteList(c echo.Context) error { id := c.QueryParam("id") data := response.RoutesResponse{} if id == "" { return say.Success(c, 10001, data) } db := dbhelper.GetMySqlDB() routes, err := model.GetRouteList(db) if err != nil { return say.Success(c, 10000, data) } data.Routes = routes return say.Success(c, 0, data) } func CreateRoute(c echo.Context) error { data := response.NoneResponse{} body := &validator.CreateRouteBody{} err := c.Bind(body) if err != nil { return say.Success(c, 10000, data) } id := c.QueryParam("id") if id == "" || body.Path == "" || body.Name == "" { return say.Success(c, 10001, data) } db := dbhelper.GetMySqlDB() if body.ParentId != "" { r, err := model.GetRouteById(db, body.ParentId) if err != nil { return say.Success(c, 10000, data) } if r.ID == "" { return say.Success(c, 10018, data) } } route := model.Route{ ID: libs.GenId(), ParentId: body.ParentId, Name: body.Name, Icon: body.Icon, Sort: body.Sort, Component: body.Component, Redirect: body.Redirect, Perms: body.Perms, PermsType: body.PermsType, Title: body.Title, Path: body.Path, MenuType: body.MenuType, BtnStatus: body.BtnStatus, HideInBread: body.HideInBread, HideInMenu: body.HideInMenu, NotCache: body.NotCache, IsMmin: body.IsMmin, } if err := db.Create(&route).Error; err != nil { fmt.Println("插入失败 err=", err) return say.Success(c, 10017, data) } return say.Success(c, 0, data) } func UpdateRoute(c echo.Context) error { data := response.NoneResponse{} body := &validator.UpdateRouteBody{} err := c.Bind(body) if err != nil { return say.Success(c, 10000, data) } id := c.QueryParam("id") if id == "" || body.ID == "" || body.Path == "" || body.Name == "" { return say.Success(c, 10001, data) } db := dbhelper.GetMySqlDB() if body.ParentId != "" { r, err := model.GetRouteById(db, body.ParentId) if err != nil { return say.Success(c, 10000, data) } if r.ID == "" { return say.Success(c, 10018, data) } if body.ID == r.ID { return say.Success(c, 10024, data) } } update := map[string]interface{}{ "parent_id": body.ParentId, "name": body.Name, "icon": body.Icon, "sort": body.Sort, "component": body.Component, "redirect": body.Redirect, "perms": body.Perms, "perms_type": body.PermsType, "title": body.Title, "path": body.Path, "menu_type": body.MenuType, "btn_status": body.BtnStatus, "hide_inmenu": body.HideInMenu, "hide_inbread": body.HideInBread, "not_cache": body.NotCache, "is_mmin": body.IsMmin, } if err := db.Model(&model.Route{}).Where("id = ?", body.ID).Debug().Updates(update).Error; err != nil { fmt.Println("编辑失败 err=", err) return say.Success(c, 10019, data) } return say.Success(c, 0, data) } func DelRoute(c echo.Context) error { id := c.QueryParam("id") route_id := c.QueryParam("route_id") data := response.NoneResponse{} if id == "" || route_id == "" { return say.Success(c, 10001, data) } db := dbhelper.GetMySqlDB() r, err := model.GetRouteById(db, route_id) if err != nil { return say.Success(c, 10000, data) } if r.ID == "" { return say.Success(c, 10018, data) } txerr := db.Transaction(func(tx *gorm.DB) error { // 在事务中执行一些 db 操作(从这里开始,您应该使用 'tx' 而不是 'db') route := model.Route{} if err := tx.Where("id = ?", route_id).Delete(&route).Error; err != nil { // 返回任何错误都会回滚事务 return err } //TODO删除和role角色绑定的权限 r := model.RoleRoute{} if err := tx.Where("route_id = ?", route_id).Delete(&r).Error; err != nil { return err } // 返回 nil 提交事务 return nil }) if txerr != nil { return say.Success(c, 10019, data) } return say.Success(c, 0, data) }