Skip to content

Commit

Permalink
1. 代码生成器客户端配置新增 Microfrontend 属性,用于控制是否启用微前端模板.
Browse files Browse the repository at this point in the history
2. 随机数辅助操作类 Util.Helpers.Random 新增 GetValues 方法, 用于从集合中随机获取指定数量子集.
3. 新增Razor页面监听服务 IRazorWatchService 及相关类型,用于监视Razor页面更改时自动生成Html文件.
4. 修复表格组件复选框,单选框,序号在有合并表头的情况下显示不正确的错误.
  • Loading branch information
UtilCore committed Mar 24, 2024
1 parent 47539d9 commit 66926b2
Show file tree
Hide file tree
Showing 112 changed files with 1,897 additions and 228 deletions.
2 changes: 1 addition & 1 deletion build/version.props
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<PropertyGroup>
<VersionMajor>8</VersionMajor>
<VersionMinor>0</VersionMinor>
<VersionPatch>7</VersionPatch>
<VersionPatch>8</VersionPatch>
<VersionPrefix>$(VersionMajor).$(VersionMinor).$(VersionPatch)</VersionPrefix>
<VersionSuffix></VersionSuffix>
</PropertyGroup>
Expand Down
2 changes: 1 addition & 1 deletion src/Util.Application.WebApi/Logging/LogContextAccessor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public class LogContextAccessor : ILogContextAccessor {
/// 日志上下文
/// </summary>
public LogContext Context {
get => Util.Helpers.Convert.To<LogContext>( Web.HttpContext.Items[LogContextKey] );
get => Util.Helpers.Convert.To<LogContext>( Web.HttpContext?.Items[LogContextKey] );
set => Web.HttpContext.Items[LogContextKey] = value;
}
}
2 changes: 1 addition & 1 deletion src/Util.AspNetCore/08-Util.AspNetCore.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.2" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.3" />
</ItemGroup>

<ItemGroup>
Expand Down
203 changes: 203 additions & 0 deletions src/Util.Core/Helpers/FileWatcher.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,203 @@
namespace Util.Helpers;

