Просмотр исходного кода

😎1、代码清理 2、升级依赖及Furion v4.9.7.6

zuohuaijun 1 год назад
Родитель
Сommit
dd90d95060
19 измененных файлов с 92 добавлено и 89 удалено
  1. 0 11
      Admin.NET/Admin.NET.Application/GlobalUsings.cs
  2. 8 8
      Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj
  3. 0 1
      Admin.NET/Admin.NET.Core/Service/Dict/SysDictDataService.cs
  4. 1 3
      Admin.NET/Admin.NET.Core/Service/File/FileProvider/DefaultFileProvider.cs
  5. 4 1
      Admin.NET/Admin.NET.Core/Service/File/FileProvider/ICustomFileProvider.cs
  6. 7 4
      Admin.NET/Admin.NET.Core/Service/File/FileProvider/OSSFileProvider.cs
  7. 1 2
      Admin.NET/Admin.NET.Core/Service/File/FileProvider/SSHFileProvider.cs
  8. 1 1
      Admin.NET/Admin.NET.Core/Service/Org/SysOrgService.cs
  9. 4 4
      Admin.NET/Admin.NET.Test/Admin.NET.Test.csproj
  10. 4 1
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/Entity/DingTalkRoleUser.cs
  11. 4 4
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/Job/SyncDingTalkRoleJob.cs
  12. 3 1
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/Service/Dto/DingTalkRoleListOutput.cs
  13. 4 3
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/Service/Dto/DingTalkRoleListResult.cs
  14. 4 3
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/Service/Dto/DingTalkRoleResult.cs
  15. 3 1
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/Service/Dto/DingTalkRoleSimplelistOutput.cs
  16. 3 1
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/Service/Dto/DingTalkRoleSimplelistResult.cs
  17. 3 3
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/Service/Dto/GetDingTalkCurrentRoleListInput.cs
  18. 4 3
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/Service/Dto/GetDingTalkCurrentRoleSimplelistInput.cs
  19. 34 34
      Web/package.json

+ 0 - 11
Admin.NET/Admin.NET.Application/GlobalUsings.cs

@@ -5,22 +5,11 @@
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
 global using Admin.NET.Core;
-global using Admin.NET.Core.Service;
-global using SqlSugar;
 global using Furion;
-global using Furion.DatabaseAccessor;
 global using Furion.DependencyInjection;
 global using Furion.DynamicApiController;
-global using Furion.FriendlyException;
-global using Mapster;
 global using Microsoft.AspNetCore.Authorization;
-global using Microsoft.AspNetCore.Http;
 global using Microsoft.AspNetCore.Mvc;
-global using Magicodes.ExporterAndImporter.Core;
-global using Magicodes.ExporterAndImporter.Excel;
 global using Microsoft.Extensions.DependencyInjection;
 global using System;
-global using System.Collections.Generic;
-global using System.ComponentModel;
-global using System.ComponentModel.DataAnnotations;
 global using System.Threading.Tasks;

+ 8 - 8
Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj

@@ -14,15 +14,15 @@
 
   <ItemGroup>
     <PackageReference Include="AlibabaCloud.SDK.Dysmsapi20170525" Version="3.1.1" />
-    <PackageReference Include="AlipaySDKNet.Standard" Version="4.9.376" />
+    <PackageReference Include="AlipaySDKNet.Standard" Version="4.9.401" />
     <PackageReference Include="AngleSharp" Version="1.2.0" />
     <PackageReference Include="AspectCore.Extensions.Reflection" Version="2.4.0" />
     <PackageReference Include="AspNetCoreRateLimit" Version="5.0.0" />
     <PackageReference Include="Elastic.Clients.Elasticsearch" Version="8.17.1" />
-    <PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.7.3" />
-    <PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.3" />
-    <PackageReference Include="Furion.Pure" Version="4.9.7.3" />
-	<PackageReference Include="Hardware.Info" Version="101.0.0" />
+    <PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.7.6" />
+    <PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.6" />
+    <PackageReference Include="Furion.Pure" Version="4.9.7.6" />
+	<PackageReference Include="Hardware.Info" Version="101.0.0.1" />
     <PackageReference Include="Hashids.net" Version="1.7.0" />
     <PackageReference Include="IPTools.China" Version="1.6.0" />
     <PackageReference Include="IPTools.International" Version="1.6.0" />
