Добавил wizard
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 12s

This commit is contained in:
2026-07-08 16:19:15 +03:00
parent fd6506af7b
commit 6d61bce884
9 changed files with 371 additions and 30 deletions
+1 -5
View File
@@ -17,16 +17,12 @@ public class ObjectController : ControllerBase
//=========================== GET =================================//
[HttpGet("GetObject")]
[ProducesResponseType<List<ObjectItem>>(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status204NoContent)]
public IActionResult GetList()
{
using (var db = new SQLiteService())
{
var oi = db.ObjectItems.ToList();
//if (oi.Count != 0)
return Ok(oi);
//else return NoContent();
}
}
@@ -65,7 +61,7 @@ public class ObjectController : ControllerBase
{
using (var db = new SQLiteService())
{
db.ObjectItems.Add(o);//.Where(u => u.Name == name).FirstOrDefault();
db.ObjectItems.Add(o);
db.SaveChanges();
return Created();
}
+10 -9
View File
@@ -10,17 +10,18 @@
public string? Location { get; set; }
public List<DeviceItem>? ListDevices { get; set; }
public DeviceType? DeviceType { get; set; }
public ObjectItem? DeviceObject { get; set; }
public int ConnectedToSwitchId { get; set; }
public int ConnectedToPortOnSwitch { get; set; }
}
//Unknown = 0,
//SwitchCore = 1,
//SwitchAccess = 2,
//Camera = 3,
//Server = 4,
//WorkStation = 5,
//PDU_AVR = 6,
//Unknown = 0,
//SwitchCore = 1,
//SwitchAccess = 2,
//Camera = 3,
//Server = 4,
//WorkStation = 5,
//PDU_AVR = 6,
}
+1
View File
@@ -4,5 +4,6 @@
{
public int Id { get; set; }
public string Name { get; set; }
public string? Description { get; set; }
}
}
+1 -1
View File
@@ -4,6 +4,6 @@
{
public int Id { get; set; }
public string NameObject { get; set; } = "Unknown";
public string DescriptionObject { get; set; } = string.Empty;
public string? DescriptionObject { get; set; } = null;
}
}
+7 -14
View File
@@ -32,25 +32,18 @@
</BarDropdown>
</BarItem>
</BarStart>
@* <BarEnd>
<BarEnd>
<BarItem>
<BarDropdown>
<BarDropdownToggle>
<BarIcon IconName="IconName.Smartphone" />
Apps
</BarDropdownToggle>
<BarDropdownMenu>
<BarDropdownItem To="/apps/todo">
Todo
</BarDropdownItem>
</BarDropdownMenu>
</BarDropdown>
<BarLink To="/setting/wizard">
<BarIcon IconName="IconName.CaretSquareRight" />
Wizard
</BarLink>
</BarItem>
</BarEnd> *@
</BarEnd>
</BarMenu>
</Bar>
@code {
private bool pagesBarVisible = false;
RenderFragment customIcon =@<img src="/brand-logo.png" style="width:32px; height: 32px" />;
RenderFragment customIcon = @<img src="/brand-logo.png" style="width:32px; height: 32px" />;
}
+27
View File
@@ -0,0 +1,27 @@
namespace Visor.Models
{
public class DeviceItems
{
public int Id { get; set; }
public string? Ip { get; set; }
public string? Mac { get; set; }
public string? Description { get; set; }
public string? Name { get; set; }
public string? Location { get; set; }
public List<DeviceItems>? ListDevices { get; set; }
public DeviceTypeItems? DeviceType { get; set; }
public ObjectItems? DeviceObject { get; set; }
public int ConnectedToSwitchId { get; set; }
public int ConnectedToPortOnSwitch { get; set; }
}
//Unknown = 0,
//SwitchCore = 1,
//SwitchAccess = 2,
//Camera = 3,
//Server = 4,
//WorkStation = 5,
//PDU_AVR = 6,
}
+9
View File
@@ -0,0 +1,9 @@
namespace Visor.Models
{
public class DeviceTypeItems
{
public int Id { get; set; }
public string Name { get; set; }
public string? Description { get; set; } = null;
}
}
@@ -161,7 +161,7 @@
<AddonLabel>Id</AddonLabel>
</Addon>
<Addon AddonType="AddonType.Body">
<Select TValue="int" @bind-Value="@select_id">
<Select @bind-Value="@select_id">
<SelectItem Value="9999">Объект</SelectItem>
@foreach (var item in listObjects)
{
+314
View File
@@ -0,0 +1,314 @@
@page "/setting/wizard"
@using Visor.Models
<h3>Wizard</h3>
<Steps @ref="stepsRef" @bind-SelectedStep="@selectedStep" NavigationAllowed="NavigationAllowed">
<Items>
<Step Name="1">Объекты</Step>
<Step Name="2">Типы</Step>
<Step Name="3">Устройства</Step>
<Step Name="4">Итог</Step>
</Items>
<Content>
<StepPanel Name="1">
<Row>
<Column ColumnSize="ColumnSize.Is3">
<Field>
<TextInput Autofocus="true" @bind-Value="obj_name" Placeholder="Название объекта">
<FieldHelp>Введите название объекта. Например: VNK, SPB...</FieldHelp>
</TextInput>
</Field>
</Column>
<Column ColumnSize="ColumnSize.Is8">
<Field>
<TextInput @bind-Value="obj_desc" Placeholder="Описание объекта">
<FieldHelp>Введите текстовое описание объекта</FieldHelp>
</TextInput>
</Field>
</Column>
<Column ColumnSize="ColumnSize.Is1">
<Field>
<Button Color="Color.Primary" Clicked="@AddNewObject">
<Icon Name="IconName.Add" />
</Button>
</Field>
</Column>
</Row>
<Row>
<Table>
<TableHeader>
<TableRow>
<TableHeaderCell>#</TableHeaderCell>
<TableHeaderCell>Название объекта</TableHeaderCell>
<TableHeaderCell>Описание объекта</TableHeaderCell>
</TableRow>
</TableHeader>
<TableBody>
@foreach (var item in list_obj)
{
<TableRow>
<TableRowHeader>@item.Id</TableRowHeader>
<TableRowCell>@item.NameObject</TableRowCell>
<TableRowCell>@item.DescriptionObject</TableRowCell>
</TableRow>
}
</TableBody>
</Table>
</Row>
</StepPanel>
<StepPanel Name="2">
<Row>
<Column ColumnSize="ColumnSize.Is3">
<Field>
<TextInput Autofocus="true" @bind-Value="type_name" Placeholder="Название типа устройства">
<FieldHelp>Введите название типа. Например: Server, Switch...</FieldHelp>
</TextInput>
</Field>
</Column>
<Column ColumnSize="ColumnSize.Is8">
<Field>
<TextInput @bind-Value="type_desc" Placeholder="Описание типа">
<FieldHelp>Введите текстовое описание типа устройства</FieldHelp>
</TextInput>
</Field>
</Column>
<Column ColumnSize="ColumnSize.Is1">
<Field>
<Button Clicked="@AddNewType">
<Icon Name="IconName.Add" />
</Button>
</Field>
</Column>
</Row>
<Row>
<Table>
<TableHeader>
<TableRow>
<TableHeaderCell>#</TableHeaderCell>
<TableHeaderCell>Тип устройства</TableHeaderCell>
<TableHeaderCell>Описание типа устройств</TableHeaderCell>
</TableRow>
</TableHeader>
<TableBody>
@foreach (var item in list_type)
{
<TableRow>
<TableRowHeader>@item.Id</TableRowHeader>
<TableRowCell>@item.Name</TableRowCell>
<TableRowCell>@item.Description</TableRowCell>
</TableRow>
}
</TableBody>
</Table>
</Row>
</StepPanel>
<StepPanel Name="3">
<Card>
<CardBody>
<CardTitle Size="HeadingSize.Is2">
Добавление устройства
</CardTitle>
<CardText>
<Addons Size="Size.Small">
<Addon AddonType="AddonType.Start" >
<AddonLabel Width="Width.Is25">IP</AddonLabel>
</Addon>
<Addon AddonType="AddonType.Body">
<InputMask Width="Width.Is50" Mask="999.999.999.999" MaskPlaceholder="X" Placeholder="Введите IP" />
</Addon>
</Addons>
<Addons Size="Size.Small">
<Addon AddonType="AddonType.Start">
<AddonLabel Width="Width.Is25">MAC</AddonLabel>
</Addon>
<Addon AddonType="AddonType.Body">
<InputMask Width="Width.Is50" Mask="****-****-****" MaskPlaceholder="X" Placeholder="Введите MAC" />
</Addon>
</Addons>
<Addons Size="Size.Small">
<Addon AddonType="AddonType.Start">
<AddonLabel Width="Width.Is25">Название</AddonLabel>
</Addon>
<Addon AddonType="AddonType.Body">
<TextInput Width="Width.Is50" Placeholder="Введите название устройства" />
</Addon>
</Addons>
<Addons Size="Size.Small">
<Addon AddonType="AddonType.Start">
<AddonLabel Width="Width.Is25">Описание</AddonLabel>
</Addon>
<Addon AddonType="AddonType.Body">
<TextInput Width="Width.Is50" Placeholder="Введите описание устройства"/>
</Addon>
</Addons>
<Addons Size="Size.Small">
<Addon AddonType="AddonType.Start">
<AddonLabel Width="Width.Is25">Место установки</AddonLabel>
</Addon>
<Addon AddonType="AddonType.Body">
<TextInput Width="Width.Is50" Placeholder="Введите где установлено устройство" />
</Addon>
</Addons>
<Addons Size="Size.Small">
<Addon AddonType="AddonType.Start">
<AddonLabel Width="Width.Is25">Тип устройства</AddonLabel>
</Addon>
<Addon AddonType="AddonType.Body">
<Select Width="Width.Is50" TValue="int" @bind-Value="@id_type">
<SelectItem Value="999">Тип устройства</SelectItem>
@foreach (var sel in list_type)
{
<SelectItem Value="@sel.Id">@sel.Name</SelectItem>
}
</Select>
</Addon>
</Addons>
<Addons Size="Size.Small">
<Addon AddonType="AddonType.Start">
<AddonLabel Width="Width.Is25">Объект</AddonLabel>
</Addon>
<Addon AddonType="AddonType.Body">
<Select Width="Width.Is50" TValue="int" @bind-Value="@id_obj">
<SelectItem Value="999">На объекте</SelectItem>
@foreach (var sel in list_obj)
{
<SelectItem Value="@sel.Id">@sel.NameObject</SelectItem>
}
</Select>
</Addon>
</Addons>
<Addons Size="Size.Small">
<Addon AddonType="AddonType.Start">
<AddonLabel Width="Width.Is25">Подключен к</AddonLabel>
</Addon>
<Addon AddonType="AddonType.Body">
<Select Width="Width.Is50" TValue="int" @bind-Value="@id_dev">
<SelectItem Value="999">коммутатор</SelectItem>
@foreach (var sel in list_switch)
{
<SelectItem Value="@sel.Id">@sel.Name</SelectItem>
}
</Select>
</Addon>
<Addon AddonType="AddonType.End">
<Button Clicked="@RefreshListSwitch">
<Icon Name="IconName.Undo"/>
</Button>
</Addon>
</Addons>
<Addons Size="Size.Small">
<Addon AddonType="AddonType.Start">
<AddonLabel Width="Width.Is25">Порт подключения</AddonLabel>
</Addon>
<Addon AddonType="AddonType.Body">
<NumericInput @bind-Value="@num_port" Min="1" Max="28" Width="Width.Is50"/>
</Addon>
</Addons>
<Button Width="Width.Is100" Clicked="@AddNewDev">Добавить</Button>
</CardText>
</CardBody>
</Card>
</StepPanel>
<StepPanel Name="4">
Итог
</StepPanel>
</Content>
</Steps>
<Div Flex="Flex.JustifyContent.Center">
<Button Color="Color.Secondary" Margin="Margin.Is2.FromEnd" Clicked="() => stepsRef.PreviousStep()">
Назад
</Button>
<Button Color="Color.Primary" Clicked="() => stepsRef.NextStep()">
@nextButton
</Button>
</Div>
@code {
private Steps stepsRef;
private ObjectItems obj_item;
private DeviceTypeItems type_item;
private DeviceItems dev_item;
private List<ObjectItems> list_obj = new();
private List<DeviceTypeItems> list_type = new();
private static List<DeviceItems> list_dev = new();
private List<DeviceItems> list_switch = new();
private string email, nextButton = "Далее";
private string selectedStep = "1";
private int id_type, id_obj, id_dev, num_port;
private string obj_name, obj_desc;
private string type_name, type_desc;
private string dev_ip, dev_mac, dev_desc, dev_name, dev_loc;
private Task<bool> NavigationAllowed(StepNavigationContext context)
{
if (context.CurrentStepIndex == 3 && context.NextStepIndex == 4)
{
nextButton = "Сохранить";
//return Task.FromResult(true);
}
if (context.CurrentStepIndex == 4 && context.NextStepIndex > 4)
{
//return Task.FromResult(false);
}
if (context.CurrentStepIndex == 4 && context.NextStepIndex < 4)
{
nextButton = "Далее";
}
return Task.FromResult(true);
}
private void RefreshListSwitch()
{
list_switch = list_dev.Where(s => s.DeviceType.Name.Contains("Switch")).ToList();
if (list_switch.Count == 0)
id_dev = 0;
}
private void AddNewObject()
{
obj_item = new()
{
NameObject = obj_name,
DescriptionObject = obj_desc,
Id = list_obj.Count + 1
};
list_obj.Add(obj_item);
obj_name = string.Empty;
obj_desc = string.Empty;
}
private void AddNewType()
{
type_item = new()
{
Name = type_name,
Description = type_desc,
Id = list_type.Count + 1
};
list_type.Add(type_item);
type_name = string.Empty;
type_desc = string.Empty;
}
private void AddNewDev()
{
dev_item = new()
{
Id = list_type.Count + 1,
Ip = dev_ip,
Mac = dev_mac,
Description = dev_desc,
Name = dev_name,
Location = dev_loc,
DeviceType = list_type.SingleOrDefault(t => t.Id == id_type),
DeviceObject = list_obj.SingleOrDefault(o => o.Id == id_obj)
};
list_dev.Add(dev_item);
type_name = string.Empty;
type_desc = string.Empty;
}
}