feat: 首页仪表板自定义布局 (#201)

Co-authored-by: tk <fiyne1a@dingtalk.com>
This commit is contained in:
2024-11-15 15:46:15 +08:00
committed by GitHub
parent 1743f4ff28
commit 2f300285aa
9 changed files with 244 additions and 102 deletions

View File

@ -38,7 +38,9 @@ public sealed record DynamicFilterInfo : DataAbstraction
public static implicit operator FreeSql.Internal.Model.DynamicFilterInfo(DynamicFilterInfo d)
{
var ret = d.Adapt<FreeSql.Internal.Model.DynamicFilterInfo>();
ProcessDynamicFilter(ret);
#pragma warning disable VSTHRD002
ProcessDynamicFilterAsync(ret).ConfigureAwait(false).GetAwaiter().GetResult();
#pragma warning restore VSTHRD002
return ret;
}
@ -79,35 +81,27 @@ public sealed record DynamicFilterInfo : DataAbstraction
return !condition ? this : Add(df);
}
private static void ParseDateExp(FreeSql.Internal.Model.DynamicFilterInfo d)
private static async Task ParseDateExpAsync(FreeSql.Internal.Model.DynamicFilterInfo d)
{
var values = ((JsonElement)d.Value).Deserialize<string[]>();
if (!DateTime.TryParse(values[0], CultureInfo.InvariantCulture, out _)) {
var result = values[0]
.ExecuteCSharpCodeAsync<DateTime>([typeof(DateTime).Assembly], nameof(System))
.ConfigureAwait(false)
.GetAwaiter()
.GetResult();
var result = await values[0].ExecuteCSharpCodeAsync<DateTime>([typeof(DateTime).Assembly], nameof(System)).ConfigureAwait(false);
values[0] = $"{result:yyyy-MM-dd HH:mm:ss}";
}
if (!DateTime.TryParse(values[1], CultureInfo.InvariantCulture, out _)) {
var result = values[1]
.ExecuteCSharpCodeAsync<DateTime>([typeof(DateTime).Assembly], nameof(System))
.ConfigureAwait(false)
.GetAwaiter()
.GetResult();
var result = await values[1].ExecuteCSharpCodeAsync<DateTime>([typeof(DateTime).Assembly], nameof(System)).ConfigureAwait(false);
values[1] = $"{result:yyyy-MM-dd HH:mm:ss}";
}
d.Value = values;
}
private static void ProcessDynamicFilter(FreeSql.Internal.Model.DynamicFilterInfo d)
private static async Task ProcessDynamicFilterAsync(FreeSql.Internal.Model.DynamicFilterInfo d)
{
if (d?.Filters != null) {
foreach (var filterInfo in d.Filters) {
ProcessDynamicFilter(filterInfo);
await ProcessDynamicFilterAsync(filterInfo).ConfigureAwait(false);
}
}
@ -119,7 +113,7 @@ public sealed record DynamicFilterInfo : DataAbstraction
}
}
else if (d?.Operator == DynamicFilterOperator.DateRange) {
ParseDateExp(d);
await ParseDateExpAsync(d).ConfigureAwait(false);
}
}
}

View File

@ -3,9 +3,9 @@
<Import Project="$(SolutionDir)/build/copy.pkg.xml.comment.files.targets"/>
<Import Project="$(SolutionDir)/build/prebuild.targets"/>
<ItemGroup>
<PackageReference Include="FreeSql.DbContext.NS" Version="3.2.833-ns5" Label="refs"/>
<PackageReference Include="FreeSql.Provider.Sqlite.NS" Version="3.2.833-ns5" Label="refs"/>
<PackageReference Include="Gurion" Version="1.2.1" Label="refs"/>
<PackageReference Include="FreeSql.DbContext.NS" Version="3.2.833-ns6" Label="refs"/>
<PackageReference Include="FreeSql.Provider.Sqlite.NS" Version="3.2.833-ns6" Label="refs"/>
<PackageReference Include="Gurion" Version="1.2.2" Label="refs"/>
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Scripting" Version="4.12.0-3.final"/>
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="9.0.0"/>
<PackageReference Include="Minio" Version="6.0.3"/>

View File

@ -16,7 +16,9 @@ public sealed class ApiIdAttribute : ValidationAttribute
var req = new QueryReq<QueryApiReq> { Filter = new QueryApiReq { Id = value as string } };
var method = service.GetType().GetMethod("ExistAsync");
var exist = ((Task<bool>)method!.Invoke(service, [req]))!.ConfigureAwait(false).GetAwaiter().GetResult();
#pragma warning disable VSTHRD002
var exist = ((Task<bool>)method!.Invoke(service, [req]))!.ConfigureAwait(false).GetAwaiter().GetResult();
#pragma warning restore VSTHRD002
return !exist ? new ValidationResult(Ln.) : ValidationResult.Success;
}
}

View File

@ -16,7 +16,9 @@ public sealed class UserIdAttribute : ValidationAttribute
var req = new QueryReq<QueryUserReq> { Filter = new QueryUserReq { Id = (long)value! } };
var method = service.GetType().GetMethod("ExistAsync");
var exist = ((Task<bool>)method!.Invoke(service, [req]))!.ConfigureAwait(false).GetAwaiter().GetResult();
#pragma warning disable VSTHRD002
var exist = ((Task<bool>)method!.Invoke(service, [req]))!.ConfigureAwait(false).GetAwaiter().GetResult();
#pragma warning restore VSTHRD002
return !exist ? new ValidationResult(Ln.) : ValidationResult.Success;
}
}