/// <summary>
/// 文件监视器
/// </summary>
public class FileWatcher : IDisposable {
/// <summary>
/// 文件系统监视器
/// </summary>
private readonly FileSystemWatcher _watcher;

/// <summary>
/// 初始化文件监视器
/// </summary>
public FileWatcher() {
_watcher = new FileSystemWatcher();
_watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName;
}

/// <summary>
/// 设置监听目录路径
/// </summary>
/// <param name="path">目录绝对路径</param>
/// <param name="includeSubdirectories">是否监听子目录,默认值: true</param>
public FileWatcher Path( string path, bool includeSubdirectories = true ) {
_watcher.Path = path;
_watcher.IncludeSubdirectories = includeSubdirectories;
return this;
}

/// <summary>
/// 设置监听通知过滤
/// </summary>
/// <param name="notifyFilters">监听通知过滤</param>
public FileWatcher NotifyFilter( NotifyFilters notifyFilters ) {
_watcher.NotifyFilter = notifyFilters;
return this;
}

/// <summary>
/// 设置过滤模式
/// </summary>
/// <param name="filter">过滤模式,默认值: *.* ,范例: *.cshtml 可过滤cshtml文件</param>
public FileWatcher Filter( string filter ) {
_watcher.Filter = filter;
return this;
}

/// <summary>
/// 处理文件创建监听事件
/// </summary>
/// <param name="action">文件创建监听事件处理器</param>
public FileWatcher OnCreated( Action<object, FileSystemEventArgs> action ) {
_watcher.Created += ( source, e ) => {
action( source, e );
};
return this;
}

/// <summary>
/// 处理文件创建监听事件
/// </summary>
/// <param name="action">文件创建监听事件处理器</param>
public FileWatcher OnCreatedAsync( Func<object, FileSystemEventArgs, Task> action ) {
_watcher.Created += async ( source, e ) => {
await action( source, e );
};
return this;
}

/// <summary>
/// 处理文件变更监听事件
/// </summary>
/// <param name="action">文件变更监听事件处理器</param>
public FileWatcher OnChanged( Action<object, FileSystemEventArgs> action ) {
_watcher.Changed += ( source, e ) => {
action( source, e );
};
return this;
}

/// <summary>
/// 处理文件变更监听事件
/// </summary>
/// <param name="action">文件变更监听事件处理器</param>
public FileWatcher OnChangedAsync( Func<object, FileSystemEventArgs, Task> action ) {
_watcher.Changed += async ( source, e ) => {
await action( source, e );
};
return this;
}

/// <summary>
/// 处理文件删除监听事件
/// </summary>
/// <param name="action">文件删除监听事件处理器</param>
public FileWatcher OnDeleted( Action<object, FileSystemEventArgs> action ) {
_watcher.Deleted += ( source, e ) => {
action( source, e );
};
return this;
}

/// <summary>
/// 处理文件删除监听事件
/// </summary>
/// <param name="action">文件删除监听事件处理器</param>
public FileWatcher OnDeletedAsync( Func<object, FileSystemEventArgs, Task> action ) {
_watcher.Deleted += async ( source, e ) => {
await action( source, e );
};
return this;
}

/// <summary>
/// 处理文件重命名监听事件
/// </summary>
/// <param name="action">文件重命名监听事件处理器</param>
public FileWatcher OnRenamed( Action<object, RenamedEventArgs> action ) {
_watcher.Renamed += ( source, e ) => {
action( source, e );
};
return this;
}

/// <summary>
/// 处理文件重命名监听事件
/// </summary>
/// <param name="action">文件重命名监听事件处理器</param>
public FileWatcher OnRenamedAsync( Func<object, RenamedEventArgs, Task> action ) {
_watcher.Renamed += async ( source, e ) => {
await action( source, e );
};
return this;
}

/// <summary>
/// 处理文件错误监听事件
/// </summary>
/// <param name="action">文件错误监听事件处理器</param>
public FileWatcher OnError( Action<object, ErrorEventArgs> action ) {
_watcher.Error += ( source, e ) => {
action( source, e );
};
return this;
}

/// <summary>
/// 处理文件错误监听事件
/// </summary>
/// <param name="action">文件错误监听事件处理器</param>
public FileWatcher OnErrorAsync( Func<object, ErrorEventArgs, Task> action ) {
_watcher.Error += async ( source, e ) => {
await action( source, e );
};
return this;
}

/// <summary>
/// 处理文件监听器释放事件
/// </summary>
/// <param name="action">文件监听器释放事件处理器</param>
public FileWatcher OnDisposed( Action<object, EventArgs> action ) {
_watcher.Disposed += ( source, e ) => {
action( source, e );
};
return this;
}

/// <summary>
/// 处理文件监听器释放事件
/// </summary>
/// <param name="action">文件监听器释放事件处理器</param>
public FileWatcher OnDisposedAsync( Func<object, EventArgs, Task> action ) {
_watcher.Disposed += async ( source, e ) => {
await action( source, e );
};
return this;
}

/// <summary>
/// 启动监听
/// </summary>
public FileWatcher Start() {
_watcher.EnableRaisingEvents = true;
return this;
}

/// <summary>
/// 停止监听
/// </summary>
public FileWatcher Stop() {
_watcher.EnableRaisingEvents = false;
return this;
}

/// <summary>
/// 释放
/// </summary>
public void Dispose() {
_watcher?.Dispose();
}
}
27 changes: 23 additions & 4 deletions src/Util.Core/Helpers/Random.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace Util.Helpers;
namespace Util.Helpers;

/// <summary>
/// 随机数操作
Expand Down Expand Up @@ -45,19 +45,38 @@ public static T GetValue<T>( IEnumerable<T> array ) {
return list[index];
}

/// <summary>
/// 从集合中随机获取值列表
/// </summary>
/// <param name="array">集合</param>
/// <param name="count">获取数量</param>
public static List<T> GetValues<T>( IEnumerable<T> array, int count ) {
var result = new List<T>();
if ( array == null )
return result;
var list = array.ToList();
while ( list.Count > 0 && result.Count < count ) {
var index = System.Random.Shared.Next( 0, list.Count );
var item = list[index];
result.Add( item );
list.Remove( item );
}
return result;
}

