namespace MiaoYu.Shared.Admin.Models.PagingViews; /// /// 分页视图模型 /// public class PagingView { /// /// 列信息 /// public List Columns { get; set; } = new List(); /// /// 转换后数据 /// public List> DataSource { get; set; } = new List>(); /// /// 总数 /// public long Total { get; set; } /// /// 总页数 /// public long PageCount { get; set; } /// /// 一页显示多少条 /// public int Size { get; set; } /// /// 页码 /// public int Page { get; set; } /// /// 初始化 /// /// /// public PagingView(int page, int size) { Page = page; Size = size; } /// /// 创建 PagingView 对象 /// /// /// /// public static PagingView Create(int page, int size) { var pagingView = new PagingView(page, size); return pagingView; } /// /// 仓储主表实体类型 /// private Type? _mainTableEntityType; /// /// 主表实体类型 /// [JsonIgnore] public Type? MainTableEntityType => _mainTableEntityType; /// /// 创建数据源 /// /// /// /// public void BuilderDataSource(List data, Type mainTableEntityType) { _mainTableEntityType = mainTableEntityType; var propertyInfos = typeof(TEntity).GetProperties(); var fieldNames = propertyInfos.Select(item => item.Name).ToList(); var result = new List>(); foreach (var item in data) { var type = item!.GetType(); var dictionary = new Dictionary(); foreach (var fieldName in fieldNames) { dictionary[fieldName] = type?.GetProperty(fieldName)?.GetValue(item); } result.Add(dictionary); } DataSource = result; foreach (var item in fieldNames) { if (item.StartsWith("_")) continue; Columns.Add(new TableColumnView(item.ToFirstCharConvertLower(), item)); } } /// /// 创建数据源 根据 datatable /// /// /// public void BuilderDataSourceByDataTable(DataTable data, Type mainTableEntityType) { _mainTableEntityType = mainTableEntityType; var fieldNames = (from DataColumn dc in data.Columns select dc.ColumnName).ToList(); var result = new List>(); foreach (DataRow dr in data.Rows) { var dictionary = new Dictionary(); foreach (DataColumn dc in data.Columns) { dictionary.Add(dc.ColumnName, dr[dc.ColumnName]); } result.Add(dictionary); } DataSource = result; foreach (var item in fieldNames) { if (item.StartsWith("_")) continue; Columns.Add(new TableColumnView(item.ToFirstCharConvertLower(), item)); } } /// /// 获取指定列 /// /// /// /// /// public TableColumnView GetColumn(IQueryable query, Expression> queryField) { var nameQuery = Tools.GetNameByExpression(queryField); var TableColumnView = Columns .Where(w => w.FieldName.ToLower() == nameQuery.ToLower()) .FirstOrDefault(); return TableColumnView!; } /// /// 格式化值 /// /// /// /// /// /// public PagingView FormatValue(IQueryable query, Expression> queryField, Func funcValue) { var nameQuery = Tools.GetNameByExpression(queryField); foreach (var item in DataSource.Where(w => w.ContainsKey(nameQuery))) { var value = item[nameQuery]; item[nameQuery] = funcValue?.Invoke(value == null ? default : (TValue)value ?? default); } return this; } /// /// 设置列显示名称 /// /// public PagingView SetColumnDisplayName() { // 设置列显示名称 using var scope = App.CreateScope(); var databaseTableService = scope.ServiceProvider.GetService(); if (databaseTableService == null) return this; var genDbTableDtos = databaseTableService!.GetAllTablesByCache(); if (genDbTableDtos == null) return this; if (genDbTableDtos.Count == 0) return this; var table = genDbTableDtos? .Where(w => w.EntityName.ToLower() == MainTableEntityType.Name.ToLower()) .FirstOrDefault(); if (table == null) return this; foreach (var column in Columns) { var fieldName = column.FieldName.ToLower(); var tableInfo = table?.TableInfos?.FirstOrDefault(w => w.ColumnName.ToLower() == fieldName); column.Title = string.IsNullOrWhiteSpace(tableInfo?.DisplayName) ? fieldName : tableInfo.DisplayName; } return this; } }