权限树
// XMSCategory _
type XMSCategory struct {
ID int64 `json:"id"`
Name string `json:"name"`
Level int64 `json:"level"`
ParentID int64 `json:"parentId"`
SerialType string `json:"serialType"`
}
type XMSCategoryChild struct {
ID int64 `json:"id"`
Name string `json:"name"`
Level int64 `json:"level"`
ParentID int64 `json:"parentId"`
SerialType string `json:"serialType"`
CategoryChild []*XMSCategoryChild
}
// 获取所有分类
func GetAllCategory() (perms []XMSCategoryChild) {
child := XMSCategoryChild{0, "all category", 0, -1, "", []*XMSCategoryChild{}}
err := getTreeNode(0, &child)
if err != nil {
return
}
perms = append(perms, child)
return perms
}
// 递归获取子节点
func getTreeNode(pId int64, treeNode *XMSCategoryChild) error {
perms, err := getDataByPid(pId) //根据父结点Id查询数据表,获取相应的子结点信息(使用gorm)
if err != nil {
return err
}
for i := 0; i < len(perms); i++ {
child := XMSCategoryChild{
perms[i].ID,
perms[i].Name,
perms[i].Level,
perms[i].ParentID,
perms[i].SerialType,
[]*XMSCategoryChild{},
}
treeNode.CategoryChild = append(treeNode.CategoryChild, &child)
_ = getTreeNode(perms[i].ID, &child)
}
return err
}
func getDataByPid(pid int64) (result []*XMSCategoryChild, err error) {
data, err := getCategoryChildData()
if err != nil {
return
}
for _, val := range data {
if pid == val.ParentID {
result = append(result, val)
}
}
return
}
func getCategoryChildData() (tmpSliceData []*XMSCategoryChild, err error) {
_, data, err1 := Category()
if err1 != nil {
err = err1.ToError()
return
}
for _, value := range data {
tmpData := &XMSCategoryChild{
ParentID: value.ParentID,
ID: value.ID,
Name: value.Name,
Level: value.Level,
SerialType: value.SerialType,
}
tmpSliceData = append(tmpSliceData, tmpData)
}
return
}