@code { private static readonly Random random = new Random(); /// /// /// /// protected static List GenerateItems() => new List(Enumerable.Range(1, 80).Select(i => new BindItem() { Id = i, Name = $"张三 {i:d4}", DateTime = DateTime.Now.AddDays(i - 1), Address = $"上海市普陀区金沙江路 {random.Next(1000, 2000)} 弄", Count = random.Next(1, 100), Complete = random.Next(1, 100) > 50 })); /// /// /// protected static IEnumerable Items { get; } = GenerateItems(); /// /// /// protected IEnumerable PageItemsSource => new int[] { 2, 4, 10, 20 }; /// /// /// /// /// protected Task> OnQueryAsync(QueryPageOptions options) => BindItemQueryAsync(Items, options); /// /// /// /// protected Task CustomerButton(IEnumerable items) { var cate = ToastCategory.Information; var title = "自定义按钮处理方法"; var content = $"通过不同的函数区分按钮处理逻辑,参数 Items 为 Table 组件中选中的行数据集合,当前选择数据 {items.Count()} 条"; ToastService?.Show(new ToastOption() { Category = cate, Title = title, Content = content }); return Task.CompletedTask; } /// /// /// /// /// /// protected Task> BindItemQueryAsync(IEnumerable items, QueryPageOptions options) { //TODO: 此处代码后期精简 if (!string.IsNullOrEmpty(SearchModel.Name)) items = items.Where(item => item.Name?.Contains(SearchModel.Name, StringComparison.OrdinalIgnoreCase) ?? false); if (!string.IsNullOrEmpty(SearchModel.Address)) items = items.Where(item => item.Address?.Contains(SearchModel.Address, StringComparison.OrdinalIgnoreCase) ?? false); if (!string.IsNullOrEmpty(options.SearchText)) items = items.Where(item => (item.Name?.Contains(options.SearchText) ?? false) || (item.Address?.Contains(options.SearchText) ?? false)); // 过滤 var isFiltered = false; if (options.Filters.Any()) { items = items.Where(options.Filters.GetFilterFunc()); // 通知内部已经过滤数据了 isFiltered = true; } // 排序 var isSorted = false; if (!string.IsNullOrEmpty(options.SortName)) { // 外部未进行排序,内部自动进行排序处理 var invoker = SortLambdaCache.GetOrAdd(typeof(BindItem), key => items.GetSortLambda().Compile()); items = invoker(items, options.SortName, options.SortOrder); // 通知内部已经过滤数据了 isSorted = true; } // 设置记录总数 var total = items.Count(); // 内存分页 items = items.Skip((options.PageIndex - 1) * options.PageItems).Take(options.PageItems).ToList(); return Task.FromResult(new QueryData() { Items = items, TotalCount = total, IsSorted = isSorted, IsFiltered = isFiltered, IsSearch = !string.IsNullOrEmpty(SearchModel.Name) || !string.IsNullOrEmpty(SearchModel.Address) }); } }