You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

188 lines
4.1 KiB
Go

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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)
}