Пример #1
0
        public virtual async Task <IList <GeneralTreeComboboxDto <long?> > > GetNodesForSelectAsync(GeneralTreeGetForSelectInput <long?> input)
        {
            await CheckGetPermissionAsync();

            var query = ownRepository.GetAll()
                        .Where(c => c.ParentId == input.Id || c.Id == input.Id)
                        .OrderBy(c => c.Code);

            var dtoList = await AsyncQueryableExecuter.ToListAsync(query.Select(c => new GeneralTreeComboboxDto <long?> {
                Text = c.DisplayName, Value = c.Id, ExtDataString = c.ExtensionData
            }));

            var parentDto = input.Id.HasValue ? dtoList.SingleOrDefault(c => c.Value == input.Id) : null;

            if (parentDto != null)
            {
                dtoList.Remove(parentDto);

                parentDto.Value = null;
                parentDto.Text  = "==" + parentDto.Text + "==";
            }
            //dtoList = dtoList.Where(c => c.Value != input.Id).ToList();

            if (input.ForType > 0 && input.ForType < 5 && !string.IsNullOrWhiteSpace(input.ParentText))
            {
                dtoList.Insert(0, new GeneralTreeComboboxDto <long?> {
                    Value = null, Text = L(input.ParentText)
                });
            }
            else if ((input.ForType == 1 || input.ForType == 3) && input.Id.HasValue)
            {
                dtoList.Insert(0, parentDto);
            }
            else if (input.ForType == 1 || input.ForType == 2)
            {
                dtoList.Insert(0, new GeneralTreeComboboxDto <long?> {
                    Value = null, Text = L(allTextForSearch)
                });
            }
            else if (input.ForType == 3 || input.ForType == 4)
            {
                dtoList.Insert(0, new GeneralTreeComboboxDto <long?> {
                    Value = null, Text = L(allTextForForm)
                });
            }

            return(dtoList);
        }
Пример #2
0
        public virtual async Task <IList <GeneralTreeNodeDto> > GetTreeForSelectAsync(GeneralTreeGetForSelectInput <long?> input)
        {
            //权限判断
            await CheckGetPermissionAsync();


            //得到实体扁平集合
            string parentCode = "";

            if (input.Id.HasValue && input.Id.Value > 0)
            {
                var top = await ownRepository.GetAsync(input.Id.Value);

                parentCode = top.Code;
            }
            var query = ownRepository.GetAll()
                        .Where(c => c.Code.StartsWith(parentCode))
                        .OrderBy(c => c.Code);
            //可以调用虚方法简介给子类一个机会做过滤,暂未实现
            var list = await AsyncQueryableExecuter.ToListAsync(query);


            //先踢出父节点
            //TEntity parent = list.SingleOrDefault(c => c.Id == input.Id);
            //if (parent != null)
            //    list.Remove(parent);

            //转换为Dtop
            //上面没有直接用投影是为了给子类一个机会来参与遍历过程
            var dtoList = new List <GeneralTreeNodeDto>();

            foreach (var c in list)
            {
                var temp = new GeneralTreeNodeDto
                {
                    id       = c.Id.ToString(),
                    parentId = c.ParentId.ToString(),
                    text     = c.DisplayName
                };
                temp.attributes      = new ExpandoObject();
                temp.attributes.code = c.Code;//这里可以搞个虚方法,允许子类填充自己的字段
                dtoList.Add(temp);
            }
            dtoList.ForEach(c =>
            {
                c.children = dtoList.Where(d => d.parentId == c.id).ToList();

                var entity = list.Single(d => d.Id.ToString() == c.id);

                if (c.children != null && c.children.Count > 0)
                {
                    c.state = "closed";//默认值为 open
                }
                if (!string.IsNullOrWhiteSpace(entity.ExtensionData))
                {
                    c.attributes.extData = JsonConvert.DeserializeObject <dynamic>(entity.ExtensionData);
                }

                OnGetForSelectItem(entity, c);
            });

            var parentDto = input.Id.HasValue ? dtoList.SingleOrDefault(c => c.id == input.Id.ToString()) : null;

            if (input.Id.HasValue)
            {
                dtoList = dtoList.Where(c => c.parentId == input.Id.ToString()).ToList();
            }
            else
            {
                dtoList = dtoList.Where(c => string.IsNullOrWhiteSpace(c.parentId)).ToList();
            }

            if (input.ForType > 0 && input.ForType < 5 && !string.IsNullOrWhiteSpace(input.ParentText))
            {
                return new List <GeneralTreeNodeDto> {
                           new GeneralTreeNodeDto {
                               id = null, text = L(input.ParentText), children = dtoList
                           }
                }
            }
            ;

            if ((input.ForType == 1 || input.ForType == 3) && input.Id.HasValue)
            {
                return new List <GeneralTreeNodeDto> {
                           parentDto
                }
            }
            ;

            if (input.ForType == 1 || input.ForType == 2)
            {
                return new List <GeneralTreeNodeDto> {
                           new GeneralTreeNodeDto {
                               id = null, text = L(this.allTextForSearch), children = dtoList
                           }
                }
            }
            ;

            if (input.ForType == 3 || input.ForType == 4)
            {
                return new List <GeneralTreeNodeDto> {
                           new GeneralTreeNodeDto {
                               id = null, text = L(this.allTextForForm), children = dtoList
                           }
                }
            }
            ;

            return(dtoList);
        }