Blazor开发框架Known-V2.0.9

news/2024/9/19 8:58:44/文章来源:https://www.cnblogs.com/known/p/18374071

V2.0.9

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

  • 官网:http://known.pumantech.com
  • Gitee: https://gitee.com/known/Known
  • Github:https://github.com/known/Known

概述

  • 基于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和Expressioninternal 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>()}];
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/785441.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

antd5版本修改Table组件滚动条样式

因为项目需求,要将Table组件的样式修改为UI图所给的效果,但是怎么写都不生效 最后发现在 .ant-table的样式中设了scrollbar-color,只要把这里的样式设为scrollbar-color: auto; 然后再改.ant-table-body里面滚动条的样式,就可以了.ant-table-body{&::-webkit-scrollbar…

ThinkPHP6同步千万级流水数据

ThinkPHP6定时任务同步千万级流水数据 多数据源配置 自定义指令 定时同步单次1000条 <?php declare (strict_types = 1);namespace app\command\SyncDtaTask;use think\console\Command; use think\console\Input; use think\console\Output; use think\Exception; use thi…

AtCoder Beginner Contest 047

A - Fighting over Candies 简单排序。 #include <bits/stdc++.h>using namespace std; using i64 = long long;int main() {ios::sync_with_stdio(false), cin.tie(nullptr);vector<int> a(3);cin >> a[0] >> a[1] >> a[2];sort(a.begin(), a.e…

CRTP 和静态多态

c++古典面试问题之一:面向对象编程三大特性--封装,继承,多态 c++古典面试问题之二:如何实现多态-- 当基类指针指向派生类对象,并通过这个指针调用在派生类中被重写的虚函数基于上述知识点,今天我们讲下另一种多态实现方式:CRTP (curiously recurring template pattern)虚…

小程序直传oss

直传使用 const host = <host>; const signature = <signatureString>; const ossAccessKeyId = <accessKey>; const policy = <policyBase64Str>; const key = <object name>; const securityToken = <x-oss-security-token>; const fi…

呼死你 手机轰炸机 (29021243

基于 短信轰炸机 原理研究并实现之后 又研究起了电话轰炸机 实现原理其实大同小异,最终的区别的 用户在进行短信发送 并未收到短信的情况下 【产生的原因有 网络信号原因、用户手机自动屏蔽原因】 可以利用第三方平台提供的语音验证码进行发送 这种情况也是通过fiddler进行抓包…

pygame物体碰撞

代码:#coding=utf-8import os,sys,re,time import pygame import random import math from win32api import GetSystemMetrics from tkinter import messageboxpygame.init() pygame.display.set_caption("我的游戏")percent = 0.6 screen_width = GetSystemMetrics…

NSSCTF [HNCTF 2022 Week1]Interesting_include

NSSCTF [HNCTF 2022 Week1]Interesting_include<?php //WEB手要懂得搜索 //flag in ./flag.phpif(isset($_GET[filter])){$file = $_GET[filter];if(!preg_match("/flag/i", $file)){die("error");}include($file); }else{highlight_file(__FILE__); }…

02-HTMLJS相关练习

1、使用 html 写一个网页,要求满足以下条件: (1)网页中含有任意一张图片,图片路径使用绝对路径(这里绝对路径无法识别故使用相对路径),鼠标悬停在图片时出现“马哥教育”文本,且点击图片可跳转至马哥教育官方页面 (2)网页中包含账号、密码登录,且账号提前定义好是 …

织梦dedecms判断文章是否为推荐文章

{dede:arclist row=10 typeid=typeid titlelen=36 runphp=yes} {dede:loop value=$dls}{if preg_match(/c/, $fields[flag])}<strong>推荐文章: </strong>{/if}<a href="[field:arcurl]" title="[field:title]">[field:title]</a>…

织梦dedecms判断缩略图是否存在

{dede:field name=litpic runphp=yes} if(!empty(@me)) {<img src="@me" alt="缩略图" /> } else {<img src="/images/no-image.png" alt="默认图片" /> } [/dede:field]扫码添加技术【解决问题】专注中小企业网站建设、网…

织梦dedecms判断子菜单是否存在

{dede:channeltype typeid=typeid runphp=yes} if(@list != ) {<ul class="submenu">{dede:loop value=@list}<li><a href="[url]">[@typename]</a></li>{/dede:loop}</ul> } else {"没有子菜单" } {/dede:…