224 lines
14 KiB
Plaintext
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>
|
|
|
|
|