diff --git a/backend/src/UniversalAdmin.Api/Controllers/BaseController.cs b/backend/src/UniversalAdmin.Api/Controllers/BaseController.cs deleted file mode 100644 index f3c688d5834aa8fe23e82519ef93838c8a513d3a..0000000000000000000000000000000000000000 --- a/backend/src/UniversalAdmin.Api/Controllers/BaseController.cs +++ /dev/null @@ -1,33 +0,0 @@ -namespace UniversalAdmin.Api.Controllers -{ - [ApiController] - [Route("api/[controller]")] - [Authorize] - public abstract class BaseController : ControllerBase - { - protected readonly IMediator _mediator; - - protected BaseController(IMediator mediator) - { - _mediator = mediator; - } - - protected int CurrentUserId => int.Parse(User.FindFirst("sub")?.Value ?? "0"); - protected string CurrentUsername => User.FindFirst("username")?.Value ?? string.Empty; - - protected ActionResult> Success(T data, string message = "success") - { - return Ok(ApiResult.Success(data, message)); - } - - protected ActionResult> Success(string message = "success") - { - return Ok(ApiResult.Success(default(T), message)); - } - - protected ActionResult> Error(string message, int code = 400) - { - return BadRequest(ApiResult.Failure(code, message)); - } - } -} \ No newline at end of file diff --git a/backend/src/UniversalAdmin.Api/Controllers/UsersController.cs b/backend/src/UniversalAdmin.Api/Controllers/UsersController.cs deleted file mode 100644 index 82e2c324ce9588b59b1850f491784ff95b561083..0000000000000000000000000000000000000000 --- a/backend/src/UniversalAdmin.Api/Controllers/UsersController.cs +++ /dev/null @@ -1,73 +0,0 @@ -namespace UniversalAdmin.Api.Controllers -{ - /// - /// 用户管理控制器 - /// - public class UsersController : BaseController - { - public UsersController(IMediator mediator) : base(mediator) - { - } - - /// - /// 获取用户列表 - /// - [HttpGet] - public async Task>>> GetUsers( - [FromQuery] GetUsersQuery query) - { - var result = await _mediator.Send(query); - return Success(result); - } - - /// - /// 获取用户详情 - /// - [HttpGet("{id}")] - public async Task>> GetUser(int id) - { - var query = new GetUserByIdQuery { Id = id }; - var result = await _mediator.Send(query); - - if (result == null) - return NotFound(ApiResult.Failure(404, "用户不存在")); - - return Success(result); - } - - /// - /// 创建用户 - /// - [HttpPost] - public async Task>> CreateUser( - [FromBody] CreateUserCommand command) - { - var result = await _mediator.Send(command); - return Success(result, "用户创建成功"); - } - - /// - /// 更新用户 - /// - [HttpPut("{id}")] - public async Task>> UpdateUser( - int id, - [FromBody] UpdateUserCommand command) - { - command.Id = id; - var result = await _mediator.Send(command); - return Success(result, "用户更新成功"); - } - - /// - /// 删除用户 - /// - [HttpDelete("{id}")] - public async Task>> DeleteUser(int id) - { - var command = new DeleteUserCommand { Id = id }; - await _mediator.Send(command); - return Success(null, "用户删除成功"); - } - } -} \ No newline at end of file diff --git a/backend/src/UniversalAdmin.Api/Program.cs b/backend/src/UniversalAdmin.Api/Program.cs index ee9d65d633f6e9b1eedca4d299dd2ee26cd3884c..00acb91d30382eb5ab7c9dac7fa5fb4f66b8b598 100644 --- a/backend/src/UniversalAdmin.Api/Program.cs +++ b/backend/src/UniversalAdmin.Api/Program.cs @@ -1,41 +1,10 @@ +using UniversalAdmin.Infrastructure; var builder = WebApplication.CreateBuilder(args); -// Add services to the container. -// Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi -builder.Services.AddOpenApi(); - +//注册基础服务 +builder.Services.AddInfrastructure(builder.Configuration); var app = builder.Build(); -// Configure the HTTP request pipeline. -if (app.Environment.IsDevelopment()) -{ - app.MapOpenApi(); -} - -app.UseHttpsRedirection(); -var summaries = new[] -{ - "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" -}; - -app.MapGet("/weatherforecast", () => -{ - var forecast = Enumerable.Range(1, 5).Select(index => - new WeatherForecast - ( - DateOnly.FromDateTime(DateTime.Now.AddDays(index)), - Random.Shared.Next(-20, 55), - summaries[Random.Shared.Next(summaries.Length)] - )) - .ToArray(); - return forecast; -}) -.WithName("GetWeatherForecast"); app.Run(); - -record WeatherForecast(DateOnly Date, int TemperatureC, string? Summary) -{ - public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); -} diff --git a/backend/src/UniversalAdmin.Api/UniversalAdmin.Api.csproj b/backend/src/UniversalAdmin.Api/UniversalAdmin.Api.csproj index 2f6e7b314518e9f3a9c2dcec39570e120ca00de7..ca999bfa993eea1930d8104dcd7f168e17d343cf 100644 --- a/backend/src/UniversalAdmin.Api/UniversalAdmin.Api.csproj +++ b/backend/src/UniversalAdmin.Api/UniversalAdmin.Api.csproj @@ -10,7 +10,16 @@ + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + + diff --git a/backend/src/UniversalAdmin.Application/Commands/CreateUserCommand.cs b/backend/src/UniversalAdmin.Application/Commands/CreateUserCommand.cs deleted file mode 100644 index 44dfb9a70f969bd918ad1c425a6313eec0304dad..0000000000000000000000000000000000000000 --- a/backend/src/UniversalAdmin.Application/Commands/CreateUserCommand.cs +++ /dev/null @@ -1,24 +0,0 @@ -using MediatR; - -namespace UniversalAdmin.Application.Commands -{ - public class CreateUserCommand : IRequest - { - public string Username { get; set; } = string.Empty; - public string Email { get; set; } = string.Empty; - public string Password { get; set; } = string.Empty; - public string? Phone { get; set; } - public string? Avatar { get; set; } - public string? FullName { get; set; } - public string? Department { get; set; } - public List RoleIds { get; set; } = new(); - } - - public class CreateUserResult - { - public int Id { get; set; } - public string Username { get; set; } = string.Empty; - public string Email { get; set; } = string.Empty; - public DateTime CreatedAt { get; set; } - } -} \ No newline at end of file diff --git a/backend/src/UniversalAdmin.Application/UniversalAdmin.Application.csproj b/backend/src/UniversalAdmin.Application/UniversalAdmin.Application.csproj index 9b8687552bec953b7c95878180b0cd7b0978540f..995963c916c82dba7803caa94b3d18bc69f893f5 100644 --- a/backend/src/UniversalAdmin.Application/UniversalAdmin.Application.csproj +++ b/backend/src/UniversalAdmin.Application/UniversalAdmin.Application.csproj @@ -12,4 +12,9 @@ + + + + + diff --git a/backend/src/UniversalAdmin.Domain/Entities/App/AppPemission.cs b/backend/src/UniversalAdmin.Domain/Entities/App/AppPemission.cs deleted file mode 100644 index b0efd3534e68dfba0fb80b176507f2dfc04f6865..0000000000000000000000000000000000000000 --- a/backend/src/UniversalAdmin.Domain/Entities/App/AppPemission.cs +++ /dev/null @@ -1,22 +0,0 @@ -namespace UniversalAdmin.Domain.Entities.App; -public class AppPemission : EntityBase -{ - public string Name { get; set; } - - public string Description { get; set; } - public string Code { get; set; } - -#pragma warning disable CS8618 - protected AppPemission() { } - - public AppPemission(string name, string description, string code) - { - - Name = name; - Description = description; - Code = code; - } - - - -} \ No newline at end of file diff --git a/backend/src/UniversalAdmin.Domain/Entities/App/AppPermission.cs b/backend/src/UniversalAdmin.Domain/Entities/App/AppPermission.cs new file mode 100644 index 0000000000000000000000000000000000000000..043c18dda2fe17c140d6213ee5521dc824c583fa --- /dev/null +++ b/backend/src/UniversalAdmin.Domain/Entities/App/AppPermission.cs @@ -0,0 +1,17 @@ +namespace UniversalAdmin.Domain.Entities.App; + +public class AppPermission : EntityBase +{ + public string Name { get; set; } + public string Description { get; set; } +#pragma warning disable CS8618 // 在退出构造函数时,不可为 null 的字段必须包含非 null 值。请考虑添加 "required" 修饰符或声明为可为 null。 + protected AppPermission() { } +#pragma warning restore CS8618 // 在退出构造函数时,不可为 null 的字段必须包含非 null 值。请考虑添加 "required" 修饰符或声明为可为 null。 + + public AppPermission(string code, string name, string description) + { + Code = code; + Name = name; + Description = description; + } +} \ No newline at end of file diff --git a/backend/src/UniversalAdmin.Domain/Entities/App/AppRole.cs b/backend/src/UniversalAdmin.Domain/Entities/App/AppRole.cs index 32556db5ea6ee5278c482ccfb47b65b205020e76..f991095eaaffb894314a8edaad1e813b902401f2 100644 --- a/backend/src/UniversalAdmin.Domain/Entities/App/AppRole.cs +++ b/backend/src/UniversalAdmin.Domain/Entities/App/AppRole.cs @@ -8,8 +8,8 @@ public class AppRole : EntityBase { public string Name { get; set; } - private readonly List _rolePermission = new(); - public IReadOnlyCollection RolePemission => _rolePermission.AsReadOnly(); + private readonly List _rolePermission = new(); + public IReadOnlyCollection RolePemission => _rolePermission.AsReadOnly(); #pragma warning disable CS8618 // 在退出构造函数时,不可为 null 的字段必须包含非 null 值。请考虑添加 "required" 修饰符或声明为可为 null。 @@ -22,15 +22,15 @@ public class AppRole : EntityBase Name = name; } //分配权限 - public void GreantPermission(AppPemission pemission) + public void GreantPermission(AppPermission pemission) { if (_rolePermission.Any(rq => rq.PermissionId == pemission.Id)) return; - _rolePermission.Add(new AppRolePemission(this, pemission)); + _rolePermission.Add(new AppRolePermission(this, pemission)); } //收回权限 - public void RevokePermission(AppPemission appPemission) + public void RevokePermission(AppPermission appPemission) { var rq = _rolePermission.FirstOrDefault(rp => rp.PermissionId == appPemission.Id); if (rq != null) _rolePermission.Remove(rq); @@ -39,6 +39,6 @@ public class AppRole : EntityBase public bool HasPemission(string permissionName) { - return _rolePermission.Any(rp => rp.Pemission.Name == permissionName); + return _rolePermission.Any(rp => rp.Permission.Name == permissionName); } } \ No newline at end of file diff --git a/backend/src/UniversalAdmin.Domain/Entities/App/AppRolePemission.cs b/backend/src/UniversalAdmin.Domain/Entities/App/AppRolePermission.cs similarity index 72% rename from backend/src/UniversalAdmin.Domain/Entities/App/AppRolePemission.cs rename to backend/src/UniversalAdmin.Domain/Entities/App/AppRolePermission.cs index 71a6fbada45740dd545e98cc19a75a48a7e81fb0..ec796df9f9c9e9e94f2a68f4d1969d80487f9051 100644 --- a/backend/src/UniversalAdmin.Domain/Entities/App/AppRolePemission.cs +++ b/backend/src/UniversalAdmin.Domain/Entities/App/AppRolePermission.cs @@ -3,7 +3,7 @@ namespace UniversalAdmin.Domain.Entities.App; -public class AppRolePemission : EntityBase +public class AppRolePermission : EntityBase { @@ -12,21 +12,21 @@ public class AppRolePemission : EntityBase public AppRole Role { get; private set; } public Guid PermissionId { get; private set; } - public AppPemission Pemission { get; private set; } + public AppPermission Permission { get; private set; } #pragma warning disable CS8618 // 在退出构造函数时,不可为 null 的字段必须包含非 null 值。请考虑添加 "required" 修饰符或声明为可为 null。 - protected AppRolePemission() { } + protected AppRolePermission() { } #pragma warning restore CS8618 // 在退出构造函数时,不可为 null 的字段必须包含非 null 值。请考虑添加 "required" 修饰符或声明为可为 null。 - public AppRolePemission(AppRole role, AppPemission permission) + public AppRolePermission(AppRole role, AppPermission permission) { Role = role; RoleId = role.Id; - Pemission = permission; + Permission = permission; PermissionId = permission.Id; } diff --git a/backend/src/UniversalAdmin.Domain/Entities/EntityBase.cs b/backend/src/UniversalAdmin.Domain/Entities/EntityBase.cs index f44341434bffd4d3b240d8e3d9529a4e53a33fe9..ec1f3567f37924fa1dc145e3e4b520c31df78379 100644 --- a/backend/src/UniversalAdmin.Domain/Entities/EntityBase.cs +++ b/backend/src/UniversalAdmin.Domain/Entities/EntityBase.cs @@ -1,4 +1,3 @@ -using System.Reflection.Metadata; namespace UniversalAdmin.Domain.Entities; @@ -6,6 +5,7 @@ namespace UniversalAdmin.Domain.Entities; public abstract class EntityBase { public Guid Id { get; set; } //分为long int Gui + public string? Code { get; set; } public bool IsActived { get; set; } = true; public bool IsDeleted { get; set; } = false; diff --git a/backend/src/UniversalAdmin.Domain/Repositories/IRepository.cs b/backend/src/UniversalAdmin.Domain/Repositories/IRepository.cs index 541e638ea01b956094249bca204c037737a290a4..a8a8f5cc78ceafcb34243fdb0e2769a3eb594104 100644 --- a/backend/src/UniversalAdmin.Domain/Repositories/IRepository.cs +++ b/backend/src/UniversalAdmin.Domain/Repositories/IRepository.cs @@ -1,6 +1,6 @@ using UniversalAdmin.Domain.common; -namespace Admin.Domain.Entities; +namespace UniversalAdmin.Domain.Entities; public interface IRepository { diff --git a/backend/src/UniversalAdmin.Domain/UniversalAdmin.Domain.csproj b/backend/src/UniversalAdmin.Domain/UniversalAdmin.Domain.csproj index 125f4c93bc98c2ee5a8520de3a0017a6c86f5047..accc665fac8ffacad03dbf850fc65b25c1262bab 100644 --- a/backend/src/UniversalAdmin.Domain/UniversalAdmin.Domain.csproj +++ b/backend/src/UniversalAdmin.Domain/UniversalAdmin.Domain.csproj @@ -1,5 +1,11 @@  + + + + + + net9.0 enable diff --git a/backend/src/UniversalAdmin.Infrastructure/Data/UniversalDbContext.cs b/backend/src/UniversalAdmin.Infrastructure/Data/UniversalDbContext.cs index b589d943d1280e3c3f7e1ddc394aa889209bd1d5..12c400814f311d74f0c47f91b90d9b76040fdcfe 100644 --- a/backend/src/UniversalAdmin.Infrastructure/Data/UniversalDbContext.cs +++ b/backend/src/UniversalAdmin.Infrastructure/Data/UniversalDbContext.cs @@ -13,144 +13,144 @@ public class UniversalDbContext : DbContext public DbSet AppPermission { get; set; } public DbSet AppUserRole { get; set; } public DbSet AppRolePermission { get; set; } - public DbSet AppFile { get; set; } + public DbSet AppFile { get; set; } } - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - base.OnModelCreating(modelBuilder); + // protected override void OnModelCreating(ModelBuilder modelBuilder) + // { + // base.OnModelCreating(modelBuilder); - // 静态Id - var adminUserId = Guid.Parse("11111111-1111-1111-1111-111111111111"); - var adminRoleId = Guid.Parse("22222222-2222-2222-2222-222222222222"); - var permUserManageId = Guid.Parse("33333333-3333-3333-3333-333333333333"); - var permRoleManageId = Guid.Parse("44444444-4444-4444-4444-444444444444"); +// // 静态Id +// var adminUserId = Guid.Parse("11111111-1111-1111-1111-111111111111"); +// var adminRoleId = Guid.Parse("22222222-2222-2222-2222-222222222222"); +// var permUserManageId = Guid.Parse("33333333-3333-3333-3333-333333333333"); +// var permRoleManageId = Guid.Parse("44444444-4444-4444-4444-444444444444"); - var defaultTime = new DateTime(2025, 7, 2, 0, 0, 0, DateTimeKind.Utc); - // 权限 - modelBuilder.Entity().HasData( - new - { - Id = permUserManageId, - Name = "User.Manage", - Description = "用户管理", - CreatedAt = defaultTime, - UpdatedAt = defaultTime, - IsActived = true, - IsDeleted = false, - CreatedBy = Guid.Empty, - UpdatedBy = Guid.Empty, - DisplayOrder = 0, - Remarks = "" - }, - new - { - Id = permRoleManageId, - Name = "Role.Manage", - Description = "角色管理", - CreatedAt = defaultTime, - UpdatedAt = defaultTime, - IsActived = true, - IsDeleted = false, - CreatedBy = Guid.Empty, - UpdatedBy = Guid.Empty, - DisplayOrder = 0, - Remarks = "" - } - ); +// var defaultTime = new DateTime(2025, 7, 2, 0, 0, 0, DateTimeKind.Utc); +// // 权限 +// modelBuilder.Entity().HasData( +// new +// { +// Id = permUserManageId, +// Name = "User.Manage", +// Description = "用户管理", +// CreatedAt = defaultTime, +// UpdatedAt = defaultTime, +// IsActived = true, +// IsDeleted = false, +// CreatedBy = Guid.Empty, +// UpdatedBy = Guid.Empty, +// DisplayOrder = 0, +// Remarks = "" +// }, +// new +// { +// Id = permRoleManageId, +// Name = "Role.Manage", +// Description = "角色管理", +// CreatedAt = defaultTime, +// UpdatedAt = defaultTime, +// IsActived = true, +// IsDeleted = false, +// CreatedBy = Guid.Empty, +// UpdatedBy = Guid.Empty, +// DisplayOrder = 0, +// Remarks = "" +// } +// ); - // 角色 - modelBuilder.Entity().HasData( - new - { - Id = adminRoleId, - RoleName = "Admin", - CreatedAt = defaultTime, - UpdatedAt = defaultTime, - IsActived = true, - IsDeleted = false, - CreatedBy = Guid.Empty, - UpdatedBy = Guid.Empty, - DisplayOrder = 0, - Remarks = "" - } - ); +// // 角色 +// modelBuilder.Entity().HasData( +// new +// { +// Id = adminRoleId, +// RoleName = "Admin", +// CreatedAt = defaultTime, +// UpdatedAt = defaultTime, +// IsActived = true, +// IsDeleted = false, +// CreatedBy = Guid.Empty, +// UpdatedBy = Guid.Empty, +// DisplayOrder = 0, +// Remarks = "" +// } +// ); - // 用户 - modelBuilder.Entity().HasData( - new - { - Id = adminUserId, - UserName = "admin", - Password = "113", - Salt = "333", - CreatedAt = defaultTime, - UpdatedAt = defaultTime, - IsActived = true, - IsDeleted = false, - CreatedBy = Guid.Empty, - UpdatedBy = Guid.Empty, - DisplayOrder = 0, - Remarks = "" - } - ); +// // 用户 +// modelBuilder.Entity().HasData( +// new +// { +// Id = adminUserId, +// UserName = "admin", +// Password = "113", +// Salt = "333", +// CreatedAt = defaultTime, +// UpdatedAt = defaultTime, +// IsActived = true, +// IsDeleted = false, +// CreatedBy = Guid.Empty, +// UpdatedBy = Guid.Empty, +// DisplayOrder = 0, +// Remarks = "" +// } +// ); - // 用户-角色 - modelBuilder.Entity().HasData( - new - { - Id = Guid.NewGuid(), - UserId = adminUserId, - RoleId = adminRoleId, - CreatedAt = defaultTime, - UpdatedAt = defaultTime, - IsActived = true, - IsDeleted = false, - CreatedBy = Guid.Empty, - UpdatedBy = Guid.Empty, - DisplayOrder = 0, - Remarks = "" - } - ); +// // 用户-角色 +// modelBuilder.Entity().HasData( +// new +// { +// Id = Guid.NewGuid(), +// UserId = adminUserId, +// RoleId = adminRoleId, +// CreatedAt = defaultTime, +// UpdatedAt = defaultTime, +// IsActived = true, +// IsDeleted = false, +// CreatedBy = Guid.Empty, +// UpdatedBy = Guid.Empty, +// DisplayOrder = 0, +// Remarks = "" +// } +// ); - // 角色-权限 - modelBuilder.Entity().HasData( - new - { - Id = Guid.NewGuid(), - RoleId = adminRoleId, - PermissionId = permUserManageId, - CreatedAt = defaultTime, - UpdatedAt = defaultTime, - IsActived = true, - IsDeleted = false, - CreatedBy = Guid.Empty, - UpdatedBy = Guid.Empty, - DisplayOrder = 0, - Remarks = "" - }, - new - { - Id = Guid.NewGuid(), - RoleId = adminRoleId, - PermissionId = permRoleManageId, - CreatedAt = defaultTime, - UpdatedAt = defaultTime, - IsActived = true, - IsDeleted = false, - CreatedBy = Guid.Empty, - UpdatedBy = Guid.Empty, - DisplayOrder = 0, - Remarks = "" - } - ); - } -} +// // 角色-权限 +// modelBuilder.Entity().HasData( +// new +// { +// Id = Guid.NewGuid(), +// RoleId = adminRoleId, +// PermissionId = permUserManageId, +// CreatedAt = defaultTime, +// UpdatedAt = defaultTime, +// IsActived = true, +// IsDeleted = false, +// CreatedBy = Guid.Empty, +// UpdatedBy = Guid.Empty, +// DisplayOrder = 0, +// Remarks = "" +// }, +// new +// { +// Id = Guid.NewGuid(), +// RoleId = adminRoleId, +// PermissionId = permRoleManageId, +// CreatedAt = defaultTime, +// UpdatedAt = defaultTime, +// IsActived = true, +// IsDeleted = false, +// CreatedBy = Guid.Empty, +// UpdatedBy = Guid.Empty, +// DisplayOrder = 0, +// Remarks = "" +// } +// ); +// } +// } -public class AppRolePermission -{ -} +// public class AppRolePermission +// { +// } -public class AppPermission -{ -} \ No newline at end of file +// public class AppPermission +// { +// } \ No newline at end of file diff --git a/backend/src/UniversalAdmin.Infrastructure/Events/MediatRDomainEventPublisher.cs b/backend/src/UniversalAdmin.Infrastructure/Events/MediatRDomainEventPublisher.cs new file mode 100644 index 0000000000000000000000000000000000000000..1ea33f08cb94f550cbe1171054c4df10668ca636 --- /dev/null +++ b/backend/src/UniversalAdmin.Infrastructure/Events/MediatRDomainEventPublisher.cs @@ -0,0 +1,25 @@ +// using UniversalAdmin.Application +// using UniversalAdmin.Application.Common.Interfaces; +// using UniversalAdmin.Domain.Events; +// using MediatR; + +// namespace Admin2025.Infrastructure.Events; + +// /// +// /// 基于MediatR的领域事件发布器 +// /// +// public class MediatRDomainEventPublisher : IDomainEventPublisher +// { +// private readonly IMediator _mediator; + +// public MediatRDomainEventPublisher(IMediator mediator) +// { +// _mediator = mediator; +// } + +// public async Task PublishAsync(TDomainEvent domainEvent) where TDomainEvent : IDomainEvent +// { +// var notification = new DomainEventNotification(domainEvent); +// await _mediator.Publish(notification); +// } +// } diff --git a/backend/src/UniversalAdmin.Infrastructure/Migrations/20250723015230_InitCreate.Designer.cs b/backend/src/UniversalAdmin.Infrastructure/Migrations/20250723015230_InitCreate.Designer.cs new file mode 100644 index 0000000000000000000000000000000000000000..ebe99edd5a8ad23c349073b326793466a22d7518 --- /dev/null +++ b/backend/src/UniversalAdmin.Infrastructure/Migrations/20250723015230_InitCreate.Designer.cs @@ -0,0 +1,388 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using UniversalAdmin.Infrastructure.Data; + +#nullable disable + +namespace UniversalAdmin.Infrastructure.Migrations +{ + [DbContext(typeof(UniversalDbContext))] + [Migration("20250723015230_InitCreate")] + partial class InitCreate + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.2") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("UniversalAdmin.Domain.Entities.App.AppPermission", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Code") + .HasColumnType("text"); + + b.Property("CreateAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreateBy") + .HasColumnType("uuid"); + + b.Property("Description") + .IsRequired() + .HasColumnType("text"); + + b.Property("DisplayOrder") + .HasColumnType("integer"); + + b.Property("IsActived") + .HasColumnType("boolean"); + + b.Property("IsDeleted") + .HasColumnType("boolean"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("Remarks") + .HasColumnType("text"); + + b.Property("UPdateBy") + .HasColumnType("uuid"); + + b.Property("UpdateAt") + .HasColumnType("timestamp with time zone"); + + b.HasKey("Id"); + + b.ToTable("AppPermission"); + }); + + modelBuilder.Entity("UniversalAdmin.Domain.Entities.App.AppRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Code") + .HasColumnType("text"); + + b.Property("CreateAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreateBy") + .HasColumnType("uuid"); + + b.Property("DisplayOrder") + .HasColumnType("integer"); + + b.Property("IsActived") + .HasColumnType("boolean"); + + b.Property("IsDeleted") + .HasColumnType("boolean"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("Remarks") + .HasColumnType("text"); + + b.Property("UPdateBy") + .HasColumnType("uuid"); + + b.Property("UpdateAt") + .HasColumnType("timestamp with time zone"); + + b.HasKey("Id"); + + b.ToTable("AppRole"); + }); + + modelBuilder.Entity("UniversalAdmin.Domain.Entities.App.AppRolePermission", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Code") + .HasColumnType("text"); + + b.Property("CreateAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreateBy") + .HasColumnType("uuid"); + + b.Property("DisplayOrder") + .HasColumnType("integer"); + + b.Property("IsActived") + .HasColumnType("boolean"); + + b.Property("IsDeleted") + .HasColumnType("boolean"); + + b.Property("PermissionId") + .HasColumnType("uuid"); + + b.Property("Remarks") + .HasColumnType("text"); + + b.Property("RoleId") + .HasColumnType("uuid"); + + b.Property("UPdateBy") + .HasColumnType("uuid"); + + b.Property("UpdateAt") + .HasColumnType("timestamp with time zone"); + + b.HasKey("Id"); + + b.HasIndex("PermissionId"); + + b.HasIndex("RoleId"); + + b.ToTable("AppRolePermission"); + }); + + modelBuilder.Entity("UniversalAdmin.Domain.Entities.App.AppUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Avatar") + .HasColumnType("text"); + + b.Property("Code") + .HasColumnType("text"); + + b.Property("CreateAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreateBy") + .HasColumnType("uuid"); + + b.Property("DisplayOrder") + .HasColumnType("integer"); + + b.Property("Email") + .HasColumnType("text"); + + b.Property("IsActived") + .HasColumnType("boolean"); + + b.Property("IsDeleted") + .HasColumnType("boolean"); + + b.Property("Nickname") + .HasColumnType("text"); + + b.Property("Password") + .IsRequired() + .HasColumnType("text"); + + b.Property("Remarks") + .HasColumnType("text"); + + b.Property("Salt") + .IsRequired() + .HasColumnType("text"); + + b.Property("Telephone") + .HasColumnType("text"); + + b.Property("UPdateBy") + .HasColumnType("uuid"); + + b.Property("UpdateAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("AppUser"); + }); + + modelBuilder.Entity("UniversalAdmin.Domain.Entities.App.AppUserRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Code") + .HasColumnType("text"); + + b.Property("CreateAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreateBy") + .HasColumnType("uuid"); + + b.Property("DisplayOrder") + .HasColumnType("integer"); + + b.Property("IsActived") + .HasColumnType("boolean"); + + b.Property("IsDeleted") + .HasColumnType("boolean"); + + b.Property("Remarks") + .HasColumnType("text"); + + b.Property("RoleId") + .HasColumnType("uuid"); + + b.Property("UPdateBy") + .HasColumnType("uuid"); + + b.Property("UpdateAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.HasIndex("UserId"); + + b.ToTable("AppUserRole"); + }); + + modelBuilder.Entity("UniversalAdmin.Domain.Entities.AppFile", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Code") + .HasColumnType("text"); + + b.Property("ContentType") + .IsRequired() + .HasColumnType("text"); + + b.Property("CreateAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreateBy") + .HasColumnType("uuid"); + + b.Property("DisplayOrder") + .HasColumnType("integer"); + + b.Property("FileExtension") + .IsRequired() + .HasColumnType("text"); + + b.Property("FileSize") + .HasColumnType("bigint"); + + b.Property("IsActived") + .HasColumnType("boolean"); + + b.Property("IsDeleted") + .HasColumnType("boolean"); + + b.Property("OriginFileName") + .IsRequired() + .HasColumnType("text"); + + b.Property("Remarks") + .HasColumnType("text"); + + b.Property("StoragePath") + .IsRequired() + .HasColumnType("text"); + + b.Property("StoredFileName") + .IsRequired() + .HasColumnType("text"); + + b.Property("UPdateBy") + .HasColumnType("uuid"); + + b.Property("UpdateAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.ToTable("AppFile"); + }); + + modelBuilder.Entity("UniversalAdmin.Domain.Entities.App.AppRolePermission", b => + { + b.HasOne("UniversalAdmin.Domain.Entities.App.AppPermission", "Permission") + .WithMany() + .HasForeignKey("PermissionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("UniversalAdmin.Domain.Entities.App.AppRole", "Role") + .WithMany("RolePemission") + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Permission"); + + b.Navigation("Role"); + }); + + modelBuilder.Entity("UniversalAdmin.Domain.Entities.App.AppUserRole", b => + { + b.HasOne("UniversalAdmin.Domain.Entities.App.AppRole", "Role") + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("UniversalAdmin.Domain.Entities.App.AppUser", "User") + .WithMany("UserRoles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Role"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("UniversalAdmin.Domain.Entities.App.AppRole", b => + { + b.Navigation("RolePemission"); + }); + + modelBuilder.Entity("UniversalAdmin.Domain.Entities.App.AppUser", b => + { + b.Navigation("UserRoles"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/backend/src/UniversalAdmin.Infrastructure/Migrations/20250723015230_InitCreate.cs b/backend/src/UniversalAdmin.Infrastructure/Migrations/20250723015230_InitCreate.cs new file mode 100644 index 0000000000000000000000000000000000000000..f7aa577275c81437e72c6b11e66d993c749ae01f --- /dev/null +++ b/backend/src/UniversalAdmin.Infrastructure/Migrations/20250723015230_InitCreate.cs @@ -0,0 +1,222 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace UniversalAdmin.Infrastructure.Migrations +{ + /// + public partial class InitCreate : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "AppFile", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + OriginFileName = table.Column(type: "text", nullable: false), + StoredFileName = table.Column(type: "text", nullable: false), + FileExtension = table.Column(type: "text", nullable: false), + ContentType = table.Column(type: "text", nullable: false), + FileSize = table.Column(type: "bigint", nullable: false), + StoragePath = table.Column(type: "text", nullable: false), + UserId = table.Column(type: "uuid", nullable: true), + Code = table.Column(type: "text", nullable: true), + IsActived = table.Column(type: "boolean", nullable: false), + IsDeleted = table.Column(type: "boolean", nullable: false), + CreateAt = table.Column(type: "timestamp with time zone", nullable: false), + UpdateAt = table.Column(type: "timestamp with time zone", nullable: false), + CreateBy = table.Column(type: "uuid", nullable: false), + UPdateBy = table.Column(type: "uuid", nullable: false), + DisplayOrder = table.Column(type: "integer", nullable: false), + Remarks = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AppFile", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AppPermission", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + Name = table.Column(type: "text", nullable: false), + Description = table.Column(type: "text", nullable: false), + Code = table.Column(type: "text", nullable: true), + IsActived = table.Column(type: "boolean", nullable: false), + IsDeleted = table.Column(type: "boolean", nullable: false), + CreateAt = table.Column(type: "timestamp with time zone", nullable: false), + UpdateAt = table.Column(type: "timestamp with time zone", nullable: false), + CreateBy = table.Column(type: "uuid", nullable: false), + UPdateBy = table.Column(type: "uuid", nullable: false), + DisplayOrder = table.Column(type: "integer", nullable: false), + Remarks = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AppPermission", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AppRole", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + Name = table.Column(type: "text", nullable: false), + Code = table.Column(type: "text", nullable: true), + IsActived = table.Column(type: "boolean", nullable: false), + IsDeleted = table.Column(type: "boolean", nullable: false), + CreateAt = table.Column(type: "timestamp with time zone", nullable: false), + UpdateAt = table.Column(type: "timestamp with time zone", nullable: false), + CreateBy = table.Column(type: "uuid", nullable: false), + UPdateBy = table.Column(type: "uuid", nullable: false), + DisplayOrder = table.Column(type: "integer", nullable: false), + Remarks = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AppRole", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AppUser", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + UserName = table.Column(type: "text", nullable: false), + Password = table.Column(type: "text", nullable: false), + Salt = table.Column(type: "text", nullable: false), + Nickname = table.Column(type: "text", nullable: true), + Avatar = table.Column(type: "text", nullable: true), + Telephone = table.Column(type: "text", nullable: true), + Email = table.Column(type: "text", nullable: true), + Code = table.Column(type: "text", nullable: true), + IsActived = table.Column(type: "boolean", nullable: false), + IsDeleted = table.Column(type: "boolean", nullable: false), + CreateAt = table.Column(type: "timestamp with time zone", nullable: false), + UpdateAt = table.Column(type: "timestamp with time zone", nullable: false), + CreateBy = table.Column(type: "uuid", nullable: false), + UPdateBy = table.Column(type: "uuid", nullable: false), + DisplayOrder = table.Column(type: "integer", nullable: false), + Remarks = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AppUser", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AppRolePermission", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + RoleId = table.Column(type: "uuid", nullable: false), + PermissionId = table.Column(type: "uuid", nullable: false), + Code = table.Column(type: "text", nullable: true), + IsActived = table.Column(type: "boolean", nullable: false), + IsDeleted = table.Column(type: "boolean", nullable: false), + CreateAt = table.Column(type: "timestamp with time zone", nullable: false), + UpdateAt = table.Column(type: "timestamp with time zone", nullable: false), + CreateBy = table.Column(type: "uuid", nullable: false), + UPdateBy = table.Column(type: "uuid", nullable: false), + DisplayOrder = table.Column(type: "integer", nullable: false), + Remarks = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AppRolePermission", x => x.Id); + table.ForeignKey( + name: "FK_AppRolePermission_AppPermission_PermissionId", + column: x => x.PermissionId, + principalTable: "AppPermission", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_AppRolePermission_AppRole_RoleId", + column: x => x.RoleId, + principalTable: "AppRole", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AppUserRole", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + UserId = table.Column(type: "uuid", nullable: false), + RoleId = table.Column(type: "uuid", nullable: false), + Code = table.Column(type: "text", nullable: true), + IsActived = table.Column(type: "boolean", nullable: false), + IsDeleted = table.Column(type: "boolean", nullable: false), + CreateAt = table.Column(type: "timestamp with time zone", nullable: false), + UpdateAt = table.Column(type: "timestamp with time zone", nullable: false), + CreateBy = table.Column(type: "uuid", nullable: false), + UPdateBy = table.Column(type: "uuid", nullable: false), + DisplayOrder = table.Column(type: "integer", nullable: false), + Remarks = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AppUserRole", x => x.Id); + table.ForeignKey( + name: "FK_AppUserRole_AppRole_RoleId", + column: x => x.RoleId, + principalTable: "AppRole", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_AppUserRole_AppUser_UserId", + column: x => x.UserId, + principalTable: "AppUser", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_AppRolePermission_PermissionId", + table: "AppRolePermission", + column: "PermissionId"); + + migrationBuilder.CreateIndex( + name: "IX_AppRolePermission_RoleId", + table: "AppRolePermission", + column: "RoleId"); + + migrationBuilder.CreateIndex( + name: "IX_AppUserRole_RoleId", + table: "AppUserRole", + column: "RoleId"); + + migrationBuilder.CreateIndex( + name: "IX_AppUserRole_UserId", + table: "AppUserRole", + column: "UserId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "AppFile"); + + migrationBuilder.DropTable( + name: "AppRolePermission"); + + migrationBuilder.DropTable( + name: "AppUserRole"); + + migrationBuilder.DropTable( + name: "AppPermission"); + + migrationBuilder.DropTable( + name: "AppRole"); + + migrationBuilder.DropTable( + name: "AppUser"); + } + } +} diff --git a/backend/src/UniversalAdmin.Infrastructure/Migrations/UniversalDbContextModelSnapshot.cs b/backend/src/UniversalAdmin.Infrastructure/Migrations/UniversalDbContextModelSnapshot.cs new file mode 100644 index 0000000000000000000000000000000000000000..809ee86ee52c2de8ebc660246080ddc71b3e193d --- /dev/null +++ b/backend/src/UniversalAdmin.Infrastructure/Migrations/UniversalDbContextModelSnapshot.cs @@ -0,0 +1,385 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using UniversalAdmin.Infrastructure.Data; + +#nullable disable + +namespace UniversalAdmin.Infrastructure.Migrations +{ + [DbContext(typeof(UniversalDbContext))] + partial class UniversalDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.2") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("UniversalAdmin.Domain.Entities.App.AppPermission", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Code") + .HasColumnType("text"); + + b.Property("CreateAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreateBy") + .HasColumnType("uuid"); + + b.Property("Description") + .IsRequired() + .HasColumnType("text"); + + b.Property("DisplayOrder") + .HasColumnType("integer"); + + b.Property("IsActived") + .HasColumnType("boolean"); + + b.Property("IsDeleted") + .HasColumnType("boolean"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("Remarks") + .HasColumnType("text"); + + b.Property("UPdateBy") + .HasColumnType("uuid"); + + b.Property("UpdateAt") + .HasColumnType("timestamp with time zone"); + + b.HasKey("Id"); + + b.ToTable("AppPermission"); + }); + + modelBuilder.Entity("UniversalAdmin.Domain.Entities.App.AppRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Code") + .HasColumnType("text"); + + b.Property("CreateAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreateBy") + .HasColumnType("uuid"); + + b.Property("DisplayOrder") + .HasColumnType("integer"); + + b.Property("IsActived") + .HasColumnType("boolean"); + + b.Property("IsDeleted") + .HasColumnType("boolean"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("Remarks") + .HasColumnType("text"); + + b.Property("UPdateBy") + .HasColumnType("uuid"); + + b.Property("UpdateAt") + .HasColumnType("timestamp with time zone"); + + b.HasKey("Id"); + + b.ToTable("AppRole"); + }); + + modelBuilder.Entity("UniversalAdmin.Domain.Entities.App.AppRolePermission", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Code") + .HasColumnType("text"); + + b.Property("CreateAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreateBy") + .HasColumnType("uuid"); + + b.Property("DisplayOrder") + .HasColumnType("integer"); + + b.Property("IsActived") + .HasColumnType("boolean"); + + b.Property("IsDeleted") + .HasColumnType("boolean"); + + b.Property("PermissionId") + .HasColumnType("uuid"); + + b.Property("Remarks") + .HasColumnType("text"); + + b.Property("RoleId") + .HasColumnType("uuid"); + + b.Property("UPdateBy") + .HasColumnType("uuid"); + + b.Property("UpdateAt") + .HasColumnType("timestamp with time zone"); + + b.HasKey("Id"); + + b.HasIndex("PermissionId"); + + b.HasIndex("RoleId"); + + b.ToTable("AppRolePermission"); + }); + + modelBuilder.Entity("UniversalAdmin.Domain.Entities.App.AppUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Avatar") + .HasColumnType("text"); + + b.Property("Code") + .HasColumnType("text"); + + b.Property("CreateAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreateBy") + .HasColumnType("uuid"); + + b.Property("DisplayOrder") + .HasColumnType("integer"); + + b.Property("Email") + .HasColumnType("text"); + + b.Property("IsActived") + .HasColumnType("boolean"); + + b.Property("IsDeleted") + .HasColumnType("boolean"); + + b.Property("Nickname") + .HasColumnType("text"); + + b.Property("Password") + .IsRequired() + .HasColumnType("text"); + + b.Property("Remarks") + .HasColumnType("text"); + + b.Property("Salt") + .IsRequired() + .HasColumnType("text"); + + b.Property("Telephone") + .HasColumnType("text"); + + b.Property("UPdateBy") + .HasColumnType("uuid"); + + b.Property("UpdateAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("AppUser"); + }); + + modelBuilder.Entity("UniversalAdmin.Domain.Entities.App.AppUserRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Code") + .HasColumnType("text"); + + b.Property("CreateAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreateBy") + .HasColumnType("uuid"); + + b.Property("DisplayOrder") + .HasColumnType("integer"); + + b.Property("IsActived") + .HasColumnType("boolean"); + + b.Property("IsDeleted") + .HasColumnType("boolean"); + + b.Property("Remarks") + .HasColumnType("text"); + + b.Property("RoleId") + .HasColumnType("uuid"); + + b.Property("UPdateBy") + .HasColumnType("uuid"); + + b.Property("UpdateAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.HasIndex("UserId"); + + b.ToTable("AppUserRole"); + }); + + modelBuilder.Entity("UniversalAdmin.Domain.Entities.AppFile", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Code") + .HasColumnType("text"); + + b.Property("ContentType") + .IsRequired() + .HasColumnType("text"); + + b.Property("CreateAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreateBy") + .HasColumnType("uuid"); + + b.Property("DisplayOrder") + .HasColumnType("integer"); + + b.Property("FileExtension") + .IsRequired() + .HasColumnType("text"); + + b.Property("FileSize") + .HasColumnType("bigint"); + + b.Property("IsActived") + .HasColumnType("boolean"); + + b.Property("IsDeleted") + .HasColumnType("boolean"); + + b.Property("OriginFileName") + .IsRequired() + .HasColumnType("text"); + + b.Property("Remarks") + .HasColumnType("text"); + + b.Property("StoragePath") + .IsRequired() + .HasColumnType("text"); + + b.Property("StoredFileName") + .IsRequired() + .HasColumnType("text"); + + b.Property("UPdateBy") + .HasColumnType("uuid"); + + b.Property("UpdateAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.ToTable("AppFile"); + }); + + modelBuilder.Entity("UniversalAdmin.Domain.Entities.App.AppRolePermission", b => + { + b.HasOne("UniversalAdmin.Domain.Entities.App.AppPermission", "Permission") + .WithMany() + .HasForeignKey("PermissionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("UniversalAdmin.Domain.Entities.App.AppRole", "Role") + .WithMany("RolePemission") + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Permission"); + + b.Navigation("Role"); + }); + + modelBuilder.Entity("UniversalAdmin.Domain.Entities.App.AppUserRole", b => + { + b.HasOne("UniversalAdmin.Domain.Entities.App.AppRole", "Role") + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("UniversalAdmin.Domain.Entities.App.AppUser", "User") + .WithMany("UserRoles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Role"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("UniversalAdmin.Domain.Entities.App.AppRole", b => + { + b.Navigation("RolePemission"); + }); + + modelBuilder.Entity("UniversalAdmin.Domain.Entities.App.AppUser", b => + { + b.Navigation("UserRoles"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/backend/src/UniversalAdmin.Infrastructure/Repositories/EfRepository.cs b/backend/src/UniversalAdmin.Infrastructure/Repositories/EfRepository.cs index f37972c300c125615bd56447db1937722e45163b..00ec382e67a78eccf4d3f468c056b7c5232932a0 100644 --- a/backend/src/UniversalAdmin.Infrastructure/Repositories/EfRepository.cs +++ b/backend/src/UniversalAdmin.Infrastructure/Repositories/EfRepository.cs @@ -1,6 +1,6 @@ -using Admin.Domain.Entities; + using Microsoft.EntityFrameworkCore; using UniversalAdmin.Domain.common; using UniversalAdmin.Domain.Entities; diff --git a/backend/src/UniversalAdmin.Infrastructure/ServiceCollectionExtensions.cs b/backend/src/UniversalAdmin.Infrastructure/ServiceCollectionExtensions.cs index 802dba76c24791f960647f4c0b69e6f30184d4b2..a685809db5c7d6b61e478c00c02d7153a4757103 100644 --- a/backend/src/UniversalAdmin.Infrastructure/ServiceCollectionExtensions.cs +++ b/backend/src/UniversalAdmin.Infrastructure/ServiceCollectionExtensions.cs @@ -1,17 +1,15 @@ using UniversalAdmin.Application.Common.Interfaces; using UniversalAdmin.Domain.Repositories; using UniversalAdmin.Infrastructure.Data; -// using UniversalAdmin.Infrastructure.Security; -// using UniversalAdmin.Infrastructure.Token; -// using MediatR; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using System.Reflection; -using Admin.Domain.Entities; -using Admin2025.Application.Common.Interfaces; +using UniversalAdmin.Domain.Entities; +using UniversalAdmin.Infrastructure.Security; -namespace Admin2025.Infrastructure; + +namespace UniversalAdmin.Infrastructure; public static class ServiceCollectionExtensions { @@ -23,16 +21,8 @@ public static class ServiceCollectionExtensions // 注册仓储接口到容器 services.AddScoped(typeof(IRepository<>), typeof(EfRepository<>)); - // services.AddScoped(typeof(IPasswordHasher), typeof(PasswordHasher)); - - services.AddSingleton(); - - // 注册MediatR - // services.AddMediatR(typeof(ServiceCollectionExtensions).Assembly); // Infrastructure - // services.AddMediatR(typeof(Application.Class1).Assembly); // Application + services.AddScoped(typeof(IPasswordHasher), typeof(PasswordHasher)); - // 注册领域事件发布器 - // services.AddScoped(); return services; } diff --git a/backend/src/UniversalAdmin.Infrastructure/Security/PasswordHasher.cs b/backend/src/UniversalAdmin.Infrastructure/Services/PasswordHasher.cs similarity index 85% rename from backend/src/UniversalAdmin.Infrastructure/Security/PasswordHasher.cs rename to backend/src/UniversalAdmin.Infrastructure/Services/PasswordHasher.cs index 81a30e3e1ffacc5efd5b9114aa6e754ac399bd0c..da062d1a4d54280787e3306cf69d7ac1ba47de95 100644 --- a/backend/src/UniversalAdmin.Infrastructure/Security/PasswordHasher.cs +++ b/backend/src/UniversalAdmin.Infrastructure/Services/PasswordHasher.cs @@ -1,8 +1,7 @@ -using Admin2025.Application.Common.Interfaces; -using BCrypt.Net; using UniversalAdmin.Application.Common.Interfaces; +using BCrypt.Net; -namespace Admin2025.Infrastructure.Security; +namespace UniversalAdmin.Infrastructure.Security; public class PasswordHasher : IPasswordHasher { diff --git a/backend/src/UniversalAdmin.Infrastructure/UniversalAdmin.Infrastructure.csproj b/backend/src/UniversalAdmin.Infrastructure/UniversalAdmin.Infrastructure.csproj index f16acf7b41f89a2dd4b48cea4a957cecbe2cd7d5..014dab797344f3a0fa5f075476508ea869ca1a61 100644 --- a/backend/src/UniversalAdmin.Infrastructure/UniversalAdmin.Infrastructure.csproj +++ b/backend/src/UniversalAdmin.Infrastructure/UniversalAdmin.Infrastructure.csproj @@ -7,11 +7,8 @@ + - - runtime; build; native; contentfiles; analyzers; buildtransitive - all - @@ -20,4 +17,5 @@ + diff --git a/frontend/demo/package.json b/frontend/demo/package.json index 3c549ab210b6094b0cfd21f2c2398ad540814505..f6958467db8c37537bf2c6eedded9acf18551e69 100644 --- a/frontend/demo/package.json +++ b/frontend/demo/package.json @@ -11,6 +11,10 @@ "format": "prettier --write src/" }, "dependencies": { + "element-plus": "^2.10.4", + "package": "^1.0.1", + "unplugin-auto-import": "^19.3.0", + "unplugin-vue-components": "^28.8.0", "vue": "^3.5.17", "vue-router": "^4.5.1" }, diff --git a/frontend/demo/pnpm-lock.yaml b/frontend/demo/pnpm-lock.yaml index 0ce04a4c218c872f9a0e09673b312c3f1e20ccd0..f41009c30362a09e2294c1c1ca3d5c8a9941dd57 100644 --- a/frontend/demo/pnpm-lock.yaml +++ b/frontend/demo/pnpm-lock.yaml @@ -8,6 +8,18 @@ importers: .: dependencies: + element-plus: + specifier: ^2.10.4 + version: 2.10.4(vue@3.5.17) + package: + specifier: ^1.0.1 + version: 1.0.1 + unplugin-auto-import: + specifier: ^19.3.0 + version: 19.3.0(@vueuse/core@9.13.0(vue@3.5.17)) + unplugin-vue-components: + specifier: ^28.8.0 + version: 28.8.0(@babel/parser@7.28.0)(vue@3.5.17) vue: specifier: ^3.5.17 version: 3.5.17 @@ -192,6 +204,15 @@ packages: resolution: {integrity: sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==} engines: {node: '>=6.9.0'} + '@ctrl/tinycolor@3.6.1': + resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==} + engines: {node: '>=10'} + + '@element-plus/icons-vue@2.3.1': + resolution: {integrity: sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==} + peerDependencies: + vue: ^3.2.0 + '@esbuild/aix-ppc64@0.25.8': resolution: {integrity: sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==} engines: {node: '>=18'} @@ -386,6 +407,15 @@ packages: resolution: {integrity: sha512-1+WqvgNMhmlAambTvT3KPtCl/Ibr68VldY2XY40SL1CE0ZXiakFR/cbTspaF5HsnpDMvcYYoJHfl4980NBjGag==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@floating-ui/core@1.7.2': + resolution: {integrity: sha512-wNB5ooIKHQc+Kui96jE/n69rHFWAVoxn5CAzL1Xdd8FG03cgY3MLO+GF9U3W737fYDSgPWA6MReKhBQBop6Pcw==} + + '@floating-ui/dom@1.7.2': + resolution: {integrity: sha512-7cfaOQuCS27HD7DX+6ib2OrnW+b4ZBwDNnCcT0uTyidcmyWb03FnQqJybDBoCnpdxwBSfA94UAYlRCt7mV+TbA==} + + '@floating-ui/utils@0.2.10': + resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} + '@humanfs/core@0.19.1': resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} engines: {node: '>=18.18.0'} @@ -545,12 +575,24 @@ packages: resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} engines: {node: '>=18'} + '@sxzz/popperjs-es@2.11.7': + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/lodash-es@4.17.12': + resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} + + '@types/lodash@4.17.20': + resolution: {integrity: sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==} + + '@types/web-bluetooth@0.0.16': + resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==} + '@vitejs/plugin-vue@6.0.0': resolution: {integrity: sha512-iAliE72WsdhjzTOp2DtvKThq1VBC4REhwRcaA+zPAAph6I+OQhUXv+Xu2KS7ElxYtb7Zc/3R30Hwv1DxEo7NXQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -623,6 +665,15 @@ packages: '@vue/shared@3.5.17': resolution: {integrity: sha512-CabR+UN630VnsJO/jHWYBC1YVXyMq94KKp6iF5MQgZJs5I8cmjw6oVMO1oDbtBkENSHSSn/UadWlW/OAgdmKrg==} + '@vueuse/core@9.13.0': + resolution: {integrity: sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==} + + '@vueuse/metadata@9.13.0': + resolution: {integrity: sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==} + + '@vueuse/shared@9.13.0': + resolution: {integrity: sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==} + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -640,12 +691,23 @@ packages: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + async-validator@4.2.5: + resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==} + balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + birpc@2.5.0: resolution: {integrity: sha512-VSWO/W6nNQdyP520F1mhf+Lc2f8pjGQOtoHHm7Ze8Go1kX7akpVIrtTa0fn+HB0QJEDVacl6aO08YE0PgXfdnQ==} @@ -655,6 +717,10 @@ packages: brace-expansion@1.1.12: resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + browserslist@4.25.1: resolution: {integrity: sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -675,6 +741,10 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -685,6 +755,12 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + confbox@0.2.2: + resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} + convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -704,6 +780,9 @@ packages: csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + dayjs@1.11.13: + resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} + debug@4.4.1: resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} engines: {node: '>=6.0'} @@ -731,6 +810,11 @@ packages: electron-to-chromium@1.5.187: resolution: {integrity: sha512-cl5Jc9I0KGUoOoSbxvTywTa40uspGJt/BDBoDLoxJRSBpWh4FFXBsjNRHfQrONsV/OoEjDfHUmZQa2d6Ze4YgA==} + element-plus@2.10.4: + resolution: {integrity: sha512-UD4elWHrCnp1xlPhbXmVcaKFLCRaRAY6WWRwemGfGW3ceIjXm9fSYc9RNH3AiOEA6Ds1p9ZvhCs76CR9J8Vd+A==} + peerDependencies: + vue: ^3.2.0 + entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -747,10 +831,17 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + eslint-config-prettier@10.1.8: resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} hasBin: true @@ -819,6 +910,9 @@ packages: estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} @@ -827,6 +921,9 @@ packages: resolution: {integrity: sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==} engines: {node: ^18.19.0 || >=20.5.0} + exsolve@1.0.7: + resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -855,6 +952,10 @@ packages: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} @@ -883,6 +984,10 @@ packages: resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} engines: {node: '>=18'} + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} @@ -921,6 +1026,10 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + is-docker@3.0.0: resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -939,6 +1048,10 @@ packages: engines: {node: '>=14.16'} hasBin: true + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + is-plain-obj@4.1.0: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} @@ -965,6 +1078,9 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true @@ -1001,25 +1117,48 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} + local-pkg@1.1.1: + resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==} + engines: {node: '>=14'} + locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} + lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + + lodash-unified@1.0.3: + resolution: {integrity: sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==} + peerDependencies: + '@types/lodash-es': '*' + lodash: '*' + lodash-es: '*' + lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} magic-string@0.30.17: resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + memoize-one@6.0.0: + resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} mitt@3.0.1: resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + mlly@1.7.4: + resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} + mrmime@2.0.1: resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} engines: {node: '>=10'} @@ -1043,6 +1182,13 @@ packages: node-releases@2.0.19: resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-wheel-es@1.2.0: + resolution: {integrity: sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==} + npm-run-path@6.0.0: resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} engines: {node: '>=18'} @@ -1066,6 +1212,10 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} + package@1.0.1: + resolution: {integrity: sha512-g6xZR6CO7okjie83sIRJodgGvaXqymfE5GLhN8N2TmZGShmHc/V23hO/vWbdnuy3D81As3pfovw72gGi42l9qA==} + engines: {node: '>= 0.6.0'} + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -1095,10 +1245,20 @@ packages: picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + picomatch@4.0.3: resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + + pkg-types@2.2.0: + resolution: {integrity: sha512-2SM/GZGAEkPp3KWORxQZns4M+WSeXbC2HEvmOIJe3Cmiv6ieAJvdVhDldtHqM5J1Y7MrR1XhkBT/rMlhh9FdqQ==} + postcss-selector-parser@6.1.2: resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} engines: {node: '>=4'} @@ -1128,6 +1288,13 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} + quansync@0.2.10: + resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -1144,6 +1311,9 @@ packages: resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} engines: {node: '>=18'} + scule@1.3.0: + resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -1185,6 +1355,9 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + strip-literal@3.0.0: + resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==} + superjson@2.2.2: resolution: {integrity: sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==} engines: {node: '>=16'} @@ -1201,6 +1374,10 @@ packages: resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} engines: {node: '>=12.0.0'} + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + totalist@3.0.1: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} @@ -1209,14 +1386,54 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} + ufo@1.6.1: + resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} + unicorn-magic@0.3.0: resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} engines: {node: '>=18'} + unimport@4.2.0: + resolution: {integrity: sha512-mYVtA0nmzrysnYnyb3ALMbByJ+Maosee2+WyE0puXl+Xm2bUwPorPaaeZt0ETfuroPOtG8jj1g/qeFZ6buFnag==} + engines: {node: '>=18.12.0'} + universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} + unplugin-auto-import@19.3.0: + resolution: {integrity: sha512-iIi0u4Gq2uGkAOGqlPJOAMI8vocvjh1clGTfSK4SOrJKrt+tirrixo/FjgBwXQNNdS7ofcr7OxzmOb/RjWxeEQ==} + engines: {node: '>=14'} + peerDependencies: + '@nuxt/kit': ^3.2.2 + '@vueuse/core': '*' + peerDependenciesMeta: + '@nuxt/kit': + optional: true + '@vueuse/core': + optional: true + + unplugin-utils@0.2.4: + resolution: {integrity: sha512-8U/MtpkPkkk3Atewj1+RcKIjb5WBimZ/WSLhhR3w6SsIj8XJuKTacSP8g+2JhfSGw0Cb125Y+2zA/IzJZDVbhA==} + engines: {node: '>=18.12.0'} + + unplugin-vue-components@28.8.0: + resolution: {integrity: sha512-2Q6ZongpoQzuXDK0ZsVzMoshH0MWZQ1pzVL538G7oIDKRTVzHjppBDS8aB99SADGHN3lpGU7frraCG6yWNoL5Q==} + engines: {node: '>=14'} + peerDependencies: + '@babel/parser': ^7.15.8 + '@nuxt/kit': ^3.2.2 || ^4.0.0 + vue: 2 || 3 + peerDependenciesMeta: + '@babel/parser': + optional: true + '@nuxt/kit': + optional: true + + unplugin@2.3.5: + resolution: {integrity: sha512-RyWSb5AHmGtjjNQ6gIlA67sHOsWpsbWpwDokLwTcejVdOjEkJZh7QKu14J00gDDVSh8kGH4KYC/TNBceXFZhtw==} + engines: {node: '>=18.12.0'} + update-browserslist-db@1.1.3: resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} hasBin: true @@ -1295,6 +1512,17 @@ packages: yaml: optional: true + vue-demi@0.14.10: + resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==} + engines: {node: '>=12'} + hasBin: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + vue-eslint-parser@10.2.0: resolution: {integrity: sha512-CydUvFOQKD928UzZhTp4pr2vWz1L+H99t7Pkln2QSPdvmURT0MoC4wUccfCnuEaihNsu9aYYyk+bep8rlfkUXw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1314,6 +1542,9 @@ packages: typescript: optional: true + webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -1542,6 +1773,12 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 + '@ctrl/tinycolor@3.6.1': {} + + '@element-plus/icons-vue@2.3.1(vue@3.5.17)': + dependencies: + vue: 3.5.17 + '@esbuild/aix-ppc64@0.25.8': optional: true @@ -1664,6 +1901,17 @@ snapshots: '@eslint/core': 0.15.1 levn: 0.4.1 + '@floating-ui/core@1.7.2': + dependencies: + '@floating-ui/utils': 0.2.10 + + '@floating-ui/dom@1.7.2': + dependencies: + '@floating-ui/core': 1.7.2 + '@floating-ui/utils': 0.2.10 + + '@floating-ui/utils@0.2.10': {} + '@humanfs/core@0.19.1': {} '@humanfs/node@0.16.6': @@ -1769,10 +2017,20 @@ snapshots: '@sindresorhus/merge-streams@4.0.0': {} + '@sxzz/popperjs-es@2.11.7': {} + '@types/estree@1.0.8': {} '@types/json-schema@7.0.15': {} + '@types/lodash-es@4.17.12': + dependencies: + '@types/lodash': 4.17.20 + + '@types/lodash@4.17.20': {} + + '@types/web-bluetooth@0.0.16': {} + '@vitejs/plugin-vue@6.0.0(vite@7.0.5)(vue@3.5.17)': dependencies: '@rolldown/pluginutils': 1.0.0-beta.19 @@ -1899,6 +2157,25 @@ snapshots: '@vue/shared@3.5.17': {} + '@vueuse/core@9.13.0(vue@3.5.17)': + dependencies: + '@types/web-bluetooth': 0.0.16 + '@vueuse/metadata': 9.13.0 + '@vueuse/shared': 9.13.0(vue@3.5.17) + vue-demi: 0.14.10(vue@3.5.17) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/metadata@9.13.0': {} + + '@vueuse/shared@9.13.0(vue@3.5.17)': + dependencies: + vue-demi: 0.14.10(vue@3.5.17) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + acorn-jsx@5.3.2(acorn@8.15.0): dependencies: acorn: 8.15.0 @@ -1916,10 +2193,19 @@ snapshots: dependencies: color-convert: 2.0.1 + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + argparse@2.0.1: {} + async-validator@4.2.5: {} + balanced-match@1.0.2: {} + binary-extensions@2.3.0: {} + birpc@2.5.0: {} boolbase@1.0.0: {} @@ -1929,6 +2215,10 @@ snapshots: balanced-match: 1.0.2 concat-map: 0.0.1 + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + browserslist@4.25.1: dependencies: caniuse-lite: 1.0.30001727 @@ -1949,6 +2239,18 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + color-convert@2.0.1: dependencies: color-name: 1.1.4 @@ -1957,6 +2259,10 @@ snapshots: concat-map@0.0.1: {} + confbox@0.1.8: {} + + confbox@0.2.2: {} + convert-source-map@2.0.0: {} copy-anything@3.0.5: @@ -1973,6 +2279,8 @@ snapshots: csstype@3.1.3: {} + dayjs@1.11.13: {} + debug@4.4.1: dependencies: ms: 2.1.3 @@ -1990,6 +2298,27 @@ snapshots: electron-to-chromium@1.5.187: {} + element-plus@2.10.4(vue@3.5.17): + dependencies: + '@ctrl/tinycolor': 3.6.1 + '@element-plus/icons-vue': 2.3.1(vue@3.5.17) + '@floating-ui/dom': 1.7.2 + '@popperjs/core': '@sxzz/popperjs-es@2.11.7' + '@types/lodash': 4.17.20 + '@types/lodash-es': 4.17.12 + '@vueuse/core': 9.13.0(vue@3.5.17) + async-validator: 4.2.5 + dayjs: 1.11.13 + escape-html: 1.0.3 + lodash: 4.17.21 + lodash-es: 4.17.21 + lodash-unified: 1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.21)(lodash@4.17.21) + memoize-one: 6.0.0 + normalize-wheel-es: 1.2.0 + vue: 3.5.17 + transitivePeerDependencies: + - '@vue/composition-api' + entities@4.5.0: {} error-stack-parser-es@0.1.5: {} @@ -2025,8 +2354,12 @@ snapshots: escalade@3.2.0: {} + escape-html@1.0.3: {} + escape-string-regexp@4.0.0: {} + escape-string-regexp@5.0.0: {} + eslint-config-prettier@10.1.8(eslint@9.31.0): dependencies: eslint: 9.31.0 @@ -2118,6 +2451,10 @@ snapshots: estree-walker@2.0.2: {} + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.8 + esutils@2.0.3: {} execa@9.6.0: @@ -2135,6 +2472,8 @@ snapshots: strip-final-newline: 4.0.0 yoctocolors: 2.1.1 + exsolve@1.0.7: {} + fast-deep-equal@3.1.3: {} fast-diff@1.3.0: {} @@ -2155,6 +2494,10 @@ snapshots: dependencies: flat-cache: 4.0.1 + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + find-up@5.0.0: dependencies: locate-path: 6.0.0 @@ -2183,6 +2526,10 @@ snapshots: '@sec-ant/readable-stream': 0.4.1 is-stream: 4.0.1 + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + glob-parent@6.0.2: dependencies: is-glob: 4.0.3 @@ -2208,6 +2555,10 @@ snapshots: imurmurhash@0.1.4: {} + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + is-docker@3.0.0: {} is-extglob@2.1.1: {} @@ -2220,6 +2571,8 @@ snapshots: dependencies: is-docker: 3.0.0 + is-number@7.0.0: {} + is-plain-obj@4.1.0: {} is-stream@4.0.1: {} @@ -2236,6 +2589,8 @@ snapshots: js-tokens@4.0.0: {} + js-tokens@9.0.1: {} + js-yaml@4.1.0: dependencies: argparse: 2.0.1 @@ -2267,12 +2622,28 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 + local-pkg@1.1.1: + dependencies: + mlly: 1.7.4 + pkg-types: 2.2.0 + quansync: 0.2.10 + locate-path@6.0.0: dependencies: p-locate: 5.0.0 + lodash-es@4.17.21: {} + + lodash-unified@1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.21)(lodash@4.17.21): + dependencies: + '@types/lodash-es': 4.17.12 + lodash: 4.17.21 + lodash-es: 4.17.21 + lodash.merge@4.6.2: {} + lodash@4.17.21: {} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -2281,12 +2652,21 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.4 + memoize-one@6.0.0: {} + minimatch@3.1.2: dependencies: brace-expansion: 1.1.12 mitt@3.0.1: {} + mlly@1.7.4: + dependencies: + acorn: 8.15.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.1 + mrmime@2.0.1: {} ms@2.1.3: {} @@ -2299,6 +2679,10 @@ snapshots: node-releases@2.0.19: {} + normalize-path@3.0.0: {} + + normalize-wheel-es@1.2.0: {} + npm-run-path@6.0.0: dependencies: path-key: 4.0.0 @@ -2332,6 +2716,8 @@ snapshots: dependencies: p-limit: 3.1.0 + package@1.0.1: {} + parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -2350,8 +2736,22 @@ snapshots: picocolors@1.1.1: {} + picomatch@2.3.1: {} + picomatch@4.0.3: {} + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.7.4 + pathe: 2.0.3 + + pkg-types@2.2.0: + dependencies: + confbox: 0.2.2 + exsolve: 1.0.7 + pathe: 2.0.3 + postcss-selector-parser@6.1.2: dependencies: cssesc: 3.0.0 @@ -2377,6 +2777,12 @@ snapshots: punycode@2.3.1: {} + quansync@0.2.10: {} + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + resolve-from@4.0.0: {} rfdc@1.4.1: {} @@ -2409,6 +2815,8 @@ snapshots: run-applescript@7.0.0: {} + scule@1.3.0: {} + semver@6.3.1: {} semver@7.7.2: {} @@ -2435,6 +2843,10 @@ snapshots: strip-json-comments@3.1.1: {} + strip-literal@3.0.0: + dependencies: + js-tokens: 9.0.1 + superjson@2.2.2: dependencies: copy-anything: 3.0.5 @@ -2452,16 +2864,77 @@ snapshots: fdir: 6.4.6(picomatch@4.0.3) picomatch: 4.0.3 + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + totalist@3.0.1: {} type-check@0.4.0: dependencies: prelude-ls: 1.2.1 + ufo@1.6.1: {} + unicorn-magic@0.3.0: {} + unimport@4.2.0: + dependencies: + acorn: 8.15.0 + escape-string-regexp: 5.0.0 + estree-walker: 3.0.3 + local-pkg: 1.1.1 + magic-string: 0.30.17 + mlly: 1.7.4 + pathe: 2.0.3 + picomatch: 4.0.3 + pkg-types: 2.2.0 + scule: 1.3.0 + strip-literal: 3.0.0 + tinyglobby: 0.2.14 + unplugin: 2.3.5 + unplugin-utils: 0.2.4 + universalify@2.0.1: {} + unplugin-auto-import@19.3.0(@vueuse/core@9.13.0(vue@3.5.17)): + dependencies: + local-pkg: 1.1.1 + magic-string: 0.30.17 + picomatch: 4.0.3 + unimport: 4.2.0 + unplugin: 2.3.5 + unplugin-utils: 0.2.4 + optionalDependencies: + '@vueuse/core': 9.13.0(vue@3.5.17) + + unplugin-utils@0.2.4: + dependencies: + pathe: 2.0.3 + picomatch: 4.0.3 + + unplugin-vue-components@28.8.0(@babel/parser@7.28.0)(vue@3.5.17): + dependencies: + chokidar: 3.6.0 + debug: 4.4.1 + local-pkg: 1.1.1 + magic-string: 0.30.17 + mlly: 1.7.4 + tinyglobby: 0.2.14 + unplugin: 2.3.5 + unplugin-utils: 0.2.4 + vue: 3.5.17 + optionalDependencies: + '@babel/parser': 7.28.0 + transitivePeerDependencies: + - supports-color + + unplugin@2.3.5: + dependencies: + acorn: 8.15.0 + picomatch: 4.0.3 + webpack-virtual-modules: 0.6.2 + update-browserslist-db@1.1.3(browserslist@4.25.1): dependencies: browserslist: 4.25.1 @@ -2536,6 +3009,10 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + vue-demi@0.14.10(vue@3.5.17): + dependencies: + vue: 3.5.17 + vue-eslint-parser@10.2.0(eslint@9.31.0): dependencies: debug: 4.4.1 @@ -2561,6 +3038,8 @@ snapshots: '@vue/server-renderer': 3.5.17(vue@3.5.17) '@vue/shared': 3.5.17 + webpack-virtual-modules@0.6.2: {} + which@2.0.2: dependencies: isexe: 2.0.0 diff --git a/frontend/demo/src/App.vue b/frontend/demo/src/App.vue index cc7cffc1e1e48733b53d30f2da5d0e5c2c434427..2e417bb74efd22e3654bd1b5c3cbb36c3cca0348 100644 --- a/frontend/demo/src/App.vue +++ b/frontend/demo/src/App.vue @@ -1,14 +1,12 @@ - - \ No newline at end of file + diff --git a/frontend/demo/src/views/Fogotpwd.vue b/frontend/demo/src/views/Fogotpwd.vue index 56133b8eb5c483cf2ca30cb4c1539de999307ee1..15155ccc6ddd83d9456b2f763db615b7e803394e 100644 --- a/frontend/demo/src/views/Fogotpwd.vue +++ b/frontend/demo/src/views/Fogotpwd.vue @@ -1,56 +1,50 @@ \ No newline at end of file + diff --git a/frontend/demo/src/views/Login.vue b/frontend/demo/src/views/Login.vue index ade846055010dbb4ed9d7670f07de0c3d6ffc3c4..e85f3d43bae86fa1add4eabf140b44fe0884fb07 100644 --- a/frontend/demo/src/views/Login.vue +++ b/frontend/demo/src/views/Login.vue @@ -1,204 +1,162 @@ - \ No newline at end of file diff --git a/frontend/demo/src/views/Logon.vue b/frontend/demo/src/views/Logon.vue index 9744bfb967516171943c15be26bb7d5837497ec8..d08266374e2d72ef10539f311ddae5f463590cec 100644 --- a/frontend/demo/src/views/Logon.vue +++ b/frontend/demo/src/views/Logon.vue @@ -1,32 +1,41 @@ + \ No newline at end of file + diff --git a/frontend/demo/vite.config.js b/frontend/demo/vite.config.js index b1c6147e0f6417a5aae1c1ee134b7bdcea04caf7..ba175c3b4da63de17c79b7c81cea15d95003f1e3 100644 --- a/frontend/demo/vite.config.js +++ b/frontend/demo/vite.config.js @@ -30,5 +30,6 @@ export default defineConfig({ alias: { '@': fileURLToPath(new URL('./src', import.meta.url)) }, + dedupe: ['vue'] }, })