Проверки и отправка в Visor
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 11s

This commit is contained in:
2026-07-13 15:11:05 +03:00
parent 6d61bce884
commit 2883b537ab
14 changed files with 517 additions and 303 deletions
+4 -36
View File
@@ -9,28 +9,16 @@ namespace Strela.Controllers;
[Route("api/[controller]")] [Route("api/[controller]")]
public class DeviceController : ControllerBase public class DeviceController : ControllerBase
{ {
private readonly ILogger<UserController> _logger; private readonly ILogger<DeviceController> _logger;
public DeviceController(ILogger<UserController> logger) public DeviceController(ILogger<DeviceController> logger)
{ {
_logger = logger; _logger = logger;
} }
//=========================== GET =================================// //=========================== GET =================================//
#region GET #region GET
[HttpGet("GetTypes")]
[ProducesResponseType<List<DeviceType>>(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status204NoContent)]
public IActionResult GetList()// Получить лист типов устройств
{
using (var db = new SQLiteService())
{
var tps = db.DeviceTypes.ToList();
if (tps.Count != 0)
return Ok(tps);
else return NoContent();
}
}
[HttpGet("GetDeviceById")] [HttpGet("GetDeviceById")]
[ProducesResponseType<DeviceItem>(StatusCodes.Status200OK)] [ProducesResponseType<DeviceItem>(StatusCodes.Status200OK)]
@@ -74,31 +62,11 @@ public class DeviceController : ControllerBase
} }
} }
[HttpPost("AddType")]
public IActionResult AddType(DeviceType d) //Добавить один тип устройства
{
using (var db = new SQLiteService())
{
db.DeviceTypes.Add(d);//.Where(u => u.Name == name).FirstOrDefault();
db.SaveChanges();
return Created();
}
}
#endregion #endregion
//========================= DELETE ====================================// //========================= DELETE ====================================//
#region DELETE #region DELETE
[HttpDelete("DelType")]
public IActionResult DelType(int id) //Удалить тип устройства по id
{
using (var db = new SQLiteService())
{
var deldevtype = db.DeviceTypes.Where(u => u.Id == id).FirstOrDefault();
db.DeviceTypes.Remove(deldevtype);
db.SaveChanges();
return Ok();
}
}
[HttpDelete("DelDevice")] [HttpDelete("DelDevice")]
public IActionResult DelDevice(int id) //Удалить устройство по id public IActionResult DelDevice(int id) //Удалить устройство по id
+77
View File
@@ -0,0 +1,77 @@
using Microsoft.AspNetCore.Http.HttpResults;
using Microsoft.AspNetCore.Mvc;
using Strela.Models;
using Strela.Services;
namespace Strela.Controllers;
[ApiController]
[Route("api/[controller]")]
public class TypeController : ControllerBase
{
private readonly ILogger<TypeController> _logger;
public TypeController(ILogger<TypeController> logger)
{
_logger = logger;
}
//=========================== GET =================================//
#region GET
[HttpGet("GetTypes")]
public IActionResult GetList()// Получить лист типов устройств
{
using (var db = new SQLiteService())
{
var tps = db.DeviceTypes.ToList();
return Ok(tps);
}
}
[HttpGet("GetTypeById")]
[ProducesResponseType<DeviceItem>(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status204NoContent)]
public IActionResult GetById(int id) // Получить устройство по id
{
using (var db = new SQLiteService())
{
var d = db.DeviceTypes.Where(d => d.Id == id).FirstOrDefault();
if (d != null)
return Ok(d);
else return NoContent();
}
}
#endregion
//========================= POST ====================================//
#region POST
[HttpPost("AddType")]
public IActionResult AddType(DeviceType d) //Добавить один тип устройства
{
using (var db = new SQLiteService())
{
db.DeviceTypes.Add(d);//.Where(u => u.Name == name).FirstOrDefault();
db.SaveChanges();
return Created();
}
}
#endregion
//========================= DELETE ====================================//
#region DELETE
[HttpDelete("DelType")]
public IActionResult DelType(int id) //Удалить тип устройства по id
{
using (var db = new SQLiteService())
{
var deldevtype = db.DeviceTypes.Where(u => u.Id == id).FirstOrDefault();
db.DeviceTypes.Remove(deldevtype);
db.SaveChanges();
return Ok();
}
}
#endregion
}
+2 -2
View File
@@ -2,7 +2,7 @@
{ {
public class DeviceItem public class DeviceItem
{ {
public int Id { get; set; } public Guid Id { get; set; }
public string? Ip { get; set; } public string? Ip { get; set; }
public string? Mac { get; set; } public string? Mac { get; set; }
public string? Description { get; set; } public string? Description { get; set; }
@@ -11,7 +11,7 @@
public List<DeviceItem>? ListDevices { get; set; } public List<DeviceItem>? ListDevices { get; set; }
public DeviceType? DeviceType { get; set; } public DeviceType? DeviceType { get; set; }
public ObjectItem? DeviceObject { get; set; } public ObjectItem? DeviceObject { get; set; }
public int ConnectedToSwitchId { get; set; } public Guid ConnectedToSwitchId { get; set; }
public int ConnectedToPortOnSwitch { get; set; } public int ConnectedToPortOnSwitch { get; set; }
} }
+1 -1
View File
@@ -2,7 +2,7 @@
{ {
public class DeviceType public class DeviceType
{ {
public int Id { get; set; } public Guid Id { get; set; }
public string Name { get; set; } public string Name { get; set; }
public string? Description { get; set; } public string? Description { get; set; }
} }
+1 -1
View File
@@ -2,7 +2,7 @@
{ {
public class ObjectItem public class ObjectItem
{ {
public int Id { get; set; } public Guid Id { get; set; }
public string NameObject { get; set; } = "Unknown"; public string NameObject { get; set; } = "Unknown";
public string? DescriptionObject { get; set; } = null; public string? DescriptionObject { get; set; } = null;
} }
Binary file not shown.
Binary file not shown.
Binary file not shown.
+22 -5
View File
@@ -1,20 +1,37 @@
using static System.Net.WebRequestMethods; namespace Visor.Models
namespace Visor.Models
{ {
public class AllPubData public class AllPubData
{ {
public static List<ObjectItems> ListObjectItems { get; set; } = new(); public static List<ObjectItems> ListObjectItems { get; set; } = new();
public static List<DeviceItems> ListDeviceItems { get; set; } = new();
public static List<DeviceTypeItems> ListDeviceTypeItems { get; set; } = new();
public static HttpClient http { get; set; } = new() public static HttpClient http { get; set; } = new()
{ {
BaseAddress = new Uri("http://localhost:5262/") BaseAddress = new Uri("http://localhost:5262/")
}; };
public static Task GetAll() => _GetAllData();
public static Task GetObjects() => _GetObject(); public static Task GetObjects() => _GetObject();
public static Task GetType() => _GetType();
public static Task GetDevice() => _GetDevice();
private static async Task _GetObject() private static async Task _GetAllData()
{ {
ListObjectItems = await http.GetFromJsonAsync<List<ObjectItems>>("api/Object/GetObject"); var o = await _GetObject();
var t = await _GetType();
var d = await _GetDevice();
}
private static async Task<List<ObjectItems>> _GetObject()
{
return ListObjectItems = await http.GetFromJsonAsync<List<ObjectItems>>("api/Object/GetObject");
}
private static async Task<List<DeviceItems>> _GetDevice()
{
return ListDeviceItems = http.GetFromJsonAsync<List<DeviceItems>>("api/Device/GetDevices").Result.Take(100).ToList();
}
private static async Task<List<DeviceTypeItems>> _GetType()
{
return ListDeviceTypeItems = await http.GetFromJsonAsync<List<DeviceTypeItems>>("api/Type/GetTypes");
} }
} }
+2 -2
View File
@@ -2,7 +2,7 @@
{ {
public class DeviceItems public class DeviceItems
{ {
public int Id { get; set; } public Guid Id { get; set; }
public string? Ip { get; set; } public string? Ip { get; set; }
public string? Mac { get; set; } public string? Mac { get; set; }
public string? Description { get; set; } public string? Description { get; set; }
@@ -11,7 +11,7 @@
public List<DeviceItems>? ListDevices { get; set; } public List<DeviceItems>? ListDevices { get; set; }
public DeviceTypeItems? DeviceType { get; set; } public DeviceTypeItems? DeviceType { get; set; }
public ObjectItems? DeviceObject { get; set; } public ObjectItems? DeviceObject { get; set; }
public int ConnectedToSwitchId { get; set; } public Guid ConnectedToSwitchId { get; set; }
public int ConnectedToPortOnSwitch { get; set; } public int ConnectedToPortOnSwitch { get; set; }
} }
+1 -1
View File
@@ -2,7 +2,7 @@
{ {
public class DeviceTypeItems public class DeviceTypeItems
{ {
public int Id { get; set; } public Guid Id { get; set; }
public string Name { get; set; } public string Name { get; set; }
public string? Description { get; set; } = null; public string? Description { get; set; } = null;
} }
+1 -1
View File
@@ -5,7 +5,7 @@ namespace Visor.Models
public class ObjectItems public class ObjectItems
{ {
[Key] [Key]
public int Id { get; set; } public Guid Id { get; set; }
public string NameObject { get; set; } = "Unknown"; public string NameObject { get; set; } = "Unknown";
public string DescriptionObject { get; set; } = string.Empty; public string DescriptionObject { get; set; } = string.Empty;
} }
@@ -56,7 +56,7 @@
private Modal modalAdd; private Modal modalAdd;
private Modal modalDel; private Modal modalDel;
private int select_id { get; set; } private Guid select_id { get; set; }
private int id_object { get; set; } private int id_object { get; set; }
private string name_object { get; set; } private string name_object { get; set; }
private string decript_object { get; set; } private string decript_object { get; set; }
+404 -252
View File
@@ -1,248 +1,357 @@
@page "/setting/wizard" @page "/setting/wizard"
@using Visor.Models @using Visor.Models
@using System.Text.Json
<h3>Wizard</h3> <h3>Wizard</h3>
<Steps @ref="stepsRef" @bind-SelectedStep="@selectedStep" NavigationAllowed="NavigationAllowed"> <Toaster>
<Items> <Toast @bind-Visible="@toastError">
<Step Name="1">Объекты</Step> <ToastHeader>
<Step Name="2">Типы</Step> <Strong Margin="Margin.IsAuto.FromEnd">@error_group</Strong>
<Step Name="3">Устройства</Step> <CloseButton />
<Step Name="4">Итог</Step> </ToastHeader>
</Items> <ToastBody>
<Content> @error_msg
<StepPanel Name="1"> </ToastBody>
<Row> </Toast>
<Column ColumnSize="ColumnSize.Is3"> </Toaster>
<Field>
<TextInput Autofocus="true" @bind-Value="obj_name" Placeholder="Название объекта"> <LoadingIndicator @bind-Visible="@visible">
<FieldHelp>Введите название объекта. Например: VNK, SPB...</FieldHelp> <Steps @ref="stepsRef" @bind-SelectedStep="@selectedStep" NavigationAllowed="NavigationAllowed">
</TextInput> <Items>
</Field> <Step Name="1">Объекты</Step>
</Column> <Step Name="2">Типы</Step>
<Column ColumnSize="ColumnSize.Is8"> <Step Name="3">Устройства</Step>
<Field> <Step Name="4">Итог</Step>
<TextInput @bind-Value="obj_desc" Placeholder="Описание объекта"> </Items>
<FieldHelp>Введите текстовое описание объекта</FieldHelp> <Content>
</TextInput> <StepPanel Name="1">
</Field> <Row>
</Column> <Column ColumnSize="ColumnSize.Is3">
<Column ColumnSize="ColumnSize.Is1"> <Card>
<Field> <CardBody>
<Button Color="Color.Primary" Clicked="@AddNewObject"> <CardText>
<Icon Name="IconName.Add" /> <Field>
</Button> <TextInput Autofocus="true" @bind-Value="obj_name" Placeholder="Название объекта">
</Field> <FieldHelp>Введите название объекта. Например: VNK, SPB...</FieldHelp>
</Column> </TextInput>
</Row> </Field>
<Row> <Field>
<Table> <TextInput @bind-Value="obj_desc" Placeholder="Описание объекта">
<TableHeader> <FieldHelp>Введите текстовое описание объекта</FieldHelp>
<TableRow> </TextInput>
<TableHeaderCell>#</TableHeaderCell> </Field>
<TableHeaderCell>Название объекта</TableHeaderCell> <Field>
<TableHeaderCell>Описание объекта</TableHeaderCell> <Button Color="Color.Primary" Clicked="@AddNewObject">
</TableRow> <Icon Name="IconName.Add" />
</TableHeader> </Button>
<TableBody> </Field>
@foreach (var item in list_obj) </CardText>
{ </CardBody>
<TableRow> </Card>
<TableRowHeader>@item.Id</TableRowHeader> </Column>
<TableRowCell>@item.NameObject</TableRowCell> <Column ColumnSize="ColumnSize.Is9">
<TableRowCell>@item.DescriptionObject</TableRowCell> <Card>
</TableRow> <CardBody>
} <CardText>
</TableBody> <Table>
</Table> <TableHeader>
</Row> <TableRow>
</StepPanel> <TableHeaderCell>Название объекта</TableHeaderCell>
<StepPanel Name="2"> <TableHeaderCell>Описание объекта</TableHeaderCell>
<Row> </TableRow>
<Column ColumnSize="ColumnSize.Is3"> </TableHeader>
<Field> <TableBody>
<TextInput Autofocus="true" @bind-Value="type_name" Placeholder="Название типа устройства"> @foreach (var item in _list_obj)
<FieldHelp>Введите название типа. Например: Server, Switch...</FieldHelp> {
</TextInput> <TableRow>
</Field> <TableRowCell>@item.NameObject</TableRowCell>
</Column> <TableRowCell>@item.DescriptionObject</TableRowCell>
<Column ColumnSize="ColumnSize.Is8"> </TableRow>
<Field> }
<TextInput @bind-Value="type_desc" Placeholder="Описание типа"> </TableBody>
<FieldHelp>Введите текстовое описание типа устройства</FieldHelp> </Table>
</TextInput> </CardText>
</Field> </CardBody>
</Column> </Card>
<Column ColumnSize="ColumnSize.Is1"> </Column>
<Field> </Row>
<Button Clicked="@AddNewType"> </StepPanel>
<Icon Name="IconName.Add" /> <StepPanel Name="2">
</Button> <Row>
</Field> <Column ColumnSize="ColumnSize.Is3">
</Column> <Card>
</Row> <CardBody>
<Row> <CardText>
<Table> <Field>
<TableHeader> <TextInput Autofocus="true" @bind-Value="type_name" Placeholder="Название типа устройства">
<TableRow> <FieldHelp>Введите название типа. Например: Server, Switch...</FieldHelp>
<TableHeaderCell>#</TableHeaderCell> </TextInput>
<TableHeaderCell>Тип устройства</TableHeaderCell> </Field>
<TableHeaderCell>Описание типа устройств</TableHeaderCell> <Field>
</TableRow> <TextInput @bind-Value="type_desc" Placeholder="Описание типа">
</TableHeader> <FieldHelp>Введите текстовое описание типа устройства</FieldHelp>
<TableBody> </TextInput>
@foreach (var item in list_type) </Field>
{ <Field>
<TableRow> <Button Color="Color.Primary" Clicked="@AddNewType">
<TableRowHeader>@item.Id</TableRowHeader> <Icon Name="IconName.Add" />
<TableRowCell>@item.Name</TableRowCell> </Button>
<TableRowCell>@item.Description</TableRowCell> </Field>
</TableRow> </CardText>
} </CardBody>
</TableBody> </Card>
</Table> </Column>
</Row> <Column ColumnSize="ColumnSize.Is9">
</StepPanel> <Card>
<StepPanel Name="3"> <CardBody>
<Card> <CardText>
<CardBody> <Table>
<CardTitle Size="HeadingSize.Is2"> <TableHeader>
Добавление устройства <TableRow>
</CardTitle> <TableHeaderCell>Тип устройства</TableHeaderCell>
<CardText> <TableHeaderCell>Описание типа устройств</TableHeaderCell>
<Addons Size="Size.Small"> </TableRow>
<Addon AddonType="AddonType.Start" > </TableHeader>
<AddonLabel Width="Width.Is25">IP</AddonLabel> <TableBody>
</Addon> @foreach (var item in _list_type)
<Addon AddonType="AddonType.Body"> {
<InputMask Width="Width.Is50" Mask="999.999.999.999" MaskPlaceholder="X" Placeholder="Введите IP" /> <TableRow>
</Addon> <TableRowCell>@item.Name</TableRowCell>
</Addons> <TableRowCell>@item.Description</TableRowCell>
<Addons Size="Size.Small"> </TableRow>
<Addon AddonType="AddonType.Start"> }
<AddonLabel Width="Width.Is25">MAC</AddonLabel> </TableBody>
</Addon> </Table>
<Addon AddonType="AddonType.Body"> </CardText>
<InputMask Width="Width.Is50" Mask="****-****-****" MaskPlaceholder="X" Placeholder="Введите MAC" /> </CardBody>
</Addon> </Card>
</Addons> </Column>
<Addons Size="Size.Small"> </Row>
<Addon AddonType="AddonType.Start"> </StepPanel>
<AddonLabel Width="Width.Is25">Название</AddonLabel> <StepPanel Name="3">
</Addon> <Row>
<Addon AddonType="AddonType.Body"> <Column ColumnSize="ColumnSize.Is3">
<TextInput Width="Width.Is50" Placeholder="Введите название устройства" /> <Card>
</Addon> <CardBody>
</Addons> <CardTitle Size="HeadingSize.Is2">
<Addons Size="Size.Small"> Добавление устройства
<Addon AddonType="AddonType.Start"> </CardTitle>
<AddonLabel Width="Width.Is25">Описание</AddonLabel> <CardText>
</Addon> <Addons Size="Size.Small">
<Addon AddonType="AddonType.Body"> <Addon AddonType="AddonType.Start">
<TextInput Width="Width.Is50" Placeholder="Введите описание устройства"/> <AddonLabel Width="Width.Is25">IP</AddonLabel>
</Addon> </Addon>
</Addons> <Addon AddonType="AddonType.Body">
<Addons Size="Size.Small"> <InputMask @bind-Value="dev_ip" Width="Width.Is50" Mask="999.999.999.999" MaskPlaceholder="X" Placeholder="Введите IP" />
<Addon AddonType="AddonType.Start"> </Addon>
<AddonLabel Width="Width.Is25">Место установки</AddonLabel> </Addons>
</Addon> <Addons Size="Size.Small">
<Addon AddonType="AddonType.Body"> <Addon AddonType="AddonType.Start">
<TextInput Width="Width.Is50" Placeholder="Введите где установлено устройство" /> <AddonLabel Width="Width.Is25">MAC</AddonLabel>
</Addon> </Addon>
</Addons> <Addon AddonType="AddonType.Body">
<Addons Size="Size.Small"> <InputMask @bind-Value="dev_mac" Width="Width.Is50" Mask="****-****-****" MaskPlaceholder="X" Placeholder="Введите MAC" />
<Addon AddonType="AddonType.Start"> </Addon>
<AddonLabel Width="Width.Is25">Тип устройства</AddonLabel> </Addons>
</Addon> <Addons Size="Size.Small">
<Addon AddonType="AddonType.Body"> <Addon AddonType="AddonType.Start">
<Select Width="Width.Is50" TValue="int" @bind-Value="@id_type"> <AddonLabel Width="Width.Is25">Название</AddonLabel>
<SelectItem Value="999">Тип устройства</SelectItem> </Addon>
@foreach (var sel in list_type) <Addon AddonType="AddonType.Body">
{ <TextInput @bind-Value="dev_name" Width="Width.Is50" Placeholder="Введите название устройства" />
<SelectItem Value="@sel.Id">@sel.Name</SelectItem> </Addon>
} </Addons>
</Select> <Addons Size="Size.Small">
</Addon> <Addon AddonType="AddonType.Start">
</Addons> <AddonLabel Width="Width.Is25">Описание</AddonLabel>
<Addons Size="Size.Small"> </Addon>
<Addon AddonType="AddonType.Start"> <Addon AddonType="AddonType.Body">
<AddonLabel Width="Width.Is25">Объект</AddonLabel> <TextInput @bind-Value="dev_desc" Width="Width.Is50" Placeholder="Введите описание устройства" />
</Addon> </Addon>
<Addon AddonType="AddonType.Body"> </Addons>
<Select Width="Width.Is50" TValue="int" @bind-Value="@id_obj"> <Addons Size="Size.Small">
<SelectItem Value="999">На объекте</SelectItem> <Addon AddonType="AddonType.Start">
@foreach (var sel in list_obj) <AddonLabel Width="Width.Is25">Место установки</AddonLabel>
{ </Addon>
<SelectItem Value="@sel.Id">@sel.NameObject</SelectItem> <Addon AddonType="AddonType.Body">
} <TextInput @bind-Value="dev_loc" Width="Width.Is50" Placeholder="Введите где установлено устройство" />
</Select> </Addon>
</Addon> </Addons>
</Addons> <Addons Size="Size.Small">
<Addons Size="Size.Small"> <Addon AddonType="AddonType.Start">
<Addon AddonType="AddonType.Start"> <AddonLabel Width="Width.Is25">Тип устройства</AddonLabel>
<AddonLabel Width="Width.Is25">Подключен к</AddonLabel> </Addon>
</Addon> <Addon AddonType="AddonType.Body">
<Addon AddonType="AddonType.Body"> <Select Width="Width.Is50" TValue="Guid" @bind-Value="@id_type">
<Select Width="Width.Is50" TValue="int" @bind-Value="@id_dev"> <SelectItem Value="999">Тип устройства</SelectItem>
<SelectItem Value="999">коммутатор</SelectItem> @foreach (var sel in _list_type)
@foreach (var sel in list_switch) {
{ <SelectItem Value="@sel.Id">@sel.Name</SelectItem>
<SelectItem Value="@sel.Id">@sel.Name</SelectItem> }
} </Select>
</Select> </Addon>
</Addon> </Addons>
<Addon AddonType="AddonType.End"> <Addons Size="Size.Small">
<Button Clicked="@RefreshListSwitch"> <Addon AddonType="AddonType.Start">
<Icon Name="IconName.Undo"/> <AddonLabel Width="Width.Is25">Объект</AddonLabel>
</Button> </Addon>
</Addon> <Addon AddonType="AddonType.Body">
</Addons> <Select Width="Width.Is50" TValue="Guid" @bind-Value="@id_obj">
<Addons Size="Size.Small"> <SelectItem Value="999">На объекте</SelectItem>
<Addon AddonType="AddonType.Start"> @foreach (var sel in _list_obj)
<AddonLabel Width="Width.Is25">Порт подключения</AddonLabel> {
</Addon> <SelectItem Value="@sel.Id">@sel.NameObject</SelectItem>
<Addon AddonType="AddonType.Body"> }
<NumericInput @bind-Value="@num_port" Min="1" Max="28" Width="Width.Is50"/> </Select>
</Addon> </Addon>
</Addons> </Addons>
<Button Width="Width.Is100" Clicked="@AddNewDev">Добавить</Button> <Addons Size="Size.Small">
</CardText> <Addon AddonType="AddonType.Start">
</CardBody> <AddonLabel Width="Width.Is25">Подключен к</AddonLabel>
</Card> </Addon>
</StepPanel> <Addon AddonType="AddonType.Body">
<StepPanel Name="4"> <Select Width="Width.Is50" TValue="Guid" @bind-Value="@id_dev">
Итог <SelectItem Value="999">коммутатор</SelectItem>
</StepPanel> @foreach (var sel in _list_switch)
</Content> {
</Steps> <SelectItem Value="@sel.Id">@sel.Name</SelectItem>
<Div Flex="Flex.JustifyContent.Center"> }
<Button Color="Color.Secondary" Margin="Margin.Is2.FromEnd" Clicked="() => stepsRef.PreviousStep()"> </Select>
Назад </Addon>
</Button> <Addon AddonType="AddonType.End">
<Button Color="Color.Primary" Clicked="() => stepsRef.NextStep()"> <Button Clicked="@RefreshListSwitch">
@nextButton <Icon Name="IconName.Undo" />
</Button> </Button>
</Div> </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" Color="Color.Dark" Clicked="@AddNewDev">Добавить</Button>
</CardText>
</CardBody>
</Card>
</Column>
<Column ColumnSize="ColumnSize.Is9">
<Card>
<CardBody>
<CardText>
<Table>
<TableHeader>
<TableRow>
<TableHeaderCell>Имя</TableHeaderCell>
<TableHeaderCell>Адрес</TableHeaderCell>
<TableHeaderCell>Тип</TableHeaderCell>
</TableRow>
</TableHeader>
<TableBody>
@foreach (var item in _list_dev)
{
<TableRow>
<TableRowCell>@item.Name</TableRowCell>
<TableRowCell>@item.Ip</TableRowCell>
<TableRowCell>@item.DeviceType.Name</TableRowCell>
</TableRow>
}
</TableBody>
</Table>
</CardText>
</CardBody>
</Card>
</Column>
</Row>
</StepPanel>
<StepPanel Name="4">
<Row>
<CardDeck>
<Card>
<CardBody>
<CardTitle TextAlignment="TextAlignment.Center">
ОБЪЕКТЫ
</CardTitle>
<CardText>
Объектов к добавлению - @_list_obj.Count
</CardText>
</CardBody>
</Card>
<Card>
<CardBody>
<CardTitle TextAlignment="TextAlignment.Center">
ТИПЫ УСТРОЙСТВ
</CardTitle>
<CardText>
Типов к добавлению - @_list_type.Count
</CardText>
</CardBody>
</Card>
<Card>
<CardBody>
<CardTitle TextAlignment="TextAlignment.Center">
УСТРОЙСТВА
</CardTitle>
<CardText>
Устройств к добавлению - @_list_dev.Count
из них коммутаторов - @_list_switch.Count
</CardText>
</CardBody>
</Card>
</CardDeck>
</Row>
</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="clickSave">
@nextButton
</Button>
</Div>
</LoadingIndicator>
<Progress Visibility="@visibleProgress" Indeterminate />
@code { @code {
bool visible, toastError = false;
Visibility visibleProgress = Visibility.Invisible;
private Steps stepsRef; private Steps stepsRef;
private ObjectItems obj_item; private ObjectItems obj_item;
private DeviceTypeItems type_item; private DeviceTypeItems type_item;
private DeviceItems dev_item; private DeviceItems dev_item;
private List<ObjectItems> list_obj = new(); private List<ObjectItems> list_obj = new(), _list_obj = new();
private List<DeviceTypeItems> list_type = new(); private List<DeviceTypeItems> list_type = new(), _list_type = new();
private static List<DeviceItems> list_dev = new(); private static List<DeviceItems> list_dev = new(), _list_dev = new();
private List<DeviceItems> list_switch = new(); private List<DeviceItems> _list_switch = new();
private string email, nextButton = "Далее"; private string email, nextButton = "Далее";
private string selectedStep = "1"; private string selectedStep = "1";
private int id_type, id_obj, id_dev, num_port; private Guid id_type, id_obj, id_dev;
private int num_port;
private string obj_name, obj_desc; private string obj_name, obj_desc;
private string type_name, type_desc; private string type_name, type_desc;
private string error_msg, error_group;
private string dev_ip, dev_mac, dev_desc, dev_name, dev_loc; private string dev_ip, dev_mac, dev_desc, dev_name, dev_loc;
protected override async Task OnInitializedAsync()
{
visible = true;
await AllPubData.GetAll();
list_type = AllPubData.ListDeviceTypeItems;
list_obj = AllPubData.ListObjectItems;
list_dev = AllPubData.ListDeviceItems;
visible = false;
}
private Task<bool> NavigationAllowed(StepNavigationContext context) private Task<bool> NavigationAllowed(StepNavigationContext context)
{ {
@@ -265,50 +374,93 @@
private void RefreshListSwitch() private void RefreshListSwitch()
{ {
list_switch = list_dev.Where(s => s.DeviceType.Name.Contains("Switch")).ToList(); _list_switch = _list_dev.Where(s => s.DeviceType.Name.Contains("Switch")).ToList();
if (list_switch.Count == 0)
id_dev = 0;
} }
private void AddNewObject() private async void AddNewObject()
{ {
obj_item = new() obj_item = new()
{ {
NameObject = obj_name, Id = Guid.NewGuid(),
DescriptionObject = obj_desc, NameObject = obj_name,
Id = list_obj.Count + 1 DescriptionObject = obj_desc,
}; };
list_obj.Add(obj_item); _list_obj.Add(obj_item);
obj_name = string.Empty; obj_name = string.Empty;
obj_desc = string.Empty; obj_desc = string.Empty;
} }
private void AddNewType() private async void AddNewType()
{ {
type_item = new() type_item = new()
{ {
Id = Guid.NewGuid(),
Name = type_name, Name = type_name,
Description = type_desc, Description = type_desc,
Id = list_type.Count + 1
}; };
list_type.Add(type_item); _list_type.Add(type_item);
type_name = string.Empty; type_name = string.Empty;
type_desc = string.Empty; type_desc = string.Empty;
} }
private void AddNewDev() private async void AddNewDev()
{ {
dev_item = new() dev_item = new()
{
Id = Guid.NewGuid(),
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),
ConnectedToPortOnSwitch = num_port
};
_list_dev.Add(dev_item);
if (dev_item.DeviceType.Name.Contains("Switch")) _list_switch.Add(dev_item);
dev_ip = string.Empty;
dev_mac = string.Empty;
dev_desc = string.Empty;
dev_name = string.Empty;
dev_loc = string.Empty;
}
private async void clickSave()
{
if (nextButton == "Далее") stepsRef.NextStep();
else
{
visibleProgress = Visibility.Visible;
foreach (var item in _list_obj)
{ {
Id = list_type.Count + 1, var p = await AllPubData.http.PostAsJsonAsync("api/Object/AddObject", item);
Ip = dev_ip, if (!p.IsSuccessStatusCode)
Mac = dev_mac, {
Description = dev_desc, error_group = "ОБЪЕКТ";
Name = dev_name, error_msg = $"{item.NameObject} не добавлено.\r\nСтатус код: {p.StatusCode}";
Location = dev_loc, toastError = true;
DeviceType = list_type.SingleOrDefault(t => t.Id == id_type), }
DeviceObject = list_obj.SingleOrDefault(o => o.Id == id_obj) }
}; foreach (var item in _list_type)
list_dev.Add(dev_item); {
type_name = string.Empty; var p = await AllPubData.http.PostAsJsonAsync("api/Type/AddType", item);
type_desc = string.Empty; if (!p.IsSuccessStatusCode)
{
error_group = "ТИП";
error_msg = $"{item.Name} не добавлено.\r\nСтатус код: {p.StatusCode}";
toastError = true;
}
}
foreach (var item in _list_dev)
{
var p = await AllPubData.http.PostAsJsonAsync("api/Device/AddDevice", item);
if (!p.IsSuccessStatusCode)
{
error_group = "УСТРОЙСТВА";
error_msg = $"{item.Name} не добавлено.\r\nСтатус код: {p.StatusCode}";
toastError = true;
}
}
visibleProgress = Visibility.Invisible;
}
} }
} }