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;
}
}