menu.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. package cms_service
  2. import (
  3. "gfast/app/model/admin/cms_category"
  4. "gfast/app/model/admin/model_fields"
  5. "gfast/app/service/common/com_model_service"
  6. "gfast/library/utils"
  7. "github.com/gogf/gf/container/garray"
  8. "github.com/gogf/gf/errors/gerror"
  9. "github.com/gogf/gf/frame/g"
  10. "github.com/gogf/gf/net/ghttp"
  11. "github.com/gogf/gf/util/gconv"
  12. )
  13. //获取频道列表
  14. func GetMenuListChannel() (list []*cms_category.Entity, err error) {
  15. //获取频道列表
  16. listAll, err := GetMenuList()
  17. if err != nil {
  18. return
  19. }
  20. list = make([]*cms_category.Entity, 0, len(listAll))
  21. for _, v := range listAll {
  22. if v.Status == 1 && v.CateType == cms_category.ChannelCateType {
  23. list = append(list, v)
  24. }
  25. }
  26. return
  27. }
  28. //获取可发布文章栏目
  29. func GetPublishableMenuList(catId ...int) (list []*cms_category.Entity, err error) {
  30. menuList, err := GetMenuList()
  31. var catIdMap map[int]int
  32. if len(catId) > 0 {
  33. catIdMap = make(map[int]int, len(catId))
  34. for _, v := range catId {
  35. catIdMap[v] = v
  36. }
  37. }
  38. if err != nil {
  39. return
  40. }
  41. for _, menu := range menuList {
  42. if menu.CateType == cms_category.JumpCateType || menu.CateType == cms_category.SingleCateType {
  43. continue
  44. }
  45. if menu.Status == 1 {
  46. list = append(list, menu)
  47. }
  48. }
  49. return
  50. }
  51. //获取所有菜单列表
  52. func GetMenuList() (list []*cms_category.Entity, err error) {
  53. return cms_category.GetList()
  54. }
  55. //保存栏目操作
  56. func AddSave(req *cms_category.ReqAdd) (id int64, err error) {
  57. return cms_category.AddSave(req)
  58. }
  59. //修改栏目操作
  60. func EditSave(req *cms_category.ReqEdit) (id int64, err error) {
  61. return cms_category.EditSave(req)
  62. }
  63. //获取搜索栏目结果
  64. func GetMenuListSearch(req *cms_category.ReqSearchList) (menus []*cms_category.Entity, err error) {
  65. return cms_category.GetListSearch(req)
  66. }
  67. //根据栏目ID获取栏目信息
  68. func GetMenuInfoById(id int) (menu *cms_category.Entity, err error) {
  69. return cms_category.GetInfoById(id)
  70. }
  71. //通过栏目ID获取子级栏目ID
  72. func GetChildrenIds(ids []int) ([]int, error) {
  73. //获取所有栏目
  74. menus, err := GetMenuList()
  75. if err != nil {
  76. return nil, err
  77. }
  78. menuList := make(g.List, len(menus))
  79. for k, menu := range menus {
  80. menuList[k] = gconv.Map(menu)
  81. }
  82. for _, id := range ids {
  83. children := utils.FindSonByParentId(menuList, id, "parent_id", "id")
  84. for _, cid := range children {
  85. ids = append(ids, gconv.Int(cid["id"]))
  86. }
  87. }
  88. return ids, nil
  89. }
  90. //删除栏目
  91. func DeleteMenuByIds(ids []int) (err error) {
  92. ids, err = GetChildrenIds(ids)
  93. if err != nil {
  94. return
  95. }
  96. return cms_category.DeleteByIds(ids)
  97. }
  98. //获取栏目对应的模型字段规则
  99. func GetModelFieldsByCateIds(r *ghttp.Request, ids []int, newsId int64) (rules []*model_fields.FieldRule, err error) {
  100. var modelId uint
  101. modelId, err = GetModelIdByCateIds(ids)
  102. if err != nil {
  103. return
  104. }
  105. //获取模型字段信息
  106. rules, err = com_model_service.GetModelRuleByModelId(r, gconv.Int64(modelId), newsId)
  107. if err != nil {
  108. return
  109. }
  110. return
  111. }
  112. //通过栏目ids获取模型id
  113. func GetModelIdByCateIds(ids []int) (modelId uint, err error) {
  114. ids, err = GetChildrenIds(ids)
  115. if err != nil {
  116. return
  117. }
  118. idsArr := garray.NewIntArrayFrom(ids)
  119. menus, err := GetMenuList()
  120. if err != nil {
  121. return
  122. }
  123. for _, menu := range menus {
  124. if idsArr.Contains(gconv.Int(menu.Id)) {
  125. if modelId == 0 {
  126. modelId = menu.ModelId
  127. } else if modelId != menu.ModelId {
  128. err = gerror.New("所选多个栏目必须为同一模型。")
  129. return
  130. }
  131. }
  132. }
  133. //不存在管理的模型
  134. if modelId == 0 {
  135. err = gerror.New("未获取到对应模型信息")
  136. return
  137. }
  138. return
  139. }