Blazor开发框架Known-V2.0.9

V2.0.9

Known是基于Blazor的企业级快速开发框架,低代码,跨平台,开箱即用,一处代码,多处运行。本次版本主要是修复一些BUG和表格页面功能增强。

概述

  • 基于C#Blazor的快速开发框架,开箱即用,跨平台。
  • 模块化,单页应用,混合桌面应用,Web和桌面共享一处代码。
  • UI默认支持AntDesign,可扩展其他UI组件库。
  • 包含模块、字典、组织、角色、用户、日志、消息、工作流、定时任务等功能。
  • 低代码、简洁、易扩展,让开发更简单、更快捷!

特性

  • 快速开发:基于Blazor,在线表单设计,自动生成代码
  • 通用权限:内置通用权限模块,只需专注业务功能
  • 国际化:提供完备的国际化多语言解决方案
  • 抽象UI:抽象UI层,易扩展,支持Ant Design
  • 最佳实践:低代码,一人多角色,沟通高效,成本最低
  • C#语言:全量使用C#进行全栈开发

如果对您有帮助,点击⭐Star⭐关注 ,感谢支持开源!

更新日期

  • 2024-08-22

更新内容

  • 🐛修复DataReader转字典报错问题
  • 😄AntBlazor升级至V0.20.2
  • 🐛修复实体类表单确定继续主键重复问题
  • 🐛修复打开新增表单克隆默认实体只读属性报错问题
  • 🔨优化无代码表单界面无法验证和输入字符减少问题
  • 😄添加支持WebApi项目
  • 😄表格排序和默认排序方式设置
  • 😄表格页面添加默认分页大小设置
  • 😄表格查询条件支持默认值
  • 😄分页查询支持数据统计
  • 😄数据字典类别支持修改和删除
  • 🐛修复SqlSugar日期查询条件问题
  • 🔨优化多语言设置

详细内容

1. 内置功能增强

  • 数据字典类别支持修改和删除

image

2. 表格功能增强

  • 表格排序和默认排序方式设置
  • 表格页面添加默认分页大小设置

image

  • 表格查询条件支持默认值
//在OnPageInitAsync方法中设置DefaultQuery对象,对象属性为实体类属性
//注意:一定要在await base.OnPageInitAsync();之前设置
protected override async Task OnPageInitAsync()
{
    var date = DateTime.Now.ToString("yyyy-MM-dd");
    DefaultQuery = new { CreateTime = $"{date}~{date}" };
    
    await base.OnPageInitAsync();
    Service = await CreateServiceAsync<ISystemService>();

    Table.OnQuery = Service.QueryLogsAsync;
    Table.Column(c => c.Type).Template((b, r) => b.Tag(r.Type));
}

image

  • 分页查询支持数据统计,统计支持SQL函数和SQL表达式
//前端,在OnPageInitAsync中设置TopStatis模板,查询数据时根据后端返回结果自动刷新
protected override async Task OnPageInitAsync()
{
    await base.OnPageInitAsync();
    Service = await CreateServiceAsync<IApplyService>();

    Table.FormType = typeof(ApplyForm);
    Table.OnQuery = Service.QueryApplysAsync;
    Table.TopStatis = this.BuildTree<PagingResult<TbApply>>((b, r) =>
    {
        var sb = new System.Text.StringBuilder();
        sb.Append("<div style=\"padding-left:10px;color:#108ee9;\">");
        sb.Append($"总数:<span style=\"font-weight:bold\">{r?.TotalCount}</span>,");
        sb.Append($"撤回:<span style=\"font-weight:bold\">{r?.Statis?.GetValue<int>("RevokeCount")}</span>,");
        sb.Append($"待审核:<span style=\"font-weight:bold\">{r?.Statis?.GetValue<int>("VerifingCount")}</span>,");
        sb.Append($"审核通过:<span style=\"font-weight:bold\">{r?.Statis?.GetValue<int>("PassCount")}</span>,");
        sb.Append($"审核退回:<span style=\"font-weight:bold\">{r?.Statis?.GetValue<int>("FailCount")}</span>");
        sb.Append("</div>");
        b.Markup(sb.ToString());
    });
    Table.Column(c => c.BizStatus).Template((b, r) => b.Tag(r.BizStatus));
}

//后端,设置查询条件StatisColumns统计栏位属性,支持Function和Expression
internal static Task<PagingResult<TbApply>> QueryApplysAsync(Database db, PagingCriteria criteria)
{
    var sql = @"select a.*,b.BizStatus,b.CurrStep,b.CurrBy,b.ApplyBy,b.ApplyTime,b.VerifyBy,b.VerifyTime,b.VerifyNote 
from TbApply a,SysFlow b 
where a.Id=b.BizId and a.CompNo=@CompNo";
    criteria.StatisColumns = [
        new StatisColumnInfo { Id = nameof(TbApply.Id), Function = "count" },
        new StatisColumnInfo { Id = "RevokeCount", Expression = $"sum(case when BizStatus='{FlowStatus.Revoked}' then 1 else 0 end)" },
        new StatisColumnInfo { Id = "VerifingCount", Expression = $"sum(case when BizStatus='{FlowStatus.Verifing}' then 1 else 0 end)" },
        new StatisColumnInfo { Id = "PassCount", Expression = $"sum(case when BizStatus='{FlowStatus.VerifyPass}' then 1 else 0 end)" },
        new StatisColumnInfo { Id = "FailCount", Expression = $"sum(case when BizStatus='{FlowStatus.VerifyFail}' then 1 else 0 end)" }
    ];
    return db.QueryPageAsync<TbApply>(sql, criteria);
}

image

3. WebApi项目

  • 添加支持WebApi项目,在项目Program中AddKnown和AddKnownCore
builder.Services.AddKnown(info =>
{
    info.Id = "API";
    info.Type = AppType.WebApi;//App类型设为WebApi
});
builder.Services.AddKnownCore(info =>
{
    //数据库连接
    info.Connections = [new Known.ConnectionInfo
    {
        Name = "Default",
        DatabaseType = DatabaseType.SQLite,
        ProviderType = typeof(Microsoft.Data.Sqlite.SqliteFactory),
        ConnectionString = builder.Configuration.GetSection("ConnString").Get<string>()
    }];
});
posted @ 2024-08-22 16:00  known  阅读(522)  评论(0编辑  收藏  举报