package models import ( "time" "github.com/beego/beego/v2/client/orm" ) // Menu 菜单模型(增强版) type Menu struct { Id int `orm:"auto"` Name string `orm:"size(100)"` Path string `orm:"size(255)"` ParentId int `orm:"default(0)"` Icon string `orm:"size(100)"` Order int `orm:"default(0)"` Status int8 `orm:"default(1)"` ComponentPath string `orm:"size(500);null"` IsExternal int8 `orm:"default(0)"` ExternalUrl string `orm:"size(1000);null"` MenuType int8 `orm:"default(1)"` Permission string `orm:"size(200);null"` CreateTime time.Time `orm:"auto_now_add;type(datetime)"` UpdateTime time.Time `orm:"auto_now;type(datetime)"` } // TableName 设置表名 func (m *Menu) TableName() string { return "yz_menus" } // GetAllMenus 获取所有菜单 func GetAllMenus() ([]*Menu, error) { o := orm.NewOrm() var menus []*Menu _, err := o.QueryTable("yz_menus").OrderBy("Order").All(&menus) return menus, err } // GetTopLevelMenus func GetTopLevelMenus() ([]*Menu, error) { o := orm.NewOrm() var menus []*Menu _, err := o.QueryTable("yz_menus").Filter("parent_id", 0).OrderBy("Order").All(&menus) return menus, err } // GetActiveMenus 获取启用的菜单(状态为1) func GetActiveMenus() ([]*Menu, error) { o := orm.NewOrm() var menus []*Menu _, err := o.QueryTable("yz_menus").Filter("status", 1).OrderBy("Order").All(&menus) return menus, err } // GetMenusByParentId func GetMenusByParentId(parentId int) ([]*Menu, error) { o := orm.NewOrm() var menus []*Menu _, err := o.QueryTable("yz_menus").Filter("parent_id", parentId).OrderBy("Order").All(&menus) if err != nil { return nil, err } return menus, nil } // AddMenu 添加新菜单 func AddMenu(menu *Menu) (int64, error) { o := orm.NewOrm() id, err := o.Insert(menu) return id, err } // UpdateMenu 更新菜单 func UpdateMenu(menu *Menu) error { o := orm.NewOrm() _, err := o.Update(menu) return err } // DeleteMenu 删除菜单 func DeleteMenu(id int) error { o := orm.NewOrm() _, err := o.Delete(&Menu{Id: id}) return err } // GetMenuById 根据ID获取单个菜单 func GetMenuById(id int) (*Menu, error) { o := orm.NewOrm() var menu Menu err := o.QueryTable("yz_menus").Filter("id", id).One(&menu) if err != nil { return nil, err } return &menu, nil }