惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

阮一峰的网络日志
阮一峰的网络日志
IT之家
IT之家
H
Heimdal Security Blog
Jina AI
Jina AI
宝玉的分享
宝玉的分享
博客园 - 【当耐特】
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
爱范儿
爱范儿
T
Tailwind CSS Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Apple Machine Learning Research
Apple Machine Learning Research
有赞技术团队
有赞技术团队
酷 壳 – CoolShell
酷 壳 – CoolShell
WordPress大学
WordPress大学
AWS News Blog
AWS News Blog
C
Cisco Blogs
Cisco Talos Blog
Cisco Talos Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
D
Darknet – Hacking Tools, Hacker News & Cyber Security
The Hacker News
The Hacker News
The Cloudflare Blog
Hugging Face - Blog
Hugging Face - Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
T
Threatpost
S
Securelist
P
Privacy International News Feed
C
CXSECURITY Database RSS Feed - CXSecurity.com
博客园 - 聂微东
博客园 - 叶小钗
J
Java Code Geeks
V
V2EX
博客园 - Franky
Spread Privacy
Spread Privacy
K
Kaspersky official blog
C
Cyber Attacks, Cyber Crime and Cyber Security
Simon Willison's Weblog
Simon Willison's Weblog
Project Zero
Project Zero
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
C
Cybersecurity and Infrastructure Security Agency CISA
C
CERT Recently Published Vulnerability Notes
Latest news
Latest news
NISL@THU
NISL@THU
罗磊的独立博客
W
WeLiveSecurity
Google DeepMind News
Google DeepMind News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园_首页
V
Visual Studio Blog

博客园 - known

基于Blazor实现的光伏设备调试软件 基于Blazor实现的跟踪光伏智能运维平台 基于Blazor实现的电梯运行监测系统 基于Blazor实现的样品扫码比对管理系统 基于Blazor实现的简易进销存管理系统 InfluxDB2时序数据库查询教程 InfluxDB2时序数据库安装教程 基于Blazor实现的运输信息管理系统 React+Next.js+MaterialUI+Toolpad技术栈学习——安装 Blazor开发框架KnownPro-创建新项目 Blazor开发框架Known-V2.0.13 Blazor开发框架Known-V2.0.11 Blazor静态服务端呈现(静态SSR)身份认证 Blazor开发框架Known-V2.0.10 Blazor开发框架Known-V2.0.8 Blazor开发框架Known-V2.0.7 Blazor Web 应用如何实现Auto模式 Blazor程序混合Razor页面 Win11系统Docker部署Blazor程序 Known框架实战演练——进销存财务管理 Known框架实战演练——进销存业务单据 Known框架实战演练——进销存基础数据
Blazor开发框架Known-V2.0.9
known · 2024-08-22 · via 博客园 - known

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>()
    }];
});