@@ -33,7 +33,7 @@
     <PackageReference Include="MailKit" Version="4.10.0" />
     <PackageReference Include="MiniExcel" Version="1.37.0" />
     <PackageReference Include="MiniWord" Version="0.9.2" />
-    <PackageReference Include="NewLife.Redis" Version="6.1.2025.202" />
+    <PackageReference Include="NewLife.Redis" Version="6.1.2025.209" />
     <PackageReference Include="Novell.Directory.Ldap.NETStandard" Version="3.6.0" />
 	<PackageReference Include="OnceMi.AspNetCore.OSS" Version="1.2.0" />
     <PackageReference Include="QRCoder" Version="1.6.0" />
@@ -46,10 +46,10 @@
     <PackageReference Include="System.Linq.Dynamic.Core" Version="1.6.0.1" />
     <PackageReference Include="System.Net.Http" Version="4.3.4" />
     <PackageReference Include="System.Private.Uri" Version="4.3.2" />
-    <PackageReference Include="TencentCloudSDK.Sms" Version="3.0.1172" />
+    <PackageReference Include="TencentCloudSDK.Sms" Version="3.0.1177" />
     <PackageReference Include="UAParser" Version="3.1.47" />
     <PackageReference Include="Yitter.IdGenerator" Version="1.0.14" />
-    <PackageReference Include="BouncyCastle.Cryptography" Version="2.5.0" Aliases="BouncyCastleV2" />
+    <PackageReference Include="BouncyCastle.Cryptography" Version="2.5.1" Aliases="BouncyCastleV2" />
   </ItemGroup>
 
   <ItemGroup Condition=" '$(TargetFramework)' == 'net8.0' ">

+ 0 - 1
Admin.NET/Admin.NET.Core/Service/Dict/SysDictDataService.cs

@@ -197,7 +197,6 @@ public class SysDictDataService : IDynamicApiController, ITransient
         var dictDataList = _sysCacheService.Get<List<SysDictData>>($"{CacheConst.KeyDict}{dictType.Code}");
         if (dictDataList == null)
         {
-
             dictDataList = await VSysDictData.InnerJoin<SysDictType>((u, a) => u.DictTypeId == a.Id)
                 .Where(u => u.DictTypeId == dictType.Id)
                 .Select((u, a) => new SysDictData

+ 1 - 3
Admin.NET/Admin.NET.Core/Service/File/FileProvider/DefaultFileProvider.cs

@@ -4,8 +4,6 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-
-
 namespace Admin.NET.Core.Service;
 
 public class DefaultFileProvider : ICustomFileProvider, ITransient
@@ -56,4 +54,4 @@ public class DefaultFileProvider : ICustomFileProvider, ITransient
         newFile.Url = $"{newFile.FilePath}/{newFile.Id + newFile.Suffix}";
         return newFile;
     }
-}
+}

+ 4 - 1
Admin.NET/Admin.NET.Core/Service/File/FileProvider/ICustomFileProvider.cs

@@ -18,18 +18,21 @@ public interface ICustomFileProvider
     /// <param name="fileName"></param>
     /// <returns></returns>
     public Task<FileStreamResult> GetFileStreamResultAsync(SysFile sysFile, string fileName);
+
     /// <summary>
     /// 下载指定文件Base64格式
     /// </summary>
     /// <param name="sysFile"></param>
     /// <returns></returns>
     public Task<string> DownloadFileBase64Async(SysFile sysFile);
+
     /// <summary>
     /// 删除文件
     /// </summary>
     /// <param name="sysFile"></param>
     /// <returns></returns>
     public Task DeleteFileAsync(SysFile sysFile);
+
     /// <summary>
     /// 上传文件
     /// </summary>
@@ -39,4 +42,4 @@ public interface ICustomFileProvider
     /// <param name="finalName">文件最终名称</param>
     /// <returns></returns>
     public Task<SysFile> UploadFileAsync(IFormFile file, SysFile sysFile, string path, string finalName);
-}
+}

+ 7 - 4
Admin.NET/Admin.NET.Core/Service/File/FileProvider/OSSFileProvider.cs

@@ -8,15 +8,18 @@ using OnceMi.AspNetCore.OSS;
 
 namespace Admin.NET.Core.Service;
 
