Browse Source

目录过滤

caipin 4 năm trước cách đây
mục cha
commit
a959728f69

+ 86 - 1
services/tree_service.go

@@ -166,6 +166,7 @@ func (s *treeService) GetAllContract(projectId int, account *models.CmProjectAcc
 	for _, data := range datalist {
 
 		flag := true
+		// 标段过滤开始
 		if data.BidsectionId != 0 && account.IsAdmin != 1 {
 			flag = false
 		}
@@ -178,19 +179,29 @@ func (s *treeService) GetAllContract(projectId int, account *models.CmProjectAcc
 					// 区别合同,安全,质量
 					if bidsectionType == 1 {
 						json.Unmarshal([]byte(item.SafePermission), &permission)
+
 					} else if bidsectionType == 2 {
 						json.Unmarshal([]byte(item.QualityPermission), &permission)
+
 					} else if bidsectionType == 0 {
 						json.Unmarshal([]byte(item.ContractPermission), &permission)
+						// fmt.Println(permission)
+						// if permission["access"] == 1 {
+						// 	flag = true
+						// 	break
+						// }
 					} else {
 						return nil
 					}
+
 					if permission["access"] == 1 {
 						flag = true
+						break
 					}
 				}
 			}
 		}
+		// 标段过滤结束
 
 		if flag {
 			folder := viewmodels.FolderContract{}
@@ -245,7 +256,7 @@ func (s *treeService) GetAllContract(projectId int, account *models.CmProjectAcc
 
 	}
 
-	//fmt.Println(folderlist)
+	// fmt.Println(folderlist)
 
 	var data []*viewmodels.FolderContract
 	data = make([]*viewmodels.FolderContract, 0)
@@ -261,9 +272,83 @@ func (s *treeService) GetAllContract(projectId int, account *models.CmProjectAcc
 	// 求和
 	// dataLenght := len(data) + 4
 
+	s.filterFolder(node)
+	// 删除空目录
+	ChildrenShow := make([]*viewmodels.FolderContract, 0)
+	for _, item := range node.Children {
+		if item.IsHidden != 1 {
+			ChildrenShow = append(ChildrenShow, item)
+		}
+	}
+	node.Children = ChildrenShow
 	return node
 }
 
+func (s *treeService) filterFolder(node *viewmodels.FolderContract) {
+	if node == nil {
+		return
+	}
+
+	// 目录下是否为空目录  1空目录
+	isEmptyFolder := 1
+
+	length := len(node.Children)
+	// 如果length为0叶子节点---为目录才需要遍历
+	if length == 0 {
+		// 1.如果是目录-已经为叶子目录不需要遍历
+		// 2.是标段 目录不为空
+		if node.Isfolder == 0 {
+			isEmptyFolder = 0
+		}
+	} else {
+		// 1.遍历目录下
+		for i := 0; i < length; i++ {
+			// 2.该节点下子对象 从0-length 依次进入
+			s.filterFolder(node.Children[i])
+			// 后序-父节点逻辑 处理完0 ... -length
+			// 2-1 是标段 设置目录不为空
+			if node.Children[i].Isfolder == 0 {
+				// 有标段
+				isEmptyFolder = 0
+			} else {
+				// 2-2 是目录   ----后序遍历,最后一层下的孩子们是否能删除 走完三个点后返回到父亲
+				// 2-2-1 可展示目录 集合
+				ChildrenShow := make([]*viewmodels.FolderContract, 0)
+				// 2-2-2 目录下内容
+				if len(node.Children[i].Children) != 0 {
+					// 2-2-3 内容中是否有需要显示的目录
+					for _, item := range node.Children[i].Children {
+						// 2-2-4 有 设置为需要显示并拷贝显示内容
+						if item.IsHidden == 0 {
+							ChildrenShow = append(ChildrenShow, item)
+							node.Children[i].IsHidden = 0
+						}
+					}
+				}
+
+				// fmt.Println("==========filterFolder执行完成")
+				// fmt.Println(node.Children[i].Name)
+				// fmt.Println(fmt.Sprintf("删除:%d", node.Children[i].IsHidden))
+				// fmt.Println(node.Children[i].Children)
+				// 2-2-5 覆盖父亲节点的显示内容
+				node.Children[i].Children = ChildrenShow
+			}
+		}
+	}
+
+	// fmt.Println("=========================进入")
+	// fmt.Println(node.Name)
+	// fmt.Println(fmt.Sprintf("空目录:%d", isEmptyFolder))
+	// 后序的第一位叶子节点 如果目录为空,设置不显示
+	if isEmptyFolder == 1 {
+		node.IsHidden = 1
+	}
+}
+
+func (s *treeService) postOrder() {
+
+}
+
 // 新增一个文件夹
 func (s *treeService) Create(data viewmodels.Tree) error {
 	// 类型校验

+ 1 - 0
web/middleware/accessAuth.go

@@ -165,6 +165,7 @@ func verifyAuth(permission permission, pathList path, requestPath string) error
 		}
 	}
 	if permission.Access == 0 {
+		fmt.Println(requestPath)
 		for _, path := range pathList.Access {
 			if path == requestPath {
 				return errors.New("无权访问")

+ 2 - 2
web/middleware/sessions_backstage.go

@@ -37,10 +37,10 @@ func SessionsBackstageAuth(ctx iris.Context) {
 		return
 	}
 	// 数字证书
-	digitalToken := comm.CreateSign(conf.CookieSecret + UserName)
+	digitalToken := comm.CreateSign(conf.CookieSecret + params.Get("identity"))
 
 	// 解密副标识
-	Category, err := getDecryptId(params.Get("attachedIdentity"))
+	Category, err := getDecryptValue(params.Get("attachedIdentity"))
 	if err != nil {
 		ctx.JSON(iris.Map{"code": 1, "msg": "账号发生异常2"})
 		return

+ 1 - 0
web/viewmodels/folder_contract.go

@@ -15,6 +15,7 @@ type FolderContract struct {
 	BidsectionId string `form:"bidsectionId" json:"bidsectionId"`
 	ParentId     string `form:"parentId" json:"parentId"`
 	Isfolder     int    `form:"isfolder" json:"isfolder"`
+	IsHidden     int    `form:"isHidden" json:"isHidden"`
 
 	Contracts               int    `form:"contracts" json:"contracts"`
 	ContractsIncome         string `form:"contractsIncome" json:"contractsIncome"`