/// <summary>
/// 对集合随机排序
/// </summary>
/// <typeparam name="T">集合元素类型</typeparam>
/// <param name="array">集合</param>
public static List<T> Sort<T>( IEnumerable<T> array ) {
if( array == null )
if ( array == null )
return null;
var list = array.ToList();
for( int i = 0; i < list.Count; i++ ) {
for ( int i = 0; i < list.Count; i++ ) {
int index1 = System.Random.Shared.Next( 0, list.Count );
int index2 = System.Random.Shared.Next( 0, list.Count );
( list[index1], list[index2] ) = ( list[index2], list[index1] );
(list[index1], list[index2]) = (list[index2], list[index1]);
}
return list;
}
Expand Down
14 changes: 9 additions & 5 deletions src/Util.Core/Helpers/String.cs
Original file line number Diff line number Diff line change
Expand Up @@ -66,12 +66,14 @@ public static string FirstUpperCase( string value ) {
/// </summary>
/// <param name="value">值</param>
/// <param name="start">要移除的值</param>
public static string RemoveStart( string value, string start ) {
/// <param name="ignoreCase">是否忽略大小写,默认值: true</param>
public static string RemoveStart( string value, string start, bool ignoreCase = true ) {
if ( string.IsNullOrWhiteSpace( value ) )
return string.Empty;
if ( string.IsNullOrEmpty( start ) )
return value;
if ( value.StartsWith( start, StringComparison.Ordinal ) == false )
var options = ignoreCase ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal;
if ( value.StartsWith( start, options ) == false )
return value;
return value.Substring( start.Length, value.Length - start.Length );
}
Expand Down Expand Up @@ -105,14 +107,16 @@ public static StringBuilder RemoveStart( StringBuilder value, string start ) {
/// </summary>
/// <param name="value">值</param>
/// <param name="end">要移除的值</param>
public static string RemoveEnd( string value, string end ) {
/// <param name="ignoreCase">是否忽略大小写,默认值: true</param>
public static string RemoveEnd( string value, string end,bool ignoreCase = true ) {
if ( string.IsNullOrWhiteSpace( value ) )
return string.Empty;
if ( string.IsNullOrEmpty( end ) )
return value;
if ( value.EndsWith( end, StringComparison.Ordinal ) == false )
var options = ignoreCase ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal;
if ( value.EndsWith( end, options ) == false )
return value;
return value.Substring( 0, value.LastIndexOf( end, StringComparison.Ordinal ) );
return value.Substring( 0, value.LastIndexOf( end, options ) );
}

/// <summary>
Expand Down
6 changes: 5 additions & 1 deletion src/Util.Core/Helpers/Url.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace Util.Helpers;
namespace Util.Helpers;

/// <summary>
/// Url操作
Expand All @@ -18,6 +18,10 @@ public static string JoinPath( params string[] paths ) {
var lastPath = paths.Last();
paths = paths.Select( t => t.Trim( '/' ) ).ToArray();
var result = Path.Combine( paths ).Replace( @"\", "/" );
if ( paths.Any( path => path.StartsWith( "." ) ) ) {
result = Path.GetFullPath( Path.Combine( paths ) );
result = result.RemoveStart( AppContext.BaseDirectory ).Replace( @"\", "/" );
}
if ( firstPath.StartsWith( '/' ) )
result = $"/{result}";
if ( lastPath.EndsWith( '/' ) )
Expand Down
14 changes: 8 additions & 6 deletions src/Util.Core/StringExtensions.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using String = Util.Helpers.String;

namespace Util;
namespace Util;

/// <summary>
/// 字符串扩展
Expand All @@ -11,17 +11,19 @@ public static class StringExtensions {
/// </summary>
/// <param name="value">值</param>
/// <param name="start">要移除的值</param>
public static string RemoveStart( this string value, string start ) {
return String.RemoveStart( value, start );
/// <param name="ignoreCase">是否忽略大小写,默认值: true</param>
public static string RemoveStart( this string value, string start, bool ignoreCase = true ) {
return String.RemoveStart( value, start, ignoreCase );
}

/// <summary>
/// 移除末尾字符串
/// </summary>
/// <param name="value">值</param>
/// <param name="end">要移除的值</param>
public static string RemoveEnd( this string value, string end ) {
return String.RemoveEnd( value, end );
/// <param name="ignoreCase">是否忽略大小写,默认值: true</param>
public static string RemoveEnd( this string value, string end, bool ignoreCase = true ) {
return String.RemoveEnd( value, end, ignoreCase );
}

/// <summary>
Expand Down Expand Up @@ -61,7 +63,7 @@ public static StringWriter RemoveStart( this StringWriter writer, string start )
/// <param name="writer">字符串写入器</param>
/// <param name="end">要移除的值</param>
public static StringWriter RemoveEnd( this StringWriter writer, string end ) {
if( writer == null )
if ( writer == null )
return null;
var builder = writer.GetStringBuilder();
builder.RemoveEnd( end );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="MySqlConnector" Version="2.3.5" />
<PackageReference Include="MySqlConnector" Version="2.3.6" />
</ItemGroup>

<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="8.0.1" />
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="8.0.2" />
</ItemGroup>

<ItemGroup>
Expand Down
Loading

0 comments on commit 66926b2

Please sign in to comment.