|
@@ -2,13 +2,13 @@ package eta_business
|
|
|
|
|
|
import (
|
|
|
"encoding/json"
|
|
|
- "fmt"
|
|
|
"hongze/hz_crm_api/controllers"
|
|
|
"hongze/hz_crm_api/models"
|
|
|
"hongze/hz_crm_api/models/eta_business"
|
|
|
etaBusinessService "hongze/hz_crm_api/services/eta_business"
|
|
|
"hongze/hz_crm_api/utils"
|
|
|
"html/template"
|
|
|
+ "sort"
|
|
|
"strings"
|
|
|
"time"
|
|
|
)
|
|
@@ -88,33 +88,63 @@ func (this *EtaBusinessMenuController) List() {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- list := make([]*eta_business.EtaBusinessMenu, 0)
|
|
|
- order := `sort ASC, create_time DESC, menu_id DESC`
|
|
|
-
|
|
|
// 关键词
|
|
|
keyword := this.GetString("Keyword")
|
|
|
keyword = strings.TrimSpace(keyword)
|
|
|
+ keyword = template.HTMLEscapeString(keyword)
|
|
|
+
|
|
|
+ // 所有菜单列表
|
|
|
+ menuOb := new(eta_business.EtaBusinessMenu)
|
|
|
+ order := `sort ASC, create_time DESC, menu_id DESC`
|
|
|
+ menus, e := menuOb.GetItemsByCondition(menuCond, menuPars, []string{}, order)
|
|
|
+ if e != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = "获取商家菜单列表失败, Err: " + e.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ list := make([]*eta_business.EtaBusinessMenu, 0)
|
|
|
if keyword != "" {
|
|
|
- keyword = template.HTMLEscapeString(keyword)
|
|
|
- kw := fmt.Sprint("%", keyword, "%")
|
|
|
- menus, e := eta_business.GetMenuItemsByKeyword(kw, []string{}, order)
|
|
|
- if e != nil {
|
|
|
- br.Msg = "获取失败"
|
|
|
- br.ErrMsg = "获取商家菜单列表失败, Err: " + e.Error()
|
|
|
- return
|
|
|
+ menuMap := make(map[int]*eta_business.EtaBusinessMenu)
|
|
|
+ parentMap := make(map[int]*eta_business.EtaBusinessMenu)
|
|
|
+ existMap := make(map[int]bool)
|
|
|
+
|
|
|
+ for _, m := range menus {
|
|
|
+ menuMap[m.MenuId] = m
|
|
|
+ }
|
|
|
+ for _, m := range menus {
|
|
|
+ if m.ParentId > 0 {
|
|
|
+ parentMap[m.MenuId] = menuMap[m.ParentId]
|
|
|
+ }
|
|
|
}
|
|
|
- list = menus
|
|
|
- }
|
|
|
|
|
|
- // 普通查询
|
|
|
- if keyword == "" {
|
|
|
- menuOb := new(eta_business.EtaBusinessMenu)
|
|
|
- menus, e := menuOb.GetItemsByCondition(menuCond, menuPars, []string{}, order)
|
|
|
- if e != nil {
|
|
|
- br.Msg = "获取失败"
|
|
|
- br.ErrMsg = "获取商家菜单列表失败, Err: " + e.Error()
|
|
|
- return
|
|
|
+ // 遍历菜单, 取出跟关键词匹配的菜单(层级比较深, 递归效率很低, 产品要这个需求暂时也没啥办法优化=_=!)
|
|
|
+ for _, m := range menus {
|
|
|
+ if !strings.Contains(m.Name, keyword) {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ if existMap[m.MenuId] {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ existMap[m.MenuId] = true
|
|
|
+ list = append(list, m)
|
|
|
+
|
|
|
+ // 取出关键词所匹配的所有父级菜单
|
|
|
+ if m.ParentId > 0 {
|
|
|
+ parents := etaBusinessService.GetMenuParentsRecursive(menus, m.ParentId)
|
|
|
+ for _, p := range parents {
|
|
|
+ if !existMap[p.MenuId] {
|
|
|
+ existMap[p.MenuId] = true
|
|
|
+ list = append(list, p)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
+ sort.Slice(list, func(i, j int) bool {
|
|
|
+ return list[j].Sort > list[i].Sort
|
|
|
+ })
|
|
|
+ } else {
|
|
|
list = menus
|
|
|
}
|
|
|
|