-public class OSSFileProvider : ICustomFileProvider,ITransient
+public class OSSFileProvider : ICustomFileProvider, ITransient
 {
     private readonly IOSSService _OSSService;
     private readonly OSSProviderOptions _OSSProviderOptions;
-    public OSSFileProvider(IOptions<OSSProviderOptions> oSSProviderOptions, IOSSServiceFactory ossServiceFactory) {
+
+    public OSSFileProvider(IOptions<OSSProviderOptions> oSSProviderOptions, IOSSServiceFactory ossServiceFactory)
+    {
         _OSSProviderOptions = oSSProviderOptions.Value;
         if (_OSSProviderOptions.Enabled)
             _OSSService = ossServiceFactory.Create(Enum.GetName(_OSSProviderOptions.Provider));
     }
+
     public async Task DeleteFileAsync(SysFile file)
     {
         await _OSSService.RemoveObjectAsync(file.BucketName, string.Concat(file.FilePath, "/", $"{file.Id}{file.Suffix}"));
@@ -43,7 +46,7 @@ public class OSSFileProvider : ICustomFileProvider,ITransient
         return new FileStreamResult(stream, "application/octet-stream") { FileDownloadName = fileName + file.Suffix };
     }
 
-    public async Task<SysFile> UploadFileAsync(IFormFile file,SysFile sysFile,string path,string finalName)
+    public async Task<SysFile> UploadFileAsync(IFormFile file, SysFile sysFile, string path, string finalName)
     {
         sysFile.Provider = Enum.GetName(_OSSProviderOptions.Provider);
         var filePath = string.Concat(path, "/", finalName);
@@ -75,4 +78,4 @@ public class OSSFileProvider : ICustomFileProvider,ITransient
         }
         return sysFile;
     }
-}
+}

+ 1 - 2
Admin.NET/Admin.NET.Core/Service/File/FileProvider/SSHFileProvider.cs

@@ -4,7 +4,6 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-
 namespace Admin.NET.Core.Service;
 
 public class SSHFileProvider : ICustomFileProvider, ITransient
@@ -30,7 +29,7 @@ public class SSHFileProvider : ICustomFileProvider, ITransient
         var filePath = Path.Combine(sysFile.FilePath ?? "", sysFile.Id + sysFile.Suffix);
         using SSHHelper helper = new(App.Configuration["SSHProvider:Host"],
             App.Configuration["SSHProvider:Port"].ToInt(), App.Configuration["SSHProvider:Username"], App.Configuration["SSHProvider:Password"]);
-        return Task.FromResult( new FileStreamResult(helper.OpenRead(filePath), "application/octet-stream") { FileDownloadName = fileName + sysFile.Suffix });
+        return Task.FromResult(new FileStreamResult(helper.OpenRead(filePath), "application/octet-stream") { FileDownloadName = fileName + sysFile.Suffix });
     }
 
     public Task<SysFile> UploadFileAsync(IFormFile file, SysFile sysFile, string path, string finalName)

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/Org/SysOrgService.cs

@@ -158,7 +158,7 @@ public class SysOrgService : IDynamicApiController, ITransient
     {
         if (!_userManager.SuperAdmin && input.Pid == 0)
             throw Oops.Oh(ErrorCodeEnum.D2012);
-            
+
         if (input.Pid != 0)
         {
             //var pOrg = await _sysOrgRep.GetFirstAsync(u => u.Id == input.Pid);

+ 4 - 4
Admin.NET/Admin.NET.Test/Admin.NET.Test.csproj

@@ -12,10 +12,10 @@
     </PropertyGroup>
 
     <ItemGroup>
-      <PackageReference Include="Furion.Xunit" Version="4.9.7.3" />
-      <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
-      <PackageReference Include="Selenium.Support" Version="4.27.0" />
-      <PackageReference Include="Selenium.WebDriver" Version="4.27.0" />
+      <PackageReference Include="Furion.Xunit" Version="4.9.7.6" />
+      <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
+      <PackageReference Include="Selenium.Support" Version="4.28.0" />
+      <PackageReference Include="Selenium.WebDriver" Version="4.28.0" />
       <PackageReference Include="Selenium.WebDriver.MSEdgeDriver" Version="131.0.2903.48" />
       <PackageReference Include="xunit.assert" Version="2.9.3" />
     </ItemGroup>

+ 4 - 1
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/Entity/DingTalkRoleUser.cs

@@ -1,4 +1,5 @@
 namespace Admin.NET.Plugin.DingTalk;
+
 /// <summary>
 /// 钉钉角色信息
 /// </summary>
@@ -11,6 +12,7 @@ public class DingTalkRoleUser : EntityBase
     [SugarColumn(ColumnDescription = "钉钉用户id", Length = 64)]
     [Required, MaxLength(64)]
     public virtual string? DingTalkUserId { get; set; }
+
     /// <summary>
     /// 角色组id
     /// </summary>
@@ -24,6 +26,7 @@ public class DingTalkRoleUser : EntityBase
     [SugarColumn(ColumnDescription = "角色组名", Length = 64)]
     [MaxLength(64)]
     public string? groupName { get; set; }
+
     /// <summary>
     /// 角色id
     /// </summary>
@@ -37,4 +40,4 @@ public class DingTalkRoleUser : EntityBase
     [SugarColumn(ColumnDescription = "角色名", Length = 64)]
     [MaxLength(64)]
     public string? roleName { get; set; }
-}
+}

