Files
mapo-iob-man/IOB-MAN/Components/Compo/ApplicationCheck.razor
T
2025-07-24 18:59:00 +02:00

224 lines
14 KiB
Plaintext

<div class="card shadow mb-0">
<div class="card-header">
<div class="d-flex justify-content-between">
<div class="p-0 d-flex">
<div class="px-0 py-0">
<button class="btn btn-sm btn-outline-danger" @onclick="ForceReboot"><i class="fa-solid fa-power-off"></i></button>
</div>
<div class="px-2 py-0">
<div class="mb-0 fw-bold text-uppercase" @onclick="NavAbout">IOB-MAN</div>
<small class="small mb-0"><i class="fa-solid fa-computer"></i> @ComputerName | <i class="fa-solid fa-user"></i> @($"{DomainName}\\{UserName}")</small>
</div>
</div>
<div class="p-0 d-flex small">
<div class="px-0 input-group input-group-sm flex-lg-nowrap me-2">
<button class="btn btn-sm btn-outline-primary text-nowrap" @onclick="DoShowAll" title="Mostra Tutti"><i class="fa-solid fa-eye"></i></button>
<button class="btn btn-sm btn-outline-primary text-nowrap" @onclick="DoHideAll" title="Nascondi Tutti"><i class="fa-solid fa-eye-slash"></i></button>
</div>
<div class="px-0 input-group input-group-sm flex-lg-nowrap me-2">
<span class="input-group-text py-0">
<span class="form-text">Tipo</span>
</span>
<select @bind="@IobTypeSel" class="form-select form-select-sm bg-light text-dark text-start" title="IOB da mostrare" style="width: 10rem;">
<option value="">--- TUTTI ---</option>
@foreach (var item in CurrIobType)
{
<option value="@item">@item</option>
}
</select>
</div>
<div class="px-0 input-group input-group-sm flex-lg-nowrap me-2">
@if (enableKillTask)
{
<button class="btn btn-sm btn-outline-dark text-nowrap @cssBtnCloseAll" @onclick="DoCloseAll" title="Chiudi Tutti"><i class="fa-solid fa-list-check"></i> <i class="fa-solid fa-stop text-danger"></i></button>
<button class="btn btn-sm btn-outline-dark text-nowrap" @onclick="() => DoRestartAll(false)" title="Riavvia Caricati"><i class="fa-solid fa-list-check"></i> <i class="fa-solid fa-play text-success"></i></button>
<button class="btn btn-sm btn-outline-dark text-nowrap" @onclick="() => DoRestartAll(true)" title="Reload Conf + Riavvia Tutti"><i class="fa-solid fa-stop text-danger"></i> <i class="fa-solid fa-sliders"></i> <i class="fa-solid fa-play text-success"></i></button>
}
else
{
<button class="btn btn-sm btn-outline-dark disabled opacity-75" title="Mostra Tutti">Close All</button>
<button class="btn btn-sm btn-outline-dark disabled opacity-75" title="Mostra Tutti">Restart All</button>
<button class="btn btn-sm btn-outline-dark disabled opacity-75" title="Mostra Tutti">Reload + Restart</button>
}
</div>
<div class="px-0 input-group input-group-sm flex-lg-nowrap me-2">
<span class="input-group-text py-0 align-content-center">
<span class="form-check form-switch pe-2 align-content-center">
<label class="form-check-label">Auto Restart</label>
<input class="form-check-input" type="checkbox" @bind="@AutoRestart" title="Auto Restart">
</span>
</span>
@if (!AutoRestart)
{
<input class="form-control text-center" @bind="countAutoRestart" style="width: 4rem;" />
<button class="btn btn-sm btn-outline-primary" @onclick="DelayRestart" title="Ritarda abilitazione automatica al restart processo"><i class="fa-solid fa-plus"></i></button>
}
</div>
<div class="px-0 input-group input-group-sm flex-lg-nowrap">
<span class="input-group-text py-0">
<span class="form-text">Log Level</span>
</span>
<select @bind="@LogLevel" class="form-select bg-light text-dark text-start" title="Livello log" style="width: 6rem;">
@foreach (var item in Enum.GetValues(typeof(CoreEnum.LogLevelIob)))
{
<option value="@item">@item</option>
}
</select>
</div>
</div>
</div>
</div>
<div class="card-body px-2 py-1">
@if (dxMenuVisible)
{
<ul class="list-group small" style="@contextMenuStyle">
@if (selIOB != null && !string.IsNullOrEmpty(selIOB.CodIOB))
{
<button type="button" class="list-group-item list-group-item-action list-group-item-success" @onclick="() => DoStartChild(selIOB)"><i class="fa-solid fa-play me-2 text-success"></i> <b>Restart</b> @selIOB.CodIOB</button>
<button type="button" class="list-group-item list-group-item-action list-group-item-info2" @onclick="IobFolderOpenLog"><i class="fa-solid fa-folder-open me-2"></i> Open <b>LOG</b> Folder</button>
<button type="button" class="list-group-item list-group-item-action list-group-item-secondary2" @onclick="IobFolderOpenConf"><i class="fa-solid fa-folder-open me-2"></i> Open <b>CONF</b> Folder</button>
<button type="button" class="list-group-item list-group-item-action list-group-item-success2" @onclick="IobFolderOpenApp"><i class="fa-solid fa-folder-open me-2"></i> Open <b>APP</b> Folder</button>
<li class="list-group-item list-group-item-primary" @onclick="() => OpenFLForm()"><i class="fa-solid fa-gear me-2"></i> @selIOB.CodIOB | Pareto FluxLog + Config</li>
<button type="button" class="list-group-item list-group-item-action list-group-item-danger" @onclick="() => DoCloseChild(selIOB)"><i class="fa-solid fa-stop me-2 text-danger"></i> <b>Close</b> @selIOB.CodIOB</button>
}
@* else
{
<button type="button" class="list-group-item list-group-item-action list-group-item-success disabled"><i class="fa-solid fa-play me-2 text-success"></i> <b>Restart</b> IOB</button>
<button type="button" class="list-group-item list-group-item-action list-group-item-info2 disabled"><i class="fa-solid fa-folder-open me-2"></i> Open <b>LOG</b> Folder</button>
<button type="button" class="list-group-item list-group-item-action list-group-item-secondary2 disabled"><i class="fa-solid fa-folder-open me-2"></i> Open <b>CONF</b> Folder</button>
<button type="button" class="list-group-item list-group-item-action list-group-item-success2 disabled"><i class="fa-solid fa-folder-open me-2"></i> Open <b>APP</b> Folder</button>
<li class="list-group-item list-group-item-primary disabled"><i class="fa-solid fa-gear me-2"></i> IOB | Pareto FluxLog + Config</li>
<button type="button" class="list-group-item list-group-item-action list-group-item-danger disabled"><i class="fa-solid fa-stop me-2 text-danger"></i> <b>Close</b> IOB</button>
} *@
</ul>
}
<table class="table table-striped table-sm table-hover shadow border mb-0">
<thead>
<tr class="bg-dark bg-gradient text-light">
<th></th>
<th>IOB</th>
<th>Prog</th>
<th>Tipo</th>
<th>pID</th>
@* <th>Started</th> *@
<th>Uptime</th>
<th class="">Run | PLC | Online</th>
<th class="text-end">Pz.IOB</th>
<th class="text-end">Pz.CNC</th>
<th class="text-end">Ev</th>
<th class="text-end">FL</th>
<th class="text-end">FL/h</th>
<th class="text-end">Data IN</th>
<th class="text-end">Last PLC Read</th>
<th class="text-end">Exe</th>
<th></th>
</tr>
</thead>
<tbody>
@if (ListRecords == null || ListRecords.Count == 0)
{
<tr>
<td colspan="19">
@if (isLoading)
{
<EgwCoreLib.Razor.LoadingData DisplaySize="EgwCoreLib.Razor.LoadingData.CtrlSize.Small"></EgwCoreLib.Razor.LoadingData>
}
else
{
<div class="alert alert-warning">Nessun IOB Configurato/Avviato!</div>
}
</td>
</tr>
}
else
{
@foreach (var item in ListRecords)
{
<tr @oncontextmenu="(e => RightClick(e, item))" @ondblclick="() => DoShowChild(item)" class="small2 py-0 my-0">
<td>
@if (item.isRunning)
{
<button class="btn btn-sm btn-primary py-0 px-1" style="font-size: 0.65rem;"><i class="fa-solid fa-play"></i></button>
}
else
{
<button class="btn btn-sm btn-outline-success py-0 px-1" style="font-size: 0.65rem;" @onclick="() => DoStartChild(item)"><i class="fa-solid fa-play"></i></button>
}
</td>
<td class="@CssClassIob(item)">@item.CodIOB</td>
<td class="@CssClassIob(item)">@item.TgtName</td>
<td class="@CssClassIob(item)">@item.IobType</td>
<td class="@CssClassIob(item)">@item.pID</td>
@* <td title="@item.startTime">@item.startTime.ToString("HH:mm:ss")</td> *@
<td title="Started at @item.startTime">@item.uptime</td>
<td>
@if (item.isRunning)
{
<i class="fa-solid fa-power-off text-success fs-6 mx-2"></i>
}
else
{
<i class="fa-solid fa-power-off text-danger fs-6 mx-2"></i>
}
@if (item.plcOk)
{
<i class="fa-solid fa-arrow-right-arrow-left text-success mx-2 fs-6"></i>
}
else
{
<i class="fa-solid fa-arrow-right-arrow-left text-secondary mx-2 fs-6 opacity-50"></i>
}
@if (item.iobOnline)
{
<i class="fa-solid fa-network-wired text-success mx-2 fs-6"></i>
}
else
{
<i class="fa-solid fa-network-wired text-secondary mx-2 fs-6 opacity-50"></i>
}
</td>
<td class="text-end">@item.iobCounter</td>
<td class="text-end">@item.cncCounter</td>
<td class="text-end">@item.queueElLen</td>
<td class="text-end">@item.queueFlLen</td>
<td class="text-end">@item.sentFlHour</td>
<td class="text-end">@item.readBandwith</td>
<td class="text-end" title="@item.lastPlcRead">@item.lastPlcRead.ToString("HH:mm:ss")</td>
<td class="text-end">@item.ExeName</td>
<td>
@if (item.isRunning)
{
<button class="btn btn-sm btn-danger py-0 px-1" style="font-size: 0.65rem;" @onclick="() => DoCloseChild(item)"><i class="fa-solid fa-stop"></i></button>
}
else
{
<button class="btn btn-sm btn-outline-secondary py-0 px-1" style="font-size: 0.65rem;"><i class="fa-solid fa-stop"></i></button>
}
</td>
</tr>
}
}
</tbody>
<tfoot>
<tr class="bg-dark bg-gradient text-light">
<td colspan="19" class="text-end">
<div class="d-flex justify-content-between">
<div class="px-1">Processi | Adapter: <b>@NumTypeConfig</b></div>
<div class="px-1">
IOB | Configurati <span class="fw-bold fs-6" style="filter: brightness(1.5);">@NumProcConfig</span> | Avviati <span class="fw-bold @cssProcAvviati fs-6" style="filter: brightness(1.5);">@NumProcStarted</span> | Attivi <span class="fw-bold @cssProcAttivi fs-6" style="filter: brightness(1.5);">@NumProcRunning</span>
</div>
</div>
</td>
</tr>
</tfoot>
</table>
</div>
<div class="card-footer py-0 align-middle">
<EgwCoreLib.Razor.DataPager PageSize="@numRecord" currPage="@currPage" numRecordChanged="SetNumRec" numPageChanged="SetPage" totalCount="@totalCount" showLoading="@isLoading" PageSizeList="@PageSizeDispl"></EgwCoreLib.Razor.DataPager>
</div>
</div>