menu.go 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  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/os/gfile"
  12. "github.com/gogf/gf/text/gstr"
  13. "github.com/gogf/gf/util/gconv"
  14. )
  15. //获取频道列表
  16. func GetMenuListChannel() (list []*cms_category.Entity, err error) {
  17. //获取频道列表
  18. listAll, err := GetMenuList()
  19. if err != nil {
  20. return
  21. }
  22. list = make([]*cms_category.Entity, 0, len(listAll))
  23. for _, v := range listAll {
  24. if v.Status == 1 && v.CateType == cms_category.ChannelCateType {
  25. list = append(list, v)
  26. }
  27. }
  28. return
  29. }
  30. //获取可发布文章栏目
  31. func GetPublishableMenuList(catId ...int) (list []*cms_category.Entity, err error) {
  32. menuList, err := GetMenuList()
  33. var catIdMap map[int]int
  34. if len(catId) > 0 {
  35. catIdMap = make(map[int]int, len(catId))
  36. for _, v := range catId {
  37. catIdMap[v] = v
  38. }
  39. }
  40. if err != nil {
  41. return
  42. }
  43. for _, menu := range menuList {
  44. if menu.CateType == cms_category.JumpCateType || menu.CateType == cms_category.SingleCateType {
  45. continue
  46. }
  47. if menu.Status == 1 {
  48. list = append(list, menu)
  49. }
  50. }
  51. return
  52. }
  53. //获取所有菜单列表
  54. func GetMenuList() (list []*cms_category.Entity, err error) {
  55. return cms_category.GetList()
  56. }
  57. //保存栏目操作
  58. func AddSave(req *cms_category.ReqAdd) (id int64, err error) {
  59. return cms_category.AddSave(req)
  60. }
  61. //修改栏目操作
  62. func EditSave(req *cms_category.ReqEdit) (id int64, err error) {
  63. return cms_category.EditSave(req)
  64. }
  65. //获取搜索栏目结果
  66. func GetMenuListSearch(req *cms_category.ReqSearchList) (menus []*cms_category.Entity, err error) {
  67. return cms_category.GetListSearch(req)
  68. }
  69. //根据栏目ID获取栏目信息
  70. func GetMenuInfoById(id int) (menu *cms_category.Entity, err error) {
  71. return cms_category.GetInfoById(id)
  72. }
  73. //通过栏目ID获取子级栏目ID
  74. func GetChildrenIds(ids []int) ([]int, error) {
  75. //获取所有栏目
  76. menus, err := GetMenuList()
  77. if err != nil {
  78. return nil, err
  79. }
  80. menuList := make(g.List, len(menus))
  81. for k, menu := range menus {
  82. menuList[k] = gconv.Map(menu)
  83. }
  84. for _, id := range ids {
  85. children := utils.FindSonByParentId(menuList, id, "parent_id", "id")
  86. for _, cid := range children {
  87. ids = append(ids, gconv.Int(cid["id"]))
  88. }
  89. }
  90. return ids, nil
  91. }
  92. //删除栏目
  93. func DeleteMenuByIds(ids []int) (err error) {
  94. ids, err = GetChildrenIds(ids)
  95. if err != nil {
  96. return
  97. }
  98. return cms_category.DeleteByIds(ids)
  99. }
  100. //获取栏目对应的模型字段规则
  101. func GetModelFieldsByCateIds(r *ghttp.Request, ids []int, newsId int64) (rules []*model_fields.FieldRule, err error) {
  102. var modelId uint
  103. modelId, err = GetModelIdByCateIds(ids)
  104. if err != nil {
  105. return
  106. }
  107. //获取模型字段信息
  108. rules, err = com_model_service.GetModelRuleByModelId(r, gconv.Int64(modelId), newsId)
  109. if err != nil {
  110. return
  111. }
  112. return
  113. }
  114. //通过栏目ids获取模型id
  115. func GetModelIdByCateIds(ids []int) (modelId uint, err error) {
  116. ids, err = GetChildrenIds(ids)
  117. if err != nil {
  118. return
  119. }
  120. idsArr := garray.NewIntArrayFrom(ids)
  121. menus, err := GetMenuList()
  122. if err != nil {
  123. return
  124. }
  125. for _, menu := range menus {
  126. if idsArr.Contains(gconv.Int(menu.Id)) {
  127. if modelId == 0 {
  128. modelId = menu.ModelId
  129. } else if modelId != menu.ModelId {
  130. err = gerror.New("所选多个栏目必须为同一模型。")
  131. return
  132. }
  133. }
  134. }
  135. //不存在管理的模型
  136. if modelId == 0 {
  137. err = gerror.New("未获取到对应模型信息")
  138. return
  139. }
  140. return
  141. }
  142. //获取分类模板
  143. func GetCmsTemplate() ([]string, []string) {
  144. pathArr := g.Cfg().GetArray("viewer.paths")
  145. var listTemplates []string
  146. var contentTemplates []string
  147. for _, p := range pathArr {
  148. path := gconv.String(p) + "/cms"
  149. if gfile.IsDir(path) {
  150. path = gfile.Abs(path)
  151. cmsPath, _ := gfile.ScanDirFile(path, "*", true)
  152. for _, cp := range cmsPath {
  153. if gstr.ContainsI(cp, "list") {
  154. listTemplates = append(listTemplates, gstr.TrimLeft(gstr.ReplaceByArray(cp, []string{path, "", "\\", "/"}), "/"))
  155. } else if gstr.ContainsI(cp, "content") {
  156. contentTemplates = append(contentTemplates, gstr.TrimLeft(gstr.ReplaceByArray(cp, []string{path, "", "\\", "/"}), "/"))
  157. }
  158. }
  159. }
  160. }
  161. return listTemplates, contentTemplates
  162. }