+ 4 - 4
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/Job/SyncDingTalkRoleJob.cs

@@ -4,6 +4,7 @@ using Microsoft.Extensions.DependencyInjection;
 using Microsoft.Extensions.Logging;
 
 namespace Admin.NET.Plugin.Job;
+
 /// <summary>
 /// 同步钉钉角色job,自动同步触发器请在web页面按需求设置
 /// </summary>
@@ -13,12 +14,14 @@ public class SyncDingTalkRoleJob : IJob
     private readonly IServiceScopeFactory _scopeFactory;
     private readonly IDingTalkApi _dingTalkApi;
     private readonly ILogger _logger;
+
     public SyncDingTalkRoleJob(IServiceScopeFactory scopeFactory, IDingTalkApi dingTalkApi, ILoggerFactory loggerFactory)
     {
         _scopeFactory = scopeFactory;
         _dingTalkApi = dingTalkApi;
         _logger = loggerFactory.CreateLogger(CommonConst.SysLogCategoryName);
     }
+
     public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)
     {
         using var serviceScope = _scopeFactory.CreateScope();
@@ -69,12 +72,9 @@ public class SyncDingTalkRoleJob : IJob
                 {
                     dingTalkRoleUserList.AddRange(tempList);
                 }
-
-
             }
         }
 
-
         // 判断新增还是更新
         var sysDingTalkRoleList = await _dingTalkRoleRepo.AsQueryable().ToListAsync();
         // 需要更新的用户Id
@@ -131,4 +131,4 @@ public class SyncDingTalkRoleJob : IJob
         Console.WriteLine("【" + DateTime.Now + "】同步钉钉角色");
         Console.ForegroundColor = originColor;
     }
-}
+}

+ 3 - 1
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/Service/Dto/DingTalkRoleListOutput.cs

@@ -1,4 +1,5 @@
 namespace Admin.NET.Plugin.DingTalk;
+
 public class DingTalkRoleListOutput
 {
     /// <summary>
@@ -7,10 +8,11 @@ public class DingTalkRoleListOutput
     [JsonProperty("hasMore")]
     [System.Text.Json.Serialization.JsonPropertyName("hasMore")]
     public bool hasMore { get; set; }
+
     /// <summary>
     /// 角色组列表
     /// </summary>
     [JsonProperty("list")]
     [System.Text.Json.Serialization.JsonPropertyName("list")]
     public List<DingTalkRoleListResult> list { get; set; }
-}
+}

+ 4 - 3
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/Service/Dto/DingTalkRoleListResult.cs

@@ -1,15 +1,16 @@
-
+namespace Admin.NET.Plugin.DingTalk;
 
-namespace Admin.NET.Plugin.DingTalk;
 public class DingTalkRoleListResult
 {
     [JsonProperty("groupId")]
     [System.Text.Json.Serialization.JsonPropertyName("groupId")]
     public long groupId { get; set; }
+
     [JsonProperty("name")]
     [System.Text.Json.Serialization.JsonPropertyName("name")]
     public string name { get; set; }
+
     [JsonProperty("roles")]
     [System.Text.Json.Serialization.JsonPropertyName("roles")]
     public List<DingTalkRoleResult> roles { get; set; }
-}
+}

+ 4 - 3
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/Service/Dto/DingTalkRoleResult.cs

@@ -1,11 +1,12 @@
-
-namespace Admin.NET.Plugin.DingTalk;
+namespace Admin.NET.Plugin.DingTalk;
+
 public class DingTalkRoleResult
 {
     [JsonProperty("id")]
     [System.Text.Json.Serialization.JsonPropertyName("id")]
     public long id { get; set; }
+
     [JsonProperty("name")]
     [System.Text.Json.Serialization.JsonPropertyName("name")]
     public string name { get; set; }
-}
+}

