fix
wangpengfei
2023-08-24 2128d417cbb9136ad5d8448fef7ce62a082922be
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
package system
 
import (
    "errors"
 
    "github.com/flipped-aurora/gin-vue-admin/server/global"
    "github.com/flipped-aurora/gin-vue-admin/server/model/system"
    "gorm.io/gorm"
)
 
type BaseMenuService struct{}
 
//@author: [piexlmax](https://github.com/piexlmax)
//@function: DeleteBaseMenu
//@description: 删除基础路由
//@param: id float64
//@return: err error
 
func (baseMenuService *BaseMenuService) DeleteBaseMenu(id int) (err error) {
    err = global.GVA_DB.Preload("MenuBtn").Preload("Parameters").Where("parent_id = ?", id).First(&system.SysBaseMenu{}).Error
    if err != nil {
        var menu system.SysBaseMenu
        db := global.GVA_DB.Preload("SysAuthoritys").Where("id = ?", id).First(&menu).Delete(&menu)
        err = global.GVA_DB.Delete(&system.SysBaseMenuParameter{}, "sys_base_menu_id = ?", id).Error
        err = global.GVA_DB.Delete(&system.SysBaseMenuBtn{}, "sys_base_menu_id = ?", id).Error
        err = global.GVA_DB.Delete(&system.SysAuthorityBtn{}, "sys_menu_id = ?", id).Error
        if err != nil {
            return err
        }
        if len(menu.SysAuthoritys) > 0 {
            err = global.GVA_DB.Model(&menu).Association("SysAuthoritys").Delete(&menu.SysAuthoritys)
        } else {
            err = db.Error
            if err != nil {
                return
            }
        }
    } else {
        return errors.New("此菜单存在子菜单不可删除")
    }
    return err
}
 
//@author: [piexlmax](https://github.com/piexlmax)
//@function: UpdateBaseMenu
//@description: 更新路由
//@param: menu model.SysBaseMenu
//@return: err error
 
func (baseMenuService *BaseMenuService) UpdateBaseMenu(menu system.SysBaseMenu) (err error) {
    var oldMenu system.SysBaseMenu
    upDateMap := make(map[string]interface{})
    upDateMap["keep_alive"] = menu.KeepAlive
    upDateMap["close_tab"] = menu.CloseTab
    upDateMap["default_menu"] = menu.DefaultMenu
    upDateMap["parent_id"] = menu.ParentId
    upDateMap["path"] = menu.Path
    upDateMap["name"] = menu.Name
    upDateMap["hidden"] = menu.Hidden
    upDateMap["component"] = menu.Component
    upDateMap["title"] = menu.Title
    upDateMap["active_name"] = menu.ActiveName
    upDateMap["icon"] = menu.Icon
    upDateMap["sort"] = menu.Sort
 
    err = global.GVA_DB.Transaction(func(tx *gorm.DB) error {
        db := tx.Where("id = ?", menu.ID).Find(&oldMenu)
        if oldMenu.Name != menu.Name {
            if !errors.Is(tx.Where("id <> ? AND name = ?", menu.ID, menu.Name).First(&system.SysBaseMenu{}).Error, gorm.ErrRecordNotFound) {
                global.GVA_LOG.Debug("存在相同name修改失败")
                return errors.New("存在相同name修改失败")
            }
        }
        txErr := tx.Unscoped().Delete(&system.SysBaseMenuParameter{}, "sys_base_menu_id = ?", menu.ID).Error
        if txErr != nil {
            global.GVA_LOG.Debug(txErr.Error())
            return txErr
        }
        txErr = tx.Unscoped().Delete(&system.SysBaseMenuBtn{}, "sys_base_menu_id = ?", menu.ID).Error
        if txErr != nil {
            global.GVA_LOG.Debug(txErr.Error())
            return txErr
        }
        if len(menu.Parameters) > 0 {
            for k := range menu.Parameters {
                menu.Parameters[k].SysBaseMenuID = menu.ID
            }
            txErr = tx.Create(&menu.Parameters).Error
            if txErr != nil {
                global.GVA_LOG.Debug(txErr.Error())
                return txErr
            }
        }
 
        if len(menu.MenuBtn) > 0 {
            for k := range menu.MenuBtn {
                menu.MenuBtn[k].SysBaseMenuID = menu.ID
            }
            txErr = tx.Create(&menu.MenuBtn).Error
            if txErr != nil {
                global.GVA_LOG.Debug(txErr.Error())
                return txErr
            }
        }
 
        txErr = db.Updates(upDateMap).Error
        if txErr != nil {
            global.GVA_LOG.Debug(txErr.Error())
            return txErr
        }
        return nil
    })
    return err
}
 
//@author: [piexlmax](https://github.com/piexlmax)
//@function: GetBaseMenuById
//@description: 返回当前选中menu
//@param: id float64
//@return: menu system.SysBaseMenu, err error
 
func (baseMenuService *BaseMenuService) GetBaseMenuById(id int) (menu system.SysBaseMenu, err error) {
    err = global.GVA_DB.Preload("MenuBtn").Preload("Parameters").Where("id = ?", id).First(&menu).Error
    return
}