| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- package service
- import (
- "gfast/app/common/global"
- "gfast/app/common/service"
- "gfast/app/system/dao"
- "gfast/app/system/model"
- "github.com/gogf/gf/frame/gmvc"
- "github.com/gogf/gf/util/gconv"
- )
- type rule struct {
- }
- var Rule = new(rule)
- // GetIsMenuStatusList 获取isMenu=0|1且status=1的菜单列表
- func (s *rule) GetIsMenuStatusList() ([]*model.SysAuthRuleInfoRes, error) {
- list, err := s.GetMenuList()
- if err != nil {
- return nil, err
- }
- var gList = make([]*model.SysAuthRuleInfoRes, 0, len(list))
- for _, v := range list {
- if (v.MenuType == 0 || v.MenuType == 1) && v.Status == 1 {
- gList = append(gList, v)
- }
- }
- return gList, nil
- }
- //获取所有菜单
- func (s *rule) GetMenuList() (list []*model.SysAuthRuleInfoRes, err error) {
- cache := service.Cache.New()
- //从缓存获取
- iList := cache.Get(global.SysAuthMenu)
- if iList != nil {
- err = gconv.Struct(iList, &list)
- return
- }
- //从数据库获取
- list, err = dao.SysAuthRule.GetMenuList()
- if err != nil || list == nil {
- return
- }
- //缓存菜单
- cache.Set(global.SysAuthMenu, list, 0, global.SysAuthTag)
- return
- }
- func (s *rule) GetMenuListSearch(req *model.SysAuthRuleReqSearch) (list []*model.SysAuthRuleInfoRes, err error) {
- list, err = dao.SysAuthRule.Scope(func(m gmvc.M) gmvc.M {
- if req != nil && !req.IsEmpty() {
- if req.Title != "" {
- m = m.Where("title like ?", "%"+req.Title+"%")
- }
- if req.Status != "" {
- m = m.Where("status = ?", req.Status)
- }
- }
- return m
- }).GetMenuList()
- if err != nil || list == nil {
- return
- }
- return
- }
- func (s *rule) GetMenuListTree(pid uint, list []*model.SysAuthRuleInfoRes) []*model.SysAuthRuleTreeRes {
- tree := make([]*model.SysAuthRuleTreeRes, 0, len(list))
- for _, menu := range list {
- if menu.Pid == pid {
- t := &model.SysAuthRuleTreeRes{
- SysAuthRuleInfoRes: menu,
- }
- child := s.GetMenuListTree(menu.Id, list)
- if child != nil {
- t.Children = child
- }
- tree = append(tree, t)
- }
- }
- return tree
- }
- // GetIsButtonStatusList 获取所有按钮isMenu=2 且status=1的菜单列表
- func (s *rule) GetIsButtonStatusList() ([]*model.SysAuthRuleInfoRes, error) {
- list, err := s.GetMenuList()
- if err != nil {
- return nil, err
- }
- var gList = make([]*model.SysAuthRuleInfoRes, 0, len(list))
- for _, v := range list {
- if v.MenuType == 2 && v.Status == 1 {
- gList = append(gList, v)
- }
- }
- return gList, nil
- }
- // GetIsMenuList 获取MenuType==0,1菜单列表
- func (s *rule) GetIsMenuList() ([]*model.SysAuthRuleInfoRes, error) {
- list, err := s.GetMenuList()
- if err != nil {
- return nil, err
- }
- var gList = make([]*model.SysAuthRuleInfoRes, 0, len(list))
- for _, v := range list {
- if v.MenuType == 0 || v.MenuType == 1 {
- gList = append(gList, v)
- }
- }
- return gList, nil
- }
- // GetMenuIsStatusList 获取status==1的菜单列表
- func (s *rule) GetMenuIsStatusList() ([]*model.SysAuthRuleInfoRes, error) {
- list, err := s.GetMenuList()
- if err != nil {
- return nil, err
- }
- var gList = make([]*model.SysAuthRuleInfoRes, 0, len(list))
- for _, v := range list {
- if v.Status == 1 {
- gList = append(gList, v)
- }
- }
- return gList, nil
- }
- //检查菜单规则是否存在
- func (s *rule) CheckMenuNameUnique(name string, id int) bool {
- return dao.SysAuthRule.CheckMenuNameUnique(name, id)
- }
- //检查菜单路由地址是否已经存在
- func (s *rule) CheckMenuPathUnique(path string, id int) bool {
- return dao.SysAuthRule.CheckMenuPathUnique(path, id)
- }
- func (s *rule) AddMenu(req *model.MenuReq) (err error, insertId int64) {
- result, e := dao.SysAuthRule.Save(req)
- if e != nil {
- return e, 0
- }
- lastId, e := result.LastInsertId()
- if e != nil {
- return e, 0
- }
- return nil, lastId
- }
- //获取分类模型选项
- func (s *rule) ModelOptions(module string) (models []*model.SysModelInfo, err error) {
- dictType := ""
- switch module {
- case "gov_work":
- //政务平台
- dictType = "gov_cate_models"
- }
- if dictType != "" {
- //栏目模型分类
- //var modelOptions g.Map
- modelOptions, e := SysDictData.GetDictWithDataByType(&model.GetDictReq{
- DictType: dictType,
- })
- if e != nil {
- err = e
- return
- }
- values := gconv.SliceAny(modelOptions.Values)
- keys := make([]int, len(values))
- for k, val := range values {
- data := gconv.Map(val)
- keys[k] = gconv.Int(data["key"])
- }
- //获取对应模型
- models, err = SysInfo.GetModelsByCateIds(keys)
- if err != nil {
- return
- }
- }
- return
- }
- func (s *rule) One(id uint64) (*model.SysAuthRule, error) {
- return dao.SysAuthRule.Where("id = ?", id).FindOne()
- }
- func (s *rule) EditMenu(req *model.MenuReq, id int) (err error, rows int64) {
- result, e := dao.SysAuthRule.Where("id = ?", id).Update(req)
- if e != nil {
- err = e
- return
- }
- r, e := result.RowsAffected()
- if e != nil {
- err = e
- return
- }
- return nil, r
- }
- func (s *rule) DeleteMenuByIds(ids []int) (err error) {
- var list []*model.SysAuthRuleInfoRes
- list, err = s.GetMenuList()
- if err != nil {
- return
- }
- childrenIds := make([]int, 0, len(list))
- for _, id := range ids {
- rules := s.FindSonByParentId(list, gconv.Uint(id))
- for _, child := range rules {
- childrenIds = append(childrenIds, gconv.Int(child.Id))
- }
- }
- ids = append(ids, childrenIds...)
- _, err = dao.SysAuthRule.Where("id in (?)", ids).Unscoped().Delete() // 硬删除
- return
- }
- func (s *rule) ParentSonSort(list []*model.SysAuthRuleInfoRes, pid uint) []*model.SysAuthRuleInfoRes {
- newList := make([]*model.SysAuthRuleInfoRes, 0, len(list))
- for _, v := range list {
- if pid == v.Pid {
- newList = append(newList, v)
- newList2 := s.ParentSonSort(list, v.Id)
- newList = append(newList, newList2...)
- }
- }
- return newList
- }
- func (s *rule) FindSonByParentId(list []*model.SysAuthRuleInfoRes, pid uint) []*model.SysAuthRuleInfoRes {
- children := make([]*model.SysAuthRuleInfoRes, 0, len(list))
- for _, v := range list {
- if v.Pid == pid {
- children = append(children, v)
- fChildren := s.FindSonByParentId(list, v.Id)
- children = append(children, fChildren...)
- }
- }
- return children
- }
|