+ 3 - 1
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/Service/Dto/DingTalkRoleSimplelistOutput.cs

@@ -1,4 +1,5 @@
 namespace Admin.NET.Plugin.DingTalk;
+
 public class DingTalkRoleSimplelistOutput
 {
     /// <summary>
@@ -7,10 +8,11 @@ public class DingTalkRoleSimplelistOutput
     [JsonProperty("hasMore")]
     [System.Text.Json.Serialization.JsonPropertyName("hasMore")]
     public bool hasMore { get; set; }
+
     /// <summary>
     /// 角色组列表
     /// </summary>
     [JsonProperty("list")]
     [System.Text.Json.Serialization.JsonPropertyName("list")]
     public List<DingTalkRoleSimplelistResult> list { get; set; }
-}
+}

+ 3 - 1
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/Service/Dto/DingTalkRoleSimplelistResult.cs

@@ -1,10 +1,12 @@
 namespace Admin.NET.Plugin.DingTalk;
+
 public class DingTalkRoleSimplelistResult
 {
     [JsonProperty("userid")]
     [System.Text.Json.Serialization.JsonPropertyName("userid")]
     public string userid { get; set; }
+
     [JsonProperty("name")]
     [System.Text.Json.Serialization.JsonPropertyName("name")]
     public string name { get; set; }
-}
+}

+ 3 - 3
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/Service/Dto/GetDingTalkCurrentRoleListInput.cs

@@ -1,5 +1,5 @@
-
-namespace Admin.NET.Plugin.DingTalk;
+namespace Admin.NET.Plugin.DingTalk;
+
 public class GetDingTalkCurrentRoleListInput
 {
     /// <summary>
@@ -11,4 +11,4 @@ public class GetDingTalkCurrentRoleListInput
     /// 分页大小,最大50。
     /// </summary>
     public int? Size { get; set; }
-}
+}

+ 4 - 3
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/Service/Dto/GetDingTalkCurrentRoleSimplelistInput.cs

@@ -1,11 +1,12 @@
-
-namespace Admin.NET.Plugin.DingTalk;
+namespace Admin.NET.Plugin.DingTalk;
+
 public class GetDingTalkCurrentRoleSimplelistInput
 {
     /// <summary>
     /// 角色id
     /// </summary>
     public long role_id { get; set; }
+
     /// <summary>
     /// 分页游标,从0开始。根据返回结果里的next_cursor是否为空来判断是否还有下一页,且再次调用时offset设置成next_cursor的值。
     /// </summary>
@@ -15,4 +16,4 @@ public class GetDingTalkCurrentRoleSimplelistInput
     /// 分页大小,最大50。
     /// </summary>
     public int? Size { get; set; }
-}
+}

+ 34 - 34
Web/package.json

@@ -2,7 +2,7 @@
 	"name": "admin.net",
 	"type": "module",
 	"version": "2.4.33",
-	"lastBuildTime": "2025.02.03",
+	"lastBuildTime": "2025.02.11",
 	"description": "Admin.NET 站在巨人肩膀上的 .NET 通用权限开发框架",
 	"author": "zuohuaijun",
 	"license": "MIT",
