mirror of
https://github.com/ThingsGateway/ThingsGateway.git
synced 2026-10-25 18:00:12 +08:00
206 lines
7.1 KiB
Plaintext
206 lines
7.1 KiB
Plaintext
@*
|
|
//------------------------------------------------------------------------------
|
|
// 此代码版权声明为全文件覆盖,如有原作者特别声明,会在下方手动补充
|
|
// 此代码版权(除特别声明外的代码)归作者本人Diego所有
|
|
// 源代码使用协议遵循本仓库的开源协议及附加协议
|
|
// Gitee源代码仓库:https://gitee.com/diego2098/ThingsGateway
|
|
// Github源代码仓库:https://github.com/kimdiego2098/ThingsGateway
|
|
// 使用文档:https://diego2098.gitee.io/thingsgateway-docs/
|
|
// QQ群:605534569
|
|
//------------------------------------------------------------------------------
|
|
*@
|
|
|
|
@using BlazorComponent;
|
|
@using Microsoft.AspNetCore.Components.Web;
|
|
@using Microsoft.JSInterop;
|
|
@using Masa.Blazor;
|
|
@namespace ThingsGateway.Components
|
|
|
|
<MCardActions>
|
|
输出日志
|
|
<MSpacer></MSpacer>
|
|
@if (ChildContent != null)
|
|
@ChildContent
|
|
|
|
|
|
|
|
<MTooltip Bottom Context="tip">
|
|
<ActivatorContent>
|
|
<MButton Class="mx-2" @attributes="@tip.Attrs" Dark Fab Small
|
|
OnClick=@(()=>
|
|
{
|
|
pauseMessage=!pauseMessage;
|
|
if(pauseMessage)
|
|
{
|
|
CurrentMessages= Messages?.ToList();
|
|
CurrentMessageStrings= MessageStrings?.ToList();
|
|
}
|
|
}
|
|
)>
|
|
<MIcon>@((!pauseMessage) ? "mdi-pause" : "mdi-play")</MIcon>
|
|
</MButton>
|
|
</ActivatorContent>
|
|
<ChildContent>
|
|
<span>@((!pauseMessage) ? "暂停日志" : "运行日志")</span>
|
|
</ChildContent>
|
|
</MTooltip>
|
|
<MTooltip Bottom Context="tip">
|
|
<ActivatorContent>
|
|
<MButton Loading=isDownLoading Class="mx-2" @attributes="@tip.Attrs" Dark Fab Small
|
|
OnClick=@(async()=>
|
|
{
|
|
if (pauseMessage)
|
|
{
|
|
if(Messages!=null)
|
|
await DownDeviceMessageExportAsync(CurrentMessages.Select(a=>a.message));
|
|
else
|
|
await DownDeviceMessageExportAsync(CurrentMessageStrings);
|
|
}
|
|
else
|
|
{
|
|
if(Messages!=null)
|
|
await DownDeviceMessageExportAsync(Messages.Select(a=>a.message));
|
|
else
|
|
await DownDeviceMessageExportAsync(MessageStrings);
|
|
}
|
|
}
|
|
)>
|
|
<MIcon>mdi-export</MIcon>
|
|
</MButton>
|
|
</ActivatorContent>
|
|
<ChildContent>
|
|
<span>导出</span>
|
|
</ChildContent>
|
|
</MTooltip>
|
|
<MTooltip Bottom Context="tip">
|
|
<ActivatorContent>
|
|
<MButton Class="mx-2" @attributes="@tip.Attrs" Dark Fab Small
|
|
OnClick=@(()=>
|
|
{
|
|
Messages?.Clear();
|
|
MessageStrings?.Clear();
|
|
}
|
|
)>
|
|
<MIcon>mdi-delete-outline</MIcon>
|
|
</MButton>
|
|
</ActivatorContent>
|
|
<ChildContent>
|
|
<span>清空</span>
|
|
</ChildContent>
|
|
</MTooltip>
|
|
|
|
</MCardActions>
|
|
@{
|
|
if (Messages != null)
|
|
{
|
|
ICollection<(Microsoft.Extensions.Logging.LogLevel level, string message)> item;
|
|
if (pauseMessage)
|
|
item = CurrentMessages;
|
|
else
|
|
item = Messages;
|
|
|
|
<MRow Class="ml-2 mr-2 d-flex" NoGutters>
|
|
<MVirtualScroll Context="itemMessage" Height=@(Height) OverscanCount=2 ItemSize="100" Items="item">
|
|
<ItemContent>
|
|
<div title=@itemMessage.message.Substring(0, Math.Min(itemMessage.message.Length, 500)) class=@(itemMessage.level<Microsoft.Extensions.Logging.LogLevel.Information?MasaBlazor.Theme.Dark? " while--text ":"black--text":itemMessage.level>=Microsoft.Extensions.Logging.LogLevel.Warning?" red--text ":"green--text ") style="white-space: nowrap !important;overflow: hidden !important; text-overflow: ellipsis !important;">
|
|
@itemMessage.message.Substring(0, Math.Min(itemMessage.message.Length, 500))
|
|
</div>
|
|
</ItemContent>
|
|
</MVirtualScroll>
|
|
</MRow>
|
|
}
|
|
else
|
|
{
|
|
ICollection<string> item;
|
|
if (pauseMessage)
|
|
item = CurrentMessageStrings;
|
|
else
|
|
item = MessageStrings;
|
|
|
|
item ??= new List<string>();
|
|
<MRow Class="ml-2 mr-2 d-flex" NoGutters>
|
|
<MVirtualScroll Context="itemMessage" Height=@(Height) OverscanCount=2 ItemSize="100" Items="item">
|
|
<ItemContent>
|
|
<div title=@itemMessage.Substring(0, Math.Min(itemMessage.Length, 500)) style="white-space: nowrap !important;overflow: hidden !important; text-overflow: ellipsis !important;">
|
|
@itemMessage.Substring(0, Math.Min(itemMessage.Length, 500))
|
|
</div>
|
|
</ItemContent>
|
|
</MVirtualScroll>
|
|
</MRow>
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@code {
|
|
|
|
/// <summary>
|
|
/// ChildContent
|
|
/// </summary>
|
|
[Parameter]
|
|
public RenderFragment ChildContent { get; set; }
|
|
/// <summary>
|
|
/// Height
|
|
/// </summary>
|
|
[Parameter]
|
|
public StringNumber Height { get; set; } = 600;
|
|
|
|
[Inject]
|
|
MasaBlazor MasaBlazor { get; set; }
|
|
/// <summary>
|
|
/// 日志缓存
|
|
/// </summary>
|
|
[Parameter]
|
|
public ICollection<(Microsoft.Extensions.Logging.LogLevel level, string message)> Messages { get; set; }
|
|
/// <summary>
|
|
/// 日志缓存
|
|
/// </summary>
|
|
[Parameter]
|
|
public ICollection<string> MessageStrings { get; set; }
|
|
private ICollection<(Microsoft.Extensions.Logging.LogLevel level, string message)> CurrentMessages { get; set; }
|
|
private ICollection<string> CurrentMessageStrings { get; set; }
|
|
/// <summary>
|
|
/// 导出
|
|
/// </summary>
|
|
/// <param name="values"></param>
|
|
/// <returns></returns>
|
|
private async Task DownDeviceMessageExportAsync(IEnumerable<string> values)
|
|
{
|
|
try
|
|
{
|
|
isDownLoading = true;
|
|
StateHasChanged();
|
|
using var memoryStream = new MemoryStream();
|
|
using StreamWriter writer = new(memoryStream);
|
|
foreach (var item in values)
|
|
{
|
|
writer.WriteLine(item);
|
|
}
|
|
writer.Flush();
|
|
memoryStream.Seek(0, SeekOrigin.Begin);
|
|
using var streamRef = new DotNetStreamReference(stream: memoryStream);
|
|
JSObjectReference ??= await JSRuntime.LoadModuleAsync("js/downloadFileFromStream");
|
|
await JSObjectReference.InvokeVoidAsync("downloadFileFromStream", $"报文日志导出{DateTimeExtensions.CurrentDateTime.ToString("yyyy-MM-dd HH-mm-ss-fff zz")}.txt", streamRef);
|
|
}
|
|
finally
|
|
{
|
|
isDownLoading = false;
|
|
}
|
|
}
|
|
|
|
private IJSObjectReference JSObjectReference;
|
|
|
|
/// <inheritdoc/>
|
|
[Inject]
|
|
protected IJSRuntime JSRuntime { get; set; }
|
|
|
|
/// <summary>
|
|
/// 导出提示
|
|
/// </summary>
|
|
private bool isDownLoading;
|
|
|
|
private bool pauseMessage;
|
|
} |