From b3a7d7c9a8e0787610a48fc1d2bb466653dfc18e Mon Sep 17 00:00:00 2001 From: alick-liming Date: Wed, 6 Jan 2021 11:14:38 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=A8=E6=88=B7=E7=BB=84=E7=BB=87=E4=B8=8B?= =?UTF-8?q?=E6=8B=89=E6=8E=A5=E5=8F=A3=20(#486)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: alickliming --- src/models/node_service.go | 34 +++++++++++++++++++++++++++++ src/modules/rdb/http/router.go | 1 + src/modules/rdb/http/router_tree.go | 12 ++++++++-- 3 files changed, 45 insertions(+), 2 deletions(-) diff --git a/src/models/node_service.go b/src/models/node_service.go index 0093af57..f66ce88e 100644 --- a/src/models/node_service.go +++ b/src/models/node_service.go @@ -42,6 +42,7 @@ func TreeUntilProjectsGetByNid(nid int64) ([]Node, error) { return oks, err } +// 暂时保留,不知道外部其他组件是否有调用 func TreeUntilProjectsGetByUser(user *User) ([]Node, error) { ret, err := UserPermNodes(user) if err != nil { @@ -105,3 +106,36 @@ func UserPermNodes(me *User) ([]Node, error) { ret, err = PermNodes(nodes) return ret, err } + +func TreeUntilTypGetByUser(user *User, typ string) ([]Node, error) { + ret, err := UserPermNodes(user) + if err != nil { + return ret, err + } + + cnt := len(ret) + all := make(map[string]Node, cnt) + for i := 0; i < cnt; i++ { + all[ret[i].Path] = ret[i] + } + + // 只取typ(含)以上的部分 + var oks []Node + + set := make(map[string]struct{}) + for i := 0; i < cnt; i++ { + if ret[i].Cate == typ { + paths := Paths(ret[i].Path) + for _, path := range paths { + if _, has := set[path]; has { + continue + } + + set[path] = struct{}{} + oks = append(oks, all[path]) + } + } + } + + return oks, err +} diff --git a/src/modules/rdb/http/router.go b/src/modules/rdb/http/router.go index cc4b0269..f0222b0c 100644 --- a/src/modules/rdb/http/router.go +++ b/src/modules/rdb/http/router.go @@ -137,6 +137,7 @@ func Config(r *gin.Engine) { userLogin.GET("/tree", treeUntilLeafGets) userLogin.GET("/tree/projs", treeUntilProjectGets) + userLogin.GET("/tree/orgs", treeUntilOrganizationGets) userLogin.GET("/resources/search", resourceSearchGet) userLogin.PUT("/resources/note", resourceNotePut) diff --git a/src/modules/rdb/http/router_tree.go b/src/modules/rdb/http/router_tree.go index aa7b67f8..b2684264 100644 --- a/src/modules/rdb/http/router_tree.go +++ b/src/modules/rdb/http/router_tree.go @@ -144,7 +144,7 @@ func v1treeUntilProjectGetsByNid(c *gin.Context) { // 这个方法,展示的树只到project,节点搜索功能放到前台去 func treeUntilProjectGets(c *gin.Context) { me := loginUser(c) - oks, err := models.TreeUntilProjectsGetByUser(me) + oks, err := models.TreeUntilTypGetByUser(me, "project") renderData(c, oks, err) } @@ -155,7 +155,15 @@ func v1TreeUntilProjectGets(c *gin.Context) { user, err := models.UserGet("username=?", username) dangerous(err) - oks, err := models.TreeUntilProjectsGetByUser(user) + oks, err := models.TreeUntilTypGetByUser(user, "project") + + renderData(c, oks, err) +} + +// 这个方法,展示的树只到organization +func treeUntilOrganizationGets(c *gin.Context) { + me := loginUser(c) + oks, err := models.TreeUntilTypGetByUser(me, "organization") renderData(c, oks, err) }