@@ -18,55 +18,55 @@
 	},
 	"dependencies": {
 		"@element-plus/icons-vue": "^2.3.1",
-		"@logicflow/core": "^2.0.9",
-		"@logicflow/extension": "^2.0.13",
+		"@logicflow/core": "^2.0.10",
+		"@logicflow/extension": "^2.0.14",
 		"@microsoft/signalr": "^8.0.7",
-		"@vue-office/docx": "^1.6.2",
-		"@vue-office/excel": "^1.7.11",
-		"@vue-office/pdf": "^2.0.9",
-		"@vueuse/core": "^12.0.0",
+		"@vue-office/docx": "^1.6.3",
+		"@vue-office/excel": "^1.7.14",
+		"@vue-office/pdf": "^2.0.10",
+		"@vueuse/core": "^12.5.0",
 		"@wangeditor/editor": "^5.1.23",
 		"@wangeditor/editor-for-vue": "^5.1.12",
 		"animate.css": "^4.1.1",
 		"async-validator": "^4.2.5",
-		"axios": "^1.7.8",
+		"axios": "^1.7.9",
 		"countup.js": "^2.8.0",
 		"cropperjs": "^1.6.2",
-		"echarts": "^5.5.1",
+		"echarts": "^5.6.0",
 		"echarts-gl": "^2.0.9",
 		"echarts-wordcloud": "^2.1.0",
-		"element-plus": "^2.8.8",
-		"ezuikit-js": "^8.1.1-alpha.3",
+		"element-plus": "^2.9.4",
+		"ezuikit-js": "^8.1.5",
 		"js-cookie": "^3.0.5",
 		"js-table2excel": "^1.1.2",
 		"json-editor-vue": "^0.17.3",
 		"jsplumb": "^2.15.6",
 		"lodash-es": "^4.17.21",
-		"md-editor-v3": "^5.2.1",
+		"md-editor-v3": "^5.2.2",
 		"mitt": "^3.0.1",
-		"monaco-editor": "^0.52.0",
+		"monaco-editor": "^0.52.2",
 		"mqtt": "^5.10.3",
 		"nprogress": "^0.2.0",
-		"pinia": "^2.2.8",
+		"pinia": "^2.3.1",
 		"print-js": "^1.6.0",
 		"push.js": "^1.0.12",
 		"qrcodejs2-fixes": "^0.0.2",
-		"qs": "^6.13.1",
+		"qs": "^6.14.0",
 		"relation-graph": "^2.2.10",
 		"screenfull": "^6.0.2",
 		"sm-crypto-v2": "^1.9.3",
-		"sortablejs": "^1.15.3",
-		"splitpanes": "^3.1.5",
+		"sortablejs": "^1.15.6",
+		"splitpanes": "^3.1.8",
 		"vcrontab-3": "^3.3.22",
 		"vform3-builds": "^3.0.10",
 		"vue": "^3.5.13",
 		"vue-clipboard3": "^2.0.0",
-		"vue-demi": "^0.14.6",
+		"vue-demi": "^0.14.10",
 		"vue-draggable-plus": "^0.6.0",
 		"vue-grid-layout": "3.0.0-beta1",
-		"vue-i18n": "^11.1.0",
+		"vue-i18n": "^11.1.1",
 		"vue-json-pretty": "^2.4.0",
-		"vue-plugin-hiprint": "^0.0.59-beta2",
+		"vue-plugin-hiprint": "0.0.59-beta2",
 		"vue-router": "^4.5.0",
 		"vue-signature-pad": "^3.0.2",
 		"vue3-tree-org": "^4.2.2",
@@ -75,25 +75,25 @@
 	"devDependencies": {
 		"@plugin-web-update-notification/vite": "^2.0.0",
 		"@types/lodash-es": "^4.17.12",
-		"@types/node": "^22.10.1",
+		"@types/node": "^22.13.1",
 		"@types/nprogress": "^0.2.3",
 		"@types/sortablejs": "^1.15.8",
-		"@typescript-eslint/eslint-plugin": "^8.16.0",
-		"@typescript-eslint/parser": "^8.16.0",
+		"@typescript-eslint/eslint-plugin": "^8.24.0",
+		"@typescript-eslint/parser": "^8.24.0",
 		"@vitejs/plugin-vue": "^5.2.1",
 		"@vitejs/plugin-vue-jsx": "^4.1.1",
 		"@vue/compiler-sfc": "^3.5.13",
-		"code-inspector-plugin": "^0.19.2",
-		"eslint": "^9.15.0",
-		"eslint-plugin-vue": "^9.30.0",
-		"globals": "^15.12.0",
-		"less": "^4.2.1",
-		"prettier": "^3.4.1",
-		"rollup-plugin-visualizer": "^5.12.0",
-		"sass": "^1.81.0",
-		"terser": "^5.36.0",
-		"typescript": "^5.7.2",
-		"vite": "^6.0.11",
+		"code-inspector-plugin": "^0.20.0",
+		"eslint": "^9.20.0",
+		"eslint-plugin-vue": "^9.32.0",
+		"globals": "^15.14.0",
+		"less": "^4.2.2",
+		"prettier": "^3.5.0",
+		"rollup-plugin-visualizer": "^5.14.0",
+		"sass": "^1.84.0",
+		"terser": "^5.38.2",
+		"typescript": "^5.7.3",
+		"vite": "^6.1.0",
 		"vite-plugin-cdn-import": "^1.0.1",
 		"vite-plugin-compression2": "^1.3.3",
 		"vite-plugin-vue-setup-extend": "^0.4.0",