commit 611f7cbaf5695785a99b931393fb6aeb16003e16 Author: XuJiacheng Date: Thu Nov 20 09:14:00 2025 +0800 初始化 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..34f4c35 --- /dev/null +++ b/.gitignore @@ -0,0 +1,14 @@ +/SupplierManager/obj +/SupplierManager/bin +/ViewModels/obj +/ViewModels/bin +/.vs +/SupplierManager/.vs +/aas_pc_web/.vscode +/aas_pc_web/obj +/SupplierManager/SupplierManager.csproj.user +/SupplierManager/.config +/SupplierManager/Properties/PublishProfiles +/SupplierManager/wwwroot/Uploads +/ConsoleAppTest/obj +/ConsoleAppTest/bin diff --git a/ConsoleAppTest/ConsoleAppTest.csproj b/ConsoleAppTest/ConsoleAppTest.csproj new file mode 100644 index 0000000..2150e37 --- /dev/null +++ b/ConsoleAppTest/ConsoleAppTest.csproj @@ -0,0 +1,10 @@ + + + + Exe + net8.0 + enable + enable + + + diff --git a/ConsoleAppTest/Program.cs b/ConsoleAppTest/Program.cs new file mode 100644 index 0000000..310a64c --- /dev/null +++ b/ConsoleAppTest/Program.cs @@ -0,0 +1,55 @@ +namespace ConsoleAppTest +{ + public struct AFS + { + public int x; + public int y; + public string Name; + } + internal class Program + { + static void Main(string[] args) + { + + List l = new List() + { + new Com(){id=1,Name="boolive"}, + new Com(){id=2,Name="boolive"} + }; + List l1 = new List() + { + new Com(){id=1,Name="boolive"}, + new Com(){id=3,Name="boolive"} + }; + var DDD= l1.Except(l).ToList(); + var DDD1= l.Except(l1).ToList(); + + + + + List lll = new List() + { + new Product{id=1,ComId=1}, + new Product{id=2,ComId=2}, + new Product{id=3,ComId=3}, + }; + + + var str = l.Where(s => s.Name.StartsWith("JavaScript")).DefaultIfEmpty().First(); + Console.WriteLine("str=" + str.Name); //输出空白 + //使用string str1 = ListInt.Where(s => s.StartsWith("JavaScript")).First(); 如去掉DefaultEmpty就会报异常 + Console.WriteLine("Hello, World!"); + } + } + public struct Com + { + public int id { get; set; } + public string Name { get; set; } + } + public class Product + { + public int id { get; set; } + public int ComId { get; set; } + public string Name { get; set; } + } +} diff --git a/SupplierManager.sln b/SupplierManager.sln new file mode 100644 index 0000000..4c36744 --- /dev/null +++ b/SupplierManager.sln @@ -0,0 +1,45 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.12.35527.113 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SupplierManager", "SupplierManager\SupplierManager.csproj", "{C0E9114F-9A75-4C9C-A620-835AB7320445}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ViewModels", "ViewModels\ViewModels.csproj", "{CCF28C8C-C597-40BF-B3FD-C1275C1DFD83}" +EndProject +Project("{54A90642-561A-4BB1-A94E-469ADEE60C69}") = "aas_pc_web", "aas_pc_web\aas_pc_web.esproj", "{ADB8BA1A-A076-739A-24E7-A4D2CD5A9514}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleAppTest", "ConsoleAppTest\ConsoleAppTest.csproj", "{50107F1E-6C76-43FB-B944-700330011DD7}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {C0E9114F-9A75-4C9C-A620-835AB7320445}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C0E9114F-9A75-4C9C-A620-835AB7320445}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C0E9114F-9A75-4C9C-A620-835AB7320445}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C0E9114F-9A75-4C9C-A620-835AB7320445}.Release|Any CPU.Build.0 = Release|Any CPU + {CCF28C8C-C597-40BF-B3FD-C1275C1DFD83}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CCF28C8C-C597-40BF-B3FD-C1275C1DFD83}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CCF28C8C-C597-40BF-B3FD-C1275C1DFD83}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CCF28C8C-C597-40BF-B3FD-C1275C1DFD83}.Release|Any CPU.Build.0 = Release|Any CPU + {ADB8BA1A-A076-739A-24E7-A4D2CD5A9514}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {ADB8BA1A-A076-739A-24E7-A4D2CD5A9514}.Debug|Any CPU.Build.0 = Debug|Any CPU + {ADB8BA1A-A076-739A-24E7-A4D2CD5A9514}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {ADB8BA1A-A076-739A-24E7-A4D2CD5A9514}.Release|Any CPU.ActiveCfg = Release|Any CPU + {ADB8BA1A-A076-739A-24E7-A4D2CD5A9514}.Release|Any CPU.Build.0 = Release|Any CPU + {ADB8BA1A-A076-739A-24E7-A4D2CD5A9514}.Release|Any CPU.Deploy.0 = Release|Any CPU + {50107F1E-6C76-43FB-B944-700330011DD7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {50107F1E-6C76-43FB-B944-700330011DD7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {50107F1E-6C76-43FB-B944-700330011DD7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {50107F1E-6C76-43FB-B944-700330011DD7}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {6F6BE90E-782F-4AD7-9E68-D65B522CFEDA} + EndGlobalSection +EndGlobal diff --git a/SupplierManager/Common/MyMemoryCache.cs b/SupplierManager/Common/MyMemoryCache.cs new file mode 100644 index 0000000..31d1f41 --- /dev/null +++ b/SupplierManager/Common/MyMemoryCache.cs @@ -0,0 +1,13 @@ +using Microsoft.Extensions.Caching.Memory; + +namespace WebAPIServer.Common +{ + public class MyMemoryCache + { + public MemoryCache Cache { get; } = new MemoryCache( + new MemoryCacheOptions + { + SizeLimit = 1024 + }); + } +} diff --git a/SupplierManager/Common/StaticData.cs b/SupplierManager/Common/StaticData.cs new file mode 100644 index 0000000..1fa2093 --- /dev/null +++ b/SupplierManager/Common/StaticData.cs @@ -0,0 +1,30 @@ +using System.Reflection; +using IronPython.Hosting; +using Microsoft.Scripting.Hosting; +using SupplierManager.Extensions; + +namespace SupplierManager.Common +{ + public class StaticData + { + public readonly static object obj = new object(); + public static ScriptEngine eng = Python.CreateEngine(); + public static ScriptScope scope1 = eng.CreateScope(); + public static ScriptScope scope2 = eng.CreateScope(); + public static ScriptScope scope3 = eng.CreateScope(); + + public static void GetWebAPIMethod() + { + eng.Runtime.LoadAssembly(Assembly.GetExecutingAssembly()); + eng.ExecuteFile("script\\webapi.py", scope1); + } + public static void GetWebAPIMethod1() + { + eng.ExecuteFile("script\\a.py", scope1); + } + public static void GetWebAPIMethod2() + { + eng.ExecuteFile("script\\b.py", scope1); + } + } +} diff --git a/SupplierManager/Controllers/AasCustomerInfoesController.cs b/SupplierManager/Controllers/AasCustomerInfoesController.cs new file mode 100644 index 0000000..826a5d4 --- /dev/null +++ b/SupplierManager/Controllers/AasCustomerInfoesController.cs @@ -0,0 +1,120 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using SupplierManager.Models; +using ViewModels; + +namespace SupplierManager.Controllers +{ + [Route("api/[controller]/[action]")] + [ApiController] + public class AasCustomerInfoesController : ControllerBase + { + private readonly AgentApprovalSystemContext _context; + + public AasCustomerInfoesController(AgentApprovalSystemContext context) + { + _context = context; + } + + // GET: api/AasCustomerInfoes + [HttpGet] + public async Task GetAasCustomerInfos([FromBody] QueryAll_Or_Single S) + { + ReturnInfo returnInfo = new ReturnInfo(); + try + { + returnInfo.isok = true; + if (S.IsAll) + { + returnInfo.response = await _context.AasCustomerInfos.ToListAsync(); + } + else + { + var aasCustomerInfo = await _context.AasCustomerInfos.FindAsync(S.ID); + + returnInfo.response = aasCustomerInfo; + } + } + catch (Exception ex) + { + returnInfo.isok = false; + returnInfo.message = ex.Message; + } + return returnInfo; + } + + + // PUT: api/AasCustomerInfoes/5 + // To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754 + [HttpPut("{id}")] + public async Task PutAasCustomerInfo([FromBody] AasCustomerInfo aasCustomerInfo) + { + + ReturnInfo r = new ReturnInfo(); + try + { + _context.Entry(aasCustomerInfo).State = EntityState.Modified; + await _context.SaveChangesAsync(); + r.isok = true; + } + catch (Exception ex) + { + r.isok = false; + r.message = ex.Message; + } + + return r; + } + + // POST: api/AasCustomerInfoes + // To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754 + [HttpPost] + public async Task AddAasCustomerInfo([FromBody] AasCustomerInfo aasCustomerInfo) + { + ReturnInfo r = new ReturnInfo(); + try + { + _context.AasCustomerInfos.Add(aasCustomerInfo); + await _context.SaveChangesAsync(); + r.isok = true; + } + catch (Exception ex) + { + r.isok = false; + r.message = ex.Message; + } + return r; + } + + [HttpPost()] + public async Task DeleteAasCustomerInfo([FromBody] Dictionary stu) + { + ReturnInfo re = new ReturnInfo(); + try + { + + long id = stu["id"]; + re.isok = true; + var aasCustomerInfo = await _context.AasCustomerInfos.FindAsync(id); + + if (aasCustomerInfo != null) + { + _context.AasCustomerInfos.Remove(aasCustomerInfo); + await _context.SaveChangesAsync(); + } + re.isok = true; + } + catch (Exception ex) + { + re.isok = false; + } + return re; + } + } +} diff --git a/SupplierManager/Controllers/AasProjectInfoesController.cs b/SupplierManager/Controllers/AasProjectInfoesController.cs new file mode 100644 index 0000000..0014204 --- /dev/null +++ b/SupplierManager/Controllers/AasProjectInfoesController.cs @@ -0,0 +1,451 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.CodeAnalysis.Elfie.Model.Tree; +using Microsoft.EntityFrameworkCore; +using SupplierManager.Common; +using SupplierManager.Models; +using ViewModels; + +namespace SupplierManager.Controllers +{ + [Route("api/[controller]/[action]")] + [ApiController] + public class AasProjectInfoesController : ControllerBase + { + + // GET: api/AasProjectInfoes + [HttpPost()] + [Authorize()] + public async Task GetAasProjectInfos([FromBody] QueryAll_Or_Single_ProjectInfo S) + { + ReturnInfo returnInfo = new ReturnInfo(); + + try + { + using (var q = new AgentApprovalSystemContext()) + { + if (S.IsAll) + { + returnInfo.isok = true; + var U = q.AasProjectInfos.Where(A => A.CompanyId == S.ComId).ToList(); + + var A = new List(); + foreach (AasProjectInfo item in U) + { + ShengPiDDD s = new ShengPiDDD(); + s.Id = item.Id; + s.Shengfen = item.Shengfen; + s.Quyu = item.Quyu; + s.AddressDetail = item.AddressDetail; + s.HangyeClass = item.HangyeClass; + s.ProjectCode = item.ProjectCode; + s.ProjectName = item.ProjectName; + s.CompanyId = item.CompanyId; + s.RoomTotalCount = item.RoomTotalCount; + s.RoomTypeCount = item.RoomTypeCount; + s.Blueprint = item.Blueprint; + s.Createtime = item.Createtime; + s.Updatetime = item.Updatetime; + s.ShengpiStatus = item.ShengpiStatus; + s.Uid = item.Uid; + s.Customization = item.Customization; + + var U1 = q.AasProjectShenpis.Where(A => A.ProjectCode == item.ProjectCode).ToList(); + s.sp = U1; + A.Add(s); + } + + //var query = from t1 in q.AasProjectInfos + // join t2 in q.AasProjectShenpis on t1.ProjectCode equals t2.ProjectCode into tt1 + // from t3 in tt1.DefaultIfEmpty() + // where t1.CompanyId == S.ComId + // select new + // { + // t1.Id, + // t1.Shengfen, + // t1.Quyu, + // t1.AddressDetail, + // t1.HangyeClass, + // t1.ProjectName, + // t1.ProjectCode, + // t1.CompanyId, + // t1.RoomTotalCount, + // t1.RoomTypeCount, + // t3.RejectReason, + // t3.ShenpiNumber, + // sp_Createtime= t3.Createtime + // }; + + //var result = query.ToList(); + //var D = Q.ToList(); + //var D = Q.ToList(); + returnInfo.response = A; + } + else + { + //returnInfo.isok = true; + //var a = q.AasUsers.SingleOrDefault(A => A.Id == S.ID); + //if (a != null) + //{ + // returnInfo.response = a; + //} + } + } + } + catch (Exception ex) + { + returnInfo.isok = false; + returnInfo.message = ex.Message; + } + return returnInfo; + } + + + + [HttpPost()] + [Authorize()] + public async Task GetAasProjectInfos_Page([FromBody] QueryAll_Or_Single_ProjectInfo_Page S) + { + ReturnInfo returnInfo = new ReturnInfo(); + + try + { + DateTime dt_s = DateTime.Now; + + DateTime dt_e = DateTime.Now; + + using var q = new AgentApprovalSystemContext(); + + + List U = new List(); + if (!string.IsNullOrEmpty(S.UpdateTime_Start) && !string.IsNullOrEmpty(S.UpdateTime_End) && S.ComId != 0) + { + DateTime.TryParse(S.UpdateTime_Start, out dt_s); + DateTime.TryParse(S.UpdateTime_End, out dt_e); + long dt_s_l = Tools.ToUnixTimestampBySeconds(dt_s); + long dt_e_l = Tools.ToUnixTimestampBySeconds(dt_e); + U = await q.AasProjectInfos.Where(A => A.CompanyId == S.ComId && A.UpdatetimeUnix > dt_s_l && A.UpdatetimeUnix <= dt_e_l).ToListAsync(); + } + else if (string.IsNullOrEmpty(S.UpdateTime_Start) && string.IsNullOrEmpty(S.UpdateTime_End) && S.ComId != 0) + { + U = await q.AasProjectInfos.Where(A => A.CompanyId == S.ComId).ToListAsync(); + } + else if (!string.IsNullOrEmpty(S.UpdateTime_Start) && !string.IsNullOrEmpty(S.UpdateTime_End) && S.ComId == 0) + { + DateTime.TryParse(S.UpdateTime_Start, out dt_s); + DateTime.TryParse(S.UpdateTime_End, out dt_e); + long dt_s_l = Tools.ToUnixTimestampBySeconds(dt_s); + long dt_e_l = Tools.ToUnixTimestampBySeconds(dt_e); + U = await q.AasProjectInfos.Where(A => A.UpdatetimeUnix > dt_s_l && A.UpdatetimeUnix <= dt_e_l).ToListAsync(); + } + else + { + + } + var A = new List(); + foreach (AasProjectInfo item in U) + { + ShengPiDDD s = new ShengPiDDD(); + s.Id = item.Id; + s.Shengfen = item.Shengfen; + s.Quyu = item.Quyu; + s.AddressDetail = item.AddressDetail; + s.HangyeClass = item.HangyeClass; + s.ProjectCode = item.ProjectCode; + s.ProjectName = item.ProjectName; + s.CompanyId = item.CompanyId; + s.RoomTotalCount = item.RoomTotalCount; + s.RoomTypeCount = item.RoomTypeCount; + s.Blueprint = item.Blueprint; + s.Createtime = item.Createtime; + s.Updatetime = item.Updatetime; + s.ShengpiStatus = item.ShengpiStatus; + s.Uid = item.Uid; + s.Customization = item.Customization; + + var U1 = await q.AasProjectShenpis.Where(A => A.ProjectCode == item.ProjectCode).ToListAsync(); + s.sp = U1; + A.Add(s); + } + + returnInfo.isok = true; + returnInfo.response = A; + } + catch (Exception ex) + { + returnInfo.isok = false; + returnInfo.message = ex.Message; + } + return returnInfo; + } + + + public class ShengPiDDD : AasProjectInfo + { + public List sp { get; set; } + } + + public class PInfo + { + public long id { get; set; } + public string projectName { get; set; } + public int projectCode { get; set; } + public string shengfen { get; set; } + public string quyu { get; set; } + public string? addressDetail { get; set; } + public string? hangyeClass { get; set; } + public int roomTypeCount { get; set; } + public int roomTotalCount { get; set; } + public string? blueprint { get; set; } + public string? customization { get; set; } + } + // PUT: api/AasProjectInfoes/5 + // To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754 + [HttpPost()] + [Authorize()] + public async Task EditProjectInfo([FromBody] PInfo record) + { + ReturnInfo r = new ReturnInfo(); + try + { + using var _context = new AgentApprovalSystemContext(); + var aasProjectInfo = _context.AasProjectInfos.SingleOrDefault(A => A.Id == record.id); + if (aasProjectInfo != null) + { + + DateTime dt = DateTime.Now; + aasProjectInfo.Updatetime = dt; + aasProjectInfo.UpdatetimeUnix = Tools.ToUnixTimestampBySeconds(dt); + aasProjectInfo.Shengfen = record.shengfen; + aasProjectInfo.ProjectName = record.projectName; + aasProjectInfo.Quyu = record.quyu; + aasProjectInfo.AddressDetail = record.addressDetail; + aasProjectInfo.RoomTotalCount = record.roomTotalCount; + aasProjectInfo.RoomTypeCount = record.roomTypeCount; + aasProjectInfo.HangyeClass = record.hangyeClass; + aasProjectInfo.Blueprint = record.blueprint; + aasProjectInfo.Customization = record.customization; + + _context.Entry(aasProjectInfo).State = EntityState.Modified; + await _context.SaveChangesAsync(); + r.isok = true; + } + else + { + r.isok = false; + r.message = "你修改了一个不存在的数据,这是不允许的"; + } + } + catch (Exception ex) + { + r.isok = false; + r.message = ex.Message; + } + return r; + + } + + // POST: api/AasProjectInfoes + // To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754 + [HttpPost] + [Authorize()] + public async Task AddAasProjectInfo(AasProjectInfo aasProjectInfo) + { + ReturnInfo r = new ReturnInfo(); + try + { + lock (StaticData.obj) + { + using (var _context = new AgentApprovalSystemContext()) + { + using var tran = _context.Database.BeginTransaction(); + var QQQ = _context.Autokeygeneraters.SingleOrDefault(); + if (QQQ != null) + { + long? n = QQQ.ProjectInfoCode + 1; + QQQ.ProjectInfoCode = n; + _context.Autokeygeneraters.Update(QQQ); + aasProjectInfo.ProjectCode = n.ToString(); + } + long ll = Tools.ToUnixTimestampBySeconds(DateTime.Now); + aasProjectInfo.Createtime = DateTime.Now; + aasProjectInfo.Updatetime = DateTime.Now; + aasProjectInfo.ShengpiStatus = "1"; + aasProjectInfo.CreatetimeUnix = ll; + aasProjectInfo.UpdatetimeUnix = ll; + _context.AasProjectInfos.Add(aasProjectInfo); + _context.SaveChanges(); + + tran.Commit(); + } + } + r.isok = true; + } + catch (Exception ex) + { + r.isok = false; + r.message = ex.Message; + } + return r; + + } + + // DELETE: api/AasProjectInfoes/5 + [HttpPost()] + [Authorize()] + public async Task DeleteAasProjectInfo(long id) + { + + ReturnInfo r = new ReturnInfo(); + r.isok = true; + try + { + + using var _context = new AgentApprovalSystemContext(); + + var aasProjectInfo = await _context.AasProjectInfos.FindAsync(id); + if (aasProjectInfo == null) + { + r.isok = false; + r.message = "要删除的数据不存在"; + } + + _context.AasProjectInfos.Remove(aasProjectInfo); + await _context.SaveChangesAsync(); + r.isok = true; + } + catch (Exception ex) + { + r.isok = false; + r.message = ex.Message; + } + + return r; + } + + + + [HttpPost()] + [Authorize()] + public async Task StatusChange_AasProjectInfo([FromBody] A a) + { + + ReturnInfo r = new ReturnInfo(); + r.isok = true; + try + { + + using var _context = new AgentApprovalSystemContext(); + + + var aasProjectInfo = await _context.AasProjectInfos.FindAsync(a.id); + if (aasProjectInfo == null) + { + r.isok = false; + r.message = "要修改的数据不存在"; + } + else + { + + + if (a.Status.Equals("3")) + { + var aasProjectInfo0 = await _context.AasProjectInfos.Where(X => X.ShengpiStatus.Equals("3") && X.ProjectName.Equals(aasProjectInfo.ProjectName)).ToListAsync(); + if (aasProjectInfo0.Count > 0) + { + r.isok = false; + r.message = "已有同名项目,请重试"; + return r; + } + } + + aasProjectInfo.ShengpiStatus = a.Status; + aasProjectInfo.Updatetime = DateTime.Now; + _context.AasProjectInfos.Update(aasProjectInfo); + await _context.SaveChangesAsync(); + r.isok = true; + } + + } + catch (Exception ex) + { + r.isok = false; + r.message = ex.Message; + } + + return r; + } + + [HttpPost()] + [Authorize()] + public async Task Get_ProjectCode_Generate() + { + + ReturnInfo r = new ReturnInfo(); + r.isok = true; + try + { + using var _context = new AgentApprovalSystemContext(); + var a = await _context.Autokeygeneraters.FirstOrDefaultAsync(); + if (a == null) + { + Autokeygenerater d1 = new Autokeygenerater(); + d1.ProjectInfoCode = 1000; + _context.Autokeygeneraters.Add(d1); + r.isok = true; + r.response = a.ProjectInfoCode; + } + else + { + a.ProjectInfoCode = a.ProjectInfoCode + 1; + _context.Autokeygeneraters.Update(a); + r.isok = true; + r.response = a.ProjectInfoCode; + + } + await _context.SaveChangesAsync(); + } + catch (Exception ex) + { + r.isok = false; + r.message = ex.Message; + } + return r; + } + + + [HttpPost()] + [Authorize()] + public async Task Get_ProjectByStatusCode() + { + + ReturnInfo r = new ReturnInfo(); + r.isok = true; + try + { + using var _context = new AgentApprovalSystemContext(); + var LLL = await _context.AasProjectInfos.Where(A => A.ShengpiStatus.Equals("3")).ToListAsync(); + r.response = LLL; + r.isok = true; + } + catch (Exception ex) + { + r.isok = false; + r.message = ex.Message; + } + return r; + } + + } + public class A + { + public long id { get; set; } + public string? Status { get; set; } + //public string? Name { get; set; } + } +} diff --git a/SupplierManager/Controllers/AasProjectReportReadiesController.cs b/SupplierManager/Controllers/AasProjectReportReadiesController.cs new file mode 100644 index 0000000..fcbe7e6 --- /dev/null +++ b/SupplierManager/Controllers/AasProjectReportReadiesController.cs @@ -0,0 +1,129 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using SupplierManager.Models; +using ViewModels; + +namespace SupplierManager.Controllers +{ + [Route("api/[controller]")] + [ApiController] + public class AasProjectReportReadiesController : ControllerBase + { + private readonly AgentApprovalSystemContext _context; + + public AasProjectReportReadiesController(AgentApprovalSystemContext context) + { + _context = context; + } + + // GET: api/AasProjectReportReadies + [HttpPost()] + public async Task GetAasProjectReportReadies([FromBody] QueryAll_Or_Single_ProjectInfo S) + { + ReturnInfo returnInfo = new ReturnInfo(); + try + { + if (S.IsAll) + { + + returnInfo.isok = true; + returnInfo.response = await _context.AasProjectReportReadies.ToListAsync(); + } + else + { + returnInfo.isok = true; + var a = await _context.AasProjectReportReadies.FindAsync(S.ID); + if (a != null) + { + returnInfo.response = a; + } + } + } + catch (Exception ex) + { + returnInfo.isok = false; + returnInfo.message = ex.Message; + } + return returnInfo; + } + + + // PUT: api/AasProjectReportReadies/5 + // To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754 + [HttpPost()] + public async Task EditAasProjectReportReady(AasProjectReportReady aasProjectReportReady) + { + + ReturnInfo r = new ReturnInfo(); + _context.Entry(aasProjectReportReady).State = EntityState.Modified; + + try + { + await _context.SaveChangesAsync(); + r.isok = true; + } + catch (Exception ex) + { + r.isok = false; + r.message = ex.Message; + } + + return r; + } + + // POST: api/AasProjectReportReadies + // To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754 + [HttpPost] + public async Task AddAasProjectReportReady(AasProjectReportReady aasProjectReportReady) + { + ReturnInfo r = new ReturnInfo(); + try + { + + _context.AasProjectReportReadies.Add(aasProjectReportReady); + await _context.SaveChangesAsync(); + r.isok = true; + } + catch (Exception ex) + { + r.isok = false; + r.message = ex.Message; + } + + return r; + } + + // DELETE: api/AasProjectReportReadies/5 + [HttpDelete("{id}")] + public async Task DeleteAasProjectReportReady(long id) + { + ReturnInfo r = new ReturnInfo(); + try + { + var aasProjectReportReady = await _context.AasProjectReportReadies.FindAsync(id); + if (aasProjectReportReady == null) + { + r.isok = false; + r.message = "找不到要删除的数据"; + } + + _context.AasProjectReportReadies.Remove(aasProjectReportReady); + await _context.SaveChangesAsync(); + r.isok = true; + } + catch (Exception ex) + { + r.isok = false; + r.message = ex.Message; + } + + return r; + } + + } +} diff --git a/SupplierManager/Controllers/AasProjectShenpisController.cs b/SupplierManager/Controllers/AasProjectShenpisController.cs new file mode 100644 index 0000000..46dd8ac --- /dev/null +++ b/SupplierManager/Controllers/AasProjectShenpisController.cs @@ -0,0 +1,139 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using SupplierManager.Models; +using ViewModels; + +namespace SupplierManager.Controllers +{ + [Route("api/[controller]/[action]")] + [ApiController] + public class AasProjectShenpisController : ControllerBase + { + private readonly AgentApprovalSystemContext _context; + + public AasProjectShenpisController(AgentApprovalSystemContext context) + { + _context = context; + } + + // GET: api/AasProjectShenpis + [HttpPost()] + [Authorize()] + public async Task GetAasProjectShenpis([FromBody] QueryAll_Or_Single_ProjectInfo S) + { + ReturnInfo r = new ReturnInfo(); + try + { + if (S.IsAll) + { + r.response = await _context.AasProjectShenpis.ToListAsync(); + r.isok = true; + } + else + { + + var aasProjectShenpi = await _context.AasProjectShenpis.FindAsync(S.ID); + r.isok = true; + r.response = aasProjectShenpi; + } + } + catch (Exception ex) + { + r.isok = false; + r.message = ex.Message; + } + return r; + } + + [HttpPost()] + [Authorize()] + public async Task EditAasProjectShenpi([FromBody] AasProjectShenpi aasProjectShenpi) + { + + ReturnInfo r = new ReturnInfo(); + try + { + aasProjectShenpi.Updatetime = DateTime.Now; + _context.Entry(aasProjectShenpi).State = EntityState.Modified; + await _context.SaveChangesAsync(); + r.isok = true; + } + catch (Exception ex) + { + r.isok = false; + } + return r; + } + + [HttpPost()] + [Authorize()] + public async Task AddAasProjectShenpi(AasProjectShenpi aasProjectShenpi) + { + + ReturnInfo r = new ReturnInfo(); + r.isok = false; + try + { + var Q = _context.AasProjectShenpis.Where(x => x.ProjectCode.Equals(aasProjectShenpi.ProjectCode)); + if (Q.Count() > 0) + { + var Q1 = Q.OrderByDescending(A => A.ShenpiNumber).FirstOrDefault(); + aasProjectShenpi.ShenpiNumber = Q1?.ShenpiNumber + 1; + } + else + { + aasProjectShenpi.ShenpiNumber = 0; + } + aasProjectShenpi.Updatetime = DateTime.Now; + _context.AasProjectShenpis.Add(aasProjectShenpi); + await _context.SaveChangesAsync(); + r.isok = true; + } + catch (Exception ex) + { + r.isok = false; + r.message = ex.Message; + } + return r; + } + + // DELETE: api/AasProjectShenpis/5 + [HttpPost()] + [Authorize()] + public async Task DeleteAasProjectShenpi(long id) + { + + ReturnInfo r = new ReturnInfo(); + try + { + + var aasProjectShenpi = await _context.AasProjectShenpis.FindAsync(id); + if (aasProjectShenpi == null) + { + r.isok = false; + r.message = "找不到相应的数据"; + } + _context.AasProjectShenpis.Remove(aasProjectShenpi); + await _context.SaveChangesAsync(); + } + catch (Exception ex) + { + r.isok = false; + r.message = ex.Message; + } + return r; + + } + + private bool AasProjectShenpiExists(long id) + { + return _context.AasProjectShenpis.Any(e => e.Id == id); + } + } +} diff --git a/SupplierManager/Controllers/CompanyController.cs b/SupplierManager/Controllers/CompanyController.cs new file mode 100644 index 0000000..125f199 --- /dev/null +++ b/SupplierManager/Controllers/CompanyController.cs @@ -0,0 +1,235 @@ +using System.Reflection; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using SupplierManager.Models; +using ViewModels; + +namespace SupplierManager.Controllers +{ + [Route("api/[controller]/[action]")] + [ApiController] + public class CompanyController : ControllerBase + { + /// + /// 删除用户 + /// + /// + /// + [HttpPost()] + [Authorize()] + public ReturnInfo DelCom([FromBody] Dictionary LLL) + { + ReturnInfo returnInfo = new ReturnInfo(); + + try + { + int idd = LLL["Id"]; + using (var q = new AgentApprovalSystemContext()) + { + var FFF = q.AasCompanyInfos.FirstOrDefault(A => A.Id == idd); + if (FFF != null) + { + q.AasCompanyInfos.Remove(FFF); + q.SaveChanges(); + returnInfo.isok = true; + } + } + } + catch (Exception ex) + { + returnInfo.isok = false; + returnInfo.message = ex.Message; + } + return returnInfo; + } + + /// + /// 修改用户 + /// + /// + /// + [HttpPost()] + [Authorize()] + public ReturnInfo EditCom([FromBody] Com LLL) + { + ReturnInfo returnInfo = new ReturnInfo(); + + try + { + using (var q = new AgentApprovalSystemContext()) + { + var lll = q.AasCompanyInfos.SingleOrDefault(A => A.Id == LLL.Id); + if (lll != null) + { + + lll.NameCn = LLL.NameCn; + lll.NameEn = LLL.NameEn; + lll.Identity = LLL.Identity; + lll.Industry = LLL.Industry; + lll.Code = LLL.Code; + lll.LicenseCode = LLL.LicenseCode; + lll.Region = LLL.Region; + lll.Logoaddress= LLL.Logoaddress; + lll.Updatetime = DateTime.Now; + + q.AasCompanyInfos.Update(lll); + q.SaveChanges(); + returnInfo.isok = true; + } + } + } + catch (Exception ex) + { + returnInfo.isok = false; + returnInfo.message = ex.Message; + } + return returnInfo; + } + + /// + /// 获取用户信息 + /// + /// + /// + [HttpPost()] + [Authorize()] + public ReturnInfo GetComInfo([FromBody] QueryAll_Or_Single S) + { + ReturnInfo returnInfo = new ReturnInfo(); + + try + { + using (var q = new AgentApprovalSystemContext()) + { + if (S.IsAll) + { + returnInfo.isok = true; + returnInfo.response = q.AasCompanyInfos.Select(F => new AasCompanyInfo + { + Id = F.Id, + Code = F.Code, + NameCn = F.NameCn, + NameEn = F.NameEn, + Identity = F.Identity, + LicenseCode = F.LicenseCode, + Industry = F.Industry, + Region = F.Region, + Logoaddress = F.Logoaddress + }).ToList(); + } + else + { + returnInfo.isok = true; + var a = q.AasCompanyInfos.SingleOrDefault(A => A.Id == S.ID); + if (a != null) + { + AasCompanyInfo u = new AasCompanyInfo(); + u.Id = a.Id; + u.Code = a.Code; + u.NameCn = a.NameCn; + u.NameEn = a.NameEn; + u.Updatetime = a.Updatetime; + u.Createtime = a.Createtime; + u.Industry = a.Industry; + u.LicenseCode = a.LicenseCode; + u.Region = a.Region; + returnInfo.response = u; + } + } + } + } + catch (Exception ex) + { + returnInfo.isok = false; + returnInfo.message = ex.Message; + } + return returnInfo; + } + + /// + /// 新增用户 + /// + /// + /// + [HttpPost()] + [Authorize()] + public ReturnInfo AddCom([FromBody] Com LLL) + { + ReturnInfo returnInfo = new ReturnInfo(); + + try + { + + + AasCompanyInfo a = new AasCompanyInfo(); + a.NameCn = LLL.NameCn; + a.NameEn = LLL.NameEn; + a.Identity = LLL.Identity; + a.Industry = LLL.Industry; + a.Region = LLL.Region; + a.Logoaddress = LLL.Logoaddress; + a.Createtime = DateTime.Now; + a.Updatetime = DateTime.Now; + + using (var q = new AgentApprovalSystemContext()) + { + var Q = q.AasCompanyInfos.Where(A => A.NameCn.Equals(LLL.NameCn)); + if (Q.Count() > 0) + { + returnInfo.isok = false; + returnInfo.message = "此公司已经存在"; + } + else + { + using var T = q.Database.BeginTransaction(); + Autokeygenerater? QQQ = q.Autokeygeneraters.SingleOrDefault(); + QQQ.CompanyCode = QQQ.CompanyCode + 1; + + a.Code = QQQ.CompanyCode.ToString(); + q.Autokeygeneraters.Update(QQQ); + q.AasCompanyInfos.Add(a); + returnInfo.isok = true; + q.SaveChanges(); + T.Commit(); + } + } + } + catch (Exception ex) + { + returnInfo.isok = false; + returnInfo.message = ex.Message; + } + return returnInfo; + } + } + public class Com + { + + public int Id { get; set; } = -1; + public string? Code { get; set; } + + public string? NameCn { get; set; } + + public string? NameEn { get; set; } + + /// + /// 所属行业 + /// + public string? Industry { get; set; } + + /// + /// 身份 + /// + public string? Identity { get; set; } + + public string? Region { get; set; } + public string? Logoaddress { get; set; } + + /// + /// 营业执照 + /// + public string? LicenseCode { get; set; } + } +} diff --git a/SupplierManager/Controllers/ConfigPYController.cs b/SupplierManager/Controllers/ConfigPYController.cs new file mode 100644 index 0000000..a1b2deb --- /dev/null +++ b/SupplierManager/Controllers/ConfigPYController.cs @@ -0,0 +1,134 @@ +using System.Text; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Http.HttpResults; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Scripting.Utils; +using SupplierManager.Common; +using ViewModels; + +namespace SupplierManager.Controllers +{ + [Route("api/[controller]/[action]")] + [ApiController] + public class ConfigPYController : ControllerBase + { + [HttpPost()] + [Authorize()] + public async Task GetConfigString() + { + ReturnInfo r = new ReturnInfo(); + try + { + string[] str = await System.IO.File.ReadAllLinesAsync("script\\webapi.py"); + + List ll = new List(); + foreach (var item in str) + { + if (!string.IsNullOrWhiteSpace(item)) + { + string[] a = item.Split('='); + VK v = new VK(); + v.VarName = a[0]; + v.VarValue = a[1]; + ll.Add(v); + } + } + + r.isok = true; + r.response = ll; + } + catch (Exception ex) + { + r.isok = false; + r.message = ex.Message; + } + return r; + } + + [HttpPost()] + [Authorize()] + public ReturnInfo RefreshConfig() + { + ReturnInfo info = new ReturnInfo(); + info.isok = true; + try + { + StaticData.GetWebAPIMethod(); + info.message = "Sucess"; + } + catch (Exception ex) + { + info.isok = false; + info.message = ex.Message; + } + return info; + } + + public class VK + { + public string VarName { get; set; } + public string VarValue { get; set; } + } + [HttpPost()] + [Authorize()] + public async Task SaveOrAddConfigString([FromBody] VK data) + { + ReturnInfo info = new ReturnInfo(); + info.isok = true; + try + { + var sss = System.IO.File.ReadAllLines("script\\webapi.py", Encoding.UTF8).ToList(); + for (int i = 0; i < sss.Count; i++) + { + string item = sss[i]; + string[] txtdata = item.Split('='); + if (txtdata[0].Equals(data.VarName)) + { + txtdata[1] = data.VarValue; + sss[i] = txtdata[0] + "=" + txtdata[1]; + } + } + bool exists = sss.Any(A => A.StartsWith(data.VarName)); + + if (exists == false) + { + sss.AddRange(new string[] { data.VarName + "=" + data.VarValue }); + } + + await System.IO.File.WriteAllLinesAsync("script\\webapi.py", sss, Encoding.UTF8); + StaticData.GetWebAPIMethod(); + info.message = "Sucess"; + } + catch (Exception ex) + { + info.isok = false; + info.message = ex.Message; + } + return info; + } + [HttpPost()] + [Authorize()] + public ReturnInfo GetSingleValue([FromBody] Dictionary dic) + { + ReturnInfo info = new ReturnInfo(); + info.isok = true; + try + { + string VarValue = dic["VarName"]; + if (!string.IsNullOrEmpty(VarValue)) + { + var QQQ = StaticData.scope1.GetVariable(VarValue); + string str = System.Text.Json.JsonSerializer.Serialize(QQQ); + info.response = str; + } + } + catch (Exception ex) + { + info.isok = false; + info.message = ex.Message; + } + return info; + } + } +} diff --git a/SupplierManager/Controllers/FileUploadController.cs b/SupplierManager/Controllers/FileUploadController.cs new file mode 100644 index 0000000..2063f4e --- /dev/null +++ b/SupplierManager/Controllers/FileUploadController.cs @@ -0,0 +1,134 @@ +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Http.HttpResults; +using Microsoft.AspNetCore.Mvc; + +namespace SupplierManager.Controllers +{ + [Route("api/[controller]/[action]")] + [ApiController] + public class FileUploadController : ControllerBase + { + + public static string[] FolderG = new string[] {"face" }; + + [Authorize()] + [HttpPost()] + public async Task UploadFile([FromForm] UploadFileModel model) + { + if (model.File == null || model.File.Length == 0) + { + return BadRequest("没有上传任何文件"); + } + + try + { + // 获取文件名和扩展名 + string originalFileName = Path.GetFileNameWithoutExtension(model.File.FileName); + string fileExtension = Path.GetExtension(model.File.FileName); // 包含扩展名前的点(如.jpg) + + // 生成8位GUID(取完整GUID的前8位字符) + string guidPart = Guid.NewGuid().ToString("N")[..16]; + + // 组合新文件名:原文件名_8位GUID.扩展名 + string newFileName = $"{originalFileName}_{guidPart}{fileExtension}"; + + var filePath = Path.Combine(Directory.GetCurrentDirectory(), + $"wwwroot/Uploads/{model.Folder}", + newFileName); + + using (var stream = new FileStream(filePath, FileMode.Create)) + { + await model.File.CopyToAsync(stream); + } + return Ok(new { FileName = newFileName }); + } + catch (Exception ex) + { + return BadRequest(new { Message = ex.Message }); + } + } + + public record DF + { + public string? FileName { get; set; } + } + // 示例:通过文件名获取图片 + [Authorize()] + [HttpPost()] + public IActionResult DownloadFile([FromBody]DF imageName) + { + try + { + // 拼接图片物理路径(假设图片存放在项目的 wwwroot/images 目录下) + var imagePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot/", imageName.FileName); + + // 检查文件是否存在 + if (!System.IO.File.Exists(imagePath)) + { + return NotFound("Image not found"); + } + if (imageName.FileName.Contains("..")) + { + return BadRequest("Invalid file name"); + } + + + // 读取文件流并返回 + var imageStream = System.IO.File.OpenRead(imagePath); + + // 根据扩展名自动设置 Content-Type(MIME类型) + var mimeType = GetMimeType(imageName.FileName); + + return File(imageStream, mimeType); + } + catch (Exception ex) + { + return StatusCode(500, $"Internal server error: {ex.Message}"); + } + } + + [Authorize()] + [HttpPost()] + public IActionResult GetFileNameList() + { + try + { + // 拼接图片物理路径(假设图片存放在项目的 wwwroot/images 目录下) + var filePath = Path.Combine(Directory.GetCurrentDirectory(), + $"wwwroot/Download/customization",""); + + string[] files= System.IO.Directory.GetFiles(filePath); + var myfiles= files.Select(A=>Path.GetFileName(A)); + return Ok(new { FileNameList = myfiles }); + + } + catch (Exception ex) + { + return StatusCode(500, $"Internal server error: {ex.Message}"); + } + } + + // 获取 MIME 类型映射 + private string GetMimeType(string fileName) + { + var extension = Path.GetExtension(fileName).ToLowerInvariant(); + return + extension switch + { + ".jpg" => "image/jpeg", + ".jpeg" => "image/jpeg", + ".png" => "image/png", + ".gif" => "image/gif", + ".xls" =>"application/vnd.ms-excel", + ".xlsx"=>"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", + _ => "application/octet-stream" // 默认类型 + }; + } + } + public class UploadFileModel + { + public IFormFile File { get; set; } + public string Folder { get; set; } + } +} diff --git a/SupplierManager/Controllers/LoginController.cs b/SupplierManager/Controllers/LoginController.cs new file mode 100644 index 0000000..4c9b741 --- /dev/null +++ b/SupplierManager/Controllers/LoginController.cs @@ -0,0 +1,247 @@ +using Microsoft.AspNetCore.Authentication.Cookies; +using Microsoft.AspNetCore.Authentication; +using System.Security.Claims; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Authorization; +using Microsoft.EntityFrameworkCore; +using Microsoft.IdentityModel.Logging; +using Microsoft.IdentityModel.Tokens; +using System.IdentityModel.Tokens.Jwt; +using System.Text; +using ViewModels; +using Microsoft.Extensions.Configuration; +using System; +using System.Linq; +using ViewModels.RequestData; +using ViewModels.ResponseData; +using System.Net; +using Newtonsoft.Json.Linq; +using Newtonsoft.Json; +using RestSharp; +using NLog; +using SupplierManager.Extensions; +using SupplierManager.Models; +using ViewModels.Common; +using static IronPython.Modules._ast; + +namespace WebAPIServer.Controllers +{ + [Route("api/[controller]/[action]")] + [ApiController] + public class LoginController : ControllerBase + { + + + + private readonly Logger _logger = LogManager.GetCurrentClassLogger(); + public IConfiguration? configuration { get; set; } + public LoginController(IConfiguration _configuration) + { + configuration = _configuration; + } + [Authorize()] + [HttpPost()] + public ReturnInfo TokenXuQi() + { + ReturnInfo r = new ReturnInfo(); + r.isok = false; + try + { + var claims = HttpContext.AuthenticateAsync().Result?.Principal?.Claims; + if (claims != null && claims.Any()) + { + var Name = claims.SingleOrDefault(A => A.Type == ClaimTypes.Name)?.Value; + var UUU = claims.SingleOrDefault(A => A.Type == ClaimTypes.Role)?.Value; + var TTT = claims.SingleOrDefault(A => A.Type == ClaimTypes.NameIdentifier)?.Value; + + AasUser? HH = new AasUser(); + int a = 0; + int.TryParse(TTT, out a); + HH.Id = a; + bool bl = false; + bool.TryParse(UUU, out bl); + HH.Username = Name; + string TokenStr = GetToken(HH); + r.isok = true; + r.response = TokenStr; + } + } + catch (Exception ex) + { + r.isok = false; + r.message = ex.Message; + } + return r; + } + + + /// + /// 登录 + /// + /// 用户名 + /// 密码 + /// + [HttpPost] + public ReturnInfo Login([FromBody] LoginData data) + { + + ReturnInfo res = new ReturnInfo(); + + try + { + string password = data.password; + string username = data.username; + AasUser? entity = null; + string TokenString = ""; + using (var q = new AgentApprovalSystemContext()) + { + entity = q.AasUsers.SingleOrDefault(A => A.Username.Equals(username)&&A.Isdelete==false); + if (entity != null) + { + bool vvv = Tools.VerifyHashedPassword(entity.Password, password); + if (vvv == false) + { + res.isok = false; + res.message = "密码错误"; + } + else + { + TokenString = GetToken(entity); + res.isok = true; + + + ResLoginData r = new ResLoginData(); + r.AccessToken = TokenString; + r.Id = entity.Id; + r.Username = entity.Username; + r.Realname = entity.Realname; + r.Position = entity.Position; + r.ComId = entity.ComId; + r.RoleId = entity.RoleId; + r.Avatar = entity.Avatar; + + res.response = r; + } + } + else + { + res.isok = false; + res.message = "用户不存在"; + } + } + } + catch (Exception ex) + { + res.message = ex.Message; + res.isok = false; + } + return res; + } + /// + /// wy登录验证 + /// + /// 用户名 + /// 密码 + /// + [HttpPost] + public ReturnInfo WeLogin([FromBody] LoginData data) + { + + ReturnInfo res = new ReturnInfo(); + + try + { + string password = data.password; + string username = data.username; + AasUser? entity = null; + string TokenString = ""; + using (var q = new AgentApprovalSystemContext()) + { + entity = q.AasUsers.SingleOrDefault(A => A.Username.Equals(username)&&A.Isdelete==false); + if (entity != null) + { + bool vvv = Tools.VerifyHashedPassword(entity.Password, password); + if (vvv == false) + { + res.isok = false; + res.message = "密码错误"; + } + else + { + TokenString = GetToken(entity); + res.isok = true; + + JWTData r = new() + { + AccessToken = TokenString, + iss = "BLW-" + Guid.NewGuid().ToString(), + exp = Tools.ToUnixTimestampBySeconds(DateTime.Now.AddHours(12)), + iat = Tools.ToUnixTimestampBySeconds(DateTime.Now).ToString(), + jti = "AAS-" + Guid.NewGuid().ToString(), + }; + + res.response = r; + } + } + else + { + res.isok = false; + res.message = "用户不存在"; + } + } + } + catch (Exception ex) + { + res.message = ex.Message; + res.isok = false; + } + return res; + } + + private string GetToken(AasUser? entity) + { + string TokenString; + var claims = new Claim[] + { + new Claim(ClaimTypes.NameIdentifier, entity.Id.ToString()), + new Claim(ClaimTypes.MobilePhone, entity.Mobile.ToString()), + new Claim(ClaimTypes.Name, entity.Username) + }; + + var secretByte = Encoding.UTF8.GetBytes(configuration["JwT:SecretKey"]); + var signingKey = new SymmetricSecurityKey(secretByte); + var a = SecurityAlgorithms.HmacSha256; + + var signingCredentials = new SigningCredentials(signingKey, a); + + var token = new JwtSecurityToken( + issuer: configuration["JwT:Issuer"], + audience: configuration["JwT:Audience"],//接收 + claims: claims,//存放的用户信息 + notBefore: DateTime.UtcNow,//发布时间 + expires: DateTime.UtcNow.AddHours(12), + signingCredentials: signingCredentials + //有效期设置为1天signingCredentials //数字名 + ); + TokenString = new JwtSecurityTokenHandler().WriteToken(token); + return TokenString; + } + + [HttpPost()] + [Authorize()] + public string Helloooo() + { + return "hello"; + } + + + } + + internal class TblUtsManageUser + { + public object Id { get; internal set; } + public bool IsAdmin { get; internal set; } + public string? UserName { get; internal set; } + } +} diff --git a/SupplierManager/Controllers/PanelSelectionController.cs b/SupplierManager/Controllers/PanelSelectionController.cs new file mode 100644 index 0000000..991d6d7 --- /dev/null +++ b/SupplierManager/Controllers/PanelSelectionController.cs @@ -0,0 +1,20 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Imaging; +using System.IO; +using System.Linq; +using ViewModels; + +namespace SupplierManager.Controllers +{ + [Route("api/[controller]/[action]")] + [ApiController] + public class PanelSelectionController : ControllerBase + { + + } + +} \ No newline at end of file diff --git a/SupplierManager/Controllers/UsersController.cs b/SupplierManager/Controllers/UsersController.cs new file mode 100644 index 0000000..c690aa3 --- /dev/null +++ b/SupplierManager/Controllers/UsersController.cs @@ -0,0 +1,381 @@ +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using SupplierManager.Models; +using ViewModels; +using ViewModels.Common; + +namespace SupplierManager.Controllers +{ + [Route("api/[controller]/[action]")] + [ApiController] + public class UsersController : ControllerBase + { + public class duser + { + public int Id { get; set; } + } + /// + /// 删除用户 + /// + /// + /// + [HttpPost()] + [Authorize()] + public ReturnInfo DelUser([FromBody] duser LLL) + { + ReturnInfo returnInfo = new(); + if(LLL.Id == 2 || LLL.Id == 1) + { + returnInfo.isok = false; + returnInfo.message = "超级管理员不可删除!"; + return returnInfo; + } + try + { + using (var q = new AgentApprovalSystemContext()) + { + var FFF = q.AasUsers.FirstOrDefault(A => A.Id == LLL.Id); + if (FFF != null) + { + FFF.Isdelete = true; + q.AasUsers.Update(FFF); + q.SaveChanges(); + returnInfo.isok = true; + } + } + } + catch (Exception ex) + { + returnInfo.isok = false; + returnInfo.message = ex.Message; + } + return returnInfo; + } + + /// + /// 修改用户 + /// + /// + /// + [HttpPost()] + [Authorize()] + public ReturnInfo EditUser([FromBody] ReturnUser LLL) + { + ReturnInfo returnInfo = new ReturnInfo(); + + try + { + using (var q = new AgentApprovalSystemContext()) + { + var lll = q.AasUsers.SingleOrDefault(A => A.Id == LLL.Id); + if (lll != null) + { + + string username = LLL.Username; + int? companyId = LLL.ComId; + string mobile = LLL.Mobile; + string weiXin = LLL.Weixin; + string email = LLL.Email; + + lll.Realname = LLL.Realname; + lll.RoleId = LLL.RoleId; + lll.Position = LLL.Position; + if (!string.IsNullOrWhiteSpace(LLL.Avatar)) + { + lll.Avatar = "Uploads/face/" + LLL.Avatar; + } + lll.Username = username; + lll.ComId = companyId; + lll.Mobile = mobile; + lll.Weixin = weiXin; + lll.Email = email; + lll.UpdateTime = DateTime.Now; + + string PPP = LLL.Password.Trim(); + if (!string.IsNullOrWhiteSpace(PPP)) + { + lll.Password = Tools.HashPassword(PPP); + lll.PswEncryption = Tools.EncryptString(PPP); + } + + q.AasUsers.Update(lll); + q.SaveChanges(); + returnInfo.isok = true; + } + } + } + catch (Exception ex) + { + returnInfo.isok = false; + returnInfo.message = ex.Message; + } + return returnInfo; + } + + /// + /// 重置密码 + /// + /// + /// + [HttpPost()] + [Authorize()] + public ReturnInfo ModifyPassWord([FromBody] PWD_Reset LLL) + { + ReturnInfo returnInfo = new ReturnInfo(); + try + { + using (var q = new AgentApprovalSystemContext()) + { + var QQQ = q.AasUsers.SingleOrDefault(A => A.Id == LLL.Id); + if (QQQ != null) + { + QQQ.Password = Tools.HashPassword(LLL.PlaintextPwd); + QQQ.PswEncryption = Tools.EncryptString(LLL.PlaintextPwd); + q.AasUsers.Update(QQQ); + q.SaveChanges(); + returnInfo.isok = true; + } + } + } + catch (Exception ex) + { + returnInfo.isok = false; + returnInfo.message = ex.Message; + } + return returnInfo; + } + /// + /// 新增密码为123456 + /// + /// + /// + [HttpPost()] + [Authorize()] + public ReturnInfo ResetPassWord([FromBody] PWD_Reset LLL) + { + ReturnInfo returnInfo = new ReturnInfo(); + try + { + using (var q = new AgentApprovalSystemContext()) + { + var Q = q.AasUsers.SingleOrDefault(A => A.Id == LLL.Id); + if (Q != null) + { + Q.Password = Tools.HashPassword("123456"); + Q.PswEncryption = Tools.EncryptString("123456"); + q.AasUsers.Update(Q); + q.SaveChanges(); + returnInfo.isok = true; + } + } + } + catch (Exception ex) + { + returnInfo.isok = false; + returnInfo.message = ex.Message; + } + return returnInfo; + } + + /// + /// 获取用户信息 + /// + /// + /// + [HttpPost()] + [Authorize()] + public ReturnInfo GetUserInfo([FromBody] QueryAll_Or_Single S) + { + ReturnInfo returnInfo = new ReturnInfo(); + + try + { + using (var q = new AgentApprovalSystemContext()) + { + if (S.IsAll) + { + returnInfo.isok = true; + returnInfo.response = q.AasUsers.Where(A=>!A.Isdelete).Select(F => new ReturnUser + { + Id = F.Id, + Username = F.Username, + Realname = F.Realname, + RoleId = F.RoleId, + Email = F.Email, + Weixin = F.Weixin, + Position = F.Position, + Avatar = F.Avatar, + ComId = F.ComId, + Mobile = F.Mobile, + }).ToList(); + } + else + { + returnInfo.isok = true; + var a = q.AasUsers.SingleOrDefault(A => A.Id == S.ID); + if (a != null) + { + ReturnUser u = new ReturnUser(); + u.Id = a.Id; + u.Username = a.Username; + u.Realname = a.Realname; + u.RoleId = a.RoleId; + u.ComId = a.ComId; + u.Mobile = a.Mobile; + u.Weixin = a.Weixin; + u.Position = a.Position; + u.Avatar = a.Avatar; + u.Email = a.Email; + returnInfo.response = u; + } + } + } + } + catch (Exception ex) + { + returnInfo.isok = false; + returnInfo.message = ex.Message; + } + return returnInfo; + } + + /// + /// 新增用户 + /// + /// + /// + [HttpPost()] + //[Authorize()] + public ReturnInfo AddUser([FromBody] ReturnUser LLL) + { + ReturnInfo returnInfo = new ReturnInfo(); + + try + { + + string username = LLL.Username; + int? companyId = LLL.ComId; + string mobile = LLL.Mobile; + string weiXin = LLL.Weixin; + string email = LLL.Email; + + AasUser lll = new AasUser(); + lll.Username = username; + lll.Realname = LLL.Realname; + lll.ComId = LLL.ComId; + lll.RoleId = LLL.RoleId; + lll.Position = LLL.Position; + lll.Weixin = LLL.Weixin; + lll.Email = email; + lll.Mobile = mobile; + if (!string.IsNullOrWhiteSpace(LLL.Avatar)) + { + lll.Avatar = "Uploads/face/" + LLL.Avatar; + } + lll.Isdelete = false; + + lll.CreationTime = DateTime.Now; + lll.UpdateTime = DateTime.Now; + + using (var q = new AgentApprovalSystemContext()) + { + var Q = q.AasUsers.Where(A => A.Username.Equals(username)); + if (Q.Count() > 0) + { + returnInfo.isok = false; + returnInfo.message = "此用户名已经存在"; + } + else + { + //lll.Password = Tools.HashPassword("123456"); + //lll.PswEncryption = Tools.EncryptString("123456"); + + lll.Password = Tools.HashPassword(LLL.Password.Trim()); + lll.PswEncryption = Tools.EncryptString(LLL.Password.Trim()); + q.AasUsers.Add(lll); + returnInfo.isok = true; + } + q.SaveChanges(); + } + } + catch (Exception ex) + { + returnInfo.isok = false; + returnInfo.message = ex.Message; + } + return returnInfo; + } + } + /// + /// 返回用户信息 + /// + public class ReturnUser + { + /// + /// 主键 + /// + public int Id { get; set; } = 0; + + /// + /// 用户名(登录名) + /// + public string? Username { get; set; } + + /// + /// 真实姓名 + /// + public string? Realname { get; set; } + + /// + /// 所属公司ID + /// + public int? ComId { get; set; } + + /// + /// 角色ID + /// + public int? RoleId { get; set; } + + /// + /// 职位 + /// + public string? Position { get; set; } + + /// + /// 密码 + /// + public string Password { get; set; } = ""; + + /// + /// 密码加密处理 + /// + public string PswEncryption { get; set; } = ""; + + /// + /// 微信号 + /// + public string? Weixin { get; set; } + + /// + /// 邮箱 + /// + public string? Email { get; set; } + + /// + /// 电话号码 + /// + public string? Mobile { get; set; } + + /// + /// 账户头像 + /// + public string? Avatar { get; set; } + } + public class PWD_Reset + { + public int Id { get; set; } + public string PlaintextPwd { get; set; } + } + +} diff --git a/SupplierManager/Controllers/WeatherForecastController.cs b/SupplierManager/Controllers/WeatherForecastController.cs new file mode 100644 index 0000000..12e354f --- /dev/null +++ b/SupplierManager/Controllers/WeatherForecastController.cs @@ -0,0 +1,41 @@ +using Microsoft.AspNetCore.Mvc; +using SupplierManager.Models; + +namespace SupplierManager.Controllers +{ + [ApiController] + [Route("[controller]")] + public class WeatherForecastController : ControllerBase + { + private static readonly string[] Summaries = new[] + { + "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" + }; + + private readonly ILogger _logger; + + public WeatherForecastController(ILogger logger) + { + _logger = logger; + } + + [HttpGet] + public IEnumerable Get() + { + return Enumerable.Range(1, 5).Select(index => new WeatherForecast + { + Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)), + TemperatureC = Random.Shared.Next(-20, 55), + Summary = Summaries[Random.Shared.Next(Summaries.Length)] + }) + .ToArray(); + } + + public string AAA() + { + //using var q = new AgentApprovalSystemContext(); + //q.AasCompanyInfos.ToLinqToDB().LeftJoin(A=>A.Id==A.Id); + return "hello"; + } + } +} diff --git a/SupplierManager/Controllers/WyUsersController.cs b/SupplierManager/Controllers/WyUsersController.cs new file mode 100644 index 0000000..9b92838 --- /dev/null +++ b/SupplierManager/Controllers/WyUsersController.cs @@ -0,0 +1,143 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.Json; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using SupplierManager.Models; +using ViewModels; + +namespace SupplierManager.Controllers +{ + [Route("api/[controller]/[action]")] + [ApiController] + public class WyUsersController : ControllerBase + { + private readonly AgentApprovalSystemContext _context; + + public WyUsersController(AgentApprovalSystemContext context) + { + _context = context; + } + + // GET: api/WyUsers + [HttpPost()] + public async Task GetUserInfo([FromBody] QueryAll_Or_Single S) + { + ReturnInfo r = new ReturnInfo(); + try + { + r.isok = true; + r.response= await _context.WyUsers.ToListAsync(); + } + catch (Exception ex) + { + r.isok = false; + r.message=ex.Message; + } + return r; + } + + [HttpPost()] + [Authorize()] + public async Task EditWyUser(WyUser wyUser) + { + ReturnInfo r = new ReturnInfo(); + try + { + if (!WyUserExists(wyUser.Id)) + { + r.isok = false; + r.message = "此用户不存在"; + } + else + { + _context.Entry(wyUser).State = EntityState.Modified; + await _context.SaveChangesAsync(); + r.isok = true; + } + + + + } + catch (Exception ex) + { + r.isok = false; + r.message = ex.Message; + } + + string Introduced = JsonSerializer.Serialize(wyUser); + string ReturnValue = JsonSerializer.Serialize(r); + await LogRecord(Introduced, ReturnValue); + + return r; + } + + private string GetIP() + { + string? ip = string.Empty; + string? NNN = HttpContext?.Request?.HttpContext?.Connection?.RemoteIpAddress?.ToString(); + if (string.IsNullOrEmpty(NNN)) + { + ip = HttpContext?.Request.Headers["HTTP_X_FORWARDED_FOR"]; + } + else + { + ip = NNN; + } + return ip; + } + + [HttpPost] + [Authorize()] + public async Task AddWyUser(List wyUser) + { + ReturnInfo r = new ReturnInfo(); + try + { + _context.WyUsers.AddRange(wyUser); + await _context.SaveChangesAsync(); + r.isok = true; + } + catch (Exception ex) + { + r.isok = false; + r.message = ex.Message; + } + + string Introduced = JsonSerializer.Serialize(wyUser); + string ReturnValue = JsonSerializer.Serialize(r); + await LogRecord(Introduced, ReturnValue); + + return r; + } + + private async Task LogRecord(string Introduced, string ReturnValue) + { + try + { + + WyLog wx = new WyLog(); + wx.Ip = GetIP(); + wx.Operation = "Edit"; + wx.Introduced = Introduced; + wx.ReturnValue = ReturnValue; + wx.CreationTime = Tools.ToUnixTimestampBySeconds(DateTime.Now); + _context.WyLogs.Add(wx); + await _context.SaveChangesAsync(); + } + catch (Exception) + { + + } + } + + private bool WyUserExists(long id) + { + return _context.WyUsers.Any(e => e.Id == id); + } + } +} diff --git a/SupplierManager/Extensions/StringExtensions.cs b/SupplierManager/Extensions/StringExtensions.cs new file mode 100644 index 0000000..7e440e6 --- /dev/null +++ b/SupplierManager/Extensions/StringExtensions.cs @@ -0,0 +1,346 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Drawing.Imaging; +using System.Linq; +using System.Reflection; +using System.Security.Cryptography; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; + +namespace SupplierManager.Extensions +{ + /// + /// 字符串扩展函数工具类 + /// + public static class StringExtensions + { + /// + /// 将\r\n替换成BR + /// + /// + /// + public static string ToSafeBR(this string str) + { + if (!string.IsNullOrEmpty(str)) + { + return str.Replace("\r\n", "
").Replace("\r", "
").Replace("\n", "
"); + } + return str; + } + + /// + /// 得到父部门的ID + /// + /// + /// + public static string GetDepartmentFatherID(this string str) + { + if (!string.IsNullOrEmpty(str) && str.Length > 2) + { + str = str.Substring(0, str.Length - 3); + } + return str; + } + + /// + /// 截取字符串,超过部分用...代替 + /// + /// + /// + /// + public static string Substr(this string source, int len) + { + return source.Substr(len, "..."); + } + + /// + /// 截取字符串,超过部分用自定义代替 + /// + /// + /// + /// + /// + public static string Substr(this string source, int len, string att) + { + if (string.IsNullOrEmpty(source)) + { + return string.Empty; + } + att = (att ?? string.Empty); + Regex regex = new Regex("[\\u4e00-\\u9fa5]"); + Regex regex2 = new Regex("^[A-Za-z0-9]+$"); + if (regex.IsMatch(source)) + { + if (source.Length <= len) + { + return source; + } + return source.Substring(0, len) + att; + } + else if (regex2.IsMatch(source)) + { + if (source.Length <= len * 2) + { + return source; + } + return source.Substring(0, len * 2) + att; + } + else + { + if (source.Length <= len) + { + return source; + } + return source.Substring(0, len) + att; + } + } + + public static string InputStr(this string source) + { + if (!string.IsNullOrEmpty(source)) + { + Regex regex = new Regex("[\\u4e00-\\u9fa5]"); + Regex regex2 = new Regex("^[A-Za-z0-9]+$"); + if (regex.IsMatch(source)) + { + if (source.Length < 3) + { + return string.Format("{0}**", source[0]); + } + if (source.Length == 3) + { + return string.Format("{0}*{1}", source[0], source[source.Length - 1]); + } + if (source.Length > 3) + { + return string.Format("{0}**{1}", source[0], source[source.Length - 1]); + } + } + else + { + if (!regex2.IsMatch(source)) + { + return string.Format("{0}**", source.Substring(0, 2)); + } + if (source.Length < 6) + { + return string.Format("{0}**", source.Substring(0, 2)); + } + return string.Format("{0}****{1}", source.Substring(0, 2), source.Substring(source.Length - 3, 2)); + } + } + return string.Empty; + } + + /// + /// 移除掉所有的Html代码 + /// + /// + /// + public static string RemoveHtml(this string strHtml) + { + Regex regex = new Regex("<.+?>", RegexOptions.IgnoreCase); + strHtml = regex.Replace(strHtml, ""); + strHtml = strHtml.Replace(" ", ""); + return strHtml; + } + + /// + /// 生成0-9随机数 + /// + /// 生成长度 + /// + public static string RndNum(int VcodeNum) + { + StringBuilder stringBuilder = new StringBuilder(VcodeNum); + Random random = new Random(); + for (int i = 1; i < VcodeNum + 1; i++) + { + int num = random.Next(9); + stringBuilder.AppendFormat("{0}", num); + } + return stringBuilder.ToString(); + } + + /// + /// 返回星号的加密 + /// + /// + /// + /// + public static string MaskStar(Dictionary items, bool mask) + { + StringBuilder stringBuilder = new StringBuilder(); + if (mask) + { + foreach (KeyValuePair keyValuePair in items) + { + stringBuilder.Append(string.Concat(new string[] + { + "$('#", + keyValuePair.Key, + "').attr('name', '", + keyValuePair.Key, + "mask');" + })); + } + stringBuilder.Append("$('.maskstar').attr('disabled', true);"); + stringBuilder.Append("$('.maskstar').val('***');"); + } + else + { + foreach (KeyValuePair keyValuePair2 in items) + { + stringBuilder.Append(string.Concat(new string[] + { + "$('#", + keyValuePair2.Key, + "').attr('name', '", + keyValuePair2.Key, + "');" + })); + stringBuilder.Append(string.Concat(new string[] + { + "$('#", + keyValuePair2.Key, + "').val('", + keyValuePair2.Value, + "');" + })); + } + stringBuilder.Append("$('.maskstar').attr('disabled', false);"); + } + return stringBuilder.ToString(); + } + + /// + /// 给自动填充使用 + /// + /// + /// + /// + public static string ToAutoComplate(this string str1, string str2) + { + if (!string.IsNullOrEmpty(str1) && !string.IsNullOrEmpty(str2)) + { + return str1 + "," + str2; + } + return ""; + } + + /// + /// 返回红色字体 + /// + /// + /// + public static string ToRedColor(this int value) + { + if (value != 0) + { + return "" + value.ToString() + ""; + } + return value.ToString(); + } + + /// + /// 返回安全的字符串类型如果为NULL则返回空 + /// + /// + /// + public static string ToSafeString(this object value) + { + if (value == null) + { + return ""; + } + return value.ToString(); + } + + /// + /// 将中文转换成Unicode编码,主要用在URL传递中文 + /// + /// + /// + public static string GB2Unicode(this string str) + { + string text = ""; + Encoding encoding = Encoding.GetEncoding("GB2312"); + Encoding unicode = Encoding.Unicode; + byte[] bytes = encoding.GetBytes(str); + for (int i = 0; i < bytes.Length; i++) + { + string str2 = "%" + bytes[i].ToString("x"); + text += str2; + } + return text; + } + + /// + /// 将字符串转换成为大写的MD5 + /// + /// + /// + public static string ToMD5(this string str) + { + MD5CryptoServiceProvider md5CryptoServiceProvider = new MD5CryptoServiceProvider(); + byte[] array = md5CryptoServiceProvider.ComputeHash(Encoding.Default.GetBytes(str)); + StringBuilder stringBuilder = new StringBuilder(); + foreach (byte b in array) + { + stringBuilder.Append(b.ToString("x2")); + } + return stringBuilder.ToString().ToUpper(); + } + + /// + /// 字节码长度转可读字符串 00000000 bytes 0.0GB + /// + /// + /// + public static string ByteSizeToString(this long KSize) + { + if (KSize > 0L) + { + string[] array = new string[] + { + "B", + "KB", + "MB", + "GB", + "TB" + }; + double num = 0.0; + int num2 = array.Length - 1; + while (num2 >= 0 && (num = Math.Round((double)KSize / Math.Pow(1024.0, (double)num2), 2)) < 1.0) + { + num2--; + } + return string.Format("{0}{1}", num, array[num2]); + } + return string.Empty; + } + + + /// + /// 将字符串转换成为大写的MD5 + /// + /// + /// + private static string GetMD5Code(this string str) + { + StringBuilder stringBuilder = new StringBuilder(); + using (MD5CryptoServiceProvider md5CryptoServiceProvider = new MD5CryptoServiceProvider()) + { + byte[] array = md5CryptoServiceProvider.ComputeHash(Encoding.Default.GetBytes(str)); + foreach (byte b in array) + { + stringBuilder.Append(b.ToString("x2")); + } + } + return stringBuilder.ToString(); + } + + } +} diff --git a/SupplierManager/Extensions/TimeExtensions.cs b/SupplierManager/Extensions/TimeExtensions.cs new file mode 100644 index 0000000..d86d7a5 --- /dev/null +++ b/SupplierManager/Extensions/TimeExtensions.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SupplierManager.Extensions +{ + public static class TimeExtensions + { + public static DateTime? ToDateTime(this string timeStamp) + { + long ticks = 0L; + if (long.TryParse(timeStamp, out ticks)) + { + DateTime dateTime = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); + TimeSpan value = new TimeSpan(ticks); + return new DateTime?(dateTime.Add(value)); + } + DateTime now = DateTime.Now; + if (DateTime.TryParse(timeStamp, out now)) + { + return new DateTime?(now); + } + return null; + } + public static string fff() + { + return "hello"; + } + + } +} diff --git a/SupplierManager/Models/AasCompanyInfo.cs b/SupplierManager/Models/AasCompanyInfo.cs new file mode 100644 index 0000000..d9ee604 --- /dev/null +++ b/SupplierManager/Models/AasCompanyInfo.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; + +namespace SupplierManager.Models; + +public partial class AasCompanyInfo +{ + public int Id { get; set; } + + /// + /// 公司代码 + /// + public string? Code { get; set; } + + /// + /// 中文名 + /// + public string? NameCn { get; set; } + + /// + /// 英文名 + /// + public string? NameEn { get; set; } + + /// + /// 所属行业 + /// + public string? Industry { get; set; } + + /// + /// 身份 + /// + public string? Identity { get; set; } + + public string? Region { get; set; } + + /// + /// 营业执照 + /// + public string? LicenseCode { get; set; } + + /// + /// logo地址 + /// + public string? Logoaddress { get; set; } + + public DateTime? Createtime { get; set; } + + public DateTime? Updatetime { get; set; } +} diff --git a/SupplierManager/Models/AasCustomerInfo.cs b/SupplierManager/Models/AasCustomerInfo.cs new file mode 100644 index 0000000..1d24b8c --- /dev/null +++ b/SupplierManager/Models/AasCustomerInfo.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; + +namespace SupplierManager.Models; + +public partial class AasCustomerInfo +{ + public long Id { get; set; } + + public string? Realname { get; set; } + + public string? ComName { get; set; } + + public string? Job { get; set; } + + public string? Mobile { get; set; } + + public string? Weixin { get; set; } + + public string? Mark { get; set; } +} diff --git a/SupplierManager/Models/AasProjectInfo.cs b/SupplierManager/Models/AasProjectInfo.cs new file mode 100644 index 0000000..f9d6638 --- /dev/null +++ b/SupplierManager/Models/AasProjectInfo.cs @@ -0,0 +1,85 @@ +using System; +using System.Collections.Generic; + +namespace SupplierManager.Models; + +public partial class AasProjectInfo +{ + public long Id { get; set; } + + /// + /// 所属省份 + /// + public string? Shengfen { get; set; } + + /// + /// 所属区域 + /// + public string? Quyu { get; set; } + + /// + /// 详细地址 + /// + public string? AddressDetail { get; set; } + + /// + /// 行业类型 + /// + public string? HangyeClass { get; set; } + + /// + /// 项目名称 + /// + public string? ProjectName { get; set; } + + /// + /// 项目编码 + /// + public string? ProjectCode { get; set; } + + /// + /// 公司ID + /// + public int? CompanyId { get; set; } + + /// + /// 房型数量 + /// + public int? RoomTypeCount { get; set; } + + /// + /// 房间总数 + /// + public int? RoomTotalCount { get; set; } + + public DateTime? Createtime { get; set; } + + public DateTime? Updatetime { get; set; } + + public long? UpdatetimeUnix { get; set; } + + /// + /// Unix时间 + /// + public long? CreatetimeUnix { get; set; } + + /// + /// 审批状态 + /// + public string? ShengpiStatus { get; set; } + + /// + /// 申请人 + /// + public int? Uid { get; set; } + + /// + /// 设计图 + /// + public string? Blueprint { get; set; } + + /// + /// 套餐名称 + /// + public string? Customization { get; set; } +} diff --git a/SupplierManager/Models/AasProjectReportReady.cs b/SupplierManager/Models/AasProjectReportReady.cs new file mode 100644 index 0000000..ae54e3c --- /dev/null +++ b/SupplierManager/Models/AasProjectReportReady.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; + +namespace SupplierManager.Models; + +public partial class AasProjectReportReady +{ + public long Id { get; set; } + + public string? ProjectCode { get; set; } + + public string? CustomerContactsH { get; set; } + + public DateTime? Createtime { get; set; } + + public DateTime? Updatetime { get; set; } + + public long? Unixtime { get; set; } +} diff --git a/SupplierManager/Models/AasProjectShenpi.cs b/SupplierManager/Models/AasProjectShenpi.cs new file mode 100644 index 0000000..8903002 --- /dev/null +++ b/SupplierManager/Models/AasProjectShenpi.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; + +namespace SupplierManager.Models; + +public partial class AasProjectShenpi +{ + public long Id { get; set; } + + /// + /// 项目代码 + /// + public string? ProjectCode { get; set; } + + /// + /// 审批建议 + /// + public string? ShenpiSuggest { get; set; } + + /// + /// 驳回理由 + /// + public string? RejectReason { get; set; } + + /// + /// 审批序号 + /// + public int? ShenpiNumber { get; set; } + + public DateTime? Createtime { get; set; } + + public DateTime? Updatetime { get; set; } +} diff --git a/SupplierManager/Models/AasUser.cs b/SupplierManager/Models/AasUser.cs new file mode 100644 index 0000000..fbe204c --- /dev/null +++ b/SupplierManager/Models/AasUser.cs @@ -0,0 +1,82 @@ +using System; +using System.Collections.Generic; + +namespace SupplierManager.Models; + +public partial class AasUser +{ + /// + /// 主键 + /// + public int Id { get; set; } + + /// + /// 用户名(登录名) + /// + public string? Username { get; set; } + + /// + /// 真实姓名 + /// + public string? Realname { get; set; } + + /// + /// 所属公司ID + /// + public int? ComId { get; set; } + + /// + /// 角色ID + /// + public int? RoleId { get; set; } + + /// + /// 职位 + /// + public string? Position { get; set; } + + /// + /// 密码 + /// + public string Password { get; set; } = null!; + + /// + /// 密码加密处理 + /// + public string PswEncryption { get; set; } = null!; + + /// + /// 微信号 + /// + public string? Weixin { get; set; } + + /// + /// 邮箱 + /// + public string? Email { get; set; } + + /// + /// 电话号码 + /// + public string? Mobile { get; set; } + + /// + /// 账户头像 + /// + public string? Avatar { get; set; } + + /// + /// 是否删除 + /// + public bool Isdelete { get; set; } + + /// + /// 创建时间 + /// + public DateTime? CreationTime { get; set; } + + /// + /// 更新时间 + /// + public DateTime? UpdateTime { get; set; } +} diff --git a/SupplierManager/Models/AasUserPermission.cs b/SupplierManager/Models/AasUserPermission.cs new file mode 100644 index 0000000..6290157 --- /dev/null +++ b/SupplierManager/Models/AasUserPermission.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; + +namespace SupplierManager.Models; + +public partial class AasUserPermission +{ + public int Id { get; set; } + + public string? ProxyClass { get; set; } + + public string? ProxyRegion { get; set; } +} diff --git a/SupplierManager/Models/AasUsersLoginLog.cs b/SupplierManager/Models/AasUsersLoginLog.cs new file mode 100644 index 0000000..54e84af --- /dev/null +++ b/SupplierManager/Models/AasUsersLoginLog.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; + +namespace SupplierManager.Models; + +public partial class AasUsersLoginLog +{ + /// + /// 主键 + /// + public int Id { get; set; } + + /// + /// 用户名字 + /// + public string? Username { get; set; } + + /// + /// ip地址 + /// + public string? Ip { get; set; } + + /// + /// 浏览器版本 + /// + public string? Browser { get; set; } + + /// + /// 操作类型 + /// + public string? Operation { get; set; } + + /// + /// 设备型号 + /// + public string? Device { get; set; } + + /// + /// 地理位置 + /// + public string? Location { get; set; } + + /// + /// 创建时间 + /// + public DateTime? CreationTime { get; set; } +} diff --git a/SupplierManager/Models/AasUsersOperateLog.cs b/SupplierManager/Models/AasUsersOperateLog.cs new file mode 100644 index 0000000..71d9646 --- /dev/null +++ b/SupplierManager/Models/AasUsersOperateLog.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; + +namespace SupplierManager.Models; + +public partial class AasUsersOperateLog +{ + /// + /// 主键 + /// + public int Id { get; set; } + + /// + /// 用户名字 + /// + public string? Username { get; set; } + + /// + /// 日志类型ID + /// + public int? TypeId { get; set; } + + /// + /// 执行操作 + /// + public string? Operate { get; set; } + + /// + /// ip地址 + /// + public string? Ip { get; set; } + + /// + /// 浏览器版本 + /// + public string? Browser { get; set; } + + /// + /// 操作类型 + /// + public string? Operation { get; set; } + + /// + /// 设备型号 + /// + public string? Device { get; set; } + + /// + /// 地理位置 + /// + public string? Location { get; set; } + + /// + /// 创建时间 + /// + public DateTime? CreationTime { get; set; } +} diff --git a/SupplierManager/Models/AgentApprovalSystemContext.cs b/SupplierManager/Models/AgentApprovalSystemContext.cs new file mode 100644 index 0000000..7aa11d3 --- /dev/null +++ b/SupplierManager/Models/AgentApprovalSystemContext.cs @@ -0,0 +1,550 @@ +using System; +using System.Collections.Generic; +using Microsoft.EntityFrameworkCore; +using Pomelo.EntityFrameworkCore.MySql.Scaffolding.Internal; + +namespace SupplierManager.Models; + +public partial class AgentApprovalSystemContext : DbContext +{ + public AgentApprovalSystemContext() + { + } + + public AgentApprovalSystemContext(DbContextOptions options) + : base(options) + { + } + + public virtual DbSet AasCompanyInfos { get; set; } + + public virtual DbSet AasCustomerInfos { get; set; } + + public virtual DbSet AasProjectInfos { get; set; } + + public virtual DbSet AasProjectReportReadies { get; set; } + + public virtual DbSet AasProjectShenpis { get; set; } + + public virtual DbSet AasUsers { get; set; } + + public virtual DbSet AasUserPermissions { get; set; } + + public virtual DbSet AasUsersOperateLogs { get; set; } + + public virtual DbSet Autokeygeneraters { get; set; } + + public virtual DbSet WyLogs { get; set; } + + public virtual DbSet WyUsers { get; set; } + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) +#warning To protect potentially sensitive information in your connection string, you should move it out of source code. You can avoid scaffolding the connection string by using the Name= syntax to read it from configuration - see https://go.microsoft.com/fwlink/?linkid=2131148. For more guidance on storing connection strings, see https://go.microsoft.com/fwlink/?LinkId=723263. + => optionsBuilder.UseMySql("server=blv-cloud-db.mysql.rds.aliyuncs.com;database=agent_approval_system;uid=blv_rcu;pwd=fnadiaJDIJ7546;charset=utf8;port=3307", Microsoft.EntityFrameworkCore.ServerVersion.Parse("8.0.28-mysql")); + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder + .UseCollation("utf8mb4_bin") + .HasCharSet("utf8mb4"); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.Id).HasName("PRIMARY"); + + entity.ToTable("aas_company_info"); + + entity.Property(e => e.Id).HasColumnName("id"); + entity.Property(e => e.Code) + .HasMaxLength(255) + .HasComment("公司代码") + .HasColumnName("code"); + entity.Property(e => e.Createtime) + .HasColumnType("datetime") + .HasColumnName("createtime"); + entity.Property(e => e.Identity) + .HasMaxLength(255) + .HasComment("身份") + .HasColumnName("identity"); + entity.Property(e => e.Industry) + .HasMaxLength(255) + .HasComment("所属行业") + .HasColumnName("industry"); + entity.Property(e => e.LicenseCode) + .HasMaxLength(255) + .HasComment("营业执照") + .HasColumnName("licenseCode"); + entity.Property(e => e.Logoaddress) + .HasComment("logo地址") + .HasColumnType("text") + .HasColumnName("logoaddress"); + entity.Property(e => e.NameCn) + .HasMaxLength(255) + .HasComment("中文名") + .HasColumnName("nameCn"); + entity.Property(e => e.NameEn) + .HasMaxLength(255) + .HasComment("英文名") + .HasColumnName("nameEn"); + entity.Property(e => e.Region) + .HasMaxLength(255) + .HasColumnName("region"); + entity.Property(e => e.Updatetime) + .HasColumnType("datetime") + .HasColumnName("updatetime"); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.Id).HasName("PRIMARY"); + + entity.ToTable("aas_customer_info"); + + entity.Property(e => e.Id) + .ValueGeneratedNever() + .HasColumnName("id"); + entity.Property(e => e.ComName) + .HasMaxLength(255) + .HasColumnName("com_name"); + entity.Property(e => e.Job) + .HasMaxLength(255) + .HasColumnName("job"); + entity.Property(e => e.Mark) + .HasColumnType("text") + .HasColumnName("mark"); + entity.Property(e => e.Mobile) + .HasMaxLength(255) + .HasColumnName("mobile"); + entity.Property(e => e.Realname) + .HasMaxLength(255) + .HasColumnName("realname"); + entity.Property(e => e.Weixin) + .HasMaxLength(255) + .HasColumnName("weixin"); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.Id).HasName("PRIMARY"); + + entity.ToTable("aas_project_info"); + + entity.HasIndex(e => e.UpdatetimeUnix, "Unixupdatetime"); + + entity.HasIndex(e => e.CompanyId, "comid"); + + entity.Property(e => e.Id).HasColumnName("id"); + entity.Property(e => e.AddressDetail) + .HasMaxLength(255) + .HasComment("详细地址") + .HasColumnName("address_detail"); + entity.Property(e => e.Blueprint) + .HasComment("设计图") + .HasColumnType("text") + .HasColumnName("blueprint"); + entity.Property(e => e.CompanyId) + .HasComment("公司ID") + .HasColumnName("company_id"); + entity.Property(e => e.Createtime) + .HasColumnType("datetime") + .HasColumnName("createtime"); + entity.Property(e => e.CreatetimeUnix) + .HasComment("Unix时间") + .HasColumnName("createtime_unix"); + entity.Property(e => e.Customization) + .HasMaxLength(255) + .HasComment("套餐名称") + .HasColumnName("customization"); + entity.Property(e => e.HangyeClass) + .HasMaxLength(255) + .HasComment("行业类型") + .HasColumnName("hangye_class"); + entity.Property(e => e.ProjectCode) + .HasMaxLength(255) + .HasComment("项目编码") + .HasColumnName("project_code"); + entity.Property(e => e.ProjectName) + .HasMaxLength(255) + .HasComment("项目名称") + .HasColumnName("project_name"); + entity.Property(e => e.Quyu) + .HasMaxLength(255) + .HasComment("所属区域") + .HasColumnName("quyu"); + entity.Property(e => e.RoomTotalCount) + .HasComment("房间总数") + .HasColumnName("room_total_count"); + entity.Property(e => e.RoomTypeCount) + .HasComment("房型数量") + .HasColumnName("room_type_count"); + entity.Property(e => e.Shengfen) + .HasMaxLength(255) + .HasComment("所属省份") + .HasColumnName("shengfen"); + entity.Property(e => e.ShengpiStatus) + .HasMaxLength(64) + .HasComment("审批状态") + .HasColumnName("shengpi_status"); + entity.Property(e => e.Uid) + .HasComment("申请人") + .HasColumnName("uid"); + entity.Property(e => e.Updatetime) + .HasColumnType("datetime") + .HasColumnName("updatetime"); + entity.Property(e => e.UpdatetimeUnix).HasColumnName("updatetime_unix"); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.Id).HasName("PRIMARY"); + + entity.ToTable("aas_project_report_ready"); + + entity.Property(e => e.Id).HasColumnName("id"); + entity.Property(e => e.Createtime) + .HasColumnType("datetime") + .HasColumnName("createtime"); + entity.Property(e => e.CustomerContactsH) + .HasMaxLength(255) + .HasColumnName("customer_contacts_h"); + entity.Property(e => e.ProjectCode) + .HasMaxLength(255) + .HasColumnName("project_code"); + entity.Property(e => e.Unixtime).HasColumnName("unixtime"); + entity.Property(e => e.Updatetime) + .HasColumnType("datetime") + .HasColumnName("updatetime"); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.Id).HasName("PRIMARY"); + + entity.ToTable("aas_project_shenpi"); + + entity.Property(e => e.Id).HasColumnName("id"); + entity.Property(e => e.Createtime) + .HasColumnType("datetime") + .HasColumnName("createtime"); + entity.Property(e => e.ProjectCode) + .HasMaxLength(255) + .HasComment("项目代码") + .HasColumnName("project_code"); + entity.Property(e => e.RejectReason) + .HasMaxLength(255) + .HasComment("驳回理由") + .HasColumnName("reject_reason"); + entity.Property(e => e.ShenpiNumber) + .HasComment("审批序号") + .HasColumnName("shenpi_number"); + entity.Property(e => e.ShenpiSuggest) + .HasMaxLength(255) + .HasComment("审批建议") + .HasColumnName("shenpi_suggest"); + entity.Property(e => e.Updatetime) + .HasColumnType("datetime") + .HasColumnName("updatetime"); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.Id).HasName("PRIMARY"); + + entity.ToTable("aas_users"); + + entity.Property(e => e.Id) + .HasComment("主键") + .HasColumnName("id"); + entity.Property(e => e.Avatar) + .HasComment("账户头像") + .HasColumnType("text") + .HasColumnName("avatar"); + entity.Property(e => e.ComId) + .HasComment("所属公司ID") + .HasColumnName("com_id"); + entity.Property(e => e.CreationTime) + .HasComment("创建时间") + .HasColumnType("datetime") + .HasColumnName("creation_time"); + entity.Property(e => e.Email) + .HasMaxLength(255) + .HasComment("邮箱") + .HasColumnName("email"); + entity.Property(e => e.Isdelete) + .HasComment("是否删除") + .HasColumnName("isdelete"); + entity.Property(e => e.Mobile) + .HasMaxLength(255) + .HasComment("电话号码") + .HasColumnName("mobile"); + entity.Property(e => e.Password) + .HasMaxLength(255) + .HasComment("密码") + .HasColumnName("password"); + entity.Property(e => e.Position) + .HasMaxLength(255) + .HasComment("职位") + .HasColumnName("position"); + entity.Property(e => e.PswEncryption) + .HasMaxLength(255) + .HasComment("密码加密处理") + .HasColumnName("psw_encryption"); + entity.Property(e => e.Realname) + .HasMaxLength(64) + .HasComment("真实姓名") + .HasColumnName("realname"); + entity.Property(e => e.RoleId) + .HasComment("角色ID") + .HasColumnName("role_id"); + entity.Property(e => e.UpdateTime) + .HasComment("更新时间") + .HasColumnType("datetime") + .HasColumnName("update_time"); + entity.Property(e => e.Username) + .HasMaxLength(64) + .HasComment("用户名(登录名)") + .HasColumnName("username"); + entity.Property(e => e.Weixin) + .HasMaxLength(255) + .HasComment("微信号") + .HasColumnName("weixin"); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.Id).HasName("PRIMARY"); + + entity.ToTable("aas_user_permission"); + + entity.Property(e => e.Id).HasColumnName("id"); + entity.Property(e => e.ProxyClass) + .HasMaxLength(255) + .HasColumnName("proxy_class"); + entity.Property(e => e.ProxyRegion) + .HasMaxLength(255) + .HasColumnName("proxy_region"); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.Id).HasName("PRIMARY"); + + entity.ToTable("aas_users_operate_log"); + + entity.Property(e => e.Id) + .HasComment("主键") + .HasColumnName("id"); + entity.Property(e => e.Browser) + .HasMaxLength(255) + .HasComment("浏览器版本") + .HasColumnName("browser") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.CreationTime) + .HasComment("创建时间") + .HasColumnType("datetime") + .HasColumnName("creation_time"); + entity.Property(e => e.Device) + .HasMaxLength(255) + .HasComment("设备型号") + .HasColumnName("device") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.Ip) + .HasMaxLength(255) + .HasComment("ip地址") + .HasColumnName("ip") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.Location) + .HasMaxLength(255) + .HasComment("地理位置") + .HasColumnName("location") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.Operate) + .HasComment("执行操作") + .HasColumnType("text") + .HasColumnName("operate"); + entity.Property(e => e.Operation) + .HasMaxLength(255) + .HasComment("操作类型") + .HasColumnName("operation") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.TypeId) + .HasComment("日志类型ID") + .HasColumnName("type_id"); + entity.Property(e => e.Username) + .HasMaxLength(100) + .HasComment("用户名字") + .HasColumnName("username") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.Id).HasName("PRIMARY"); + + entity.ToTable("autokeygenerater"); + + entity.Property(e => e.CompanyCode).HasColumnName("Company_code"); + entity.Property(e => e.ProjectInfoCode).HasColumnName("ProjectInfo_code"); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.Id).HasName("PRIMARY"); + + entity.ToTable("wy_logs"); + + entity.Property(e => e.Id) + .HasComment("主键") + .HasColumnName("id"); + entity.Property(e => e.CreationTime) + .HasComment("创建时间") + .HasColumnName("creation_time"); + entity.Property(e => e.Introduced) + .HasComment("传入参数") + .HasColumnType("text") + .HasColumnName("introduced"); + entity.Property(e => e.Ip) + .HasMaxLength(255) + .HasComment("ip地址") + .HasColumnName("ip") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.Operation) + .HasMaxLength(255) + .HasComment("操作类型") + .HasColumnName("operation") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.ReturnValue) + .HasComment("返回值") + .HasColumnType("text") + .HasColumnName("return_value"); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.Id).HasName("PRIMARY"); + + entity + .ToTable("wy_users", tb => tb.HasComment("用户信息表")) + .UseCollation("utf8mb4_general_ci"); + + entity.HasIndex(e => e.Username, "idx_account"); + + entity.Property(e => e.Id) + .HasComment("主键") + .HasColumnName("id"); + entity.Property(e => e.Avatar) + .HasMaxLength(500) + .HasComment("头像") + .HasColumnName("avatar"); + entity.Property(e => e.Birthday) + .HasComment("生日") + .HasColumnType("datetime") + .HasColumnName("birthday"); + entity.Property(e => e.Code) + .HasMaxLength(12) + .HasComment("用户编号") + .HasColumnName("code"); + entity.Property(e => e.ComId) + .HasComment("所属公司ID") + .HasColumnName("com_id"); + entity.Property(e => e.CreateDept) + .HasComment("创建部门") + .HasColumnName("create_dept"); + entity.Property(e => e.CreateUser) + .HasComment("创建人") + .HasColumnName("create_user"); + entity.Property(e => e.CreationTime) + .HasDefaultValueSql("CURRENT_TIMESTAMP") + .HasComment("创建时间") + .HasColumnType("datetime") + .HasColumnName("creation_time"); + entity.Property(e => e.DeptId) + .HasMaxLength(1000) + .HasComment("部门id") + .HasColumnName("dept_id"); + entity.Property(e => e.Email) + .HasMaxLength(45) + .HasComment("邮箱") + .HasColumnName("email"); + entity.Property(e => e.Isdelete) + .HasDefaultValueSql("'0'") + .HasComment("是否已删除") + .HasColumnName("isdelete"); + entity.Property(e => e.Mobile) + .HasMaxLength(45) + .HasComment("手机") + .HasColumnName("mobile"); + entity.Property(e => e.Name) + .HasMaxLength(20) + .HasComment("昵称") + .HasColumnName("name"); + entity.Property(e => e.Password) + .HasMaxLength(45) + .HasComment("密码") + .HasColumnName("password"); + entity.Property(e => e.Position) + .HasMaxLength(255) + .HasComment("职位") + .HasColumnName("position") + .UseCollation("utf8mb4_bin"); + entity.Property(e => e.PostId) + .HasMaxLength(1000) + .HasComment("岗位id") + .HasColumnName("post_id"); + entity.Property(e => e.Realname) + .HasMaxLength(10) + .HasComment("真名") + .HasColumnName("realname"); + entity.Property(e => e.RoleId) + .HasMaxLength(1000) + .HasComment("角色id") + .HasColumnName("role_id"); + entity.Property(e => e.RoleIdAas) + .HasComment("角色ID") + .HasColumnName("role_id_aas"); + entity.Property(e => e.Sex) + .HasComment("性别") + .HasColumnName("sex"); + entity.Property(e => e.Status) + .HasComment("状态") + .HasColumnName("status"); + entity.Property(e => e.TenantId) + .HasMaxLength(12) + .HasDefaultValueSql("'000000'") + .HasComment("租户ID") + .HasColumnName("tenant_id"); + entity.Property(e => e.UpdateTime) + .ValueGeneratedOnAddOrUpdate() + .HasDefaultValueSql("CURRENT_TIMESTAMP") + .HasComment("修改时间") + .HasColumnType("datetime") + .HasColumnName("update_time"); + entity.Property(e => e.UpdateUser) + .HasComment("修改人") + .HasColumnName("update_user"); + entity.Property(e => e.UserType) + .HasComment("用户平台") + .HasColumnName("user_type"); + entity.Property(e => e.Username) + .HasMaxLength(45) + .HasComment("账号") + .HasColumnName("username"); + entity.Property(e => e.Weixin) + .HasMaxLength(255) + .HasComment("微信") + .HasColumnName("weixin"); + }); + + OnModelCreatingPartial(modelBuilder); + } + + partial void OnModelCreatingPartial(ModelBuilder modelBuilder); +} diff --git a/SupplierManager/Models/Autokeygenerater.cs b/SupplierManager/Models/Autokeygenerater.cs new file mode 100644 index 0000000..d06f24f --- /dev/null +++ b/SupplierManager/Models/Autokeygenerater.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; + +namespace SupplierManager.Models; + +public partial class Autokeygenerater +{ + public int Id { get; set; } + + public long? ProjectInfoCode { get; set; } + + public int? CompanyCode { get; set; } +} diff --git a/SupplierManager/Models/WyLog.cs b/SupplierManager/Models/WyLog.cs new file mode 100644 index 0000000..16eefdd --- /dev/null +++ b/SupplierManager/Models/WyLog.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; + +namespace SupplierManager.Models; + +public partial class WyLog +{ + /// + /// 主键 + /// + public int Id { get; set; } + + /// + /// 传入参数 + /// + public string? Introduced { get; set; } + + /// + /// 返回值 + /// + public string? ReturnValue { get; set; } + + /// + /// ip地址 + /// + public string? Ip { get; set; } + + /// + /// 操作类型 + /// + public string? Operation { get; set; } + + /// + /// 创建时间 + /// + public long? CreationTime { get; set; } +} diff --git a/SupplierManager/Models/WyUser.cs b/SupplierManager/Models/WyUser.cs new file mode 100644 index 0000000..d727fe5 --- /dev/null +++ b/SupplierManager/Models/WyUser.cs @@ -0,0 +1,145 @@ +using System; +using System.Collections.Generic; + +namespace SupplierManager.Models; + +/// +/// 用户信息表 +/// +public partial class WyUser +{ + /// + /// 主键 + /// + public long Id { get; set; } + + /// + /// 租户ID + /// + public string? TenantId { get; set; } + + /// + /// 用户编号 + /// + public string? Code { get; set; } + + /// + /// 用户平台 + /// + public int? UserType { get; set; } + + /// + /// 账号 + /// + public string? Username { get; set; } + + /// + /// 密码 + /// + public string? Password { get; set; } + + /// + /// 昵称 + /// + public string? Name { get; set; } + + /// + /// 真名 + /// + public string? Realname { get; set; } + + /// + /// 头像 + /// + public string? Avatar { get; set; } + + /// + /// 邮箱 + /// + public string? Email { get; set; } + + /// + /// 手机 + /// + public string? Mobile { get; set; } + + /// + /// 生日 + /// + public DateTime? Birthday { get; set; } + + /// + /// 性别 + /// + public int? Sex { get; set; } + + /// + /// 角色id + /// + public string? RoleId { get; set; } + + /// + /// 部门id + /// + public string? DeptId { get; set; } + + /// + /// 岗位id + /// + public string? PostId { get; set; } + + /// + /// 创建人 + /// + public long? CreateUser { get; set; } + + /// + /// 创建部门 + /// + public long? CreateDept { get; set; } + + /// + /// 创建时间 + /// + public DateTime? CreationTime { get; set; } + + /// + /// 修改人 + /// + public long? UpdateUser { get; set; } + + /// + /// 修改时间 + /// + public DateTime? UpdateTime { get; set; } + + /// + /// 状态 + /// + public int? Status { get; set; } + + /// + /// 是否已删除 + /// + public int? Isdelete { get; set; } + + /// + /// 所属公司ID + /// + public int? ComId { get; set; } + + /// + /// 角色ID + /// + public int? RoleIdAas { get; set; } + + /// + /// 职位 + /// + public string? Position { get; set; } + + /// + /// 微信 + /// + public string? Weixin { get; set; } +} diff --git a/SupplierManager/Program.cs b/SupplierManager/Program.cs new file mode 100644 index 0000000..dd203a2 --- /dev/null +++ b/SupplierManager/Program.cs @@ -0,0 +1,108 @@ +using System.Text; +using System.Threading.RateLimiting; +using Microsoft.AspNetCore.Authentication.JwtBearer; +using Microsoft.AspNetCore.RateLimiting; +using Microsoft.IdentityModel.Tokens; +using SupplierManager.Common; +using SupplierManager.Models; + +namespace SupplierManager +{ + public class Program + { + public static void Main(string[] args) + { + var builder = WebApplication.CreateBuilder(args); + + // Add services to the container. + + builder.Services.AddControllers(); + builder.Services.AddScoped(); + + builder.Services.AddCors(options => + { + options.AddPolicy(name: "Vue3", + policy => + { + //policy.WithOrigins("http://localhost:5180", + // "http://localhost:8809/", + // "http://www.contoso.com", + // "http://new.uts-data.com:6688/", "http://new.uts-data.com") + policy + .AllowAnyOrigin() + .AllowAnyHeader() + .AllowAnyMethod(); + }); + }); + + + //builder.Services.AddRateLimiter(options => + //{ + // options.AddTokenBucketLimiter(policyName: "token_bucket", tokenBucketOptions => + // { + // tokenBucketOptions.TokenLimit = 100;//ͰװŵĶƻᱻ + // tokenBucketOptions.ReplenishmentPeriod = TimeSpan.FromSeconds(10);//Ʒ + // tokenBucketOptions.TokensPerPeriod = 100;//ÿڷ + // tokenBucketOptions.QueueLimit = 90;//Ͱڵȫ꣨token=0ʱŶ + // tokenBucketOptions.QueueProcessingOrder = QueueProcessingOrder.OldestFirst; + // tokenBucketOptions.AutoReplenishment = true;//ƷڣǷԶơΪfalseҪֶ TokenBucketRateLimiter.TryReplenish + // }); + //}); + builder.Services.AddAuthorization(); + builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) + .AddJwtBearer(option => + { + string DefaultKey = "B,EZipeApY3cNj3~4RP0UMR=H>9x8.1!E85wmZ]]py2d$Y?5"; + var sec = Encoding.UTF8.GetBytes(builder.Configuration["JWT:SecretKey"] ?? DefaultKey); + + option.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters() + { + ValidateIssuer = true, + ValidateAudience = true, + ValidateLifetime = true, + + ValidateIssuerSigningKey = true, + ValidIssuer = builder.Configuration["JwT:Issuer"], + ValidAudience = builder.Configuration["JwT:Audience"], + IssuerSigningKey = new SymmetricSecurityKey(sec) + }; + + option.Events = new JwtBearerEvents + { + OnMessageReceived = context => + { + var token = context.Request.Headers["token"].FirstOrDefault(); + if (string.IsNullOrEmpty(token)) + { + // ûҵ token ͷ Authorization ͷ + token = context.Request.Headers["Authorization"].FirstOrDefault()?.Split(" ").Last(); + } + // ҵ tokenõ HttpContext + if (!string.IsNullOrEmpty(token)) + { + context.Token = token; + } + return Task.CompletedTask; + } + }; + }); + var app = builder.Build(); + + // Configure the HTTP request pipeline. + + app.UseCors("Vue3"); + app.UseAuthentication(); // ֤м + app.UseAuthorization(); // ʹȨм + + app.UseStaticFiles(); + app.MapControllers(); + //app.UseRateLimiter(new Microsoft.AspNetCore.RateLimiting.RateLimiterOptions() + //{ + // RejectionStatusCode = 500 + //}); + + StaticData.GetWebAPIMethod(); + app.Run(); + } + } +} diff --git a/SupplierManager/Properties/launchSettings.json b/SupplierManager/Properties/launchSettings.json new file mode 100644 index 0000000..9f8a2eb --- /dev/null +++ b/SupplierManager/Properties/launchSettings.json @@ -0,0 +1,31 @@ +{ + "$schema": "http://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:46256", + "sslPort": 0 + } + }, + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": "weatherforecast", + "applicationUrl": "http://localhost:5077", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "launchUrl": "weatherforecast", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/SupplierManager/SupplierManager.csproj b/SupplierManager/SupplierManager.csproj new file mode 100644 index 0000000..ef9971f --- /dev/null +++ b/SupplierManager/SupplierManager.csproj @@ -0,0 +1,56 @@ + + + + net8.0 + enable + enable + + + + + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + + + + + + + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + + diff --git a/SupplierManager/SupplierManager.http b/SupplierManager/SupplierManager.http new file mode 100644 index 0000000..0017f4b --- /dev/null +++ b/SupplierManager/SupplierManager.http @@ -0,0 +1,6 @@ +@SupplierManager_HostAddress = http://localhost:5076 + +GET {{SupplierManager_HostAddress}}/weatherforecast/ +Accept: application/json + +### diff --git a/SupplierManager/WeatherForecast.cs b/SupplierManager/WeatherForecast.cs new file mode 100644 index 0000000..1ee564f --- /dev/null +++ b/SupplierManager/WeatherForecast.cs @@ -0,0 +1,13 @@ +namespace SupplierManager +{ + public class WeatherForecast + { + public DateOnly Date { get; set; } + + public int TemperatureC { get; set; } + + public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); + + public string? Summary { get; set; } + } +} diff --git a/SupplierManager/appsettings.Development.json b/SupplierManager/appsettings.Development.json new file mode 100644 index 0000000..0c208ae --- /dev/null +++ b/SupplierManager/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/SupplierManager/appsettings.json b/SupplierManager/appsettings.json new file mode 100644 index 0000000..c92ce7e --- /dev/null +++ b/SupplierManager/appsettings.json @@ -0,0 +1,14 @@ +{ + "JwT": { + "SecretKey": "1%猜U36eraIYI?3s9dI}46an不Nn>P]3)$9:dCnS5=ajAu%8B5]15hF到20T20QBD]Mt9}2z76jO#Glg&0yDy7k-2zVdt&Z5ur>=l)QF2^1&Dq04m76U2P9wvlWf", + "Issuer": "宝来威供应商系统", + "Audience": "W*u93xxp*08DnW@%6}5Tjh6bE?;hW" + }, + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/SupplierManager/nlog.config b/SupplierManager/nlog.config new file mode 100644 index 0000000..3fc858e --- /dev/null +++ b/SupplierManager/nlog.config @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/SupplierManager/script/a.py b/SupplierManager/script/a.py new file mode 100644 index 0000000..a891af3 --- /dev/null +++ b/SupplierManager/script/a.py @@ -0,0 +1,3 @@ +a="ffff" +b="ddddd" +c="fffff" \ No newline at end of file diff --git a/SupplierManager/script/b.py b/SupplierManager/script/b.py new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/SupplierManager/script/b.py @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/SupplierManager/script/webapi.py b/SupplierManager/script/webapi.py new file mode 100644 index 0000000..62b562f --- /dev/null +++ b/SupplierManager/script/webapi.py @@ -0,0 +1,9 @@ +区域={"其他":["其他地区"],"华南大区":["广东省","福建省","台湾省","湖南省"],"东北大区":["黑龙江省","吉林省","辽宁省"]} +省份地区=["其他地区","北京市","天津市","河北省","山西省","内蒙古自治区","辽宁省","吉林省","黑龙江省","上海市","江苏省","浙江省","安徽省","福建省","江西省","山东省","河南省","湖北省","湖南省","广东省","广西壮族自治区","海南省","重庆市","四川省","贵州省","云南省","西藏自治区","陕西省","甘肃省","青海省","宁夏回族自治区","新疆维吾尔自治区","台湾省","香港特别行政区","澳门特别行政区","海外"] +用户类型=["其他","公司业务员","省级代理负责人","区域代理负责人","酒店业主"] +公司身份=["其他","公司业务","代理","酒店方"] +行业分类=["其他行业","连锁酒店","独立品牌酒店","短租公寓","民宿","养老机构","电竞酒店","棋牌室"] +驳回理由=["其他原因","信息填写不完整"] + + + diff --git a/SupplierManager/wwwroot/Download/customization/弱电-C12+T2元吉开关.xlsx b/SupplierManager/wwwroot/Download/customization/弱电-C12+T2元吉开关.xlsx new file mode 100644 index 0000000..ebff85d Binary files /dev/null and b/SupplierManager/wwwroot/Download/customization/弱电-C12+T2元吉开关.xlsx differ diff --git a/SupplierManager/wwwroot/Download/customization/弱电-C12+T3水星阁-微动轻触开关.xlsx b/SupplierManager/wwwroot/Download/customization/弱电-C12+T3水星阁-微动轻触开关.xlsx new file mode 100644 index 0000000..b14e21b Binary files /dev/null and b/SupplierManager/wwwroot/Download/customization/弱电-C12+T3水星阁-微动轻触开关.xlsx differ diff --git a/SupplierManager/wwwroot/Download/customization/弱电-C12+三连体T3水星阁-微动轻触开关.xlsx b/SupplierManager/wwwroot/Download/customization/弱电-C12+三连体T3水星阁-微动轻触开关.xlsx new file mode 100644 index 0000000..6ab6cfd Binary files /dev/null and b/SupplierManager/wwwroot/Download/customization/弱电-C12+三连体T3水星阁-微动轻触开关.xlsx differ diff --git a/SupplierManager/wwwroot/Download/customization/弱电-C5+T1水晶方玻璃开关.xlsx b/SupplierManager/wwwroot/Download/customization/弱电-C5+T1水晶方玻璃开关.xlsx new file mode 100644 index 0000000..abdaac9 Binary files /dev/null and b/SupplierManager/wwwroot/Download/customization/弱电-C5+T1水晶方玻璃开关.xlsx differ diff --git a/SupplierManager/wwwroot/Download/customization/弱电-C5+T1水立方玻璃开关.xlsx b/SupplierManager/wwwroot/Download/customization/弱电-C5+T1水立方玻璃开关.xlsx new file mode 100644 index 0000000..6a4478f Binary files /dev/null and b/SupplierManager/wwwroot/Download/customization/弱电-C5+T1水立方玻璃开关.xlsx differ diff --git a/SupplierManager/wwwroot/Download/customization/弱电-无界开关方案.xlsx b/SupplierManager/wwwroot/Download/customization/弱电-无界开关方案.xlsx new file mode 100644 index 0000000..a17515d Binary files /dev/null and b/SupplierManager/wwwroot/Download/customization/弱电-无界开关方案.xlsx differ diff --git a/SupplierManager/wwwroot/Download/customization/弱电-智多方7寸屏.xlsx b/SupplierManager/wwwroot/Download/customization/弱电-智多方7寸屏.xlsx new file mode 100644 index 0000000..1e7c1c9 Binary files /dev/null and b/SupplierManager/wwwroot/Download/customization/弱电-智多方7寸屏.xlsx differ diff --git a/SupplierManager/wwwroot/Download/customization/弱电-水悦派可视方案.xlsx b/SupplierManager/wwwroot/Download/customization/弱电-水悦派可视方案.xlsx new file mode 100644 index 0000000..f039d49 Binary files /dev/null and b/SupplierManager/wwwroot/Download/customization/弱电-水悦派可视方案.xlsx differ diff --git a/SupplierManager/wwwroot/Download/customization/弱电-轻触大板开关.xlsx b/SupplierManager/wwwroot/Download/customization/弱电-轻触大板开关.xlsx new file mode 100644 index 0000000..7e92fc0 Binary files /dev/null and b/SupplierManager/wwwroot/Download/customization/弱电-轻触大板开关.xlsx differ diff --git a/SupplierManager/wwwroot/Download/customization/强电-D8T大板直连.xlsx b/SupplierManager/wwwroot/Download/customization/强电-D8T大板直连.xlsx new file mode 100644 index 0000000..26520bf Binary files /dev/null and b/SupplierManager/wwwroot/Download/customization/强电-D8T大板直连.xlsx differ diff --git a/SupplierManager/wwwroot/Download/customization/强电-T1水立方.xlsx b/SupplierManager/wwwroot/Download/customization/强电-T1水立方.xlsx new file mode 100644 index 0000000..8c93950 Binary files /dev/null and b/SupplierManager/wwwroot/Download/customization/强电-T1水立方.xlsx differ diff --git a/SupplierManager/wwwroot/Download/customization/强电-T3水星阁直连.xlsx b/SupplierManager/wwwroot/Download/customization/强电-T3水星阁直连.xlsx new file mode 100644 index 0000000..61575fd Binary files /dev/null and b/SupplierManager/wwwroot/Download/customization/强电-T3水星阁直连.xlsx differ diff --git a/ViewModels/Common/CacheKey.cs b/ViewModels/Common/CacheKey.cs new file mode 100644 index 0000000..a4c515d --- /dev/null +++ b/ViewModels/Common/CacheKey.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ViewModels.Common +{ + public class CacheKey + { + public static string RoomIP_Port_Prefix = "Log_IP_Port"; + + public static string Key = "monitor_host"; + + public static string MonitorLogPrefix = "AllLogKey"; + } + +} diff --git a/ViewModels/Common/Crypto.cs b/ViewModels/Common/Crypto.cs new file mode 100644 index 0000000..256e530 --- /dev/null +++ b/ViewModels/Common/Crypto.cs @@ -0,0 +1,211 @@ +using System; +using System.Runtime.CompilerServices; +using System.Security.Cryptography; +using Microsoft.AspNetCore.Cryptography.KeyDerivation; + +namespace CryptoHelper; + +/// +/// Provides helper methods for hashing/salting and verifying passwords. +/// +public static class Crypto +{ + /* ======================= + * HASHED PASSWORD FORMATS + * ======================= + * + * Version 3: + * PBKDF2 with HMAC-SHA256, 128-bit salt, 256-bit subkey, 600.000 iterations. + * Format: { 0x01, prf (UInt32), iter count (UInt32), salt length (UInt32), salt, subkey } + * (All UInt32s are stored big-endian.) + */ + + private const int PBKDF2IterCount = 600_000; + private const int PBKDF2SubkeyLength = 256 / 8; // 256 bits + private const int SaltSize = 128 / 8; // 128 bits + + + /// + /// Returns a hashed representation of the specified . + /// + /// The password to generate a hash value for. + /// The hash value for as a base-64-encoded string. + /// is null. + public static string HashPassword(string password) + { + if (password == null) + { + throw new ArgumentNullException(nameof(password)); + } + + return HashPasswordInternal(password); + } + + /// + /// Determines whether the specified RFC 2898 hash and password are a cryptographic match. + /// + /// The previously-computed RFC 2898 hash value as a base-64-encoded string. + /// The plaintext password to cryptographically compare with hashedPassword. + /// true if the hash value is a cryptographic match for the password; otherwise, false. + /// + /// must be of the format of HashPassword (salt + Hash(salt+input). + /// + /// + /// or is null. + /// + public static bool VerifyHashedPassword(string hashedPassword, string password) + { + if (hashedPassword == null) + { + throw new ArgumentNullException(nameof(hashedPassword)); + } + if (password == null) + { + throw new ArgumentNullException(nameof(password)); + } + + return VerifyHashedPasswordInternal(hashedPassword, password); + } + + private static readonly RandomNumberGenerator _rng = RandomNumberGenerator.Create(); + + private static string HashPasswordInternal(string password) + { + var bytes = HashPasswordInternal(password, KeyDerivationPrf.HMACSHA256, PBKDF2IterCount, SaltSize, PBKDF2SubkeyLength); + return Convert.ToBase64String(bytes); + } + + private static byte[] HashPasswordInternal( + string password, + KeyDerivationPrf prf, + int iterCount, + int saltSize, + int numBytesRequested) + { + // Produce a version 3 (see comment above) text hash. + var salt = new byte[saltSize]; + _rng.GetBytes(salt); + var subkey = KeyDerivation.Pbkdf2(password, salt, prf, iterCount, numBytesRequested); + + var outputBytes = new byte[13 + salt.Length + subkey.Length]; + + // Write format marker. + outputBytes[0] = 0x01; + + // Write hashing algorithm version. + WriteNetworkByteOrder(outputBytes, 1, (uint)prf); + + // Write iteration count of the algorithm. + WriteNetworkByteOrder(outputBytes, 5, (uint)iterCount); + + // Write size of the salt. + WriteNetworkByteOrder(outputBytes, 9, (uint)saltSize); + + // Write the salt. + Buffer.BlockCopy(salt, 0, outputBytes, 13, salt.Length); + + // Write the subkey. + Buffer.BlockCopy(subkey, 0, outputBytes, 13 + saltSize, subkey.Length); + return outputBytes; + } + + private static bool VerifyHashedPasswordInternal(string hashedPassword, string password) + { + var decodedHashedPassword = Convert.FromBase64String(hashedPassword); + + if (decodedHashedPassword.Length == 0) + { + return false; + } + + try + { + // Verify hashing format. + if (decodedHashedPassword[0] != 0x01) + { + // Unknown format header. + return false; + } + + // Read hashing algorithm version. + var prf = (KeyDerivationPrf)ReadNetworkByteOrder(decodedHashedPassword, 1); + + // Read iteration count of the algorithm. + var iterCount = (int)ReadNetworkByteOrder(decodedHashedPassword, 5); + + // Read size of the salt. + var saltLength = (int)ReadNetworkByteOrder(decodedHashedPassword, 9); + + // Verify the salt size: >= 128 bits. + if (saltLength < 128 / 8) + { + return false; + } + + // Read the salt. + var salt = new byte[saltLength]; + Buffer.BlockCopy(decodedHashedPassword, 13, salt, 0, salt.Length); + + // Verify the subkey length >= 128 bits. + var subkeyLength = decodedHashedPassword.Length - 13 - salt.Length; + if (subkeyLength < 128 / 8) + { + return false; + } + + // Read the subkey. + var expectedSubkey = new byte[subkeyLength]; + Buffer.BlockCopy(decodedHashedPassword, 13 + salt.Length, expectedSubkey, 0, expectedSubkey.Length); + + // Hash the given password and verify it against the expected subkey. + var actualSubkey = KeyDerivation.Pbkdf2(password, salt, prf, iterCount, subkeyLength); + return ByteArraysEqual(actualSubkey, expectedSubkey); + } + catch + { + // This should never occur except in the case of a malformed payload, where + // we might go off the end of the array. Regardless, a malformed payload + // implies verification failed. + return false; + } + } + + private static uint ReadNetworkByteOrder(byte[] buffer, int offset) + { + return ((uint)(buffer[offset + 0]) << 24) + | ((uint)(buffer[offset + 1]) << 16) + | ((uint)(buffer[offset + 2]) << 8) + | ((uint)(buffer[offset + 3])); + } + + private static void WriteNetworkByteOrder(byte[] buffer, int offset, uint value) + { + buffer[offset + 0] = (byte)(value >> 24); + buffer[offset + 1] = (byte)(value >> 16); + buffer[offset + 2] = (byte)(value >> 8); + buffer[offset + 3] = (byte)(value >> 0); + } + + // Compares two byte arrays for equality. + // The method is specifically written so that the loop is not optimized. + [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] + private static bool ByteArraysEqual(byte[] a, byte[] b) + { + if (ReferenceEquals(a, b)) + { + return true; + } + + if (a == null || b == null || a.Length != b.Length) + { + return false; + } + + var areSame = true; + for (var i = 0; i < a.Length; i++) + { + areSame &= (a[i] == b[i]); + } + return areSame; + } +} diff --git a/ViewModels/Common/Tools.cs b/ViewModels/Common/Tools.cs new file mode 100644 index 0000000..b08ca60 --- /dev/null +++ b/ViewModels/Common/Tools.cs @@ -0,0 +1,117 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Security.Cryptography; +using System.Text; +using System.Threading.Tasks; +namespace ViewModels +{ + public class Tools + { + private static byte[] Keys = { 0xEF, 0xAB, 0x56, 0x78, 0x90, 0x34, 0xCD, 0x12 }; + + public static string encryptKey = "20su#pe1r%boolive"; + /// + /// DES加密字符串 + /// + /// 待加密的字符串 + /// 加密密钥,要求为8位 + /// 加密成功返回加密后的字符串,失败返回源串 + public static string EncryptString(string encryptString) + { + try + { + byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8)); + byte[] rgbIV = Keys; + byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString); + var dCSP = new DESCryptoServiceProvider(); + using MemoryStream mStream = new MemoryStream(); + using CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write); + cStream.Write(inputByteArray, 0, inputByteArray.Length); + cStream.FlushFinalBlock(); + return Convert.ToBase64String(mStream.ToArray()); + } + catch + { + return encryptString; + } + } + + /// + /// DES解密字符串 + /// + /// 待解密的字符串 + /// 解密密钥,要求为8位,和加密密钥相同 + /// 解密成功返回解密后的字符串,失败返源串 + public static string DecryptString(string decryptString) + { + try + { + byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8)); + byte[] rgbIV = Keys; + byte[] inputByteArray = Convert.FromBase64String(decryptString); + var DCSP = new DESCryptoServiceProvider(); + using MemoryStream mStream = new MemoryStream(); + using CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write); + cStream.Write(inputByteArray, 0, inputByteArray.Length); + cStream.FlushFinalBlock(); + return Encoding.UTF8.GetString(mStream.ToArray()); + } + catch + { + return decryptString; + } + } + + + public static string HashPassword(string pwd) + { + string v = CryptoHelper.Crypto.HashPassword(pwd); + return v; + } + public static bool VerifyHashedPassword(string encrypwd, string original_pwd) + { + bool v = CryptoHelper.Crypto.VerifyHashedPassword(encrypwd, original_pwd); + return v; + } + + + + /// + /// 时间戳转本地时间-时间戳精确到秒 + /// + public static DateTime ToLocalTimeDateBySeconds(long unix) + { + var dto = DateTimeOffset.FromUnixTimeSeconds(unix); + return dto.ToLocalTime().DateTime; + } + + /// + /// 时间转时间戳Unix-时间戳精确到秒 + /// + public static long ToUnixTimestampBySeconds(DateTime dt) + { + DateTimeOffset dto = new DateTimeOffset(dt); + return dto.ToUnixTimeSeconds(); + } + + + /// + /// 时间戳转本地时间-时间戳精确到毫秒 + /// + public static DateTime ToLocalTimeDateByMilliseconds(long unix) + { + var dto = DateTimeOffset.FromUnixTimeMilliseconds(unix); + return dto.ToLocalTime().DateTime; + } + + /// + /// 时间转时间戳Unix-时间戳精确到毫秒 + /// + public static long ToUnixTimestampByMilliseconds(DateTime dt) + { + DateTimeOffset dto = new DateTimeOffset(dt); + return dto.ToUnixTimeMilliseconds(); + } + } +} diff --git a/ViewModels/RequestData/LoginData.cs b/ViewModels/RequestData/LoginData.cs new file mode 100644 index 0000000..9d555b5 --- /dev/null +++ b/ViewModels/RequestData/LoginData.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ViewModels.RequestData +{ + public class LoginData + { + public string username { get; set; } + public string password { get; set; } + } +} diff --git a/ViewModels/ResponseData/ResLoginData.cs b/ViewModels/ResponseData/ResLoginData.cs new file mode 100644 index 0000000..8a9ee7a --- /dev/null +++ b/ViewModels/ResponseData/ResLoginData.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ViewModels.ResponseData +{ + public class ResLoginData + { + public string AccessToken { get; set; } + public int Id { get; set; } + public string Username { get; set; } + public string Realname { get; set; } + + public int? ComId { get; set; } + public int? RoleId { get; set; } + public string Avatar { get; set; } + public string Position { get; set; } + } + + public class JWTData + { + /// + /// 发行人 + /// + public string iss { get; set; } + /// + /// 到期时间 + /// + public long exp { get; set; } + /// + /// 发布时间 + /// + public string iat { get; set; } + /// + ///用于标识该JWT + /// + public string jti { get; set; } + /// + /// token + /// + public string AccessToken { get; set; } + } +} diff --git a/ViewModels/ReturnResult.cs b/ViewModels/ReturnResult.cs new file mode 100644 index 0000000..f8c737d --- /dev/null +++ b/ViewModels/ReturnResult.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ViewModels +{ + public class ReturnResult + { + public int Status { get; set; } + public string Message { get; set; } + } + + public class QueryAll_Or_Single + { + public bool IsAll { get; set; } + public int ID { get; set; } + } + public class QueryAll_Or_Single_ProjectInfo + { + public bool IsAll { get; set; } + public int? ID { get; set; } + public int? ComId { get; set; } + } + + public class QueryAll_Or_Single_ProjectInfo_Page + { + //public bool IsAll { get; set; } + //public int ID { get; set; } + public int? ComId { get; set; } + public string? UpdateTime_Start { get; set; } + public string? UpdateTime_End { get; set; } + } + + + public class ReturnInfo + { + public bool isok { set; get; } // 是否成功,true成功 + public string message { set; get; } // 传递接口信息,or报错信息 + public int status { set; get; } // 服务器报错信息,正确为200,错误404/500等 + public object response { set; get; } // 获取到的信息本体,若报错则为null + } +} diff --git a/ViewModels/ViewModels.csproj b/ViewModels/ViewModels.csproj new file mode 100644 index 0000000..6e34cd6 --- /dev/null +++ b/ViewModels/ViewModels.csproj @@ -0,0 +1,14 @@ + + + + net8.0 + enable + enable + + + + + + + + diff --git a/aas_pc_web/.editorconfig b/aas_pc_web/.editorconfig new file mode 100644 index 0000000..5a5809d --- /dev/null +++ b/aas_pc_web/.editorconfig @@ -0,0 +1,9 @@ +[*.{js,jsx,mjs,cjs,ts,tsx,mts,cts,vue,css,scss,sass,less,styl}] +charset = utf-8 +indent_size = 2 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true + +end_of_line = lf +max_line_length = 100 diff --git a/aas_pc_web/.gitattributes b/aas_pc_web/.gitattributes new file mode 100644 index 0000000..6313b56 --- /dev/null +++ b/aas_pc_web/.gitattributes @@ -0,0 +1 @@ +* text=auto eol=lf diff --git a/aas_pc_web/.gitignore b/aas_pc_web/.gitignore new file mode 100644 index 0000000..8ee54e8 --- /dev/null +++ b/aas_pc_web/.gitignore @@ -0,0 +1,30 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist +dist-ssr +coverage +*.local + +/cypress/videos/ +/cypress/screenshots/ + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +*.tsbuildinfo diff --git a/aas_pc_web/CHANGELOG.md b/aas_pc_web/CHANGELOG.md new file mode 100644 index 0000000..354bc72 --- /dev/null +++ b/aas_pc_web/CHANGELOG.md @@ -0,0 +1,12 @@ +This file explains how Visual Studio created the project. + +The following tools were used to generate this project: +- create-vite + +The following steps were used to generate this project: +- Create vue project with create-vite: `npm init --yes vue@latest aas_pc_web -- --eslint `. +- Updating `vite.config.js` with port. +- Create project file (`aas_pc_web.esproj`). +- Create `launch.json` to enable debugging. +- Add project to solution. +- Write this file. diff --git a/aas_pc_web/README.md b/aas_pc_web/README.md new file mode 100644 index 0000000..4931e4c --- /dev/null +++ b/aas_pc_web/README.md @@ -0,0 +1,35 @@ +# aas_pc_web + +This template should help get you started developing with Vue 3 in Vite. + +## Recommended IDE Setup + +[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur). + +## Customize configuration + +See [Vite Configuration Reference](https://vite.dev/config/). + +## Project Setup + +```sh +npm install +``` + +### Compile and Hot-Reload for Development + +```sh +npm run dev +``` + +### Compile and Minify for Production + +```sh +npm run build +``` + +### Lint with [ESLint](https://eslint.org/) + +```sh +npm run lint +``` diff --git a/aas_pc_web/aas_pc_web.esproj b/aas_pc_web/aas_pc_web.esproj new file mode 100644 index 0000000..ca2cddf --- /dev/null +++ b/aas_pc_web/aas_pc_web.esproj @@ -0,0 +1,25 @@ + + + npm run dev + .\ + Vitest + + false + + $(MSBuildProjectDirectory)\dist + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/aas_pc_web/eslint.config.js b/aas_pc_web/eslint.config.js new file mode 100644 index 0000000..f3bd942 --- /dev/null +++ b/aas_pc_web/eslint.config.js @@ -0,0 +1,24 @@ +import { defineConfig, globalIgnores } from 'eslint/config' +import globals from 'globals' +import js from '@eslint/js' +import pluginVue from 'eslint-plugin-vue' + +export default defineConfig([ + { + name: 'app/files-to-lint', + files: ['**/*.{js,mjs,jsx,vue}'], + }, + + globalIgnores(['**/dist/**', '**/dist-ssr/**', '**/coverage/**']), + + { + languageOptions: { + globals: { + ...globals.browser, + }, + }, + }, + + js.configs.recommended, + ...pluginVue.configs['flat/essential'], +]) diff --git a/aas_pc_web/index.html b/aas_pc_web/index.html new file mode 100644 index 0000000..c59dc6e --- /dev/null +++ b/aas_pc_web/index.html @@ -0,0 +1,13 @@ + + + + + + + 宝来威项目报备系统 + + +
+ + + diff --git a/aas_pc_web/jsconfig.json b/aas_pc_web/jsconfig.json new file mode 100644 index 0000000..5a1f2d2 --- /dev/null +++ b/aas_pc_web/jsconfig.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "paths": { + "@/*": ["./src/*"] + } + }, + "exclude": ["node_modules", "dist"] +} diff --git a/aas_pc_web/package-lock.json b/aas_pc_web/package-lock.json new file mode 100644 index 0000000..6166a8c --- /dev/null +++ b/aas_pc_web/package-lock.json @@ -0,0 +1,5230 @@ +{ + "name": "aas_pc_web", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "aas_pc_web", + "version": "0.0.0", + "dependencies": { + "@element-plus/icons-vue": "^2.3.1", + "@vueuse/core": "^13.1.0", + "axios": "^1.8.3", + "china-location": "^2.1.0", + "dayjs": "^1.11.13", + "element-china-area-data": "^6.1.0", + "element-plus": "^2.9.6", + "jquery": "^3.7.1", + "qs": "^6.14.0", + "ssh2-sftp-client": "^12.0.0", + "vue": "^3.5.13", + "vue-i18n": "^11.1.3", + "vue-router": "^4.5.0", + "vue-simple-verify": "^1.1.0", + "vuex": "^4.1.0", + "xlsx": "^0.18.5" + }, + "devDependencies": { + "@eslint/js": "^9.21.0", + "@vitejs/plugin-vue": "^5.2.1", + "eslint": "^9.21.0", + "eslint-plugin-vue": "~10.0.0", + "globals": "^16.0.0", + "unplugin-auto-import": "^19.1.1", + "unplugin-vue-components": "^28.4.1", + "vite": "^6.2.1", + "vite-plugin-vue-devtools": "^7.7.2" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@antfu/utils": { + "version": "0.7.10", + "resolved": "https://registry.npmmirror.com/@antfu/utils/-/utils-0.7.10.tgz", + "integrity": "sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/code-frame/node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/@babel/compat-data": { + "version": "7.26.8", + "resolved": "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.26.8.tgz", + "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.26.10", + "resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.26.10.tgz", + "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.10", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.10", + "@babel/parser": "^7.26.10", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.10", + "@babel/types": "^7.26.10", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.27.0", + "resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.27.0.tgz", + "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.25.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.0", + "resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz", + "integrity": "sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.26.8", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.27.0", + "resolved": "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.0.tgz", + "integrity": "sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/helper-replace-supers": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/traverse": "^7.27.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", + "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", + "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.26.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", + "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.26.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz", + "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==", + "dev": true, + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/traverse": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.25.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", + "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.27.0", + "resolved": "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.27.0.tgz", + "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.27.0", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.27.0.tgz", + "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", + "dependencies": { + "@babel/types": "^7.27.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.25.9", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.25.9.tgz", + "integrity": "sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-decorators": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.25.9", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.25.9.tgz", + "integrity": "sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.26.0", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.25.9", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", + "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.27.0", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.27.0.tgz", + "integrity": "sha512-fRGGjO2UEGPjvEcyAZXRXAS8AfdaQoq7HnxAbJoAoW10B9xOKesmmndJv+Sym2a+9FHWZ9KbyyLCe9s0Sn5jtg==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.27.0", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-syntax-typescript": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.0", + "resolved": "https://registry.npmmirror.com/@babel/template/-/template-7.27.0.tgz", + "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.27.0", + "resolved": "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.27.0.tgz", + "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.27.0", + "@babel/parser": "^7.27.0", + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.27.0", + "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.27.0.tgz", + "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@ctrl/tinycolor": { + "version": "3.6.1", + "resolved": "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", + "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@element-plus/icons-vue": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz", + "integrity": "sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==", + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.2", + "resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz", + "integrity": "sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.2", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.25.2.tgz", + "integrity": "sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.25.2.tgz", + "integrity": "sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.25.2.tgz", + "integrity": "sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.2.tgz", + "integrity": "sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.25.2.tgz", + "integrity": "sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.2.tgz", + "integrity": "sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.2.tgz", + "integrity": "sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.2", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.25.2.tgz", + "integrity": "sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.25.2.tgz", + "integrity": "sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.2", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.25.2.tgz", + "integrity": "sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.2", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.25.2.tgz", + "integrity": "sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.2", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.2.tgz", + "integrity": "sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.2", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.2.tgz", + "integrity": "sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.2", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.2.tgz", + "integrity": "sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.2", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.25.2.tgz", + "integrity": "sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.25.2.tgz", + "integrity": "sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.2.tgz", + "integrity": "sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.2.tgz", + "integrity": "sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.2.tgz", + "integrity": "sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.2.tgz", + "integrity": "sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.25.2.tgz", + "integrity": "sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.25.2.tgz", + "integrity": "sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.2", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.25.2.tgz", + "integrity": "sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.25.2.tgz", + "integrity": "sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.6.0", + "resolved": "https://registry.npmmirror.com/@eslint-community/eslint-utils/-/eslint-utils-4.6.0.tgz", + "integrity": "sha512-WhCn7Z7TauhBtmzhvKpoQs0Wwb/kBcy4CwpuI0/eEIr2Lx2auxmulAzLr91wVZJaz47iUZdkXOK7WlAfxGKCnA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmmirror.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.20.0", + "resolved": "https://registry.npmmirror.com/@eslint/config-array/-/config-array-0.20.0.tgz", + "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==", + "dev": true, + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/@eslint/config-helpers/-/config-helpers-0.2.1.tgz", + "integrity": "sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.12.0", + "resolved": "https://registry.npmmirror.com/@eslint/core/-/core-0.12.0.tgz", + "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmmirror.com/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.24.0", + "resolved": "https://registry.npmmirror.com/@eslint/js/-/js-9.24.0.tgz", + "integrity": "sha512-uIY/y3z0uvOGX8cp1C2fiC4+ZmBhp6yZWkojtHL1YEMnRt1Y63HB9TM17proGEmeG7HeUY+UP36F0aknKYTpYA==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmmirror.com/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.8", + "resolved": "https://registry.npmmirror.com/@eslint/plugin-kit/-/plugin-kit-0.2.8.tgz", + "integrity": "sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==", + "dev": true, + "dependencies": { + "@eslint/core": "^0.13.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit/node_modules/@eslint/core": { + "version": "0.13.0", + "resolved": "https://registry.npmmirror.com/@eslint/core/-/core-0.13.0.tgz", + "integrity": "sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.6.9", + "resolved": "https://registry.npmmirror.com/@floating-ui/core/-/core-1.6.9.tgz", + "integrity": "sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==", + "dependencies": { + "@floating-ui/utils": "^0.2.9" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.13", + "resolved": "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.6.13.tgz", + "integrity": "sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==", + "dependencies": { + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.9" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.9", + "resolved": "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.9.tgz", + "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==" + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmmirror.com/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmmirror.com/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmmirror.com/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.2", + "resolved": "https://registry.npmmirror.com/@humanwhocodes/retry/-/retry-0.4.2.tgz", + "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==", + "dev": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@intlify/core-base": { + "version": "11.1.3", + "resolved": "https://registry.npmmirror.com/@intlify/core-base/-/core-base-11.1.3.tgz", + "integrity": "sha512-cMuHunYO7LE80azTitcvEbs1KJmtd6g7I5pxlApV3Jo547zdO3h31/0uXpqHc+Y3RKt1wo2y68RGSx77Z1klyA==", + "license": "MIT", + "dependencies": { + "@intlify/message-compiler": "11.1.3", + "@intlify/shared": "11.1.3" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/message-compiler": { + "version": "11.1.3", + "resolved": "https://registry.npmmirror.com/@intlify/message-compiler/-/message-compiler-11.1.3.tgz", + "integrity": "sha512-7rbqqpo2f5+tIcwZTAG/Ooy9C8NDVwfDkvSeDPWUPQW+Dyzfw2o9H103N5lKBxO7wxX9dgCDjQ8Umz73uYw3hw==", + "license": "MIT", + "dependencies": { + "@intlify/shared": "11.1.3", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/shared": { + "version": "11.1.3", + "resolved": "https://registry.npmmirror.com/@intlify/shared/-/shared-11.1.3.tgz", + "integrity": "sha512-pTFBgqa/99JRA2H1qfyqv97MKWJrYngXBA/I0elZcYxvJgcCw3mApAoPW3mJ7vx3j+Ti0FyKUFZ4hWxdjKaxvA==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.29", + "resolved": "https://registry.npmmirror.com/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", + "dev": true + }, + "node_modules/@popperjs/core": { + "name": "@sxzz/popperjs-es", + "version": "2.11.7", + "resolved": "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz", + "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.4", + "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", + "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.40.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.0.tgz", + "integrity": "sha512-+Fbls/diZ0RDerhE8kyC6hjADCXA1K4yVNlH0EYfd2XjyH0UGgzaQ8MlT0pCXAThfxv3QUAczHaL+qSv1E4/Cg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.40.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.40.0.tgz", + "integrity": "sha512-PPA6aEEsTPRz+/4xxAmaoWDqh67N7wFbgFUJGMnanCFs0TV99M0M8QhhaSCks+n6EbQoFvLQgYOGXxlMGQe/6w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.40.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.40.0.tgz", + "integrity": "sha512-GwYOcOakYHdfnjjKwqpTGgn5a6cUX7+Ra2HeNj/GdXvO2VJOOXCiYYlRFU4CubFM67EhbmzLOmACKEfvp3J1kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.40.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.40.0.tgz", + "integrity": "sha512-CoLEGJ+2eheqD9KBSxmma6ld01czS52Iw0e2qMZNpPDlf7Z9mj8xmMemxEucinev4LgHalDPczMyxzbq+Q+EtA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.40.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.40.0.tgz", + "integrity": "sha512-r7yGiS4HN/kibvESzmrOB/PxKMhPTlz+FcGvoUIKYoTyGd5toHp48g1uZy1o1xQvybwwpqpe010JrcGG2s5nkg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.40.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.40.0.tgz", + "integrity": "sha512-mVDxzlf0oLzV3oZOr0SMJ0lSDd3xC4CmnWJ8Val8isp9jRGl5Dq//LLDSPFrasS7pSm6m5xAcKaw3sHXhBjoRw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.40.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.40.0.tgz", + "integrity": "sha512-y/qUMOpJxBMy8xCXD++jeu8t7kzjlOCkoxxajL58G62PJGBZVl/Gwpm7JK9+YvlB701rcQTzjUZ1JgUoPTnoQA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.40.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.40.0.tgz", + "integrity": "sha512-GoCsPibtVdJFPv/BOIvBKO/XmwZLwaNWdyD8TKlXuqp0veo2sHE+A/vpMQ5iSArRUz/uaoj4h5S6Pn0+PdhRjg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.40.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.40.0.tgz", + "integrity": "sha512-L5ZLphTjjAD9leJzSLI7rr8fNqJMlGDKlazW2tX4IUF9P7R5TMQPElpH82Q7eNIDQnQlAyiNVfRPfP2vM5Avvg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.40.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.40.0.tgz", + "integrity": "sha512-ATZvCRGCDtv1Y4gpDIXsS+wfFeFuLwVxyUBSLawjgXK2tRE6fnsQEkE4csQQYWlBlsFztRzCnBvWVfcae/1qxQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.40.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.40.0.tgz", + "integrity": "sha512-wG9e2XtIhd++QugU5MD9i7OnpaVb08ji3P1y/hNbxrQ3sYEelKJOq1UJ5dXczeo6Hj2rfDEL5GdtkMSVLa/AOg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.40.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.40.0.tgz", + "integrity": "sha512-vgXfWmj0f3jAUvC7TZSU/m/cOE558ILWDzS7jBhiCAFpY2WEBn5jqgbqvmzlMjtp8KlLcBlXVD2mkTSEQE6Ixw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.40.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.0.tgz", + "integrity": "sha512-uJkYTugqtPZBS3Z136arevt/FsKTF/J9dEMTX/cwR7lsAW4bShzI2R0pJVw+hcBTWF4dxVckYh72Hk3/hWNKvA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.40.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.0.tgz", + "integrity": "sha512-rKmSj6EXQRnhSkE22+WvrqOqRtk733x3p5sWpZilhmjnkHkpeCgWsFFo0dGnUGeA+OZjRl3+VYq+HyCOEuwcxQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.40.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.0.tgz", + "integrity": "sha512-SpnYlAfKPOoVsQqmTFJ0usx0z84bzGOS9anAC0AZ3rdSo3snecihbhFTlJZ8XMwzqAcodjFU4+/SM311dqE5Sw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.40.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.0.tgz", + "integrity": "sha512-RcDGMtqF9EFN8i2RYN2W+64CdHruJ5rPqrlYw+cgM3uOVPSsnAQps7cpjXe9be/yDp8UC7VLoCoKC8J3Kn2FkQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.40.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.0.tgz", + "integrity": "sha512-HZvjpiUmSNx5zFgwtQAV1GaGazT2RWvqeDi0hV+AtC8unqqDSsaFjPxfsO6qPtKRRg25SisACWnJ37Yio8ttaw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.40.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.0.tgz", + "integrity": "sha512-UtZQQI5k/b8d7d3i9AZmA/t+Q4tk3hOC0tMOMSq2GlMYOfxbesxG4mJSeDp0EHs30N9bsfwUvs3zF4v/RzOeTQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.40.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.0.tgz", + "integrity": "sha512-+m03kvI2f5syIqHXCZLPVYplP8pQch9JHyXKZ3AGMKlg8dCyr2PKHjwRLiW53LTrN/Nc3EqHOKxUxzoSPdKddA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.40.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.0.tgz", + "integrity": "sha512-lpPE1cLfP5oPzVjKMx10pgBmKELQnFJXHgvtHCtuJWOv8MxqdEIMNtgHgBFf7Ea2/7EuVwa9fodWUfXAlXZLZQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", + "dev": true + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", + "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@types/estree": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/lodash": { + "version": "4.17.16", + "resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.16.tgz", + "integrity": "sha512-HX7Em5NYQAXKW+1T+FiuG27NGwzJfCX3s1GjOa7ujxZa52kjJLOr4FUxT+giF6Tgxv1e+/czV/iTtBw27WTU9g==" + }, + "node_modules/@types/lodash-es": { + "version": "4.17.12", + "resolved": "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz", + "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.21", + "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", + "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.2.3", + "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-5.2.3.tgz", + "integrity": "sha512-IYSLEQj4LgZZuoVpdSUCw3dIynTWQgPlaRP6iAvMle4My0HdYwr5g5wQAfwOeHQBmYwEkqF70nRpSilr6PoUDg==", + "dev": true, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/babel-helper-vue-transform-on": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.4.0.tgz", + "integrity": "sha512-mCokbouEQ/ocRce/FpKCRItGo+013tHg7tixg3DUNS+6bmIchPt66012kBMm476vyEIJPafrvOf4E5OYj3shSw==", + "dev": true + }, + "node_modules/@vue/babel-plugin-jsx": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.4.0.tgz", + "integrity": "sha512-9zAHmwgMWlaN6qRKdrg1uKsBKHvnUU+Py+MOCTuYZBoZsopa90Di10QRjB+YPnVss0BZbG/H5XFwJY1fTxJWhA==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.9", + "@babel/types": "^7.26.9", + "@vue/babel-helper-vue-transform-on": "1.4.0", + "@vue/babel-plugin-resolve-type": "1.4.0", + "@vue/shared": "^3.5.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + } + } + }, + "node_modules/@vue/babel-plugin-resolve-type": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.4.0.tgz", + "integrity": "sha512-4xqDRRbQQEWHQyjlYSgZsWj44KfiF6D+ktCuXyZ8EnVDYV3pztmXJDf1HveAjUAXxAnR8daCQT51RneWWxtTyQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/parser": "^7.26.9", + "@vue/compiler-sfc": "^3.5.13" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.13", + "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.13.tgz", + "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==", + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/shared": "3.5.13", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-core/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.13", + "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", + "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==", + "dependencies": { + "@vue/compiler-core": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.13", + "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz", + "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==", + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/compiler-core": "3.5.13", + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.11", + "postcss": "^8.4.48", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-sfc/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.13", + "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz", + "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==", + "dependencies": { + "@vue/compiler-dom": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==" + }, + "node_modules/@vue/devtools-core": { + "version": "7.7.2", + "resolved": "https://registry.npmmirror.com/@vue/devtools-core/-/devtools-core-7.7.2.tgz", + "integrity": "sha512-lexREWj1lKi91Tblr38ntSsy6CvI8ba7u+jmwh2yruib/ltLUcsIzEjCnrkh1yYGGIKXbAuYV2tOG10fGDB9OQ==", + "dev": true, + "dependencies": { + "@vue/devtools-kit": "^7.7.2", + "@vue/devtools-shared": "^7.7.2", + "mitt": "^3.0.1", + "nanoid": "^5.0.9", + "pathe": "^2.0.2", + "vite-hot-client": "^0.2.4" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@vue/devtools-core/node_modules/nanoid": { + "version": "5.1.5", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-5.1.5.tgz", + "integrity": "sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^18 || >=20" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.7.2", + "resolved": "https://registry.npmmirror.com/@vue/devtools-kit/-/devtools-kit-7.7.2.tgz", + "integrity": "sha512-CY0I1JH3Z8PECbn6k3TqM1Bk9ASWxeMtTCvZr7vb+CHi+X/QwQm5F1/fPagraamKMAHVfuuCbdcnNg1A4CYVWQ==", + "dev": true, + "dependencies": { + "@vue/devtools-shared": "^7.7.2", + "birpc": "^0.2.19", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.1" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.7.2", + "resolved": "https://registry.npmmirror.com/@vue/devtools-shared/-/devtools-shared-7.7.2.tgz", + "integrity": "sha512-uBFxnp8gwW2vD6FrJB8JZLUzVb6PNRG0B0jBnHsOH8uKyva2qINY8PTF5Te4QlTbMDqU5K6qtJDr6cNsKWhbOA==", + "dev": true, + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.13", + "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.13.tgz", + "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==", + "dependencies": { + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.13", + "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.13.tgz", + "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==", + "dependencies": { + "@vue/reactivity": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.13", + "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz", + "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==", + "dependencies": { + "@vue/reactivity": "3.5.13", + "@vue/runtime-core": "3.5.13", + "@vue/shared": "3.5.13", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.13", + "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.13.tgz", + "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==", + "dependencies": { + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13" + }, + "peerDependencies": { + "vue": "3.5.13" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.13", + "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.13.tgz", + "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==" + }, + "node_modules/@vueuse/core": { + "version": "13.1.0", + "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-13.1.0.tgz", + "integrity": "sha512-PAauvdRXZvTWXtGLg8cPUFjiZEddTqmogdwYpnn60t08AA5a8Q4hZokBnpTOnVNqySlFlTcRYIC8OqreV4hv3Q==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "13.1.0", + "@vueuse/shared": "13.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@vueuse/metadata": { + "version": "13.1.0", + "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-13.1.0.tgz", + "integrity": "sha512-+TDd7/a78jale5YbHX9KHW3cEDav1lz1JptwDvep2zSG8XjCsVE+9mHIzjTOaPbHUAk5XiE4jXLz51/tS+aKQw==", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "13.1.0", + "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-13.1.0.tgz", + "integrity": "sha512-IVS/qRRjhPTZ6C2/AM3jieqXACGwFZwWTdw5sNTSKk2m/ZpkuuN+ri+WCVUP8TqaKwJYt/KuMwmXspMAw8E6ew==", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/adler-32": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/adler-32/-/adler-32-1.3.1.tgz", + "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmmirror.com/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "license": "MIT", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/async-validator": { + "version": "4.2.5", + "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz", + "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/axios": { + "version": "1.8.4", + "resolved": "https://registry.npmmirror.com/axios/-/axios-1.8.4.tgz", + "integrity": "sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/birpc": { + "version": "0.2.19", + "resolved": "https://registry.npmmirror.com/birpc/-/birpc-0.2.19.tgz", + "integrity": "sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.24.4", + "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/buildcheck": { + "version": "0.0.6", + "resolved": "https://registry.npmmirror.com/buildcheck/-/buildcheck-0.0.6.tgz", + "integrity": "sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==", + "optional": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001713", + "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001713.tgz", + "integrity": "sha512-wCIWIg+A4Xr7NfhTuHdX+/FKh3+Op3LBbSp2N5Pfx6T/LhdQy3GTyoTg48BReaW/MyMNZAkTadsBtai3ldWK0Q==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/cfb": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/cfb/-/cfb-1.2.2.tgz", + "integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==", + "dependencies": { + "adler-32": "~1.3.0", + "crc-32": "~1.2.0" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/china-division": { + "version": "2.7.0", + "resolved": "https://registry.npmmirror.com/china-division/-/china-division-2.7.0.tgz", + "integrity": "sha512-4uUPAT+1WfqDh5jytq7omdCmHNk3j+k76zEG/2IqaGcYB90c2SwcixttcypdsZ3T/9tN1TTpBDoeZn+Yw/qBEA==", + "license": "MIT" + }, + "node_modules/china-location": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/china-location/-/china-location-2.1.0.tgz", + "integrity": "sha512-ZUvn1LnoNcTIbCrhM+xHYurb+F2xP7+g0WE87Ksw5IOmycy9uUq2O+fe8mD0m5vliSOhyiGIZOdQDTCxyFaBjw==", + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/codepage": { + "version": "1.15.0", + "resolved": "https://registry.npmmirror.com/codepage/-/codepage-1.15.0.tgz", + "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "engines": [ + "node >= 6.0" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/confbox": { + "version": "0.2.2", + "resolved": "https://registry.npmmirror.com/confbox/-/confbox-0.2.2.tgz", + "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmmirror.com/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "dev": true, + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/core-js": { + "version": "3.41.0", + "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.41.0.tgz", + "integrity": "sha512-SJ4/EHwS36QMJd6h/Rg+GyR4A5xE0FSI3eZ+iBVpfqf1x0eTSg1smWLHrA+2jQThZSh97fmSgFSU8B61nxosxA==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/cpu-features": { + "version": "0.0.10", + "resolved": "https://registry.npmmirror.com/cpu-features/-/cpu-features-0.0.10.tgz", + "integrity": "sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "buildcheck": "~0.0.6", + "nan": "^2.19.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "node_modules/dayjs": { + "version": "1.11.13", + "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "dev": true, + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.137", + "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.137.tgz", + "integrity": "sha512-/QSJaU2JyIuTbbABAo/crOs+SuAZLS+fVVS10PVrIT9hrRkmZl8Hb0xPSkKRUUWHQtYzXHpQUW3Dy5hwMzGZkA==", + "dev": true + }, + "node_modules/element-china-area-data": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/element-china-area-data/-/element-china-area-data-6.1.0.tgz", + "integrity": "sha512-IkpcjwQv2A/2AxFiSoaISZ+oMw1rZCPUSOg5sOCwT5jKc96TaawmKZeY81xfxXsO0QbKxU5LLc6AirhG52hUmg==", + "license": "MIT", + "dependencies": { + "china-division": "^2.7.0" + } + }, + "node_modules/element-plus": { + "version": "2.9.7", + "resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.9.7.tgz", + "integrity": "sha512-6vjZh5SXBncLhUwJGTVKS5oDljfgGMh6J4zVTeAZK3YdMUN76FgpvHkwwFXocpJpMbii6rDYU3sgie64FyPerQ==", + "dependencies": { + "@ctrl/tinycolor": "^3.4.1", + "@element-plus/icons-vue": "^2.3.1", + "@floating-ui/dom": "^1.0.1", + "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7", + "@types/lodash": "^4.14.182", + "@types/lodash-es": "^4.17.6", + "@vueuse/core": "^9.1.0", + "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.2", + "memoize-one": "^6.0.0", + "normalize-wheel-es": "^1.2.0" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/element-plus/node_modules/@types/web-bluetooth": { + "version": "0.0.16", + "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz", + "integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==" + }, + "node_modules/element-plus/node_modules/@vueuse/core": { + "version": "9.13.0", + "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-9.13.0.tgz", + "integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==", + "dependencies": { + "@types/web-bluetooth": "^0.0.16", + "@vueuse/metadata": "9.13.0", + "@vueuse/shared": "9.13.0", + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/element-plus/node_modules/@vueuse/core/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/element-plus/node_modules/@vueuse/metadata": { + "version": "9.13.0", + "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.13.0.tgz", + "integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/element-plus/node_modules/@vueuse/shared": { + "version": "9.13.0", + "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.13.0.tgz", + "integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==", + "dependencies": { + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/element-plus/node_modules/@vueuse/shared/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-stack-parser-es": { + "version": "0.1.5", + "resolved": "https://registry.npmmirror.com/error-stack-parser-es/-/error-stack-parser-es-0.1.5.tgz", + "integrity": "sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.25.2", + "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.25.2.tgz", + "integrity": "sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.2", + "@esbuild/android-arm": "0.25.2", + "@esbuild/android-arm64": "0.25.2", + "@esbuild/android-x64": "0.25.2", + "@esbuild/darwin-arm64": "0.25.2", + "@esbuild/darwin-x64": "0.25.2", + "@esbuild/freebsd-arm64": "0.25.2", + "@esbuild/freebsd-x64": "0.25.2", + "@esbuild/linux-arm": "0.25.2", + "@esbuild/linux-arm64": "0.25.2", + "@esbuild/linux-ia32": "0.25.2", + "@esbuild/linux-loong64": "0.25.2", + "@esbuild/linux-mips64el": "0.25.2", + "@esbuild/linux-ppc64": "0.25.2", + "@esbuild/linux-riscv64": "0.25.2", + "@esbuild/linux-s390x": "0.25.2", + "@esbuild/linux-x64": "0.25.2", + "@esbuild/netbsd-arm64": "0.25.2", + "@esbuild/netbsd-x64": "0.25.2", + "@esbuild/openbsd-arm64": "0.25.2", + "@esbuild/openbsd-x64": "0.25.2", + "@esbuild/sunos-x64": "0.25.2", + "@esbuild/win32-arm64": "0.25.2", + "@esbuild/win32-ia32": "0.25.2", + "@esbuild/win32-x64": "0.25.2" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.24.0", + "resolved": "https://registry.npmmirror.com/eslint/-/eslint-9.24.0.tgz", + "integrity": "sha512-eh/jxIEJyZrvbWRe4XuVclLPDYSYYYgLy5zXGGxD6j8zjSAxFEzI2fL/8xNq6O2yKqVt+eF2YhV+hxjV6UKXwQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.20.0", + "@eslint/config-helpers": "^0.2.0", + "@eslint/core": "^0.12.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.24.0", + "@eslint/plugin-kit": "^0.2.7", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.3.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-vue": { + "version": "10.0.0", + "resolved": "https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-10.0.0.tgz", + "integrity": "sha512-XKckedtajqwmaX6u1VnECmZ6xJt+YvlmMzBPZd+/sI3ub2lpYZyFnsyWo7c3nMOQKJQudeyk1lw/JxdgeKT64w==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.1.1", + "postcss-selector-parser": "^6.0.15", + "semver": "^7.6.3", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "vue-eslint-parser": "^10.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "8.3.0", + "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-8.3.0.tgz", + "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmmirror.com/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "dev": true, + "dependencies": { + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa": { + "version": "9.5.2", + "resolved": "https://registry.npmmirror.com/execa/-/execa-9.5.2.tgz", + "integrity": "sha512-EHlpxMCpHWSAh1dgS6bVeoLAXGnJNdR93aabr4QCGbzOM73o5XmRfM/e5FUqsw3aagP8S8XEWUWFAxnRBnAF0Q==", + "dev": true, + "dependencies": { + "@sindresorhus/merge-streams": "^4.0.0", + "cross-spawn": "^7.0.3", + "figures": "^6.1.0", + "get-stream": "^9.0.0", + "human-signals": "^8.0.0", + "is-plain-obj": "^4.1.0", + "is-stream": "^4.0.1", + "npm-run-path": "^6.0.0", + "pretty-ms": "^9.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^4.0.0", + "yoctocolors": "^2.0.0" + }, + "engines": { + "node": "^18.19.0 || >=20.5.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exsolve": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/exsolve/-/exsolve-1.0.4.tgz", + "integrity": "sha512-xsZH6PXaER4XoV+NiT7JHp1bJodJVT+cxeSH1G0f0tlT0lJqYuHUP3bUx2HtfTDvOagMINYp8rsqusxud3RXhw==", + "dev": true + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fdir": { + "version": "6.4.3", + "resolved": "https://registry.npmmirror.com/fdir/-/fdir-6.4.3.tgz", + "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==", + "dev": true, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/figures": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/figures/-/figures-6.1.0.tgz", + "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", + "dev": true, + "dependencies": { + "is-unicode-supported": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmmirror.com/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.2.tgz", + "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/frac": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/frac/-/frac-1.1.2.tgz", + "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/fs-extra": { + "version": "11.3.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-11.3.0.tgz", + "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", + "dev": true, + "dependencies": { + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "16.0.0", + "resolved": "https://registry.npmmirror.com/globals/-/globals-16.0.0.tgz", + "integrity": "sha512-iInW14XItCXET01CQFqudPOWP2jYMl7T+QRQT+UNcR/iQncN/F0UNpgd76iFkBPgNQb4+X3LV9tLJYzwh+Gl3A==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmmirror.com/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "dev": true + }, + "node_modules/human-signals": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-8.0.1.tgz", + "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==", + "dev": true, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmmirror.com/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "dev": true, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dev": true, + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/jquery": { + "version": "3.7.1", + "resolved": "https://registry.npmmirror.com/jquery/-/jquery-3.7.1.tgz", + "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==", + "license": "MIT" + }, + "node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmmirror.com/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kolorist": { + "version": "1.8.0", + "resolved": "https://registry.npmmirror.com/kolorist/-/kolorist-1.8.0.tgz", + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", + "dev": true + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/local-pkg": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/local-pkg/-/local-pkg-1.1.1.tgz", + "integrity": "sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==", + "dev": true, + "dependencies": { + "mlly": "^1.7.4", + "pkg-types": "^2.0.1", + "quansync": "^0.2.8" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "node_modules/lodash-unified": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.3.tgz", + "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==", + "peerDependencies": { + "@types/lodash-es": "*", + "lodash": "*", + "lodash-es": "*" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "dev": true + }, + "node_modules/mlly": { + "version": "1.7.4", + "resolved": "https://registry.npmmirror.com/mlly/-/mlly-1.7.4.tgz", + "integrity": "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==", + "dev": true, + "dependencies": { + "acorn": "^8.14.0", + "pathe": "^2.0.1", + "pkg-types": "^1.3.0", + "ufo": "^1.5.4" + } + }, + "node_modules/mlly/node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmmirror.com/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "dev": true + }, + "node_modules/mlly/node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "dev": true, + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/nan": { + "version": "2.22.2", + "resolved": "https://registry.npmmirror.com/nan/-/nan-2.22.2.tgz", + "integrity": "sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ==", + "license": "MIT", + "optional": true + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-wheel-es": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz", + "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==" + }, + "node_modules/npm-run-path": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-6.0.0.tgz", + "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/open": { + "version": "10.1.0", + "resolved": "https://registry.npmmirror.com/open/-/open-10.1.0.tgz", + "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", + "dev": true, + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmmirror.com/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-ms": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + }, + "node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-types": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/pkg-types/-/pkg-types-2.1.0.tgz", + "integrity": "sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==", + "dev": true, + "dependencies": { + "confbox": "^0.2.1", + "exsolve": "^1.0.1", + "pathe": "^2.0.3" + } + }, + "node_modules/postcss": { + "version": "8.5.3", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmmirror.com/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "optional": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-ms": { + "version": "9.2.0", + "resolved": "https://registry.npmmirror.com/pretty-ms/-/pretty-ms-9.2.0.tgz", + "integrity": "sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==", + "dev": true, + "dependencies": { + "parse-ms": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmmirror.com/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/quansync": { + "version": "0.2.10", + "resolved": "https://registry.npmmirror.com/quansync/-/quansync-0.2.10.tgz", + "integrity": "sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ] + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true + }, + "node_modules/rollup": { + "version": "4.40.0", + "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.40.0.tgz", + "integrity": "sha512-Noe455xmA96nnqH5piFtLobsGbCij7Tu+tb3c1vYjNbTkfzGqXqQXG3wJaYXkRZuQ0vEYN4bhwg7QnIrqB5B+w==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.7" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.40.0", + "@rollup/rollup-android-arm64": "4.40.0", + "@rollup/rollup-darwin-arm64": "4.40.0", + "@rollup/rollup-darwin-x64": "4.40.0", + "@rollup/rollup-freebsd-arm64": "4.40.0", + "@rollup/rollup-freebsd-x64": "4.40.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.40.0", + "@rollup/rollup-linux-arm-musleabihf": "4.40.0", + "@rollup/rollup-linux-arm64-gnu": "4.40.0", + "@rollup/rollup-linux-arm64-musl": "4.40.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.40.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.40.0", + "@rollup/rollup-linux-riscv64-gnu": "4.40.0", + "@rollup/rollup-linux-riscv64-musl": "4.40.0", + "@rollup/rollup-linux-s390x-gnu": "4.40.0", + "@rollup/rollup-linux-x64-gnu": "4.40.0", + "@rollup/rollup-linux-x64-musl": "4.40.0", + "@rollup/rollup-win32-arm64-msvc": "4.40.0", + "@rollup/rollup-win32-ia32-msvc": "4.40.0", + "@rollup/rollup-win32-x64-msvc": "4.40.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/scule": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/scule/-/scule-1.3.0.tgz", + "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==", + "dev": true + }, + "node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sirv": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/sirv/-/sirv-3.0.1.tgz", + "integrity": "sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==", + "dev": true, + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmmirror.com/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ssf": { + "version": "0.11.2", + "resolved": "https://registry.npmmirror.com/ssf/-/ssf-0.11.2.tgz", + "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==", + "dependencies": { + "frac": "~1.1.2" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/ssh2": { + "version": "1.16.0", + "resolved": "https://registry.npmmirror.com/ssh2/-/ssh2-1.16.0.tgz", + "integrity": "sha512-r1X4KsBGedJqo7h8F5c4Ybpcr5RjyP+aWIG007uBPRjmdQWfEiVLzSK71Zji1B9sKxwaCvD8y8cwSkYrlLiRRg==", + "hasInstallScript": true, + "dependencies": { + "asn1": "^0.2.6", + "bcrypt-pbkdf": "^1.0.2" + }, + "engines": { + "node": ">=10.16.0" + }, + "optionalDependencies": { + "cpu-features": "~0.0.10", + "nan": "^2.20.0" + } + }, + "node_modules/ssh2-sftp-client": { + "version": "12.0.0", + "resolved": "https://registry.npmmirror.com/ssh2-sftp-client/-/ssh2-sftp-client-12.0.0.tgz", + "integrity": "sha512-k+ocDsx6N2eDwQlIRwJFa0I1bkQpFPhIc+cv1iplaQaIPXFt9YM1ZnXCJOW4OILS5dzE+12OlhYIF5g0AzgVfg==", + "license": "Apache-2.0", + "dependencies": { + "concat-stream": "^2.0.0", + "ssh2": "^1.16.0" + }, + "engines": { + "node": ">=18.20.4" + }, + "funding": { + "type": "individual", + "url": "https://square.link/u/4g7sPflL" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/strip-final-newline": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-4.0.0.tgz", + "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-literal": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/strip-literal/-/strip-literal-3.0.0.tgz", + "integrity": "sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==", + "dev": true, + "dependencies": { + "js-tokens": "^9.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/superjson": { + "version": "2.2.2", + "resolved": "https://registry.npmmirror.com/superjson/-/superjson-2.2.2.tgz", + "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==", + "dev": true, + "dependencies": { + "copy-anything": "^3.0.2" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.12", + "resolved": "https://registry.npmmirror.com/tinyglobby/-/tinyglobby-0.2.12.tgz", + "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==", + "dev": true, + "dependencies": { + "fdir": "^6.4.3", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmmirror.com/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "license": "Unlicense" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmmirror.com/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "license": "MIT" + }, + "node_modules/ufo": { + "version": "1.6.1", + "resolved": "https://registry.npmmirror.com/ufo/-/ufo-1.6.1.tgz", + "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", + "dev": true + }, + "node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unimport": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/unimport/-/unimport-4.2.0.tgz", + "integrity": "sha512-mYVtA0nmzrysnYnyb3ALMbByJ+Maosee2+WyE0puXl+Xm2bUwPorPaaeZt0ETfuroPOtG8jj1g/qeFZ6buFnag==", + "dev": true, + "dependencies": { + "acorn": "^8.14.1", + "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.2", + "pkg-types": "^2.1.0", + "scule": "^1.3.0", + "strip-literal": "^3.0.0", + "tinyglobby": "^0.2.12", + "unplugin": "^2.2.2", + "unplugin-utils": "^0.2.4" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/unimport/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unplugin": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/unplugin/-/unplugin-2.3.2.tgz", + "integrity": "sha512-3n7YA46rROb3zSj8fFxtxC/PqoyvYQ0llwz9wtUPUutr9ig09C8gGo5CWCwHrUzlqC1LLR43kxp5vEIyH1ac1w==", + "dev": true, + "dependencies": { + "acorn": "^8.14.1", + "picomatch": "^4.0.2", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/unplugin-auto-import": { + "version": "19.1.2", + "resolved": "https://registry.npmmirror.com/unplugin-auto-import/-/unplugin-auto-import-19.1.2.tgz", + "integrity": "sha512-EkxNIJm4ZPYtV7rRaPBKnsscgTaifIZNrJF5DkMffTxkUOJOlJuKVypA6YBSBOjzPJDTFPjfVmCQPoBuOO+YYQ==", + "dev": true, + "dependencies": { + "local-pkg": "^1.1.1", + "magic-string": "^0.30.17", + "picomatch": "^4.0.2", + "unimport": "^4.1.2", + "unplugin": "^2.2.2", + "unplugin-utils": "^0.2.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@nuxt/kit": "^3.2.2", + "@vueuse/core": "*" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + }, + "@vueuse/core": { + "optional": true + } + } + }, + "node_modules/unplugin-utils": { + "version": "0.2.4", + "resolved": "https://registry.npmmirror.com/unplugin-utils/-/unplugin-utils-0.2.4.tgz", + "integrity": "sha512-8U/MtpkPkkk3Atewj1+RcKIjb5WBimZ/WSLhhR3w6SsIj8XJuKTacSP8g+2JhfSGw0Cb125Y+2zA/IzJZDVbhA==", + "dev": true, + "dependencies": { + "pathe": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=18.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/unplugin-vue-components": { + "version": "28.5.0", + "resolved": "https://registry.npmmirror.com/unplugin-vue-components/-/unplugin-vue-components-28.5.0.tgz", + "integrity": "sha512-o7fMKU/uI8NiP+E0W62zoduuguWqB0obTfHFtbr1AP2uo2lhUPnPttWUE92yesdiYfo9/0hxIrj38FMc1eaySg==", + "dev": true, + "dependencies": { + "chokidar": "^3.6.0", + "debug": "^4.4.0", + "local-pkg": "^1.1.1", + "magic-string": "^0.30.17", + "mlly": "^1.7.4", + "tinyglobby": "^0.2.12", + "unplugin": "^2.3.2", + "unplugin-utils": "^0.2.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@babel/parser": "^7.15.8", + "@nuxt/kit": "^3.2.2", + "vue": "2 || 3" + }, + "peerDependenciesMeta": { + "@babel/parser": { + "optional": true + }, + "@nuxt/kit": { + "optional": true + } + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/vite": { + "version": "6.2.6", + "resolved": "https://registry.npmmirror.com/vite/-/vite-6.2.6.tgz", + "integrity": "sha512-9xpjNl3kR4rVDZgPNdTL0/c6ao4km69a/2ihNQbcANz8RuCOK3hQBmLSJf3bRKVQjVMda+YvizNE8AwvogcPbw==", + "dev": true, + "dependencies": { + "esbuild": "^0.25.0", + "postcss": "^8.5.3", + "rollup": "^4.30.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-hot-client": { + "version": "0.2.4", + "resolved": "https://registry.npmmirror.com/vite-hot-client/-/vite-hot-client-0.2.4.tgz", + "integrity": "sha512-a1nzURqO7DDmnXqabFOliz908FRmIppkBKsJthS8rbe8hBEXwEwe4C3Pp33Z1JoFCYfVL4kTOMLKk0ZZxREIeA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0" + } + }, + "node_modules/vite-plugin-inspect": { + "version": "0.8.9", + "resolved": "https://registry.npmmirror.com/vite-plugin-inspect/-/vite-plugin-inspect-0.8.9.tgz", + "integrity": "sha512-22/8qn+LYonzibb1VeFZmISdVao5kC22jmEKm24vfFE8siEn47EpVcCLYMv6iKOYMJfjSvSJfueOwcFCkUnV3A==", + "dev": true, + "dependencies": { + "@antfu/utils": "^0.7.10", + "@rollup/pluginutils": "^5.1.3", + "debug": "^4.3.7", + "error-stack-parser-es": "^0.1.5", + "fs-extra": "^11.2.0", + "open": "^10.1.0", + "perfect-debounce": "^1.0.0", + "picocolors": "^1.1.1", + "sirv": "^3.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.1" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + } + } + }, + "node_modules/vite-plugin-vue-devtools": { + "version": "7.7.2", + "resolved": "https://registry.npmmirror.com/vite-plugin-vue-devtools/-/vite-plugin-vue-devtools-7.7.2.tgz", + "integrity": "sha512-5V0UijQWiSBj32blkyPEqIbzc6HO9c1bwnBhx+ay2dzU0FakH+qMdNUT8nF9BvDE+i6I1U8CqCuJiO20vKEdQw==", + "dev": true, + "dependencies": { + "@vue/devtools-core": "^7.7.2", + "@vue/devtools-kit": "^7.7.2", + "@vue/devtools-shared": "^7.7.2", + "execa": "^9.5.1", + "sirv": "^3.0.0", + "vite-plugin-inspect": "0.8.9", + "vite-plugin-vue-inspector": "^5.3.1" + }, + "engines": { + "node": ">=v14.21.3" + }, + "peerDependencies": { + "vite": "^3.1.0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0" + } + }, + "node_modules/vite-plugin-vue-inspector": { + "version": "5.3.1", + "resolved": "https://registry.npmmirror.com/vite-plugin-vue-inspector/-/vite-plugin-vue-inspector-5.3.1.tgz", + "integrity": "sha512-cBk172kZKTdvGpJuzCCLg8lJ909wopwsu3Ve9FsL1XsnLBiRT9U3MePcqrgGHgCX2ZgkqZmAGR8taxw+TV6s7A==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.0", + "@babel/plugin-proposal-decorators": "^7.23.0", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-transform-typescript": "^7.22.15", + "@vue/babel-plugin-jsx": "^1.1.5", + "@vue/compiler-dom": "^3.3.4", + "kolorist": "^1.8.0", + "magic-string": "^0.30.4" + }, + "peerDependencies": { + "vite": "^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0" + } + }, + "node_modules/vue": { + "version": "3.5.13", + "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.13.tgz", + "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==", + "dependencies": { + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-sfc": "3.5.13", + "@vue/runtime-dom": "3.5.13", + "@vue/server-renderer": "3.5.13", + "@vue/shared": "3.5.13" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-eslint-parser": { + "version": "10.1.3", + "resolved": "https://registry.npmmirror.com/vue-eslint-parser/-/vue-eslint-parser-10.1.3.tgz", + "integrity": "sha512-dbCBnd2e02dYWsXoqX5yKUZlOt+ExIpq7hmHKPb5ZqKcjf++Eo0hMseFTZMLKThrUk61m+Uv6A2YSBve6ZvuDQ==", + "dev": true, + "peer": true, + "dependencies": { + "debug": "^4.4.0", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.6.0", + "lodash": "^4.17.21", + "semver": "^7.6.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + } + }, + "node_modules/vue-i18n": { + "version": "11.1.3", + "resolved": "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-11.1.3.tgz", + "integrity": "sha512-Pcylh9z9S5+CJAqgbRZ3EKxFIBIrtY5YUppU722GIT65+Nukm0TCqiQegZnNLCZkXGthxe0cpqj0AoM51H+6Gw==", + "license": "MIT", + "dependencies": { + "@intlify/core-base": "11.1.3", + "@intlify/shared": "11.1.3", + "@vue/devtools-api": "^6.5.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/vue-property-decorator": { + "version": "8.5.1", + "resolved": "https://registry.npmmirror.com/vue-property-decorator/-/vue-property-decorator-8.5.1.tgz", + "integrity": "sha512-O6OUN2OMsYTGPvgFtXeBU3jPnX5ffQ9V4I1WfxFQ6dqz6cOUbR3Usou7kgFpfiXDvV7dJQSFcJ5yUPgOtPPm1Q==", + "dependencies": { + "vue-class-component": "^7.1.0" + }, + "peerDependencies": { + "vue": "*" + } + }, + "node_modules/vue-property-decorator/node_modules/vue-class-component": { + "version": "7.2.6", + "resolved": "https://registry.npmmirror.com/vue-class-component/-/vue-class-component-7.2.6.tgz", + "integrity": "sha512-+eaQXVrAm/LldalI272PpDe3+i4mPis0ORiMYxF6Ae4hyuCh15W8Idet7wPUEs4N4YptgFHGys4UrgNQOMyO6w==", + "peerDependencies": { + "vue": "^2.0.0" + } + }, + "node_modules/vue-router": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.5.0.tgz", + "integrity": "sha512-HDuk+PuH5monfNuY+ct49mNmkCRK4xJAV9Ts4z9UFc4rzdDnxQLyCMGGc8pKhZhHTVzfanpNwB/lwqevcBwI4w==", + "dependencies": { + "@vue/devtools-api": "^6.6.4" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/vue-simple-verify": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/vue-simple-verify/-/vue-simple-verify-1.1.0.tgz", + "integrity": "sha512-Ujz61Z5r1FG4/Qc0/GzblOW6G7PqZBk1u5Ah2Vq6Z1xaSOcUXJjuVBppWaVs0dS6AEdwHzxGZtA3QAOgE3vJLw==", + "dependencies": { + "core-js": "^3.5.0", + "vue": "^2.6.10", + "vue-class-component": "^7.1.0", + "vue-property-decorator": "^8.3.0", + "vue-router": "^3.1.3", + "vue-simple-verify": "^1.0.5", + "vuex": "3.1.0" + } + }, + "node_modules/vue-simple-verify/node_modules/@vue/compiler-sfc": { + "version": "2.7.16", + "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-2.7.16.tgz", + "integrity": "sha512-KWhJ9k5nXuNtygPU7+t1rX6baZeqOYLEforUPjgNDBnLicfHCoi48H87Q8XyLZOrNNsmhuwKqtpDQWjEFe6Ekg==", + "dependencies": { + "@babel/parser": "^7.23.5", + "postcss": "^8.4.14", + "source-map": "^0.6.1" + }, + "optionalDependencies": { + "prettier": "^1.18.2 || ^2.0.0" + } + }, + "node_modules/vue-simple-verify/node_modules/vue": { + "version": "2.7.16", + "resolved": "https://registry.npmmirror.com/vue/-/vue-2.7.16.tgz", + "integrity": "sha512-4gCtFXaAA3zYZdTp5s4Hl2sozuySsgz4jy1EnpBHNfpMa9dK1ZCG7viqBPCwXtmgc8nHqUsAu3G4gtmXkkY3Sw==", + "deprecated": "Vue 2 has reached EOL and is no longer actively maintained. See https://v2.vuejs.org/eol/ for more details.", + "dependencies": { + "@vue/compiler-sfc": "2.7.16", + "csstype": "^3.1.0" + } + }, + "node_modules/vue-simple-verify/node_modules/vue-class-component": { + "version": "7.2.6", + "resolved": "https://registry.npmmirror.com/vue-class-component/-/vue-class-component-7.2.6.tgz", + "integrity": "sha512-+eaQXVrAm/LldalI272PpDe3+i4mPis0ORiMYxF6Ae4hyuCh15W8Idet7wPUEs4N4YptgFHGys4UrgNQOMyO6w==", + "peerDependencies": { + "vue": "^2.0.0" + } + }, + "node_modules/vue-simple-verify/node_modules/vue-router": { + "version": "3.6.5", + "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-3.6.5.tgz", + "integrity": "sha512-VYXZQLtjuvKxxcshuRAwjHnciqZVoXAjTjcqBTz4rKc8qih9g9pI3hbDjmqXaHdgL3v8pV6P8Z335XvHzESxLQ==" + }, + "node_modules/vue-simple-verify/node_modules/vuex": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/vuex/-/vuex-3.1.0.tgz", + "integrity": "sha512-mdHeHT/7u4BncpUZMlxNaIdcN/HIt1GsGG5LKByArvYG/v6DvHcOxvDCts+7SRdCoIRGllK8IMZvQtQXLppDYg==", + "license": "MIT" + }, + "node_modules/vuex": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/vuex/-/vuex-4.1.0.tgz", + "integrity": "sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.0.0-beta.11" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/webpack-virtual-modules": { + "version": "0.6.2", + "resolved": "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", + "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", + "dev": true + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wmf": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/wmf/-/wmf-1.0.2.tgz", + "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/word": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/word/-/word-0.3.0.tgz", + "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/xlsx": { + "version": "0.18.5", + "resolved": "https://registry.npmmirror.com/xlsx/-/xlsx-0.18.5.tgz", + "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==", + "dependencies": { + "adler-32": "~1.3.0", + "cfb": "~1.2.1", + "codepage": "~1.15.0", + "crc-32": "~1.2.1", + "ssf": "~0.11.2", + "wmf": "~1.0.1", + "word": "~0.3.0" + }, + "bin": { + "xlsx": "bin/xlsx.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/yoctocolors/-/yoctocolors-2.1.1.tgz", + "integrity": "sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/aas_pc_web/package.json b/aas_pc_web/package.json new file mode 100644 index 0000000..6424745 --- /dev/null +++ b/aas_pc_web/package.json @@ -0,0 +1,41 @@ +{ + "name": "aas_pc_web", + "version": "0.0.0", + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview", + "lint": "eslint . --fix" + }, + "dependencies": { + "@element-plus/icons-vue": "^2.3.1", + "@vueuse/core": "^13.1.0", + "axios": "^1.8.3", + "china-location": "^2.1.0", + "dayjs": "^1.11.13", + "element-china-area-data": "^6.1.0", + "element-plus": "^2.9.6", + "jquery": "^3.7.1", + "qs": "^6.14.0", + "ssh2-sftp-client": "^12.0.0", + "vue": "^3.5.13", + "vue-i18n": "^11.1.3", + "vue-router": "^4.5.0", + "vue-simple-verify": "^1.1.0", + "vuex": "^4.1.0", + "xlsx": "^0.18.5" + }, + "devDependencies": { + "@eslint/js": "^9.21.0", + "@vitejs/plugin-vue": "^5.2.1", + "eslint": "^9.21.0", + "eslint-plugin-vue": "~10.0.0", + "globals": "^16.0.0", + "unplugin-auto-import": "^19.1.1", + "unplugin-vue-components": "^28.4.1", + "vite": "^6.2.1", + "vite-plugin-vue-devtools": "^7.7.2" + } +} diff --git a/aas_pc_web/public/config.js b/aas_pc_web/public/config.js new file mode 100644 index 0000000..aebdb50 --- /dev/null +++ b/aas_pc_web/public/config.js @@ -0,0 +1,10 @@ +const config = { + // http访问后端接口 | prod | 生产 + httpApi: "http://project.blv-oa.com:898/api/", + httpAds: "http://project.blv-oa.com:898/", + // http访问后端接口 | dev | 开发环境 +/* httpApi: "http://localhost:46256/api/", + httpAds: "http://localhost:46256/",*/ +} + +export default config diff --git a/aas_pc_web/public/favicon.ico b/aas_pc_web/public/favicon.ico new file mode 100644 index 0000000..c1221a5 Binary files /dev/null and b/aas_pc_web/public/favicon.ico differ diff --git a/aas_pc_web/public/logo.svg b/aas_pc_web/public/logo.svg new file mode 100644 index 0000000..10e69a2 --- /dev/null +++ b/aas_pc_web/public/logo.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + diff --git a/aas_pc_web/public/logobig.svg b/aas_pc_web/public/logobig.svg new file mode 100644 index 0000000..7e2105d --- /dev/null +++ b/aas_pc_web/public/logobig.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/aas_pc_web/src/App.vue b/aas_pc_web/src/App.vue new file mode 100644 index 0000000..2db4439 --- /dev/null +++ b/aas_pc_web/src/App.vue @@ -0,0 +1,711 @@ + + + + + + + + diff --git a/aas_pc_web/src/assets/base.css b/aas_pc_web/src/assets/base.css new file mode 100644 index 0000000..8816868 --- /dev/null +++ b/aas_pc_web/src/assets/base.css @@ -0,0 +1,86 @@ +/* color palette from */ +:root { + --vt-c-white: #ffffff; + --vt-c-white-soft: #f8f8f8; + --vt-c-white-mute: #f2f2f2; + + --vt-c-black: #181818; + --vt-c-black-soft: #222222; + --vt-c-black-mute: #282828; + + --vt-c-indigo: #2c3e50; + + --vt-c-divider-light-1: rgba(60, 60, 60, 0.29); + --vt-c-divider-light-2: rgba(60, 60, 60, 0.12); + --vt-c-divider-dark-1: rgba(84, 84, 84, 0.65); + --vt-c-divider-dark-2: rgba(84, 84, 84, 0.48); + + --vt-c-text-light-1: var(--vt-c-indigo); + --vt-c-text-light-2: rgba(60, 60, 60, 0.66); + --vt-c-text-dark-1: var(--vt-c-white); + --vt-c-text-dark-2: rgba(235, 235, 235, 0.64); +} + +/* semantic color variables for this project */ +:root { + --color-background: var(--vt-c-white); + --color-background-soft: var(--vt-c-white-soft); + --color-background-mute: var(--vt-c-white-mute); + + --color-border: var(--vt-c-divider-light-2); + --color-border-hover: var(--vt-c-divider-light-1); + + --color-heading: var(--vt-c-text-light-1); + --color-text: var(--vt-c-text-light-1); + + --section-gap: 160px; +} + +@media (prefers-color-scheme: dark) { + :root { + --color-background: var(--vt-c-black); + --color-background-soft: var(--vt-c-black-soft); + --color-background-mute: var(--vt-c-black-mute); + + --color-border: var(--vt-c-divider-dark-2); + --color-border-hover: var(--vt-c-divider-dark-1); + + --color-heading: var(--vt-c-text-dark-1); + --color-text: var(--vt-c-text-dark-2); + } +} + +*, +*::before, +*::after { + box-sizing: border-box; + margin: 0; + font-weight: normal; +} + +body { + min-height: 100vh; + color: var(--color-text); + background: var(--color-background); + transition: + color 0.5s, + background-color 0.5s; + line-height: 1.6; + font-family: + Inter, + -apple-system, + BlinkMacSystemFont, + 'Segoe UI', + Roboto, + Oxygen, + Ubuntu, + Cantarell, + 'Fira Sans', + 'Droid Sans', + 'Helvetica Neue', + sans-serif; + font-size: 15px; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} diff --git a/aas_pc_web/src/assets/main.css b/aas_pc_web/src/assets/main.css new file mode 100644 index 0000000..4c60921 --- /dev/null +++ b/aas_pc_web/src/assets/main.css @@ -0,0 +1,37 @@ +@import './base.css'; + +#app { + /*max-width: 1440px;*/ + margin: 0 auto; + width: 100%; + height: 100%; + padding: 0px; + font-weight: normal; +} + +a, +.green { + text-decoration: none; + color: hsla(160, 100%, 37%, 1); + transition: 0.4s; + padding: 3px; +} + +@media (hover: hover) { + a:hover { + background-color: hsla(160, 100%, 37%, 0.2); + } +} + +@media (min-width: 1024px) { + body { + display: flex; + place-items: center; + } + + #app { + display: grid; + /*grid-template-columns: 1fr 1fr;*/ + padding: 0 ; + } +} diff --git a/aas_pc_web/src/axios.js b/aas_pc_web/src/axios.js new file mode 100644 index 0000000..c30419d --- /dev/null +++ b/aas_pc_web/src/axios.js @@ -0,0 +1,120 @@ +import axios from 'axios'; +import config from '../public/config.js'; +import { ElMessage } from 'element-plus' + +const instance = axios.create({ + baseURL: config.httpApi, // 设置基础URL + timeout: 60000 +}); + +// 添加请求拦截器 +instance.interceptors.request.use(config => { + // 设置默认的 Content-Type + if (config.headers['Content-Type'] == undefined) { + config.headers['Content-Type'] = 'application/json'; + } + + // 如果发送的数据是对象,则使用JSON库进行序列化 + if (config.data && typeof config.data === 'object') { + config.data = JSON.stringify(config.data); + } + + // 从本地存储获取token + //const token = localStorage.getItem('token'); + const url = window.location.href; + // 找到最后一个 '/' 的位置 + const lastSlashIndex = url.lastIndexOf('/'); + // 获取最后一个 '/' 后面的内容 + const lastSegment = url.substring(lastSlashIndex); + // 如果是登录接口,则不添加token + if (config.url !== 'Login/Login') { + const token = localStorage.getItem('token'); + if (token) { + config.headers['Authorization'] = `Bearer ${token}`; + } else if (lastSegment != '/login') { + handleTokenExpiration() + } + } + + + return config; +}, error => { + // 请求错误处理 + return Promise.reject(error); +}); + +// 添加响应拦截器 +instance.interceptors.response.use(response => { + // 对响应数据处理 + if (response.config.url !== 'Login/Login' && response.status === 200) { + refreshToken(); + } + return response; +}, error => { + // 对响应错误处理 + // 可以在这里添加例如token过期后的处理逻辑 + console.log(error) + if (error.response && error.response.status == 401) { + // token过期,跳转到登录页面 + handleTokenExpiration() + } + return Promise.reject(error); +}); + +export default instance; + + +// Token刷新方法 +async function refreshToken() { + try { + // 检查上次自动登录时间(新增) + const lastAutoLoginTime = localStorage.getItem('lastAutoLoginTime'); + const currentTime = new Date().getTime(); + + // 如果15分钟内已自动登录过,则跳过(新增) + if (lastAutoLoginTime && currentTime - lastAutoLoginTime < 15 * 60 * 1000) { + return; + } + + const username = localStorage.getItem('rememberedUsername') + const password = localStorage.getItem('rememberedPassword') + + if (!username || !password) { + throw new Error('登录过期 请重新登录') + } + + const formdata = { + username: username, + password: password + } + // 更新自动登录时间(新增) + localStorage.setItem('lastAutoLoginTime', currentTime.toString()); + + instance.post('Login/Login', formdata) + .then(response => { + if (response.data.isok) { + localStorage.setItem('token', response.data.response.accessToken); + //console.log('自动登录成功') + } else { + throw new Error('token更新失败'); + } + }) + .catch(error => { + console.error(error); + // 登录失败时清除时间记录(新增) + localStorage.removeItem('lastAutoLoginTime'); + }) + + } catch (error) { + return Promise.reject(error) + } +} + +// Token过期处理 +function handleTokenExpiration() { + ElMessage.error('token失效 请重新登录') + setTimeout(() => { + localStorage.removeItem('token') + window.location.href = '/login' + }, 233); +} diff --git a/aas_pc_web/src/axiosfile.js b/aas_pc_web/src/axiosfile.js new file mode 100644 index 0000000..ef7d34e --- /dev/null +++ b/aas_pc_web/src/axiosfile.js @@ -0,0 +1,44 @@ +import $ from 'jquery'; +import config from '../public/config.js'; + +// 定义初始化函数 +const initFileUpload = ($) => { + // 直接上传FormData方法 + $.uploadFile = function (formData) { + console.log(formData) + return $.ajax({ + url: config.httpApi + "FileUpload/UploadFileFace", + method: "POST", + timeout: 0, + headers: { + "Cookie": "isCN=zh-cn" + }, + processData: false, + contentType: false, + data: formData + }); + }; + + // 表单插件方法 + $.fn.uploadFile = function (options) { + const $form = this; + console.log(options) + return new Promise((resolve, reject) => { + $form.ajaxSubmit({ + url: config.httpApi + "FileUpload/UploadFileFace", + type: "POST", + headers: { + "Cookie": "isCN=zh-cn" + }, + processData: false, + contentType: false, + ...options, + success: resolve, + error: reject + }); + }); + }; +}; + +// 导出初始化函数 +export default initFileUpload; diff --git a/aas_pc_web/src/components/i18n.js b/aas_pc_web/src/components/i18n.js new file mode 100644 index 0000000..9974c50 --- /dev/null +++ b/aas_pc_web/src/components/i18n.js @@ -0,0 +1,26 @@ +import { createI18n } from 'vue-i18n'; +import zhCn from 'element-plus/es/locale/lang/zh-cn'; +import en from 'element-plus/es/locale/lang/en'; + +const messages = { + en: { + message: { + hello: 'hello world' + }, + el: en // Element Plus的英文翻译 + }, + zh: { + message: { + hello: '你好,世界' + }, + el: zhCn // Element Plus的中文翻译 + } +}; + +const i18n = createI18n({ + locale: 'zh', // 设置默认语言 + fallbackLocale: 'en', // 设置备用语言 + messages, // 设置翻译信息 +}); + +export default i18n; diff --git a/aas_pc_web/src/main.js b/aas_pc_web/src/main.js new file mode 100644 index 0000000..0626fcf --- /dev/null +++ b/aas_pc_web/src/main.js @@ -0,0 +1,31 @@ +import { createApp } from 'vue' +import App from './App.vue' +import router from './router' +import config from '../public/config.js'; +import axios from './axios' // 导入配置好的实例 +import axiosfile from './axiosfile' // 导入配置好的实例 +import i18n from './components/i18n.js' // 导入i18n +import './assets/main.css' +import ElementPlus from 'element-plus' +import zhCn from 'element-plus/dist/locale/zh-cn.mjs' +import 'element-plus/dist/index.css' +import 'element-plus/theme-chalk/dark/css-vars.css' +import * as ElementPlusIconsVue from '@element-plus/icons-vue' + + +const app = createApp(App) +for (const [key, component] of Object.entries(ElementPlusIconsVue)) { + app.component(key, component) +} +// axios挂载到全局属性 +app.config.globalProperties.$http = axios + +// 提供依赖注入 +app.provide('config', config) +app.provide('$http', axios) +app.provide('$httpfile', axiosfile) + +app.use(router) +app.use(ElementPlus, { locale: zhCn }) +app.use(i18n) +app.mount('#app') diff --git a/aas_pc_web/src/pages/404/index.vue b/aas_pc_web/src/pages/404/index.vue new file mode 100644 index 0000000..1918da5 --- /dev/null +++ b/aas_pc_web/src/pages/404/index.vue @@ -0,0 +1,110 @@ + + + diff --git a/aas_pc_web/src/pages/commanage/index.vue b/aas_pc_web/src/pages/commanage/index.vue new file mode 100644 index 0000000..407a10b --- /dev/null +++ b/aas_pc_web/src/pages/commanage/index.vue @@ -0,0 +1,561 @@ + + + + + diff --git a/aas_pc_web/src/pages/dicmanage/index.vue b/aas_pc_web/src/pages/dicmanage/index.vue new file mode 100644 index 0000000..1988628 --- /dev/null +++ b/aas_pc_web/src/pages/dicmanage/index.vue @@ -0,0 +1,498 @@ + + + + + + diff --git a/aas_pc_web/src/pages/home/index.vue b/aas_pc_web/src/pages/home/index.vue new file mode 100644 index 0000000..0b77f17 --- /dev/null +++ b/aas_pc_web/src/pages/home/index.vue @@ -0,0 +1,42 @@ + + + + + diff --git a/aas_pc_web/src/pages/log/index.vue b/aas_pc_web/src/pages/log/index.vue new file mode 100644 index 0000000..f59722e --- /dev/null +++ b/aas_pc_web/src/pages/log/index.vue @@ -0,0 +1,20 @@ + + + + + diff --git a/aas_pc_web/src/pages/login/index.vue b/aas_pc_web/src/pages/login/index.vue new file mode 100644 index 0000000..7369c77 --- /dev/null +++ b/aas_pc_web/src/pages/login/index.vue @@ -0,0 +1,465 @@ + + + + + diff --git a/aas_pc_web/src/pages/projectquote/index.vue b/aas_pc_web/src/pages/projectquote/index.vue new file mode 100644 index 0000000..e845adc --- /dev/null +++ b/aas_pc_web/src/pages/projectquote/index.vue @@ -0,0 +1,1078 @@ + + + + + diff --git a/aas_pc_web/src/pages/quotereview/index.vue b/aas_pc_web/src/pages/quotereview/index.vue new file mode 100644 index 0000000..fb5a087 --- /dev/null +++ b/aas_pc_web/src/pages/quotereview/index.vue @@ -0,0 +1,941 @@ + + + + + diff --git a/aas_pc_web/src/pages/scopemanage/index.vue b/aas_pc_web/src/pages/scopemanage/index.vue new file mode 100644 index 0000000..f59722e --- /dev/null +++ b/aas_pc_web/src/pages/scopemanage/index.vue @@ -0,0 +1,20 @@ + + + + + diff --git a/aas_pc_web/src/pages/user/index.vue b/aas_pc_web/src/pages/user/index.vue new file mode 100644 index 0000000..99dd506 --- /dev/null +++ b/aas_pc_web/src/pages/user/index.vue @@ -0,0 +1,378 @@ + + + + + diff --git a/aas_pc_web/src/pages/usermanage/index.vue b/aas_pc_web/src/pages/usermanage/index.vue new file mode 100644 index 0000000..5d4bf1e --- /dev/null +++ b/aas_pc_web/src/pages/usermanage/index.vue @@ -0,0 +1,581 @@ + + + + + diff --git a/aas_pc_web/src/router/index.js b/aas_pc_web/src/router/index.js new file mode 100644 index 0000000..c577e44 --- /dev/null +++ b/aas_pc_web/src/router/index.js @@ -0,0 +1,115 @@ +import { createRouter, createWebHistory } from 'vue-router'; +import Home from '../pages/home/index.vue'; +import Login from '../pages/login/index.vue'; +import UserManage from '../pages/usermanage/index.vue'; +import ComManage from '../pages/commanage/index.vue'; +import ScopeManage from '../pages/scopemanage/index.vue'; +import User from '../pages/user/index.vue'; +import QuotereView from '../pages/quotereview/index.vue'; +import ProjectQuote from '../pages/projectquote/index.vue'; +import Log from '../pages/log/index.vue'; +import DicManage from '../pages/dicmanage/index.vue'; + + +const routes = [ + { + path: '/', + // 动态重定向到登录页或主页 + redirect: () => { + const isAuthenticated = localStorage.getItem('token'); + return isAuthenticated ? '/home' : '/login'; + } + }, + { + path: '/login', + name: '登录', + component: Login + }, + { + path: '/home', + name: '主页', + component: Home, + meta: { requiresAuth: true } // 需要认证的路由 + }, + { + path: '/log', + name: '日志中心', + component: Log, + meta: { requiresAuth: true } // 需要认证的路由 + }, + { + path: '/usermanage', + name: '用户管理', + component: UserManage, + meta: { requiresAuth: true } // 需要认证的路由 + }, + { + path: '/commanage', + name: '组织管理', + component: ComManage, + meta: { requiresAuth: true } // 需要认证的路由 + }, + { + path: '/scopemanage', + name: '权限管理', + component: ScopeManage, + meta: { requiresAuth: true } // 需要认证的路由 + }, + { + path: '/dicmanage', + name: '字典管理', + component: DicManage, + meta: { requiresAuth: true } // 需要认证的路由 + }, + { + path: '/user', + name: '个人中心', + component: User, + meta: { requiresAuth: true } // 需要认证的路由 + }, + { + path: '/quotereview', + name: '项目审核', + component: QuotereView, + meta: { requiresAuth: true } // 需要认证的路由 + }, + { + path: '/projectquote', + name: '项目报备', + component: ProjectQuote, + meta: { requiresAuth: true } // 需要认证的路由 + }, + { + path: '/:pathMatch(.*)*', + name: '404错误', + component: () => import('../pages/404/index.vue') // 404页面 + }, + + +]; + +const router = createRouter({ + history: createWebHistory(), + routes +}); + + +// 路由守卫 +router.beforeEach((to, from, next) => { + const isAuthenticated = localStorage.getItem('token') // 用localStorage存储token + const username = localStorage.getItem('username') // 获取用户名 + + if (to.meta.requiresAuth && !isAuthenticated) { + // 如果需要认证且没有token,则跳转到登录页面 + next('/login') + } else if ((to.path == '/usermanage' || to.path == '/scopemanage') && (username != 'Admin' && username != 'MoMoWen')) { + // 如果访问的是用户管理页面但用户名不是Admin,则跳转到主页 + next('/home') + } else { + // 其他情况正常放行 + sessionStorage.setItem('currentRoute', to.fullPath) + next() + } +}) + +export default router; diff --git a/aas_pc_web/vite.config.js b/aas_pc_web/vite.config.js new file mode 100644 index 0000000..57d781a --- /dev/null +++ b/aas_pc_web/vite.config.js @@ -0,0 +1,10 @@ +import { defineConfig } from 'vite'; +import plugin from '@vitejs/plugin-vue'; + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [plugin()], + server: { + port: 43770, + } +}) \ No newline at end of file