package dao // Menu 角色 type Menu struct { ID int64 `gorm:"primary_key" json:"id"` //编号 ParentId int64 `gorm:"type:bigint; default 0" json:"parentId"` //父级菜单 Code string `gorm:"type:varchar(255)" json:"code"` //菜单编号 Name string `gorm:"type:varchar(255)" json:"name"` //菜单名称 Alias string `gorm:"type:varchar(255)" json:"alias"` //菜单别名 Path string `gorm:"type:varchar(255)" json:"path"` //请求地址 Source string `gorm:"type:varchar(255)" json:"source"` //菜单资源 Sort int `gorm:"type:int" json:"sort"` //排序 Category int `gorm:"type:int" json:"category"` //菜单类型 Action int `gorm:"type:int;default 0" json:"action"` //操作按钮类型 IsOpen int `gorm:"type:int;default 1" json:"isOpen"` //是否打开新页面 Remark string `gorm:"type:varchar(255)" json:"remark"` //备注 IsDeleted int `gorm:"type:int" json:"isDeleted"` //是否删除 } func (Menu) TableName() string { return "menu" } func (c *Menu) Get() error { return Db.Debug().Model(&c).Where("id = ?", c.ID).Find(&c).Error } func (c *Menu) Save() error { return Db.Debug().Model(&c).Save(&c).Error } func (c *Menu) Update() error { return Db.Debug().Model(&c).Where(" id = ? ", c.ID).Updates(&c).Error } func (c *Menu) GetAll() ([]Menu, error) { var menus []Menu err := Db.Debug().Model(&c).Where(" is_deleted = 0 and category = 1").Order("sort").Find(&menus).Error return menus, err } func (c *Menu) GetByParentId() ([]Menu, error) { var menus []Menu db := Db.Debug().Model(&c).Where(" is_deleted = 0") if c.ParentId >= 0 { db = db.Where("parent_id = ?", c.ParentId) } if c.Name != "" { db = db.Where("name like ?", "%"+c.Name+"%") } if c.Code != "" { db = db.Where("code like ?", "%"+c.Code+"%") } if c.Alias != "" { db = db.Where("alias like ?", "%"+c.Alias+"%") } err := db.Order("sort").Find(&menus).Error return menus, err } func (c *Menu) HasChildren(parentIds []int64) (map[int64]bool, error) { type hasChildren struct { ParentId int64 `gorm:"type:bigint"` Count int `gorm:"type:int"` } var result []hasChildren err := Db.Debug().Table("menu").Select("parent_id, count(*) count").Where(" is_deleted = 0 and parent_id in (?)", parentIds).Group("parent_id").Find(&result).Error m := make(map[int64]bool) for _, item := range result { m[item.ParentId] = item.Count > 0 } return m, err }