Aggiunto livello utente (utente base vs utente avanzato)

This commit is contained in:
Annamaria Sassi
2026-01-19 10:31:08 +01:00
parent bc96177d74
commit aae2fa5ba7
29 changed files with 958 additions and 1450 deletions
+5 -5
View File
@@ -29,16 +29,16 @@
}
</NavLink>
</div>
<div class="nav-item px-3">
<NavLink class="nav-link" href="BaseEdit">
<span class="fa-solid fa-pencil px-2 fs-4" aria-hidden="true"></span> <span class="@hideText">BaseEdit</span>
</NavLink>
</div>
@* <div class="nav-item px-3">
<NavLink class="nav-link" href="EditJWD">
<span class="fa-solid fa-gear px-2 fs-4" aria-hidden="true"></span> <span class="@hideText">EditJWD</span>
</NavLink>
</div> *@
<div class="nav-item px-3">
<NavLink class="nav-link" href="SimpleEdit">
<span class="fa-solid fa-pencil px-2 fs-4" aria-hidden="true"></span> <span class="@hideText">SimpleEdit</span>
</NavLink>
</div>
</nav>
</div>
+32
View File
@@ -0,0 +1,32 @@
@page "/BaseEdit"
@rendermode InteractiveServer
<PageTitle>BaseEdit</PageTitle>
<WebWindowComplex.TableComp ListPayload="SetupList"
LiveData="CurrData"
baseUser="User"
EC_ActionReq="DoAction"
EC_DoUpdate="ExecRequest"
EC_OnClose="CloseObj">
</WebWindowComplex.TableComp>
@if (!string.IsNullOrEmpty(outClose))
{
<div class="alert alert-danger fs-4">
@outClose
</div>
}
else if (!string.IsNullOrEmpty(outSave))
{
<div class="alert alert-success fs-4">
@outSave
</div>
}
<div class="card">
<div class="card-body small">
@JsonSer
</div>
</div>
+372
View File
@@ -0,0 +1,372 @@
using Egw.Window.Data;
using EgwCoreLib.Lux.Core;
using EgwCoreLib.Lux.Core.RestPayload;
using EgwCoreLib.Lux.Data.Services;
using Microsoft.AspNetCore.Components;
using Newtonsoft.Json;
using WebWindowComplex;
using WebWindowComplex.DTO;
using static WebWindowComplex.LayoutConst;
namespace Test.UI.Components.Pages
{
public partial class BaseEdit
{
#region Public Fields
public string InitialJwd = "";
#endregion Public Fields
#region Public Methods
public void Dispose()
{
DLService.PipeSvg.EA_NewMessage -= PipeSvg_EA_NewMessage;
DLService.PipeShape.EA_NewMessage -= PipeShape_EA_NewMessage;
DLService.PipeHwOpt.EA_NewMessage -= PipeHwOption_EA_NewMessage;
}
#endregion Public Methods
#region Protected Fields
/// <summary>
/// Predisposizione valori live SVG/JWD
/// </summary>
protected LivePayload CurrData = new LivePayload();
/// <summary>
/// Livello di accesso
/// -- true: utente base (versione semplificata)
/// -- false: utente avanzato (versione completa)
/// </summary>
protected bool User = false;
protected Dictionary<int, string> currGroupShape = new Dictionary<int, string>();
protected Dictionary<int, string> currHwOption = new Dictionary<int, string>();
protected string currJwd = "...";
protected Dictionary<string, string> m_CurrArgs = new Dictionary<string, string>();
protected string prevJwd = "";
/// <summary>
/// Configurazione elenchi anagrafiche
/// </summary>
protected BaseListPayload SetupList = new BaseListPayload();
#endregion Protected Fields
#region Protected Properties
protected List<string> AvailColorMaterialList { get; set; } = new List<string>()
{
new string("White"),
new string("Black"),
new string("Blu")
};
protected List<string> AvailFamilyHardwareList { get; set; } = new List<string>()
{
new string("ArTech"),
new string("ArTechPlana")
};
protected List<string> AvailGlassList { get; set; } = new List<string>()
{
new string("Vetro BE 2S 4/12/4"),
new string("Vetro BE 2S 4/16/4"),
new string("Vetro BE 3S 4/12/4/12/4"),
new string("Vetro BE 3S 4/16/4/16/4"),
new string("Vetro BE 2S 4T/12/4T"),
new string("Vetro BE 2S 4T/16/4T")
};
protected List<Hardware> AvailHardwareList { get; set; } = new List<Hardware>();
protected List<string> AvailMaterialList { get; set; } = new List<string>()
{
new string("Pino"),
new string("Abete")
};
protected List<string> AvailProfileList { get; set; } = new List<string>()
{
new string("Profilo78"),
new string("ProfiloSaomad")
};
protected Dictionary<string, List<Threshold>> AvailThreshold { get; set; } = new Dictionary<string, List<Threshold>>()
{
{"Profilo78", new List<Threshold>() { new Threshold(3, "Bottom"), new Threshold(1, "Threshold")}},
{"ProfiloSaomad", new List<Threshold>(){ new Threshold(3, "Bottom"), new Threshold(2, "BottomWaterdrip"), new Threshold(1, "Threshold")}}
};
[Inject]
protected IConfiguration Config { get; set; } = null!;
[Inject]
protected DataLayerServices DLService { get; set; } = null!;
[Inject]
protected ImageCacheService ICService { get; set; } = null!;
protected MarkupString JsonSer
{
get => (MarkupString)currJwd.Replace(Environment.NewLine, "<br/>").Replace(" ", "&nbsp;");
}
protected string SelColorMaterial { get; set; } = "";
protected string SelFamilyHardware { get; set; } = "";
protected string SelGlass { get; set; } = "";
protected string SelMaterial { get; set; } = "";
#endregion Protected Properties
#region Protected Methods
protected override void OnAfterRender(bool firstRender)
{
if (firstRender)
{
// JS interop or data fetches go here
isInteractive = true;
}
}
protected override async Task OnInitializedAsync()
{
ConfInit();
User = true;
Random random = new Random();
CalcUid = Convert.ToString(random.Next(1000, 10000));
windowUid = CalcUid;
//InitialJwd = File.ReadAllText("Data\\FinestraSplitGrid.jwd");
InitialJwd = File.ReadAllText("Data\\AntaDoppia.jwd");
//InitialJwd = File.ReadAllText("Data\\ArcoAntaDoppia.jwd");
currJwd = InitialJwd;
// rileggo altri dati
await ReloadData();
// preparo conf oggetti x controllo
SetupList = new BaseListPayload()
{
ColorMaterial = AvailColorMaterialList,
FamilyHardware = AvailFamilyHardwareList,
Glass = AvailGlassList,
Hardware = AvailHardwareList,
Material = AvailMaterialList,
Profile = AvailProfileList,
Threshold = AvailThreshold
};
CurrData = new LivePayload()
{
CurrJwd = InitialJwd,
SvgPreview = currSvg,
DictShape = currGroupShape,
DictOptionsXml = currHwOption
};
DLService.PipeSvg.EA_NewMessage += PipeSvg_EA_NewMessage;
DLService.PipeShape.EA_NewMessage += PipeShape_EA_NewMessage;
DLService.PipeHwOpt.EA_NewMessage += PipeHwOption_EA_NewMessage;
}
#endregion Protected Methods
#region Private Fields
private string apiUrl = "";
private string calcTag = "";
private string CalcUid = "CurrWindow";
private string windowUid = "CurrWindow";
private string cFileHardware = "Hardware/Setup.json";
private string currSvg = "";
private string GenericBasePath = "";
private string colorMassUpdate;
private string familyHWMassUpdate;
private string glassMassUpdate;
private Hardware hardwareMassUpdate;
private string materialMassUpdate;
private string profileMassUpdate;
/// <summary>
/// Semaforo x definire se sia già in modalità ionterattiva o di prerendering
/// </summary>
private bool isInteractive = false;
private string outClose = "";
private string outSave = "";
private string imgBasePath = "";
private string channelHwOpt = "";
private string channelShape = "";
private string channelSvg = "";
#endregion Private Fields
#region Private Methods
/// <summary>
/// Effettua chiusura oggetto con eventuale save
/// </summary>
/// <param name="reqSave"></param>
private void CloseObj(bool reqSave)
{
outClose = !reqSave ? "Richiesto chiusura!" : "";
outSave = reqSave ? "Richiesto salvataggio!" : "";
}
private void ConfInit()
{
apiUrl = Config.GetValue<string>("ServerConf:Prog.ApiUrl") ?? "";
imgBasePath = Config.GetValue<string>("ServerConf:ImageBaseUrl") ?? "";
GenericBasePath = Config.GetValue<string>("ServerConf:GenericBaseUrl") ?? "";
calcTag = Config.GetValue<string>("ServerConf:CalcTag") ?? "";
channelSvg = Config.GetValue<string>("ServerConf:ChannelSvg") ?? "";
channelShape = Config.GetValue<string>("ServerConf:ChannelShape") ?? "";
channelHwOpt = Config.GetValue<string>("ServerConf:ChannelHwOpt") ?? "";
}
/// <summary>
/// Esecuzione azione richiesta
/// </summary>
/// <param name="actReq">Azione richiesta</param>
private void DoAction(DataAction actReq)
{
switch (actReq)
{
case DataAction.None:
break;
case DataAction.ResetDictShape:
CurrData.DictShape = new Dictionary<int, string>();
break;
case DataAction.ResetHwOpt:
CurrData.DictOptionsXml = new Dictionary<int, string>();
break;
default:
break;
}
}
/// <summary>
/// Esecuzione richiesta
/// </summary>
/// <param name="CurrArgs"></param>
/// <returns></returns>
private async Task ExecRequest(Dictionary<string, string> CurrArgs)
{
// Proseguo solo se sono in interattivo (NO prerender pagina)
if (isInteractive)
{
outClose = "";
outSave = "";
// verifico se contiene JWD, lo aggiorno
if (CurrArgs.ContainsKey("SerializedData"))
{
currJwd = CurrArgs["SerializedData"];
CurrData.CurrJwd = currJwd;
}
// se il SSE variato --> invio
if (!currJwd.Equals(prevJwd) || !EgwCoreLib.Utils.DictUtils.DictAreEqual(m_CurrArgs, CurrArgs))
{
m_CurrArgs = CurrArgs;
prevJwd = currJwd;
CalcRequestDTO calcRequestDTO = new CalcRequestDTO();
calcRequestDTO.EnvType = EgwMultiEngineManager.Data.Constants.EXECENVIRONMENTS.WINDOW;
calcRequestDTO.DictExec = m_CurrArgs;
// chiamo la chiamata POST alla API, che manda la richiesta via REDIS
await ICService.CallRestPost($"{apiUrl}/{GenericBasePath}", $"{calcTag}/{CalcUid}", calcRequestDTO);
}
}
}
private async void PipeHwOption_EA_NewMessage(object? sender, EventArgs e)
{
// aggiorno visualizzazione
PubSubEventArgs currArgs = (PubSubEventArgs)e;
// conversione on-the-fly SVG da mostrare
if (!string.IsNullOrEmpty(currArgs.newMessage))
{
if (currArgs.msgUid.StartsWith($"{channelHwOpt}:{windowUid}") && currArgs.newMessage.Length > 2)
{
// deserializzo il dizionario delle risposte...
Dictionary<int, string> rawDict = JsonConvert.DeserializeObject<Dictionary<int, string>>(currArgs.newMessage) ?? new Dictionary<int, string>();
if (rawDict.Count > 0)
{
currHwOption = rawDict;
CurrData.DictOptionsXml = currHwOption;
}
}
await InvokeAsync(StateHasChanged);
}
await Task.Delay(1);
}
private async void PipeShape_EA_NewMessage(object? sender, EventArgs e)
{
// aggiorno visualizzazione
PubSubEventArgs currArgs = (PubSubEventArgs)e;
// conversione on-the-fly SVG da mostrare
if (!string.IsNullOrEmpty(currArgs.newMessage) && currArgs.newMessage.Length > 2)
{
if (currArgs.msgUid.StartsWith($"{channelShape}:{windowUid}"))
{
// deserializzo il dizionario delle risposte...
var rawDict = JsonConvert.DeserializeObject<Dictionary<int, string>>(currArgs.newMessage);
currGroupShape = rawDict ?? new Dictionary<int, string>();
CurrData.DictShape = currGroupShape;
}
await InvokeAsync(StateHasChanged);
}
await Task.Delay(1);
}
private async void PipeSvg_EA_NewMessage(object? sender, EventArgs e)
{
// aggiorno visualizzazione
PubSubEventArgs currArgs = (PubSubEventArgs)e;
// conversione on-the-fly SVG da mostrare
if (!string.IsNullOrEmpty(currArgs.newMessage))
{
if (currArgs.msgUid.Equals($"{channelSvg}:{windowUid}"))
{
currSvg = currArgs.newMessage;
CurrData.SvgPreview = currArgs.newMessage;
}
await InvokeAsync(StateHasChanged);
}
await Task.Delay(1);
}
/// <summary>
/// Rilettura dati
/// </summary>
/// <returns></returns>
private async Task ReloadData()
{
//return base.OnInitializedAsync();
AvailHardwareList = new List<Hardware>();
if (File.Exists(cFileHardware))
{
string rawValHW = File.ReadAllText(cFileHardware);
var rawListHW = JsonConvert.DeserializeObject<List<Hardware>>(rawValHW) ?? new List<Hardware>();
foreach (var item in rawListHW)
{
AvailHardwareList.Add(item);
}
}
await Task.Delay(100);
}
private void updateInfoJwd(string currSer, string? newFamilyHardware, Hardware? newHardware, string? newColorMaterial, string? newMaterial, string? newGlass, string? newProfile)
{
var newJwd = SerialMan.MassUpdate(currSer, newFamilyHardware, newHardware, newColorMaterial, newMaterial, newGlass, newProfile);
CurrData.CurrJwd = newJwd;
}
#endregion Private Methods
}
}
+1
View File
@@ -69,6 +69,7 @@
<WebWindowComplex.TableComp ListPayload="SetupList"
LiveData="CurrData"
baseUser="User"
EC_ActionReq="DoAction"
EC_DoUpdate="ExecRequest"
EC_OnClose="CloseObj">
+10 -2
View File
@@ -39,6 +39,13 @@ namespace Test.UI.Components.Pages
/// </summary>
protected LivePayload CurrData = new LivePayload();
/// <summary>
/// Livello di accesso
/// -- true: utente base (versione semplificata)
/// -- false: utente avanzato (versione completa)
/// </summary>
protected bool User = false;
protected Dictionary<int, string> currGroupShape = new Dictionary<int, string>();
protected Dictionary<int, string> currHwOption = new Dictionary<int, string>();
protected string currJwd = "...";
@@ -132,11 +139,12 @@ namespace Test.UI.Components.Pages
protected override async Task OnInitializedAsync()
{
ConfInit();
User = false;
Random random = new Random();
CalcUid = Convert.ToString(random.Next(1000, 10000));
windowUid = CalcUid;
//InitialJwd = File.ReadAllText("Data\\FinestraSplitGrid.jwd");
InitialJwd = File.ReadAllText("Data\\AntaDoppia.jwd");
InitialJwd = File.ReadAllText("Data\\FinestraSplitGrid.jwd");
//InitialJwd = File.ReadAllText("Data\\AntaDoppia.jwd");
//InitialJwd = File.ReadAllText("Data\\ArcoAntaDoppia.jwd");
currJwd = InitialJwd;
// rileggo altri dati
@@ -1,7 +1,7 @@
@page "/SimpleEdit"
@page "/SimpleEditOld"
@rendermode InteractiveServer
<PageTitle>SimpleEdit</PageTitle>
<PageTitle>SimpleEditOld</PageTitle>
<WebWindowTest.Test ListPayload="SetupList"
LiveData="CurrData"
@@ -9,7 +9,7 @@ using static WebWindowTest.LayoutConst;
namespace Test.UI.Components.Pages
{
public partial class SimpleEdit : IDisposable
public partial class SimpleEditOld : IDisposable
{
#region Public Fields
@@ -132,9 +132,8 @@ namespace Test.UI.Components.Pages
Random random = new Random();
CalcUid = Convert.ToString(random.Next(1000, 10000));
windowUid = CalcUid;
//InitialJwd = File.ReadAllText("Data\\FinestraSplitGrid.jwd");
InitialJwd = File.ReadAllText("Data\\AntaDoppia.jwd");
//InitialJwd = File.ReadAllText("Data\\ArcoAntaDoppia.jwd");
InitialJwd = File.ReadAllText("Data\\FinestraSplitGrid.jwd");
//InitialJwd = File.ReadAllText("Data\\AntaDoppia.jwd");
currJwd = InitialJwd;
// rileggo altri dati
await ReloadData();
+48 -29
View File
@@ -4,7 +4,7 @@
<div class="col-lg-6 col-md-12 my-2">
<div class="d-flex justify-content-between align-items-center">
<h6 class="fw-bold">Sash @(CurrSashGroup.SashList.Count == 1 ? "" : (IndexSash + 1))</h6>
@if(CurrSashGroup.SashList.Count > 1)
@if(!User && CurrSashGroup.SashList.Count > 1)
{
<div class="dropdown">
<button class="btn btn-outline-secondary dropdown-toggle btn-sm" type="button" @onclick="ToggleDropdown">
@@ -30,13 +30,21 @@
<button class="btn btn-outline-secondary btn-sm" type="button" @onclick="() => doEdit(IndexSash)">Edit</button>
</div>
<div class="input-group mb-2 mt-2">
<label class="input-group-text">Tipology</label>
<select class="form-select" @bind="@OpeningTypeIndex">
@foreach (var openingType in CurrSashDim.OpeningTypeList)
{
<option value=@(openingType.Id)>@(openingType.Name)</option>
}
</select>
@if(User)
{
<span class="input-group-text">Tipology</span>
<input type="text" readonly class="form-control" value="@(CurrSashDim.OpeningTypeList.ElementAt(OpeningTypeIndex - 1))">
}
else
{
<label class="input-group-text">Tipology</label>
<select class="form-select" @bind="@OpeningTypeIndex">
@foreach (var openingType in CurrSashDim.OpeningTypeList)
{
<option value=@(openingType.Id)>@(openingType.Name)</option>
}
</select>
}
</div>
<div class="input-group mb-2">
<span class="input-group-text">Dimension</span>
@@ -82,7 +90,7 @@ else
{
<div class="d-flex justify-content-between align-items-center mb-2">
<h6 class="fw-bold text-nowrap">Sash @(CurrSashGroup.SashList.Count == 1 ? "" : (IndexSash + 1))</h6>
@if (!(CurrAnta.AreaList[0] is Split))
@if (!User && !(CurrAnta.AreaList[0] is Split))
{
<div class="input-group mb-2 justify-content-center">
<button class="btn btn-outline-secondary btn-sm" @onclick="() => AddSplitToSash()">Add split</button>
@@ -91,18 +99,26 @@ else
<button class="btn btn-outline-secondary btn-sm">Add inglesina</button>
</div>
}
<button type="button" class="btn-close" aria-label="Close" @onclick="() => ClosePopup(IndexSash)"></button>
<button type="button" class="btn-close" aria-label="Close" @onclick="() => ClosePopup(IndexSash)"></button>
</div>
<div class="row">
<div class="col-lg-6 col-md-12 my-2">
<div class="input-group mb-2">
<label class="input-group-text">Tipology</label>
<select class="form-select" @bind="@OpeningTypeIndex">
@foreach (var openingType in CurrSashDim.OpeningTypeList)
{
<option value=@(openingType.Id)>@(openingType.Name)</option>
}
</select>
@if(User)
{
<span class="input-group-text">Tipology</span>
<input type="text" readonly class="form-control" value="@(CurrSashDim.OpeningTypeList.ElementAt(OpeningTypeIndex - 1))">
}
else
{
<label class="input-group-text">Tipology</label>
<select class="form-select" @bind="@OpeningTypeIndex">
@foreach (var openingType in CurrSashDim.OpeningTypeList)
{
<option value=@(openingType.Id)>@(openingType.Name)</option>
}
</select>
}
</div>
<div class="input-group mb-2">
<span class="input-group-text">Dimension</span>
@@ -148,21 +164,24 @@ else
<div class="col d-flex justify-content-start align-items-center">
<h6>Joints</h6>
</div>
<div class="col d-flex">
<div class="input-group mb-2 justify-content-center">
<button class="@ButtonJointCss(WebWindowComplex.Json.WindowConst.Joints.ANGLED)" @onclick="() => ChangeAllJoints(WebWindowComplex.Json.WindowConst.Joints.ANGLED)">Angled</button>
@if(!User)
{
<div class="col d-flex">
<div class="input-group mb-2 justify-content-center">
<button class="@ButtonJointCss(WebWindowComplex.Json.WindowConst.Joints.ANGLED)" @onclick="() => ChangeAllJoints(WebWindowComplex.Json.WindowConst.Joints.ANGLED)">Angled</button>
</div>
</div>
</div>
<div class="col d-flex">
<div class="input-group mb-2 justify-content-center">
<button class="@ButtonJointCss(WebWindowComplex.Json.WindowConst.Joints.FULL_H)" @onclick="() => ChangeAllJoints(WebWindowComplex.Json.WindowConst.Joints.FULL_H)">Horizontal</button>
<div class="col d-flex">
<div class="input-group mb-2 justify-content-center">
<button class="@ButtonJointCss(WebWindowComplex.Json.WindowConst.Joints.FULL_H)" @onclick="() => ChangeAllJoints(WebWindowComplex.Json.WindowConst.Joints.FULL_H)">Horizontal</button>
</div>
</div>
</div>
<div class="col d-flex">
<div class="input-group mb-2 justify-content-center">
<button class="@ButtonJointCss(WebWindowComplex.Json.WindowConst.Joints.FULL_V)" @onclick="() => ChangeAllJoints(WebWindowComplex.Json.WindowConst.Joints.FULL_V)">Vertical</button>
<div class="col d-flex">
<div class="input-group mb-2 justify-content-center">
<button class="@ButtonJointCss(WebWindowComplex.Json.WindowConst.Joints.FULL_V)" @onclick="() => ChangeAllJoints(WebWindowComplex.Json.WindowConst.Joints.FULL_V)">Vertical</button>
</div>
</div>
</div>
}
</div>
@foreach (Joint joint in CurrSashDim.JointList)
{
+7 -1
View File
@@ -27,6 +27,12 @@ namespace WebWindowComplex.Compo
[CascadingParameter(Name = "SashList")]
public List<Sash> SashList { get; set; } = null!;
/// <summary>
/// Livello di accesso (utente base)
/// </summary>
[CascadingParameter(Name = "User")]
public bool User { get; set; } = false!;
/// <summary>
/// Modalità di visualizzazione (view /edit)
/// </summary>
@@ -292,7 +298,7 @@ namespace WebWindowComplex.Compo
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
private string ButtonJointCss(WebWindowComplex.Json.WindowConst.Joints type)
private string ButtonJointCss(Json.WindowConst.Joints type)
{
foreach (var item in CurrSashDim.JointList)
{
+16 -27
View File
@@ -17,39 +17,28 @@
</div>
<div class="col d-flex">
<div class="input-group mb-2 justify-content-center">
<button class="@buttonFillCss(WebWindowComplex.Json.WindowConst.FillTypes.GLASS)" @onclick="() => ChangeOneFill(WebWindowComplex.Json.WindowConst.FillTypes.GLASS)">Glass</button>
@if (User)
{
<button class="@buttonFillCss(WebWindowComplex.Json.WindowConst.FillTypes.GLASS)">Glass</button>
}
else
{
<button class="@buttonFillCss(WebWindowComplex.Json.WindowConst.FillTypes.GLASS)" @onclick="() => ChangeOneFill(WebWindowComplex.Json.WindowConst.FillTypes.GLASS)">Glass</button>
}
</div>
</div>
<div class="col d-flex">
<div class="input-group mb-2 justify-content-center">
<button class="@buttonFillCss(WebWindowComplex.Json.WindowConst.FillTypes.WOOD)" @onclick="() => ChangeOneFill(WebWindowComplex.Json.WindowConst.FillTypes.WOOD)">Wood</button>
@if (User)
{
<button class="@buttonFillCss(WebWindowComplex.Json.WindowConst.FillTypes.WOOD)">Wood</button>
}
else
{
<button class="@buttonFillCss(WebWindowComplex.Json.WindowConst.FillTypes.WOOD)" @onclick="() => ChangeOneFill(WebWindowComplex.Json.WindowConst.FillTypes.WOOD)">Wood</button>
}
</div>
</div>
</div>
@* <div class="d-flex justify-content-between align-items-center">
<div class="col d-flex justify-content-center">
<h6 class="text-center">Selected all fill</h6>
</div>
<div class="col d-flex">
<div class="input-group mb-2 justify-content-center">
<button class="btn btn-outline-secondary btn-sm" @onclick="() => ChangeAllFill(WebWindowComplex.Json.WindowConst.FillTypes.GLASS)">All glass</button>
</div>
</div>
<div class="col d-flex">
<div class="input-group mb-2 justify-content-center">
<button class="btn btn-outline-secondary btn-sm" @onclick="() => ChangeAllFill(WebWindowComplex.Json.WindowConst.FillTypes.WOOD)">All wood</button>
</div>
</div>
</div> *@
</div>
</div>
@* @foreach (var currSplitted in SplittedList)
{
@if (currSplitted.AreaList.First().Equals(CurrFill))
{
<AreaSplit CurrSplitted="currSplitted"
EC_AddSash="AddSash"
EC_CopySash="CopySash">
</AreaSplit>
}
} *@
+6
View File
@@ -20,6 +20,12 @@ namespace WebWindowComplex.Compo
[Parameter]
public Fill CurrFill { get; set; } = null!;
/// <summary>
/// Livello di accesso (utente base)
/// </summary>
[Parameter]
public bool User { get; set; } = false!;
/// <summary>
/// Evento per cambiare tutti i fill
/// </summary>
+61 -35
View File
@@ -15,13 +15,21 @@
<div class="row">
<div class="col-md-12 col-lg-6">
<div class="input-group my-2">
<label class="input-group-text">Shape</label>
<select class="form-select" @bind="@SelShapeIndex">
@foreach (var i in CurrFrameWindow.ShapeList)
{
<option value="@(i.Id)">@(i.Name)</option>
}
</select>
@if (User)
{
<span class="input-group-text">Shape</span>
<input type="text" readonly class="form-control" value="@(CurrFrameWindow.ShapeList.ElementAt(SelShapeIndex - 1))">
}
else
{
<label class="input-group-text">Shape</label>
<select class="form-select" @bind="@SelShapeIndex">
@foreach (var i in CurrFrameWindow.ShapeList)
{
<option value="@(i.Id)">@(i.Name)</option>
}
</select>
}
</div>
</div>
</div>
@@ -41,17 +49,22 @@
<h6 class="fw-bold">Threshold</h6>
</div>
<div class="input-group mb-2">
<label class="input-group-text">Tipology</label>
<select class="form-select" @bind="SelThreshold">
@foreach (var item in CurrFrameWindow.ThresholdList)
{
<option value="@(item.Type)">@(item.Name)</option>
}
</select>
@* <select class="form-select">
<option value="0">Soglia</option>
<option value="1">Sgocciolatoio</option>
</select> *@
@if (User)
{
<span class="input-group-text">Tipology</span>
<input type="text" readonly class="form-control" value="@(CurrFrameWindow.ThresholdList.FirstOrDefault(x => x.Type == SelThreshold).Name)">
}
else
{
<label class="input-group-text">Tipology</label>
<select class="form-select" @bind="SelThreshold">
@foreach (var item in CurrFrameWindow.ThresholdList)
{
<option value="@(item.Type)">@(item.Name)</option>
}
</select>
}
</div>
</div>
</div>
@@ -62,21 +75,24 @@
<div class="col d-flex justify-content-start align-items-center">
<h6 class="fw-bold">Joints</h6>
</div>
<div class="col d-flex">
<div class="input-group mb-2 justify-content-center">
<button class="@ButtonJointCss(Json.WindowConst.Joints.ANGLED)" @onclick="() => ChangeAllJoints(WebWindowComplex.Json.WindowConst.Joints.ANGLED, CurrFrameWindow)">Angled</button>
@if (!User)
{
<div class="col d-flex">
<div class="input-group mb-2 justify-content-center">
<button class="@ButtonJointCss(Json.WindowConst.Joints.ANGLED)" @onclick="() => ChangeAllJoints(WebWindowComplex.Json.WindowConst.Joints.ANGLED, CurrFrameWindow)">Angled</button>
</div>
</div>
</div>
<div class="col d-flex">
<div class="input-group mb-2 justify-content-center">
<button class="@ButtonJointCss(Json.WindowConst.Joints.FULL_H)" @onclick="() => ChangeAllJoints(WebWindowComplex.Json.WindowConst.Joints.FULL_H, CurrFrameWindow)">Horizontal</button>
<div class="col d-flex">
<div class="input-group mb-2 justify-content-center">
<button class="@ButtonJointCss(Json.WindowConst.Joints.FULL_H)" @onclick="() => ChangeAllJoints(WebWindowComplex.Json.WindowConst.Joints.FULL_H, CurrFrameWindow)">Horizontal</button>
</div>
</div>
</div>
<div class="col d-flex">
<div class="input-group mb-2 justify-content-center">
<button class="@ButtonJointCss(Json.WindowConst.Joints.FULL_V)" @onclick="() => ChangeAllJoints(WebWindowComplex.Json.WindowConst.Joints.FULL_V, CurrFrameWindow)">Vertical</button>
<div class="col d-flex">
<div class="input-group mb-2 justify-content-center">
<button class="@ButtonJointCss(Json.WindowConst.Joints.FULL_V)" @onclick="() => ChangeAllJoints(WebWindowComplex.Json.WindowConst.Joints.FULL_V, CurrFrameWindow)">Vertical</button>
</div>
</div>
</div>
}
</div>
<div class="row">
@foreach (Joint joint in CurrFrameWindow.JointList)
@@ -94,7 +110,14 @@
<div class="row">
<div class="input-group mb-2">
<span class="input-group-text">Quantity</span>
<input type="number" class="form-control" @bind="@FrameBottomRailQty">
@if (User)
{
<input type="number" readonly class="form-control" value="@FrameBottomRailQty">
}
else
{
<input type="number" class="form-control" @bind="@FrameBottomRailQty">
}
</div>
</div>
}
@@ -103,9 +126,12 @@
</div>
</div>
@if (!(CurrFrameWindow.AreaList[0] is Split) || (SashList.Count == 0 && SplitList.Count == 0))
@if (!User)
{
<AreaFrame EC_AddSash="AddSash"
EC_AddSplit="AddSplit">
</AreaFrame>
@if (!(CurrFrameWindow.AreaList[0] is Split) || (SashList.Count == 0 && SplitList.Count == 0))
{
<AreaFrame EC_AddSash="AddSash"
EC_AddSplit="AddSplit">
</AreaFrame>
}
}
@@ -50,6 +50,12 @@ namespace WebWindowComplex.Compo
[CascadingParameter(Name = "SplitList")]
public List<Split> SplitList { get; set; } = null!;
/// <summary>
/// Livello di accesso (utente base)
/// </summary>
[CascadingParameter(Name = "User")]
public bool User { get; set; } = false!;
#endregion Public Properties
#region Protected Properties
+79 -39
View File
@@ -7,11 +7,14 @@
<div class="px-2">
<h5>Sash group @(SashList.Count > 1 ? (SashList.IndexOf(CurrSashGroup) + 1) : "")</h5>
</div>
<div class="px-2">
<div class="input-group mb-2 justify-content-center">
<button class="btn btn-outline-secondary btn-sm" @onclick="() => RemoveArea()">Remove sash group</button>
@if (!User)
{
<div class="px-2">
<div class="input-group mb-2 justify-content-center">
<button class="btn btn-outline-secondary btn-sm" @onclick="() => RemoveArea()">Remove sash group</button>
</div>
</div>
</div>
}
<div class="px-2">
<button class="btn btn-close" @onclick="ReqClose"></button>
</div>
@@ -22,26 +25,48 @@
<div class="col-md-12 col-lg-6">
<div class="input-group mb-2">
<span class="input-group-text">Qty sash</span>
<input type="number" class="form-control" @bind="@SashQty">
@if (User)
{
<input type="number" readonly class="form-control" value="@SashQty">
}
else
{
<input type="number" class="form-control" @bind="@SashQty">
}
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 col-lg-6">
<div class="input-group mb-2">
<label class="input-group-text">Tipology</label>
<select class="form-select" @bind="@OrientationSashTypeIndex">
@foreach (var orientationSash in CurrSashGroup.OrientationSashTypeList)
{
<option value="@(orientationSash.Id)">@(orientationSash.Name)</option>
}
</select>
@if(User)
{
<span class="input-group-text">Tipology</span>
<input type="text" readonly class="form-control" value="@(CurrSashGroup.OrientationSashTypeList.FirstOrDefault(x => x.Id == OrientationSashTypeIndex).Name)">
}
else
{
<label class="input-group-text">Tipology</label>
<select class="form-select" @bind="@OrientationSashTypeIndex">
@foreach (var orientationSash in CurrSashGroup.OrientationSashTypeList)
{
<option value="@(orientationSash.Id)">@(orientationSash.Name)</option>
}
</select>
}
</div>
</div>
<div class="col-md-12 col-lg-6">
<div class="input-group mb-2">
<span class="input-group-text">Qty bottom rail</span>
<input type="number" class="form-control" @bind="@SashBottomRailQty">
@if (User)
{
<input type="number" readonly class="form-control" value="@SashBottomRailQty">
}
else
{
<input type="number" class="form-control" @bind="@SashBottomRailQty">
}
</div>
</div>
</div>
@@ -53,43 +78,58 @@
<h6 class="fw-bold">Hardware</h6>
</div>
</div>
<div class="input-group mb-2">
<label class="input-group-text">Family</label>
<select class="form-select" @bind="@FamilyHardware">
@if (Sash.s_FamilyHardwareList == null || Sash.s_FamilyHardwareList.Count == 0)
{
<option value="000000">CUSTOM</option>
}
else
{
@foreach (var familyHw in Sash.s_FamilyHardwareList)
{
<option value="@familyHw">@familyHw</option>
}
}
</select>
</div>
@if (string.IsNullOrEmpty(CurrSashGroup.SashShape))
@if (User)
{
<div class="input-group mb-2">
<label class="input-group-text">Type</label>
<select class="form-select">
<option value="000000">Custom HW</option>
</select>
<span class="input-group-text">Family</span>
<input type="text" readonly class="form-control" value="@FamilyHardware">
</div>
<div class="input-group mb-2">
<span class="input-group-text">Type</span>
<input type="text" readonly class="form-control" value="@SelHwType">
</div>
}
else
{
<div class="input-group mb-2">
<label class="input-group-text">Type</label>
<select class="form-select" @bind="SelHwType">
<option value="000000">Custom HW</option>
@foreach (var hlItem in CurrSashGroup.HardwareList)
<label class="input-group-text">Family</label>
<select class="form-select" @bind="@FamilyHardware">
@if (Sash.s_FamilyHardwareList == null || Sash.s_FamilyHardwareList.Count == 0)
{
<option value="@hlItem.Id">@hlItem.Description</option>
<option value="000000">CUSTOM</option>
}
else
{
@foreach (var familyHw in Sash.s_FamilyHardwareList)
{
<option value="@familyHw">@familyHw</option>
}
}
</select>
</div>
@if (string.IsNullOrEmpty(CurrSashGroup.SashShape))
{
<div class="input-group mb-2">
<label class="input-group-text">Type</label>
<select class="form-select">
<option value="000000">Custom HW</option>
</select>
</div>
}
else
{
<div class="input-group mb-2">
<label class="input-group-text">Type</label>
<select class="form-select" @bind="SelHwType">
<option value="000000">Custom HW</option>
@foreach (var hlItem in CurrSashGroup.HardwareList)
{
<option value="@hlItem.Id">@hlItem.Description</option>
}
</select>
</div>
}
}
</div>
<div class="col-md-12 col-lg-6">
@@ -15,6 +15,12 @@ namespace WebWindowComplex.Compo
[CascadingParameter(Name = "CurrSashGroup")]
public Sash CurrSashGroup { get; set; } = null!;
/// <summary>
/// Livello di accesso (utente base)
/// </summary>
[CascadingParameter(Name = "User")]
public bool User { get; set; } = false!;
/// <summary>
/// Evento per cambiare tutti i fill
/// </summary>
+47 -135
View File
@@ -14,15 +14,18 @@
<div class="card-body py-2">
<div class="d-flex justify-content-between align-items-center">
<h5>Split</h5>
@if ((CurrSplit.nSplitQtyVert == 1 && CurrSplit.nSplitQtyHoriz == 0) || (CurrSplit.nSplitQtyVert == 0 && CurrSplit.nSplitQtyHoriz == 1))
@if (!User)
{
@if ((CurrSplit.nSplitQtyVert == 1 && CurrSplit.nSplitQtyHoriz == 0) || (CurrSplit.nSplitQtyVert == 0 && CurrSplit.nSplitQtyHoriz == 1))
{
<div class="input-group mb-2 justify-content-center">
<button class="btn btn-outline-secondary btn-sm" @onclick="() => SwapTwoAree()">Swap Aree</button>
</div>
}
<div class="input-group mb-2 justify-content-center">
<button class="btn btn-outline-secondary btn-sm" @onclick="() => SwapTwoAree()">Swap Aree</button>
<button class="btn btn-outline-secondary btn-sm" @onclick="() => RemoveArea()">Remove split</button>
</div>
}
<div class="input-group mb-2 justify-content-center">
<button class="btn btn-outline-secondary btn-sm" @onclick="() => RemoveArea()">Remove split</button>
</div>
<div class="dropdown">
<button class="btn btn-outline-secondary dropdown-toggle btn-sm" type="button" @onclick="ToggleDropdown">
Measure
@@ -49,13 +52,21 @@
<div class="row">
<div class="col-md-12 col-lg-6">
<div class="input-group mb-2">
<label class="input-group-text">Shape</label>
<select class="form-select" @bind="@SplitShapeIndex">
@foreach (var shapeType in CurrSplit.SplitShapeList)
{
<option value=@(shapeType.Id)>@(shapeType.Name)</option>
}
</select>
@if (User)
{
<span class="input-group-text">Shape</span>
<input type="text" readonly class="form-control" value="@(CurrSplit.SplitShapeList.FirstOrDefault(x => x.Id == SplitShapeIndex))">
}
else
{
<label class="input-group-text">Shape</label>
<select class="form-select" @bind="@SplitShapeIndex">
@foreach (var shapeType in CurrSplit.SplitShapeList)
{
<option value=@(shapeType.Id)>@(shapeType.Name)</option>
}
</select>
}
</div>
</div>
</div>
@@ -65,7 +76,14 @@
<div class="col-md-12 col-lg-6">
<div class="input-group mb-2">
<span class="input-group-text">QtyVert</span>
<input type="number" class="form-control" @bind="@SplitQtyVert">
@if (User)
{
<input type="number" readonly class="form-control" value="@SplitQtyVert">
}
else
{
<input type="number" class="form-control" @bind="@SplitQtyVert">
}
</div>
</div>
}
@@ -74,7 +92,14 @@
<div class="col-md-12 col-lg-6">
<div class="input-group mb-2">
<span class="input-group-text">QtyHoriz</span>
<input type="number" class="form-control" @bind="@SplitQtyHoriz">
@if (User)
{
<input type="number" readonly class="form-control" value="@SplitQtyHoriz">
}
else
{
<input type="number" class="form-control" @bind="@SplitQtyHoriz">
}
</div>
</div>
}
@@ -90,35 +115,6 @@
Index="i"
EC_Update="UpdateDimension">
</EditSplitDimensions>
@* <div class="input-group mb-2">
<span class="input-group-text">Width</span>
<input type="number" class="form-control" @bind="@dim.dDimension">
<select class="form-select" style="max-width:6rem; background-color:#e9ecef" @bind="@dim.SelMeasureTypeIndex">
@foreach (var mType in dim.MeasureTypeList)
{
<option value=@(mType.Id)>
@switch (mType.Name)
{
case "Absolute":
{
<span class="input-group-text">mm</span>
break;
}
case "Proportional":
{
<span class="input-group-text">*</span>
break;
}
case "Percentage":
{
<span class="input-group-text">%</span>
break;
}
}
</option>
}
</select>
</div>*@
}
</div>
<div class="col-md-12 col-lg-6">
@@ -129,35 +125,6 @@
Index="i"
EC_Update="UpdateDimension">
</EditSplitDimensions>
@* <div class="input-group mb-2">
<span class="input-group-text">Height</span>
<input type="number" class="form-control" @bind="@dim.dDimension">
<select class="form-select" style="max-width:6rem; background-color:#e9ecef" @bind="@dim.SelMeasureTypeIndex">
@foreach (var mType in dim.MeasureTypeList)
{
<option value=@(mType.Id)>
@switch (mType.Name)
{
case "Absolute":
{
<span class="input-group-text">mm</span>
break;
}
case "Proportional":
{
<span class="input-group-text">*</span>
break;
}
case "Percentage":
{
<span class="input-group-text">%</span>
break;
}
}
</option>
}
</select>
</div> *@
}
</div>
}
@@ -170,37 +137,6 @@
Index="i"
EC_Update="UpdateDimension">
</EditSplitDimensions>
@* <div class="col-md-12 col-lg-6">
<div class="input-group mb-2">
<span class="input-group-text">Height</span>
<input type="number" class="form-control" @bind="@dim.dDimension">
<select class="form-select" style="max-width:6rem; background-color:#e9ecef" @bind="@dim.SelMeasureTypeIndex">
@foreach (var mType in dim.MeasureTypeList)
{
<option value=@(mType.Id)>
@switch (mType.Name)
{
case "Absolute":
{
<span class="input-group-text">mm</span>
break;
}
case "Proportional":
{
<span class="input-group-text">*</span>
break;
}
case "Percentage":
{
<span class="input-group-text">%</span>
break;
}
}
</option>
}
</select>
</div>
</div> *@
}
}
else if (CurrSplit.SplitVertList.Count > 0)
@@ -212,37 +148,6 @@
Index="i"
EC_Update="UpdateDimension">
</EditSplitDimensions>
@* <div class="col-md-12 col-lg-6">
<div class="input-group mb-2">
<span class="input-group-text">Width</span>
<input type="number" class="form-control" @bind="@dim.dDimension">
<select class="form-select" style="max-width:6rem; background-color:#e9ecef" @bind="@dim.SelMeasureTypeIndex">
@foreach (var mType in dim.MeasureTypeList)
{
<option value=@(mType.Id)>
@switch (mType.Name)
{
case "Absolute":
{
<span class="input-group-text">mm</span>
break;
}
case "Proportional":
{
<span class="input-group-text">*</span>
break;
}
case "Percentage":
{
<span class="input-group-text">%</span>
break;
}
}
</option>
}
</select>
</div>
</div> *@
}
}
</div>
@@ -252,7 +157,14 @@
<div class="col-md-12 col-lg-6">
<div class="d-flex justify-content-start fs-5 mb-2">
<div class="px-1">
<input class="form-check-input ml-auto" type="checkbox" name="SplitStartVert" checked="@CurrSplit.bSplitStartVert" @oninput="(ChangeEventArgs e) => ChangeStartVert(e)">
@if (User)
{
<input class="form-check-input ml-auto" disabled="disabled" type="checkbox" name="SplitStartVert" checked="@CurrSplit.bSplitStartVert">
}
else
{
<input class="form-check-input ml-auto" type="checkbox" name="SplitStartVert" checked="@CurrSplit.bSplitStartVert" @oninput="(ChangeEventArgs e) => ChangeStartVert(e)">
}
</div>
<div class="px-2">
<label class="form-check-label fs-6 text-dark">StartVert</label>
@@ -33,6 +33,12 @@ namespace WebWindowComplex.Compo
[Parameter]
public Frame FrameWindow { get; set; } = null!;
/// <summary>
/// Livello di accesso (utente base)
/// </summary>
[CascadingParameter(Name = "User")]
public bool User { get; set; } = false!;
/// <summary>
/// Evento per richiedere reset dizionario
/// </summary>
+23 -15
View File
@@ -1,23 +1,31 @@
@using static WebWindowComplex.LayoutConst
<div class="input-group mb-2">
<label class="input-group-text">@((PositionJoints)(CurrRec.nIndex - 1))</label>
@if (CurrRec.ParentArea is Frame &&
(CurrRec.ParentArea.ParentWindow.AreaList.First().SelShapeIndex == (int)Json.WindowConst.Shapes.DOUBLEARC ||
CurrRec.ParentArea.ParentWindow.AreaList.First().SelShapeIndex == (int)Json.WindowConst.Shapes.ARC_FULL ||
CurrRec.ParentArea.ParentWindow.AreaList.First().SelShapeIndex == (int)Json.WindowConst.Shapes.THREECENTERARC) &&
(CurrRec.nIndex == 3 || CurrRec.nIndex == 4))
@if (User)
{
<select class="form-select" @bind="@CurrJoint">
<option value="@(CurrJoint)">@(CurrRec.JointTypeList.First(x => x.Id == CurrJoint).Name)</option>
</select>
<span class="input-group-text">@((PositionJoints)(CurrRec.nIndex - 1))</span>
<input type="text" readonly class="form-control" value="@(CurrRec.JointTypeList.FirstOrDefault(x => x.Id == (int)CurrRec.SelJointType))">
}
else
{
<select class="form-select" @bind="@CurrJoint">
@foreach (var typeJoint in CurrRec.JointTypeList)
{
<option value="@(typeJoint.Id)">@(typeJoint.Name)</option>
}
</select>
<label class="input-group-text">@((PositionJoints)(CurrRec.nIndex - 1))</label>
@if (CurrRec.ParentArea is Frame &&
(CurrRec.ParentArea.ParentWindow.AreaList.First().SelShapeIndex == (int)Json.WindowConst.Shapes.DOUBLEARC ||
CurrRec.ParentArea.ParentWindow.AreaList.First().SelShapeIndex == (int)Json.WindowConst.Shapes.ARC_FULL ||
CurrRec.ParentArea.ParentWindow.AreaList.First().SelShapeIndex == (int)Json.WindowConst.Shapes.THREECENTERARC) &&
(CurrRec.nIndex == 3 || CurrRec.nIndex == 4))
{
<select class="form-select" @bind="@CurrJoint">
<option value="@(CurrJoint)">@(CurrRec.JointTypeList.First(x => x.Id == CurrJoint).Name)</option>
</select>
}
else
{
<select class="form-select" @bind="@CurrJoint">
@foreach (var typeJoint in CurrRec.JointTypeList)
{
<option value="@(typeJoint.Id)">@(typeJoint.Name)</option>
}
</select>
}
}
</div>
@@ -17,6 +17,12 @@ namespace WebWindowComplex.Compo
[Parameter]
public EventCallback<Joint> EC_Update { get; set; }
/// <summary>
/// Livello di accesso (utente base)
/// </summary>
[CascadingParameter(Name = "User")]
public bool User { get; set; } = false!;
#endregion Public Properties
#region Private Properties
+20 -5
View File
@@ -1,9 +1,24 @@
<div class="input-group mb-2">
<label class="input-group-text">@(CurrOpt.sName)</label>
<select class="form-select" @bind="CurrValue">
@foreach (var currValueCombo in CurrOpt.ValueList)
@if (User)
{
<span class="input-group-text">@(CurrOpt.sName)</span>
@if (CurrValue is String)
{
<option value="@currValueCombo.sValue">@currValueCombo.sDescription</option>
<input type="text" readonly class="form-control" value="@CurrOpt.ValueList.FirstOrDefault(x => x.sValue.Equals(CurrValue)).sDescription">
}
</select>
else
{
<input type="number" readonly class="form-control" value="@CurrOpt.ValueList.FirstOrDefault(x => x.sValue == CurrValue).sDescription">
}
}
else
{
<label class="input-group-text">@(CurrOpt.sName)</label>
<select class="form-select" @bind="CurrValue">
@foreach (var currValueCombo in CurrOpt.ValueList)
{
<option value="@currValueCombo.sValue">@currValueCombo.sDescription</option>
}
</select>
}
</div>
@@ -13,6 +13,12 @@ namespace WebWindowComplex.Compo
[Parameter]
public AGBOptionCombo CurrOpt { get; set; } = null!;
/// <summary>
/// Livello di accesso (utente base)
/// </summary>
[CascadingParameter(Name = "User")]
public bool User { get; set; } = false!;
[Parameter]
public EventCallback<AGBOptionCombo> EC_Update { get; set; }
+47 -13
View File
@@ -1,22 +1,56 @@
<div class="input-group mb-2">
<label class="input-group-text">@(CurrOpt.sName)</label>
@if (CurrOpt.sName.Equals("HMan"))
@if (User)
{
<input type="number" class="form-control" @bind="@CurrValue">
}
else if (CurrOpt.ValueList.Count > 0)
{
<select class="form-select" @bind="CurrValue">
@foreach (var currValueCombo in CurrOpt.ValueList)
<span class="input-group-text">@(CurrOpt.sName)</span>
@if (CurrOpt.sName.Equals("HMan"))
{
<input type="number" readonly class="form-control" value="@CurrValue">
}
else if (CurrOpt.ValueList.Count > 0)
{
if (CurrValue is String)
{
<option value="@currValueCombo">@currValueCombo</option>
<input type="text" readonly class="form-control" value="@CurrValue">
}
</select>
else
{
<input type="number" readonly class="form-control" value="@CurrValue">
}
}
else
{
if (CurrValue is String)
{
<input type="text" readonly class="form-control" value="@CurrValue">
}
else
{
<input type="number" readonly class="form-control" value="@CurrValue">
}
}
}
else
{
<select class="form-select" @bind="CurrValue">
<option value="@CurrOpt.sValue">@CurrOpt.sValue</option>
</select>
<label class="input-group-text">@(CurrOpt.sName)</label>
@if (CurrOpt.sName.Equals("HMan"))
{
<input type="number" class="form-control" @bind="@CurrValue">
}
else if (CurrOpt.ValueList.Count > 0)
{
<select class="form-select" @bind="CurrValue">
@foreach (var currValueCombo in CurrOpt.ValueList)
{
<option value="@currValueCombo">@currValueCombo</option>
}
</select>
}
else
{
<select class="form-select" @bind="CurrValue">
<option value="@CurrOpt.sValue">@CurrOpt.sValue</option>
</select>
}
}
</div>
@@ -13,6 +13,12 @@ namespace WebWindowComplex.Compo
[Parameter]
public AGBOptionText CurrOpt { get; set; } = null!;
/// <summary>
/// Livello di accesso (utente base)
/// </summary>
[CascadingParameter(Name = "User")]
public bool User { get; set; } = false!;
[Parameter]
public EventCallback<AGBOptionText> EC_Update { get; set; }
+60 -28
View File
@@ -14,22 +14,38 @@
<div class="row">
<div class="col-md-12 col-lg-6 d-flex flex-column gap-2 flex-wrap">
<div class="input-group mb-2 justify-content-center">
<label class="input-group-text">Material</label>
<select class="form-select @(cssValid("Material"))" @bind="CurrMaterial">
@foreach (var item in ListPayload.Material)
{
<option value="@item">@item</option>
}
</select>
@if (User)
{
<span class="input-group-text">Material</span>
<input type="text" readonly class="form-control" value="@(CurrMaterial)">
}
else
{
<label class="input-group-text">Material</label>
<select class="form-select @(cssValid("Material"))" @bind="CurrMaterial">
@foreach (var item in ListPayload.Material)
{
<option value="@item">@item</option>
}
</select>
}
</div>
<div class="input-group mb-2">
<label class="input-group-text">Profile</label>
<select class="form-select @(cssValid("Profile"))" @bind="@CurrProfile">
@foreach (string profile in ListPayload.Profile)
{
<option value="@profile">@profile</option>
}
</select>
@if (User)
{
<span class="input-group-text">Profile</span>
<input type="text" readonly class="form-control" value="@(CurrProfile)">
}
else
{
<label class="input-group-text">Profile</label>
<select class="form-select @(cssValid("Profile"))" @bind="@CurrProfile">
@foreach (string profile in ListPayload.Profile)
{
<option value="@profile">@profile</option>
}
</select>
}
</div>
</div>
</div>
@@ -41,13 +57,21 @@
</div>
<div class="row">
<div class="input-group mb-2">
<label class="input-group-text">Glass</label>
<select class="form-select @(cssValid("Glass"))" @bind="@CurrGlass">
@foreach (string glass in ListPayload.Glass)
{
<option value="@glass">@glass</option>
}
</select>
@if (User)
{
<span class="input-group-text">Glass</span>
<input type="text" readonly class="form-control" value="@(CurrGlass)">
}
else
{
<label class="input-group-text">Glass</label>
<select class="form-select @(cssValid("Glass"))" @bind="@CurrGlass">
@foreach (string glass in ListPayload.Glass)
{
<option value="@glass">@glass</option>
}
</select>
}
</div>
<div class="input-group mb-2">
<label class="input-group-text">Pannello</label>
@@ -65,13 +89,21 @@
</div>
<div class ="row">
<div class="input-group mb-2">
<label class="input-group-text">Window</label>
<select class="form-select @(cssValid("ColorMaterial"))" @bind="@CurrColor">
@foreach (string colorMaterial in ListPayload.ColorMaterial)
{
<option value="@colorMaterial">@colorMaterial</option>
}
</select>
@if (User)
{
<span class="input-group-text">Window</span>
<input type="text" readonly class="form-control" value="@(CurrColor)">
}
else
{
<label class="input-group-text">Window</label>
<select class="form-select @(cssValid("ColorMaterial"))" @bind="@CurrColor">
@foreach (string colorMaterial in ListPayload.ColorMaterial)
{
<option value="@colorMaterial">@colorMaterial</option>
}
</select>
}
</div>
<div class="input-group mb-2">
<label class="input-group-text">Trunking</label>
+3
View File
@@ -14,6 +14,9 @@ namespace WebWindowComplex.Compo
[Parameter]
public Window CurrWindow { get; set; } = null!;
[Parameter]
public bool User { get; set; } = false!;
[Parameter]
public EventCallback<DataUpdateGeneral> EC_UpdateGeneral { get; set; }
+58 -43
View File
@@ -77,8 +77,8 @@
@if (currStep == CompileStep.Tree)
{
<CardTree ItemTableList="m_ItemTableList"
maxCol="m_maxCol"
EC_NextStep="NextStepArgs">
maxCol="m_maxCol"
EC_NextStep="NextStepArgs">
</CardTree>
}
else if (currStep == CompileStep.Frame)
@@ -87,14 +87,16 @@
{
m_PreviousWindow = m_CurrWindow;
}
<CascadingValue Value="FrameWindow" Name="CurrFrameWindow">
<CascadingValue Value="m_SashList" Name="SashList">
<CascadingValue Value="m_SplitList" Name="SplitList">
<CardFrame EC_ReqResetDict="ReqResetDict"
EC_ReqOptionHw="UpdateHwOptionsFrame"
EC_UpdateFrame="UpdatePreviewFrame"
EC_ReqClose="ReturnTree">
</CardFrame>
<CascadingValue Value="baseUser" Name="User">
<CascadingValue Value="FrameWindow" Name="CurrFrameWindow">
<CascadingValue Value="m_SashList" Name="SashList">
<CascadingValue Value="m_SplitList" Name="SplitList">
<CardFrame EC_ReqResetDict="ReqResetDict"
EC_ReqOptionHw="UpdateHwOptionsFrame"
EC_UpdateFrame="UpdatePreviewFrame"
EC_ReqClose="ReturnTree">
</CardFrame>
</CascadingValue>
</CascadingValue>
</CascadingValue>
</CascadingValue>
@@ -107,15 +109,17 @@
}
else
{
<CardSplit CurrSplit="SplitList[currSplitIndex]"
SashList="SashList"
SplitList="SplitList"
FrameWindow="FrameWindow"
EC_UpdateFrame="UpdatePreviewFrame"
EC_ReqResetDict="ReqResetDict"
EC_UpdateSplit="UpdatePreviewSplit"
EC_ReqClose="ReturnTree">
</CardSplit>
<CascadingValue Value="baseUser" Name="User">
<CardSplit CurrSplit="SplitList[currSplitIndex]"
SashList="SashList"
SplitList="SplitList"
FrameWindow="FrameWindow"
EC_UpdateFrame="UpdatePreviewFrame"
EC_ReqResetDict="ReqResetDict"
EC_UpdateSplit="UpdatePreviewSplit"
EC_ReqClose="ReturnTree">
</CardSplit>
</CascadingValue>
}
}
else if (currStep == CompileStep.Sash)
@@ -126,17 +130,19 @@
}
else
{
<CascadingValue Value="currLoading" Name="IsLoading">
<CascadingValue Value="SashList[currSashIndex]" Name="CurrSashGroup">
<CascadingValue Value="SashList" Name="SashList">
<CardSashGroup FrameWindow="FrameWindow"
EC_UpdateFrame="UpdatePreviewFrame"
EC_UpdateSashGroup="UpdatePreviewSashGroup"
EC_ReqResetDict="ReqResetDict"
EC_ReqOptionHw="UpdateHwOptionsSash"
EC_ReqFirstOptionHw="ReqFirstOptionHw"
EC_ReqClose="ReturnTree">
</CardSashGroup>
<CascadingValue Value="baseUser" Name="User">
<CascadingValue Value="currLoading" Name="IsLoading">
<CascadingValue Value="SashList[currSashIndex]" Name="CurrSashGroup">
<CascadingValue Value="SashList" Name="SashList">
<CardSashGroup FrameWindow="FrameWindow"
EC_UpdateFrame="UpdatePreviewFrame"
EC_UpdateSashGroup="UpdatePreviewSashGroup"
EC_ReqResetDict="ReqResetDict"
EC_ReqOptionHw="UpdateHwOptionsSash"
EC_ReqFirstOptionHw="ReqFirstOptionHw"
EC_ReqClose="ReturnTree">
</CardSashGroup>
</CascadingValue>
</CascadingValue>
</CascadingValue>
</CascadingValue>
@@ -151,9 +157,10 @@
else
{
<CardFill CurrIndex="currFillIndex"
CurrFill="FillList[currFillIndex]"
EC_UpdateFill="UpdatePreviewFill"
EC_ReqClose="ReturnTree">
CurrFill="FillList[currFillIndex]"
User="baseUser"
EC_UpdateFill="UpdatePreviewFill"
EC_ReqClose="ReturnTree">
</CardFill>
<div class="card shadow-sm rounded mb-2">
<div class="card-body py-2">
@@ -162,15 +169,29 @@
<h5 class="text-center text-nowrap">All fill</h5>
</div>
<div class="input-group mb-2 justify-content-center">
<button class="btn btn-outline-secondary btn-sm" @onclick="() => ChangeAllFill(WebWindowComplex.Json.WindowConst.FillTypes.GLASS)">All glass</button>
@if (baseUser)
{
<button class="@buttonFillCss(Json.WindowConst.FillTypes.GLASS)">All glass</button>
}
else
{
<button class="@buttonFillCss(Json.WindowConst.FillTypes.GLASS)" @onclick="() => ChangeAllFill(WebWindowComplex.Json.WindowConst.FillTypes.GLASS)">All glass</button>
}
</div>
<div class="input-group mb-2 justify-content-center">
<button class="btn btn-outline-secondary btn-sm" @onclick="() => ChangeAllFill(WebWindowComplex.Json.WindowConst.FillTypes.WOOD)">All wood</button>
@if (baseUser)
{
<button class="@buttonFillCss(Json.WindowConst.FillTypes.WOOD)">All wood</button>
}
else
{
<button class="@buttonFillCss(Json.WindowConst.FillTypes.WOOD)" @onclick="() => ChangeAllFill(WebWindowComplex.Json.WindowConst.FillTypes.WOOD)">All wood</button>
}
</div>
</div>
</div>
</div>
@if(SplittedList != null && SplittedList.Count > 0)
@if(!baseUser && SplittedList != null && SplittedList.Count > 0)
{
Splitted currSplitted = SplittedList.Where(x => x.AreaList.First().Equals(FillList[currFillIndex])).FirstOrDefault()?? new Splitted(null, null);
@if (currSplitted.ParentArea != null && currSplitted.ParentWindow != null){
@@ -181,13 +202,6 @@
</AreaSplit>
}
}
@* @foreach (var currSplitted in m_SplittedList)
{
@if (currSplitted.AreaList.First().Equals(FillList[currFillIndex]))
{
}
} *@
}
}
else if (currStep == CompileStep.General)
@@ -195,6 +209,7 @@
<General CurrWindow="m_CurrWindow"
ListPayload="ListPayload"
ListWarnings="listWarnings"
User="baseUser"
EC_UpdateGeneral="UpdatePreviewGeneral"
EC_ReqClose="ReturnTree">
</General>
+20
View File
@@ -92,6 +92,12 @@ namespace WebWindowComplex
[Parameter]
public LivePayload LiveData { get; set; } = null!;
/// <summary>
/// Livello di accesso (utente base)
/// </summary>
[Parameter]
public bool baseUser { get; set; } = false!;
#endregion Public Properties
#region Public Methods
@@ -1294,6 +1300,20 @@ namespace WebWindowComplex
}
}
/// <summary>
/// Calcola bottone per tutti i Fill
/// </summary>
/// <returns></returns>
private string buttonFillCss(FillTypes reqFillTypes)
{
foreach (var fill in FillList)
{
if (!fill.FillType.Equals(reqFillTypes))
return "btn btn-outline-secondary btn-sm";
}
return "btn btn-secondary btn-sm";
}
#endregion Private Methods
}
}
+1 -439
View File
@@ -6,7 +6,7 @@
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<Version>2.7.1.1615</Version>
<Version>2.7.1.1910</Version>
<Authors>Annamaria Sassi</Authors>
<Company>Egalware</Company>
<Description>Componente gestione Configurazioni avanzate Window per LUX</Description>
@@ -30,441 +30,3 @@
</Project>
@@ -6,7 +6,7 @@
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<Version>2.7.1.1615</Version>
<Version>2.7.1.1910</Version>
<Authors>Annamaria Sassi</Authors>
<Company>Egalware</Company>
<Description>Componente gestione JWD per LUX</Description>
@@ -37,630 +37,3 @@
</Target>
</Project>