Merge branch 'Release/MpTab_DP_01'

This commit is contained in:
Samuele Locatelli
2025-03-13 12:44:55 +01:00
35 changed files with 803 additions and 287 deletions
+38 -28
View File
@@ -2,6 +2,7 @@ using global::Microsoft.AspNetCore.Components;
using MP.Data.DbModels;
using MP.Data.Services;
using MP_TAB3.Shared;
using NLog;
using System;
using System.Reflection.Metadata;
@@ -61,47 +62,56 @@ namespace MP_TAB3.Components
return answ;
}
}
private static Logger Log = LogManager.GetCurrentClassLogger();
protected override async Task OnParametersSetAsync()
{
// inizilamente riporto machcina corrente da MSE
if (RecMSE == null)
try
{
IdxMaccSel = "";
}
else
{
if (string.IsNullOrEmpty(idxMaccSel))
// inizilamente riporto macchina corrente da MSE
if (RecMSE == null)
{
// verifico se la macchina sia configurata tra le MSFD...
if (SMServ.DictMacchMulti.ContainsKey(RecMSE.IdxMacchina))
IdxMaccSel = "";
Log.Error("Impossibile selezionare: recMSE è nullo");
}
else
{
if (string.IsNullOrEmpty(idxMaccSel))
{
isMulti = SMServ.DictMacchMulti[RecMSE.IdxMacchina] == 1;
}
if (isMulti)
{
var listMulti = await TDataService.VMSFDGetAll();
ListMacchine = listMulti
.Where(x => x.IdxMacchina.Contains($"{RecMSE.IdxMacchina}#"))
.ToDictionary(x => x.IdxMacchina, x => x.CodMaccArticolo);
if (ListMacchine.Count > 0)
// verifico se la macchina sia configurata tra le MSFD...
if (SMServ.DictMacchMulti.ContainsKey(RecMSE.IdxMacchina))
{
// cerco se ho in storage la macchina selezionata...
var idxMSel = MsgServ.UserPrefGet(idxMaccCurr);
if (!string.IsNullOrEmpty(idxMSel))
isMulti = SMServ.DictMacchMulti[RecMSE.IdxMacchina] == 1;
}
if (isMulti)
{
var listMulti = await TDataService.VMSFDGetAll();
ListMacchine = listMulti
.Where(x => x.IdxMacchina.Contains($"{RecMSE.IdxMacchina}#"))
.ToDictionary(x => x.IdxMacchina, x => x.CodMaccArticolo);
if (ListMacchine.Count > 0)
{
IdxMaccSel = idxMSel;
}
else
{
IdxMaccSel = ListMacchine.FirstOrDefault().Key;
// cerco se ho in storage la macchina selezionata...
var idxMSel = MsgServ.UserPrefGet(idxMaccCurr);
if (!string.IsNullOrEmpty(idxMSel))
{
IdxMaccSel = idxMSel;
}
else
{
IdxMaccSel = ListMacchine.FirstOrDefault().Key;
}
}
}
}
}
}
catch (Exception exc)
{
Log.Error($"Errore in MachSel.OnParametersSetAsync{Environment.NewLine}{exc}");
}
await Task.Delay(1);
}
+20 -17
View File
@@ -160,14 +160,16 @@ else
<div class="px-0">
Cicli Prod
</div>
@if (datiProdAct != null)
{
<div class="px-0">@($"{datiProdAct.PzTotODL}")</div>
}
else
{
<div class="px-0">@($"{CRecMSE.PezziProd}")</div>
}
<div class="px-0 fs-4">
@if (datiProdAct != null)
{
@($"{datiProdAct.PzTotODL}")
}
else
{
@($"{CRecMSE.PezziProd}")
}
</div>
</div>
@if (datiProdAct != null)
{
@@ -177,7 +179,7 @@ else
<div class="px-0">
Da Conferm.
</div>
<div class="px-0">
<div class="px-0 fs-5">
@($"{datiProdAct.Pz2RecTot}")
</div>
</div>
@@ -188,7 +190,7 @@ else
<div class="px-0">
Da Conferm.
</div>
<div class="px-0">
<div class="px-0 fs-5">
@($"{datiProdAct.Pz2RecTot}")
</div>
</div>
@@ -199,17 +201,18 @@ else
<div class="px-0">
Scarti Versati
</div>
<div class="px-0">
<div class="px-0 fs-5">
@($"{NumScartiConf}")
</div>
</div>
}
else{
else
{
<div class="fs-5 text-end text-secondary d-flex justify-content-between">
<div class="px-0">
Scarti Versati
</div>
<div class="px-0">
<div class="px-0 fs-5">
@($"{NumScartiConf}")
</div>
</div>
@@ -220,7 +223,7 @@ else
<div class="px-0">
Rilav Versati
</div>
<div class="px-0">
<div class="px-0 fs-5">
@($"{datiProdAct.PzConfRilav}")
</div>
</div>
@@ -231,7 +234,7 @@ else
<div class="px-0">
Rilav Versati
</div>
<div class="px-0">
<div class="px-0 fs-5">
@($"{datiProdAct.PzConfRilav}")
</div>
</div>
@@ -240,7 +243,7 @@ else
<div class="px-0">
Buoni Vers.
</div>
<div class="px-0">
<div class="px-0 fs-5">
@($"{datiProdAct.PzConfBuoni}")
</div>
</div>
@@ -251,7 +254,7 @@ else
<div class="px-0">
Extra
</div>
<div class="px-0">@($"{CRecMSE.extraVal}")</div>
<div class="px-0 fs-5">@($"{CRecMSE.extraVal}")</div>
</div>
}
</div>
+1 -1
View File
@@ -3,7 +3,7 @@
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<Version>6.16.2503.1009</Version>
<Version>6.16.2503.1309</Version>
<ImplicitUsings>enable</ImplicitUsings>
<RootNamespace>MP_TAB3</RootNamespace>
</PropertyGroup>
+1 -1
View File
@@ -1,6 +1,6 @@
<body>
<i>Modulo MAPOSPEC </i>
<h4>Versione: 6.16.2503.1009</h4>
<h4>Versione: 6.16.2503.1309</h4>
<br /> Note di rilascio:
<ul>
<li>
+1 -1
View File
@@ -1 +1 @@
6.16.2503.1009
6.16.2503.1309
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<item>
<version>6.16.2503.1009</version>
<version>6.16.2503.1309</version>
<url>https://nexus.steamware.net/repository/SWS/MP-TAB3/stable/LAST/MP-TAB3.zip</url>
<changelog>https://nexus.steamware.net/repository/SWS/MP-TAB3/stable/LAST/ChangeLog.html</changelog>
<mandatory>false</mandatory>
+12 -4
View File
@@ -136,11 +136,19 @@ article {
}
/* gestione override font size */
* {
font-size: 16px;
font-size: 15px;
}
@media (max-width: 639.98px) {
@media (max-width: 450.98) {
* {
font-size: 12px;
font-size: 14px;
}
.longStopListNotes {
max-height: 120px;
}
}
@media (max-width: 601.98px) {
* {
font-size: 16px;
}
.longStopListNotes {
max-height: 120px;
@@ -148,7 +156,7 @@ article {
}
@media (max-width: 800px) {
* {
font-size: 14px;
font-size: 18px;
}
.top-row:not(.auth) {
display: none;
+15 -4
View File
@@ -155,12 +155,23 @@ a, .btn-link {
/* gestione override font size */
* {
font-size: 16px;
font-size: 15px;
}
@media (max-width: 639.98px) {
@media (max-width: 450.98) {
* {
font-size: 12px;
font-size: 14px;
}
.longStopListNotes {
max-height: 120px;
}
}
@media (max-width: 601.98px) {
* {
font-size: 16px;
}
.longStopListNotes {
max-height: 120px;
@@ -169,7 +180,7 @@ a, .btn-link {
@media (max-width: 800px) {
* {
font-size: 14px;
font-size: 18px;
}
.top-row:not(.auth) {
display: none;
+1 -1
View File
@@ -1 +1 @@
@import url('open-iconic/font/css/open-iconic-bootstrap.min.css');html,body{font-family:'Open Sans Condensed',sans-serif;background-color:#151321;color:#ededed;}.cardObj{border-radius:.375rem;background:linear-gradient(121deg,rgba(255,255,255,.2) -.71%,rgba(255,255,255,.05) 97.66%);box-shadow:0 4px 24px -1px rgba(0,0,0,.25);flex-shrink:0;}.cardObjNoBL{border-radius:.375rem 0 0 .375rem;background:linear-gradient(121deg,rgba(255,255,255,.2) -.71%,rgba(255,255,255,.05) 97.66%);box-shadow:0 4px 24px -1px rgba(0,0,0,.25);flex-shrink:0;}.cardFullHeight{border-radius:.375rem;background:linear-gradient(121deg,rgba(255,255,255,.2) -.71%,rgba(255,255,255,.05) 97.66%);box-shadow:0 4px 24px -1px rgba(0,0,0,.25);flex-shrink:0;height:100%;}.longStopListNotes{height:100%;}.borderStd{border-radius:.375rem;}.table-dark{--bs-table-color:#fff;--bs-table-bg:transparent;--bs-table-border-color:#4d5154;--bs-table-striped-bg:#2c3034;--bs-table-striped-color:#fff;--bs-table-active-bg:#373b3e;--bs-table-active-color:#fff;--bs-table-hover-bg:#323539;--bs-table-hover-color:#fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color);}h1:focus{outline:0;}a,.btn-link{color:#0071c1;}.btn-primary{color:#fff;background-color:#1b6ec2;border-color:#1861ac;}.content{padding-top:1.1rem;}.valid.modified:not([type=checkbox]){outline:1px solid #26b050;}.invalid{outline:1px solid #f00;}.validation-message{color:#f00;}#blazor-error-ui{background:#ffffe0;bottom:0;box-shadow:0 -1px 2px rgba(0,0,0,.2);display:none;left:0;padding:.6rem 1.25rem .7rem 1.25rem;position:fixed;width:100%;z-index:1000;}#blazor-error-ui .dismiss{cursor:pointer;position:absolute;right:.75rem;top:.5rem;}.blazor-error-boundary{background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem,#b32121;padding:1rem 1rem 1rem 3.7rem;color:#fff;}.blazor-error-boundary::after{content:"An error has occurred.";}.top-row{background-color:#05173d;justify-content:flex-end;height:3.5rem;display:flex;align-items:center;}.top-row ::deep a,.top-row ::deep .btn-link{white-space:nowrap;text-decoration:none;}.top-row ::deep a:hover,.top-row ::deep .btn-link:hover{text-decoration:underline;}.top-row ::deep a:first-child{overflow:hidden;text-overflow:ellipsis;}.top-row{position:sticky;top:0;z-index:1;}.top-row.auth ::deep a:first-child{flex:1;text-align:right;width:0;}.top-row,article{padding-left:1rem!important;padding-right:.5rem!important;}*{font-size:16px;}@media(max-width:639.98px){*{font-size:12px;}.longStopListNotes{max-height:120px;}}@media(max-width:800px){*{font-size:14px;}.top-row:not(.auth){display:none;}#mainBody{width:100%;}.top-row.auth{justify-content:space-between;}.top-row ::deep a,.top-row ::deep .btn-link{margin-left:0;}}
@import url('open-iconic/font/css/open-iconic-bootstrap.min.css');html,body{font-family:'Open Sans Condensed',sans-serif;background-color:#151321;color:#ededed;}.cardObj{border-radius:.375rem;background:linear-gradient(121deg,rgba(255,255,255,.2) -.71%,rgba(255,255,255,.05) 97.66%);box-shadow:0 4px 24px -1px rgba(0,0,0,.25);flex-shrink:0;}.cardObjNoBL{border-radius:.375rem 0 0 .375rem;background:linear-gradient(121deg,rgba(255,255,255,.2) -.71%,rgba(255,255,255,.05) 97.66%);box-shadow:0 4px 24px -1px rgba(0,0,0,.25);flex-shrink:0;}.cardFullHeight{border-radius:.375rem;background:linear-gradient(121deg,rgba(255,255,255,.2) -.71%,rgba(255,255,255,.05) 97.66%);box-shadow:0 4px 24px -1px rgba(0,0,0,.25);flex-shrink:0;height:100%;}.longStopListNotes{height:100%;}.borderStd{border-radius:.375rem;}.table-dark{--bs-table-color:#fff;--bs-table-bg:transparent;--bs-table-border-color:#4d5154;--bs-table-striped-bg:#2c3034;--bs-table-striped-color:#fff;--bs-table-active-bg:#373b3e;--bs-table-active-color:#fff;--bs-table-hover-bg:#323539;--bs-table-hover-color:#fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color);}h1:focus{outline:0;}a,.btn-link{color:#0071c1;}.btn-primary{color:#fff;background-color:#1b6ec2;border-color:#1861ac;}.content{padding-top:1.1rem;}.valid.modified:not([type=checkbox]){outline:1px solid #26b050;}.invalid{outline:1px solid #f00;}.validation-message{color:#f00;}#blazor-error-ui{background:#ffffe0;bottom:0;box-shadow:0 -1px 2px rgba(0,0,0,.2);display:none;left:0;padding:.6rem 1.25rem .7rem 1.25rem;position:fixed;width:100%;z-index:1000;}#blazor-error-ui .dismiss{cursor:pointer;position:absolute;right:.75rem;top:.5rem;}.blazor-error-boundary{background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem,#b32121;padding:1rem 1rem 1rem 3.7rem;color:#fff;}.blazor-error-boundary::after{content:"An error has occurred.";}.top-row{background-color:#05173d;justify-content:flex-end;height:3.5rem;display:flex;align-items:center;}.top-row ::deep a,.top-row ::deep .btn-link{white-space:nowrap;text-decoration:none;}.top-row ::deep a:hover,.top-row ::deep .btn-link:hover{text-decoration:underline;}.top-row ::deep a:first-child{overflow:hidden;text-overflow:ellipsis;}.top-row{position:sticky;top:0;z-index:1;}.top-row.auth ::deep a:first-child{flex:1;text-align:right;width:0;}.top-row,article{padding-left:1rem!important;padding-right:.5rem!important;}*{font-size:15px;}@media(max-width:450.98){*{font-size:14px;}.longStopListNotes{max-height:120px;}}@media(max-width:601.98px){*{font-size:16px;}.longStopListNotes{max-height:120px;}}@media(max-width:800px){*{font-size:18px;}.top-row:not(.auth){display:none;}#mainBody{width:100%;}.top-row.auth{justify-content:space-between;}.top-row ::deep a,.top-row ::deep .btn-link{margin-left:0;}}
+5 -3
View File
@@ -1,8 +1,10 @@
<div class="row text-light">
<div class="col-5 pe-0 text-left">
<div class="d-flex justify-content-between text-light">
<div class="px-1">
<b>Mapo MON @(DateTime.Today.Year)</b> | <span class="small">v.@version</span>
|
<small class="fontSmall">@Width x @Height</small>
</div>
<div class="col-7 ps-0 text-end">
<div class="px-2">
<span class="small">@($"{DateTime.Now:HH:mm:ss}")</span> | <a class="text-light" href="https://www.egalware.com/" target="_blank"><img class="img-fluid" width="16" src="images/LogoEgw.png" /> Egalware </a>
</div>
</div>
+50 -1
View File
@@ -1,8 +1,11 @@
using Microsoft.AspNetCore.Components;
using Microsoft.JSInterop;
using NLog;
using System;
namespace MP.Mon.Components
{
public partial class CmpFooter:IDisposable
public partial class CmpFooter : IDisposable
{
#region Public Methods
@@ -36,8 +39,46 @@ namespace MP.Mon.Components
#endregion Public Methods
#region Public Classes
public class WindowDimension
{
#region Public Properties
public int Height { get; set; }
public int Width { get; set; }
#endregion Public Properties
}
#endregion Public Classes
#region Protected Properties
[Inject]
protected IJSRuntime JSRuntime { get; set; } = null!;
#endregion Protected Properties
#region Protected Methods
protected async Task getWDim()
{
var dimension = await JSRuntime.InvokeAsync<WindowDimension>("getWindowDimensions");
Height = dimension.Height;
Width = dimension.Width;
}
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
await getWDim();
StateHasChanged();
Log.Debug($"Dimensioni schermo: {Width}x{Height}");
}
}
protected override void OnInitialized()
{
var currAssembly = typeof(Program).Assembly.GetName();
@@ -54,5 +95,13 @@ namespace MP.Mon.Components
private Version version = null!;
#endregion Private Fields
#region Private Properties
private int Height { get; set; } = 0;
private int Width { get; set; } = 0;
#endregion Private Properties
}
}
+128 -64
View File
@@ -4,76 +4,140 @@
}
else
{
<div class="card mb-3 border border-dark rounded rounded-3 shadow">
<div class="card-body @cssStatus(CurrRecord.Semaforo) bg-gradient text-white p-1">
<div class="card-title text-uppercase text-center fs-4 mb-0">@CurrRecord.Nome</div>
<div class="bg-light bg-gradient text-dark px-1 rounded shadow small lh-sm py-1">
<div class="card-text d-flex justify-content-between small">
<div class="px-1">
ART:
</div>
<div class="px-1">
@if (showArt == "CodArticolo")
{
<span>@CurrRecord.CodArticolo</span>
}
else
{
if (string.IsNullOrEmpty(CurrRecord.Disegno))
{
<span>[@CurrRecord.CodArticolo]</span>
}
else
{
<span>@CurrRecord.Disegno</span>
}
}
</div>
<div class="card mb-1 border border-dark rounded rounded-3 shadow bg-dark">
<div class="card-body @cssStatus(CurrRecord.Semaforo, doAnimate) bg-gradient text-white p-1">
<div class="bg-dark text-white opacity-75 px-1 rounded shadow small lh-sm py-0 my-0">
<div class="card-title text-uppercase bg-dark text-center py-0 my-0 fs-3 text-truncate">
@CurrRecord.Nome
</div>
<div class="card-text d-flex justify-content-between small">
<div class="px-1">
PODL:
</div>
<div class="px-1">
@(CurrRecord.IdxPOdl > 0 ? $"{CurrRecord.IdxPOdl:00000000}" : "-")
</div>
</div>
<div class="card-text d-flex justify-content-between small">
<div class="px-1">
ODL:
</div>
<div class="px-1">
@(CurrRecord.IdxOdl > 0 ? $"{CurrRecord.IdxOdl:00000000}" : "-")
</div>
<div class="bg-dark text-white opacity-100 bg-gradient px-1 rounded shadow small lh-sm py-0">
@if (hasRow(1))
{
<div class="card-text d-flex justify-content-between small lh-sm">
@foreach (var item in rowValues(1))
{
<div class="px-0 @item.TagCss">@item.TagName: <b>@currVal(item.TagLocation)</b></div>
}
</div>
}
else
{
<div class="card-text d-flex justify-content-between small lh-sm">
<div class="px-1">
ART:
</div>
<div class="px-1">
@if (showArt == "CodArticolo")
{
<span>@CurrRecord.CodArticolo</span>
}
else
{
if (string.IsNullOrEmpty(CurrRecord.Disegno))
{
<span>[@CurrRecord.CodArticolo]</span>
}
else
{
<span>@CurrRecord.Disegno</span>
}
}
</div>
</div>
}
@if (hasRow(2))
{
<div class="d-flex ui-subtitle justify-content-between py-0 px-1">
@foreach (var item in rowValues(2))
{
<div class="px-1 @item.TagCss">@item.TagName: <b>@currVal(item.TagLocation)</b></div>
}
</div>
}
else
{
<div class="card-text d-flex justify-content-between small lh-sm">
<div class="px-1">
PODL:
</div>
<div class="px-1">
@(CurrRecord.IdxPOdl > 0 ? $"{CurrRecord.IdxPOdl:00000000}" : "-")
</div>
</div>
<div class="card-text d-flex justify-content-between small lh-sm">
<div class="px-1">
ODL:
</div>
<div class="px-1">
@(CurrRecord.IdxOdl > 0 ? $"{CurrRecord.IdxOdl:00000000}" : "-")
</div>
</div>
}
@if (hasRow(3))
{
<div class="d-flex justify-content-between small lh-sm">
@foreach (var item in rowValues(4))
{
<div class="px-1 @item.TagCss">@item.TagName: <b>@currVal(item.TagLocation)</b></div>
}
</div>
}
else
{
<div class="d-flex justify-content-between small lh-sm">
<div class="px-1 pe-0">TC. Act</div>
<div class="px-1 ps-0">@getMinSec(@CurrRecord.TCLavRT) <small>[@getMinSec(@CurrRecord.TCAssegnato)]</small></div>
</div>
}
</div>
</div>
<div class="card-text text-light bg-dark bg-gradient rounded py-1 shadow my-1">
<div class=" d-flex justify-content-between text-warning small">
<div class="px-1 text-uppercase">@CurrRecord.DescrizioneStato</div>
<div class="px-1">@getMinSec(getDecimal(@CurrRecord.Durata))</div>
</div>
<div class="d-flex justify-content-around fs-5">
<div class="px-1">
@CurrRecord.PezziProd / @CurrRecord.NumPezzi
</div>
</div>
</div>
@* <div class="shadow bg-light rounded p-1">
<div class="progress bg-secondary " role="progressbar" aria-valuenow="75" aria-valuemin="0" aria-valuemax="100" style="height: 10px">
<div class="progress-bar progress-bar-striped progress-bar-animated bg-success" style="width: 50%"></div>
<div class="progress-bar progress-bar-striped progress-bar-animated bg-warning" style="width: 25%"></div>
</div>
</div> *@
</div>
<div class="card-footer p-0 text-opacity-50 small" style="font-size: 0.7rem;">
<div class="d-flex justify-content-between @cssComStatus(CurrRecord.Semaforo, CurrRecord.LastUpdate)">
@if (showComErr(CurrRecord.LastUpdate))
<div class="card-text text-light bg-dark bg-gradient rounded py-1 shadow mt-1 mb-0">
@if (hasRow(4))
{
<div class="px-1 text-warning">
<b>C.101</b>
<div class="d-flex justify-content-between py-0 mt-1 px-1">
@foreach (var item in rowValues(3))
{
<div class="px-1 @item.TagCss">@item.TagName: <b>@currVal(item.TagLocation)</b></div>
}
</div>
}
<div class="px-1 text-end text-light">
else
{
<div class=" d-flex justify-content-between text-warning small w-100">
<div class="px-1 text-uppercase d-inline-block @textCss(@CurrRecord.DescrizioneStato)">
<span>@CurrRecord.DescrizioneStato</span>
</div>
<div class="px-1">@getMinSec(getDecimal(@CurrRecord.Durata))</div>
</div>
}
@if (hasRow(5))
{
<div class="d-flex justify-content-between py-0 px-1">
@foreach (var item in rowValues(5))
{
<div class="px-1 @item.TagCss">@item.TagName: <b>@currVal(item.TagLocation)</b></div>
}
</div>
}
else
{
<div class="d-flex justify-content-around fs-5">
<div class="px-1">
<span class="text-light">@CurrRecord.PezziProd</span> / <span class="text-light">@CurrRecord.NumPezzi</span>
</div>
</div>
}
</div>
</div>
<div class="card-footer px-1 pb-1 pt-0 small @cssStatus(CurrRecord.Semaforo, false)" style="font-size: 0.7rem;">
<div class="d-flex text-white justify-content-between @cssComStatus(CurrRecord.Semaforo, CurrRecord.LastUpdate)">
<div class="px-1 @textC101(CurrRecord.LastUpdate)">
@if (showComErr(CurrRecord.LastUpdate))
{
<b>C.101</b>
}
</div>
<div class="px-1 text-end text-light text-truncate">
@CurrRecord.LastUpdate
</div>
</div>
+155 -25
View File
@@ -2,6 +2,7 @@ using Microsoft.AspNetCore.Components;
using MP.Data.Conf;
using MP.Data.DbModels;
using Org.BouncyCastle.Asn1;
using static Org.BouncyCastle.Math.EC.ECCurve;
namespace MP.Mon.Components
{
@@ -40,23 +41,135 @@ namespace MP.Mon.Components
#region Protected Properties
[Inject]
protected IConfiguration config { get; set; } = null!;
protected bool dataLoaded { get; set; } = true;
#endregion Protected Properties
#region Private Methods
#region Protected Methods
private decimal getDecimal(object? rawData)
/// <summary>
/// restituisce il valore data la tagLocation
/// </summary>
/// <param name="tagLocation"></param>
/// <returns></returns>
protected string currVal(string tagLocation)
{
decimal answ = 0;
if (rawData != null)
string answ = "";
if (currTagVal.ContainsKey(tagLocation))
{
decimal.TryParse($"{rawData}", out answ);
answ = currTagVal[tagLocation];
}
return answ;
}
private string cssStatus(string codSemaforo)
/// <summary>
/// Verifica se ci sia un override per la riga indicata
/// </summary>
/// <param name="numRow"></param>
/// <returns></returns>
protected bool hasRow(int numRow)
{
bool answ = false;
if (currTagConf != null)
{
if (currTagConf.Count > 0)
{
var currVals = rowValues(numRow);
answ = currVals.Count > 0;
}
}
return answ;
}
protected override void OnInitialized()
{
maxChar4Scroll = config.GetValue<int>("ServerConf:maxChar4Scroll");
}
/// <summary>
/// Restituisce (se presenti) valori di override per la riga indicata
/// </summary>
/// <param name="numRow"></param>
/// <returns></returns>
protected List<TagData> rowValues(int numRow)
{
List<TagData>? rowVals = null;
if (currTagConf != null)
{
if (currTagConf.Count > 0)
{
//cerco solo la riga corrente...
rowVals = currTagConf.Where(x => x.RowNum == numRow).ToList();
}
}
if (rowVals == null)
{
rowVals = new List<TagData>();
}
return rowVals;
}
/// <summary>
/// CSS class x testo (se descr lunga scorre...)
/// </summary>
protected string textCss(string currText)
{
string answ = "text-nowrap2 text-truncate w-100";
if (currText.Length > maxChar4Scroll)
{
// calcolo delta... a-b-c con 5-10-oltre
int delta = currText.Length - maxChar4Scroll;
if (delta < 5)
{
answ = " scroll-left-a";
}
else if (delta < 10)
{
answ = " scroll-left-b";
}
else
{
answ = " scroll-left-c";
}
}
return answ;
}
#endregion Protected Methods
#region Private Fields
private int maxChar4Scroll = 20;
#endregion Private Fields
#region Private Methods
private string cssComStatus(string semaforo, DateTime? lastUpdateN)
{
DateTime lastUpdate = lastUpdateN.HasValue ? (DateTime)lastUpdateN : DateTime.Now.AddHours(-1);
string answ = "bg-dark opacity-75"; cssStatus(semaforo, false);
if (DateTime.Now.Subtract(lastUpdate).TotalSeconds > (keepAliveMin * kaFactor))
{
answ = $"bg-danger";
// blink se secondo pari...
#if false
DateTime adesso = DateTime.Now;
int resto = 0;
Math.DivRem(adesso.Second, 2, out resto);
if (resto == 0)
{
answ += " opacity-100";
}
#endif
}
return answ;
}
private string cssStatus(string codSemaforo, bool animate)
{
string answ = "";
// se vuoto --> mostra nero!
@@ -69,51 +182,49 @@ namespace MP.Mon.Components
{
case "sVe":
answ = "bg-success";
doAnimate = false;
animate = false;
break;
case "sGi":
answ = "bg-warning";
break;
case "sGr":
answ = "bg-dark opacity-75";
doAnimate = false;
answ = "bg-dark opacity-50";
animate = false;
break;
case "sRo":
answ = "bg-danger";
break;
case "sBl":
answ = "bg-primary";
break;
case "sNe":
answ = "bg-dark";
break;
default:
break;
}
if (doAnimate)
if (animate)
{
if (doBlink)
{
answ += " opacity-75";
answ += " opacity-50";
}
}
return answ;
}
private string cssComStatus(string semaforo, DateTime? lastUpdateN)
private decimal getDecimal(object? rawData)
{
DateTime lastUpdate = lastUpdateN.HasValue ? (DateTime)lastUpdateN : DateTime.Now.AddHours(-1);
string answ = cssStatus(semaforo);
if (DateTime.Now.Subtract(lastUpdate).TotalSeconds > (keepAliveMin * kaFactor))
decimal answ = 0;
if (rawData != null)
{
answ = $"bg-danger";
// blink se secondo pari...
DateTime adesso = DateTime.Now;
int resto = 0;
Math.DivRem(adesso.Second, 2, out resto);
if (resto == 0)
{
answ += " opacity-75";
}
decimal.TryParse($"{rawData}", out answ);
}
return answ;
}
@@ -132,7 +243,7 @@ namespace MP.Mon.Components
}
else
{
answ = $"{tSpan.TotalHours:N0}h {tSpan:mm}:{tSpan:ss}";
answ = $"{tSpan.TotalHours:00}:{tSpan:mm}:{tSpan:ss}";
}
}
catch
@@ -151,6 +262,25 @@ namespace MP.Mon.Components
return answ;
}
private string textC101(DateTime? lastUpdateN)
{
DateTime lastUpdate = lastUpdateN.HasValue ? (DateTime)lastUpdateN : DateTime.Now.AddHours(-1);
string answ = "text-light";
if (DateTime.Now.Subtract(lastUpdate).TotalSeconds > (keepAliveMin * kaFactor))
{
// blink se secondo pari...
DateTime adesso = DateTime.Now;
int resto = 0;
Math.DivRem(adesso.Second, 2, out resto);
if (resto == 1)
{
answ = $"text-danger";
//answ += " opacity-100";
}
}
return answ;
}
#endregion Private Methods
}
}
+83
View File
@@ -0,0 +1,83 @@
/* gestione scroll testo A: 100% */
.scroll-left,
.scroll-left-a,
.scroll-left-b,
.scroll-left-c {
height: 1.5em;
overflow: hidden;
position: relative;
width: 100%;
white-space: nowrap;
}
.scroll-left span,
.scroll-left-a span,
.scroll-left-b span,
.scroll-left-c span {
/*display: inline-block;*/
position: absolute;
width: 100%;
height: 100%;
margin: 0;
line-height: 1.5em;
/* Starting position */
-moz-transform: translateX(0%);
-webkit-transform: translateX(0%);
transform: translateX(0%);
}
/* gestione scroll testo A: 90% */
.scroll-left-a span {
/* Apply animation to this element */
-moz-animation: scroll-left-a 10s ease infinite;
-webkit-animation: scroll-left-a 10s ease infinite;
animation: scroll-left-a 10s ease infinite;
}
/* Move it (define the animation) */
@keyframes scroll-left-a {
0% {
transform: translateX(0%);
}
30% {
transform: translateX(0%);
}
90% {
transform: translateX(-90%);
}
}
/* gestione scroll testo B: 100% */
.scroll-left-b span {
/* Apply animation to this element */
-moz-animation: scroll-left-b 10s ease infinite;
-webkit-animation: scroll-left-b 10s ease infinite;
animation: scroll-left-b 10s ease infinite;
}
/* Move it (define the animation) */
@keyframes scroll-left-b {
0% {
transform: translateX(0%);
}
30% {
transform: translateX(0%);
}
90% {
transform: translateX(-120%);
}
}
/* gestione scroll testo C: 150% */
.scroll-left-c span {
/* Apply animation to this element */
-moz-animation: scroll-left-c 10s ease infinite;
-webkit-animation: scroll-left-c 10s ease infinite;
animation: scroll-left-c 10s ease infinite;
}
/* Move it (define the animation) */
@keyframes scroll-left-c {
0% {
transform: translateX(0%);
}
30% {
transform: translateX(0%);
}
90% {
transform: translateX(-150%);
}
}
+104
View File
@@ -0,0 +1,104 @@
/* gestione scroll testo A: 100% */
.scroll-left {
height: 1.5em;
overflow: hidden;
position: relative;
width: 100%;
white-space: nowrap;
}
.scroll-left span {
/*display: inline-block;*/
position: absolute;
width: 100%;
height: 100%;
margin: 0;
line-height: 1.5em;
/* Starting position */
-moz-transform: translateX(0%);
-webkit-transform: translateX(0%);
transform: translateX(0%);
}
/* gestione scroll testo A: 90% */
.scroll-left-a {
&:extend(.scroll-left);
}
.scroll-left-a span {
&:extend(.scroll-left span);
/* Apply animation to this element */
-moz-animation: scroll-left-a 10s ease infinite;
-webkit-animation: scroll-left-a 10s ease infinite;
animation: scroll-left-a 10s ease infinite;
}
/* Move it (define the animation) */
@keyframes scroll-left-a {
0% {
transform: translateX(0%);
}
30% {
transform: translateX(0%);
}
90% {
transform: translateX(-90%);
}
}
/* gestione scroll testo B: 100% */
.scroll-left-b {
&:extend(.scroll-left);
}
.scroll-left-b span {
&:extend(.scroll-left span);
/* Apply animation to this element */
-moz-animation: scroll-left-b 10s ease infinite;
-webkit-animation: scroll-left-b 10s ease infinite;
animation: scroll-left-b 10s ease infinite;
}
/* Move it (define the animation) */
@keyframes scroll-left-b {
0% {
transform: translateX(0%);
}
30% {
transform: translateX(0%);
}
90% {
transform: translateX(-120%);
}
}
/* gestione scroll testo C: 150% */
.scroll-left-c {
&:extend(.scroll-left);
}
.scroll-left-c span {
&:extend(.scroll-left span);
/* Apply animation to this element */
-moz-animation: scroll-left-c 10s ease infinite;
-webkit-animation: scroll-left-c 10s ease infinite;
animation: scroll-left-c 10s ease infinite;
}
/* Move it (define the animation) */
@keyframes scroll-left-c {
0% {
transform: translateX(0%);
}
30% {
transform: translateX(0%);
}
90% {
transform: translateX(-150%);
}
}
+1
View File
@@ -0,0 +1 @@
.scroll-left,.scroll-left-a,.scroll-left-b,.scroll-left-c{height:1.5em;overflow:hidden;position:relative;width:100%;white-space:nowrap;}.scroll-left span,.scroll-left-a span,.scroll-left-b span,.scroll-left-c span{position:absolute;width:100%;height:100%;margin:0;line-height:1.5em;-moz-transform:translateX(0%);-webkit-transform:translateX(0%);transform:translateX(0%);}.scroll-left-a span{-moz-animation:scroll-left-a 10s ease infinite;-webkit-animation:scroll-left-a 10s ease infinite;animation:scroll-left-a 10s ease infinite;}@keyframes scroll-left-a{0%{transform:translateX(0%);}30%{transform:translateX(0%);}90%{transform:translateX(-90%);}}.scroll-left-b span{-moz-animation:scroll-left-b 10s ease infinite;-webkit-animation:scroll-left-b 10s ease infinite;animation:scroll-left-b 10s ease infinite;}@keyframes scroll-left-b{0%{transform:translateX(0%);}30%{transform:translateX(0%);}90%{transform:translateX(-120%);}}.scroll-left-c span{-moz-animation:scroll-left-c 10s ease infinite;-webkit-animation:scroll-left-c 10s ease infinite;animation:scroll-left-c 10s ease infinite;}@keyframes scroll-left-c{0%{transform:translateX(0%);}30%{transform:translateX(0%);}90%{transform:translateX(-150%);}}
+1 -1
View File
@@ -4,7 +4,7 @@
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<Version>6.16.2503.1207</Version>
<Version>6.16.2503.1306</Version>
</PropertyGroup>
<ItemGroup>
+12 -35
View File
@@ -35,13 +35,18 @@ else
mseIdx++;
if (currMse != null)
{
<div class="col p-0">
<DetailMSE CurrRecord="@currMse" currTagConf="@getIobTag(currMse.IdxMacchina)" currTagVal="@getTagVal(currMse.IdxMacchina)" doAnimate="@doAnimate" keepAliveMin="@keepAliveMin" showArt="@showArt" doBlink="@doBlink"></DetailMSE>
</div>
@* <div class="col p-0">
<DetailViewMSE CurrRecord="@currMse" currTagConf="@getIobTag(currMse.IdxMacchina)" currTagVal="@getTagVal(currMse.IdxMacchina)" doAnimate="@doAnimate" keepAliveMin="@keepAliveMin" showArt="@showArt" doBlink="@doBlink"></DetailViewMSE>
</div> *@
if (newDisplay)
{
<div class="col p-0">
<DetailViewMSE CurrRecord="@currMse" currTagConf="@getIobTag(currMse.IdxMacchina)" currTagVal="@getTagVal(currMse.IdxMacchina)" doAnimate="@doAnimate" keepAliveMin="@keepAliveMin" showArt="@showArt" doBlink="@doBlink"></DetailViewMSE>
</div>
}
else
{
<div class="col p-0">
<DetailMSE CurrRecord="@currMse" currTagConf="@getIobTag(currMse.IdxMacchina)" currTagVal="@getTagVal(currMse.IdxMacchina)" doAnimate="@doAnimate" keepAliveMin="@keepAliveMin" showArt="@showArt" doBlink="@doBlink"></DetailMSE>
</div>
}
}
else
{
@@ -51,32 +56,4 @@ else
</div>
}
@* <div class="row statusMap mx-1 my-1">
@{
int currIdx = 0;
foreach (var recordIob in ListMSE)
{
<div class="col machBlock ">
<DetailMSE CurrRecord="@recordIob" currTagConf="@getIobTag(recordIob.IdxMacchina)" currTagVal="@getTagVal(recordIob.IdxMacchina)" doAnimate="@doAnimate" keepAliveMin="@keepAliveMin" showArt="@showArt" doBlink="@doBlink"></DetailMSE>
</div>
currIdx++;
if (currIdx >= maxCol)
{
currIdx = 0;
@((MarkupString)"</div><div class=\"row statusMap mx-1 my-1\">")
;
}
}
// controllo se devo "chiudere riga...
int currNum = (currIdx % maxCol);
while (currNum < (maxCol))
{
@((MarkupString)"<div class=\"col machBlock\">&nbsp;</div>")
;
currNum++;
}
}
</div> *@
}
+22
View File
@@ -51,6 +51,7 @@ namespace MP.Mon.Pages
protected int fastRefreshMs = 1000;
protected int keepAliveMin = 1;
protected int maxCol = 6;
protected bool newDisplay = true;
protected string showArt = "";
protected int slowRefreshSec = 300;
@@ -117,6 +118,26 @@ namespace MP.Mon.Pages
return answ;
}
/// <summary>
/// Recupera il valore e se trovato aggiorna
/// </summary>
/// <param name="chiave">Valore da cercare</param>
/// <returns></returns>
protected bool getConfValBool(string chiave)
{
bool answ = false;
if (CurrConfig != null && CurrConfig.Count > 0)
{
// sistemo i parametri opzionali...
ConfigModel? risultato = CurrConfig.FirstOrDefault(x => x.Chiave == chiave);
if (risultato != null)
{
bool.TryParse(risultato.Valore, out answ);
}
}
return answ;
}
/// <summary>
/// Recupera il valore e se trovato aggiorna
/// </summary>
@@ -317,6 +338,7 @@ namespace MP.Mon.Pages
// sistemo i parametri opzionali...
getConfValInt("keepAliveMin", ref keepAliveMin);
getConfValInt("MON_maxCol", ref maxCol);
newDisplay = getConfValBool("MON_newDisplay");
int intDoAnim = 0;
getConfValInt("doAnimate", ref intDoAnim);
doAnimate = intDoAnim == 1;
+1
View File
@@ -58,6 +58,7 @@
});
</script> *@
<script src="lib/WindowSize.js"></script>
<script src="_framework/blazor.server.js" autostart="false"></script>
<script>
Blazor.start({
+1 -1
View File
@@ -1,6 +1,6 @@
<body>
<i>Modulo MON MAPO</i>
<h4>Versione: 6.16.2503.1207</h4>
<h4>Versione: 6.16.2503.1306</h4>
<br /> Note di rilascio:
<ul>
<li>
+1 -1
View File
@@ -1 +1 @@
6.16.2503.1207
6.16.2503.1306
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<item>
<version>6.16.2503.1207</version>
<version>6.16.2503.1306</version>
<url>https://nexus.steamware.net/repository/SWS/MP-MON/stable/LAST/MP.Mon.zip</url>
<changelog>https://nexus.steamware.net/repository/SWS/MP-MON/stable/LAST/ChangeLog.html</changelog>
<mandatory>false</mandatory>
+1 -1
View File
@@ -58,6 +58,6 @@
"ServerConf": {
"maxAge": "2000",
"cssOverlayOff": "bg-dark text-light bg-opacity-50",
"maxChar4Scroll": 20
"maxChar4Scroll": 15
}
}
+4
View File
@@ -10,5 +10,9 @@
{
"outputFile": "Components/DetailMSE.razor.css",
"inputFile": "Components/DetailMSE.razor.less"
},
{
"outputFile": "Components/DetailViewMSE.razor.css",
"inputFile": "Components/DetailViewMSE.razor.less"
}
]
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+64 -40
View File
@@ -40,7 +40,7 @@ a,
border-color: #1861ac;
}
.content {
padding-top: 1.1rem;
padding-top: 1.1rrem;
}
.valid.modified:not([type=checkbox]) {
outline: 1px solid #26b050;
@@ -74,46 +74,46 @@ a,
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
width: 5rem;
width: 5rrem;
}
.max10Char {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
width: 10rem;
width: 10rrem;
}
.max20Char {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
width: 20rem;
width: 20rrem;
}
.max30Char {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
width: 30rem;
width: 30rrem;
}
.max40Char {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
width: 40rem;
width: 40rrem;
}
.max50Char {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
width: 50rem;
width: 50rrem;
}
.max100Char {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
width: 100rem;
width: 100rrem;
}
.footer {
line-height: 1.8em;
line-height: 1.8rem;
}
#blazor-error-ui {
background: lightyellow;
@@ -121,7 +121,7 @@ a,
box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
display: none;
left: 0;
padding: 0.6rem 1.25rem 0.7rem 1.25rem;
padding: 0.6rem 1.25rem 0.7rem 1.25rrem;
position: fixed;
width: 100%;
z-index: 1000;
@@ -129,12 +129,12 @@ a,
#blazor-error-ui .dismiss {
cursor: pointer;
position: absolute;
right: 0.75rem;
top: 0.5rem;
right: 0.75rrem;
top: 0.5rrem;
}
.blazor-error-boundary {
background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121;
padding: 1rem 1rem 1rem 3.7rem;
padding: 1rem 1rem 1rem 3.7rrem;
color: white;
}
.blazor-error-boundary::after {
@@ -143,24 +143,24 @@ a,
/* Gestione specifica oggetti MON*/
/* MAIN: gestione layout dinamico mappa... */
.fontSmall {
font-size: 0.75em;
font-size: 0.75rem;
}
.fontSmaller {
font-size: 0.6em;
font-size: 0.6rem;
}
.statusMap .ui-title,
.statusMap .ui-li-aside {
/*font-weight: 200;*/
text-transform: uppercase;
font-size: 1.5em;
line-height: 1.1em;
font-size: 1.5rem;
line-height: 1.1rem;
color: #DEDEDE;
text-shadow: 2px 2px 4px #000;
text-align: center;
background: linear-gradient(270deg, rgba(20, 20, 20, 0.7), rgba(100, 100, 100, 0.7), rgba(20, 20, 20, 0.7));
}
.statusMap .ui-subtitle {
line-height: 1.1em;
line-height: 1.1rem;
color: #DEDEDE;
text-shadow: 2px 2px 4px #000;
text-align: center;
@@ -176,37 +176,37 @@ a,
@media all and (min-width: 320px) {
.statusMap .ui-title,
.statusMap .ui-li-aside {
font-size: 1.5em;
font-size: 1.5rem;
}
}
@media all and (min-width: 800px) {
.statusMap .ui-title,
.statusMap .ui-li-aside {
font-size: 1.6em;
font-size: 1.6rem;
}
}
@media all and (min-width: 1024px) {
.statusMap .ui-title,
.statusMap .ui-li-aside {
font-size: 1.7em;
font-size: 1.7rem;
}
}
@media all and (min-width: 1440px) {
.statusMap .ui-title,
.statusMap .ui-li-aside {
font-size: 1.8em;
font-size: 1.8rem;
}
}
@media all and (min-width: 1980px) {
.statusMap .ui-title,
.statusMap .ui-li-aside {
font-size: 1.9em;
font-size: 1.9rem;
}
}
@media all and (min-width: 3960px) {
.statusMap .ui-title,
.statusMap .ui-li-aside {
font-size: 2em;
font-size: 2rem;
}
}
/* END: gestione layout dinamico mappa... */
@@ -348,14 +348,19 @@ a,
/* Gestione size caratteri */
.mainHead,
.logoImg {
height: 1.6em;
height: 1.6rem;
}
@media all and (max-width: 425px) {
body {
font-size: 0.7rem;
}
}
@media all and (min-width: 425px) {
.mainHead {
font-size: 1.3em;
font-size: 1.3rem;
}
body {
font-size: 0.8em;
font-size: 0.8rem;
}
.logoImg {
height: 30px;
@@ -363,52 +368,71 @@ a,
}
@media all and (min-width: 768px) {
.mainHead {
font-size: 1.4em;
font-size: 1.4rem;
}
body {
font-size: 1em;
font-size: 1rem;
}
.logoImg {
height: 35px;
}
}
@media all and (min-width: 800px) {
.mainHead {
font-size: 0.9rem;
}
body {
font-size: 0.6em;
font-size: 0.6rem;
}
.logoImg {
height: 40px;
}
}
@media all and (min-width: 1024px) {
.mainHead {
font-size: 1rem;
}
body {
font-size: 0.7em;
font-size: 0.7rem;
}
}
@media all and (min-width: 1280px) {
.mainHead {
font-size: 1.1rem;
}
body {
font-size: 0.8em;
font-size: 0.8rem;
}
}
@media all and (min-width: 1440px) {
.mainHead {
font-size: 1.3rem;
}
body {
font-size: 1em;
font-size: 1rem;
}
}
@media all and (min-width: 1680px) {
.mainHead {
font-size: 1.4rem;
}
body {
font-size: 1.1em;
font-size: 1.1rem;
}
}
@media all and (min-width: 1920px) {
.mainHead {
font-size: 1.6rem;
}
body {
font-size: 1.3em;
font-size: 1.3rem;
}
}
@media all and (min-width: 2560px) {
body {
font-size: 3em;
.mainHead {
font-size: 1.4rem;
}
}
@media all and (max-width: 425px) {
body {
font-size: 0.7em;
font-size: 1.8rem;
}
}
+67 -42
View File
@@ -35,7 +35,7 @@ a, .btn-link {
}
.content {
padding-top: 1.1rem;
padding-top: 1.1rrem;
}
.valid.modified:not([type=checkbox]) {
@@ -77,42 +77,42 @@ a, .btn-link {
.max5Char {
.maxChar;
width: 5rem;
width: 5rrem;
}
.max10Char {
.maxChar;
width: 10rem;
width: 10rrem;
}
.max20Char {
.maxChar;
width: 20rem;
width: 20rrem;
}
.max30Char {
.maxChar;
width: 30rem;
width: 30rrem;
}
.max40Char {
.maxChar;
width: 40rem;
width: 40rrem;
}
.max50Char {
.maxChar;
width: 50rem;
width: 50rrem;
}
.max100Char {
.maxChar;
width: 100rem;
width: 100rrem;
}
.footer {
line-height: 1.8em;
line-height: 1.8rem;
}
#blazor-error-ui {
@@ -121,7 +121,7 @@ a, .btn-link {
box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
display: none;
left: 0;
padding: 0.6rem 1.25rem 0.7rem 1.25rem;
padding: 0.6rem 1.25rem 0.7rem 1.25rrem;
position: fixed;
width: 100%;
z-index: 1000;
@@ -130,13 +130,13 @@ a, .btn-link {
#blazor-error-ui .dismiss {
cursor: pointer;
position: absolute;
right: 0.75rem;
top: 0.5rem;
right: 0.75rrem;
top: 0.5rrem;
}
.blazor-error-boundary {
background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121;
padding: 1rem 1rem 1rem 3.7rem;
padding: 1rem 1rem 1rem 3.7rrem;
color: white;
}
@@ -146,18 +146,18 @@ a, .btn-link {
/* Gestione specifica oggetti MON*/
/* MAIN: gestione layout dinamico mappa... */
.fontSmall {
font-size: 0.75em;
font-size: 0.75rem;
}
.fontSmaller {
font-size: 0.6em;
font-size: 0.6rem;
}
.statusMap .ui-title, .statusMap .ui-li-aside {
/*font-weight: 200;*/
text-transform: uppercase;
font-size: 1.5em;
line-height: 1.1em;
font-size: 1.5rem;
line-height: 1.1rem;
color: #DEDEDE;
text-shadow: 2px 2px 4px #000;
text-align: center;
@@ -165,7 +165,7 @@ a, .btn-link {
}
.statusMap .ui-subtitle {
line-height: 1.1em;
line-height: 1.1rem;
color: #DEDEDE;
text-shadow: 2px 2px 4px #000;
text-align: center;
@@ -186,37 +186,37 @@ a, .btn-link {
@media all and (min-width: 320px) {
.statusMap .ui-title, .statusMap .ui-li-aside {
font-size: 1.5em;
font-size: 1.5rem;
}
}
@media all and (min-width: 800px) {
.statusMap .ui-title, .statusMap .ui-li-aside {
font-size: 1.6em;
font-size: 1.6rem;
}
}
@media all and (min-width: 1024px) {
.statusMap .ui-title, .statusMap .ui-li-aside {
font-size: 1.7em;
font-size: 1.7rem;
}
}
@media all and (min-width: 1440px) {
.statusMap .ui-title, .statusMap .ui-li-aside {
font-size: 1.8em;
font-size: 1.8rem;
}
}
@media all and (min-width: 1980px) {
.statusMap .ui-title, .statusMap .ui-li-aside {
font-size: 1.9em;
font-size: 1.9rem;
}
}
@media all and (min-width: 3960px) {
.statusMap .ui-title, .statusMap .ui-li-aside {
font-size: 2.0em;
font-size: 2.0rem;
}
}
@@ -382,16 +382,22 @@ a, .btn-link {
/* Gestione size caratteri */
.mainHead,
.logoImg {
height: 1.6em;
height: 1.6rem;
}
@media all and (max-width: 425px) {
body {
font-size: 0.7rem;
}
}
@media all and (min-width: 425px) {
.mainHead {
font-size: 1.3em;
font-size: 1.3rem;
}
body {
font-size: 0.8em;
font-size: 0.8rem;
}
.logoImg {
@@ -401,11 +407,11 @@ a, .btn-link {
@media all and (min-width: 768px) {
.mainHead {
font-size: 1.4em;
font-size: 1.4rem;
}
body {
font-size: 1em;
font-size: 1rem;
}
.logoImg {
@@ -414,49 +420,68 @@ a, .btn-link {
}
@media all and (min-width: 800px) {
.mainHead {
font-size: 0.9rem;
}
body {
font-size: 0.6em;
font-size: 0.6rem;
}
.logoImg {
height: 40px;
}
}
@media all and (min-width: 1024px) {
.mainHead {
font-size: 1.0rem;
}
body {
font-size: 0.7em;
font-size: 0.7rem;
}
}
@media all and (min-width: 1280px) {
.mainHead {
font-size: 1.1rem;
}
body {
font-size: 0.8em;
font-size: 0.8rem;
}
}
@media all and (min-width: 1440px) {
.mainHead {
font-size: 1.3rem;
}
body {
font-size: 1.0em;
font-size: 1.0rem;
}
}
@media all and (min-width: 1680px) {
.mainHead {
font-size: 1.4rem;
}
body {
font-size: 1.1em;
font-size: 1.1rem;
}
}
@media all and (min-width: 1920px) {
.mainHead {
font-size: 1.6rem;
}
body {
font-size: 1.3em;
font-size: 1.3rem;
}
}
@media all and (min-width: 2560px) {
.mainHead {
font-size: 1.4rem;
}
body {
font-size: 3.0em;
}
}
@media all and (max-width: 425px) {
body {
font-size: 0.7em;
font-size: 1.8rem;
}
}
+1 -1
View File
File diff suppressed because one or more lines are too long
+6
View File
@@ -0,0 +1,6 @@
window.getWindowDimensions = function () {
return {
width: window.innerWidth,
height: window.innerHeight
};
};
+2 -2
View File
@@ -4,8 +4,8 @@
<TargetFramework>net6.0</TargetFramework>
<RootNamespace>MP.Stats</RootNamespace>
<UserSecretsId>826e877c-ba70-4253-84cb-d0b1cafd4440</UserSecretsId>
<Version>6.16.2503.1207</Version>
<Version>6.16.2503.1207</Version>
<Version>6.16.2503.1210</Version>
<Version>6.16.2503.1210</Version>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<NoWarn>$(NoWarn);1591</NoWarn>
<SatelliteResourceLanguages>en</SatelliteResourceLanguages>
+1 -1
View File
@@ -1,6 +1,6 @@
<body>
<i>Modulo statistiche MAPO</i>
<h4>Versione: 6.16.2503.1207</h4>
<h4>Versione: 6.16.2503.1210</h4>
<br />
Note di rilascio:
<ul>
+1 -1
View File
@@ -1 +1 @@
6.16.2503.1207
6.16.2503.1210
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<item>
<version>6.16.2503.1207</version>
<version>6.16.2503.1210</version>
<url>https://nexus.steamware.net/repository/SWS/MP-STATS/stable/LAST/MP.Stats.zip</url>
<changelog>https://nexus.steamware.net/repository/SWS/MP-STATS/stable/LAST/ChangeLog.html</changelog>
<mandatory>false</mandatory>