Quellcode durchsuchen

Merge branch 'v2' of https://gitee.com/zuohuaijun/Admin.NET into v2

# Conflicts:
#	Web/package.json
Cyrus Zhou vor 8 Monaten
Ursprung
Commit
d828b201d5

+ 1 - 0
.gitignore

@@ -41,3 +41,4 @@ node_modules/
 .idea
 .DS_Store
 /Admin.NET/Admin.NET.Web.Entry/Admin.NET.db-journal
+/Admin.NET/Admin.NET.sln.DotSettings.user

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

@@ -19,9 +19,9 @@
     <PackageReference Include="AspectCore.Extensions.Reflection" Version="2.4.0" />
     <PackageReference Include="AspNetCoreRateLimit" Version="5.0.0" />
     <PackageReference Include="Elastic.Clients.Elasticsearch" Version="9.0.7" />
-    <PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.7.98" />
-    <PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.98" />
-    <PackageReference Include="Furion.Pure" Version="4.9.7.98" />
+    <PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.7.105" />
+    <PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.105" />
+    <PackageReference Include="Furion.Pure" Version="4.9.7.105" />
 	<PackageReference Include="Hardware.Info" Version="101.0.1.1" />
     <PackageReference Include="Hashids.net" Version="1.7.0" />
     <PackageReference Include="IPTools.China" Version="1.6.0" />
@@ -41,7 +41,7 @@
     <PackageReference Include="SixLabors.ImageSharp.Web" Version="3.1.5" />
     <PackageReference Include="SKIT.FlurlHttpClient.Wechat.Api" Version="3.11.0" />
     <PackageReference Include="SKIT.FlurlHttpClient.Wechat.TenpayV3" Version="3.13.0" />
-    <PackageReference Include="SqlSugar.MongoDbCore" Version="5.1.4.227" />
+    <PackageReference Include="SqlSugar.MongoDbCore" Version="5.1.4.232" />
     <PackageReference Include="SqlSugarCore" Version="5.1.4.198" />
     <PackageReference Include="SSH.NET" Version="2025.0.0" />
     <PackageReference Include="System.Linq.Dynamic.Core" Version="1.6.6" />
@@ -56,7 +56,7 @@
   <ItemGroup Condition=" '$(TargetFramework)' == 'net8.0' ">
     <PackageReference Include="AspNet.Security.OAuth.Gitee" Version="8.3.0" />
     <PackageReference Include="AspNet.Security.OAuth.Weixin" Version="8.3.0" />
-    <PackageReference Include="Lazy.Captcha.Core" Version="2.0.9" />
+    <PackageReference Include="Lazy.Captcha.Core" Version="2.2.0" />
     <PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="8.0.11" />
     <PackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson" Version="8.0.11" />
     <PackageReference Include="Microsoft.AspNetCore.SignalR.StackExchangeRedis" Version="8.0.11" />

+ 2 - 2
Admin.NET/Admin.NET.Core/Entity/SysLogVis.cs

@@ -60,13 +60,13 @@ public partial class SysLogVis : EntityBaseTenant
     /// 经度
     /// </summary>
     [SugarColumn(ColumnDescription = "经度")]
-    public double? Longitude { get; set; }
+    public decimal? Longitude { get; set; }
 
     /// <summary>
     /// 维度
     /// </summary>
     [SugarColumn(ColumnDescription = "维度")]
-    public double? Latitude { get; set; }
+    public decimal? Latitude { get; set; }
 
     /// <summary>
     /// 浏览器

+ 44 - 0
Admin.NET/Admin.NET.Core/Extension/StringExtension.cs

@@ -125,4 +125,48 @@ public static class StringExtension
             return paramDict.TryGetValue(key, out string value) ? value : string.Empty;
         });
     }
+
+    /// <summary>
+    /// 驼峰转下划线
+    /// </summary>
+    /// <param name="str"></param>
+    /// <param name="isToUpper"></param>
+    /// <returns></returns>
+    public static string ToUnderLine(this string str, bool isToUpper = false)
+    {
+        if (string.IsNullOrEmpty(str) || str.Contains("_"))
+        {
+            return str;
+        }
+
+        int length = str.Length;
+        var result = new System.Text.StringBuilder(length + (length / 3));
+
+        result.Append(char.ToLowerInvariant(str[0]));
+
+        int lastIndex = length - 1;
+
+        for (int i = 1; i < length; i++)
+        {
+            char current = str[i];
+            if (!char.IsUpper(current))
+            {
+                result.Append(current);
+                continue;
+            }
+
+            bool prevIsLower = char.IsLower(str[i - 1]);
+            bool nextIsLower = (i < lastIndex) && char.IsLower(str[i + 1]);
+
+            if (prevIsLower || nextIsLower)
+            {
+                result.Append('_');
+            }
+
+            result.Append((char)(current | 0x20));
+        }
+
+        string converted = result.ToString();
+        return isToUpper ? converted.ToUpperInvariant() : converted;
+    }
 }

+ 6 - 6
Admin.NET/Admin.NET.Core/Logging/DatabaseLoggingWriter.cs

@@ -97,8 +97,8 @@ public class DatabaseLoggingWriter : IDatabaseLoggingWriter, IDisposable
                     Status = loggingMonitor.returnInformation?.httpStatusCode,
                     RemoteIp = remoteIPv4,
                     Location = ipLocation,
-                    Longitude = longitude,
-                    Latitude = latitude,
+                    Longitude = (decimal?)longitude,
+                    Latitude = (decimal?)latitude,
                     Browser = browser, // loggingMonitor.userAgent,
                     Os = os, // loggingMonitor.osDescription + " " + loggingMonitor.osArchitecture,
                     Elapsed = loggingMonitor.timeOperationElapsedMilliseconds,
@@ -139,8 +139,8 @@ public class DatabaseLoggingWriter : IDatabaseLoggingWriter, IDisposable
                     Status = loggingMonitor.returnInformation?.httpStatusCode,
                     RemoteIp = remoteIPv4,
                     Location = ipLocation,
-                    Longitude = longitude,
-                    Latitude = latitude,
+                    Longitude = (decimal?)longitude,
+                    Latitude = (decimal?)latitude,
                     Browser = browser, // loggingMonitor.userAgent,
                     Os = os, // loggingMonitor.osDescription + " " + loggingMonitor.osArchitecture,
                     Elapsed = loggingMonitor.timeOperationElapsedMilliseconds,
@@ -164,8 +164,8 @@ public class DatabaseLoggingWriter : IDatabaseLoggingWriter, IDisposable
                 Status = loggingMonitor.returnInformation?.httpStatusCode,
                 RemoteIp = remoteIPv4,
                 Location = ipLocation,
-                Longitude = longitude,
-                Latitude = latitude,
+                Longitude = (decimal?)longitude,
+                Latitude = (decimal?)latitude,
                 Browser = browser, // loggingMonitor.userAgent,
                 Os = os, // loggingMonitor.osDescription + " " + loggingMonitor.osArchitecture,
                 Elapsed = loggingMonitor.timeOperationElapsedMilliseconds,

+ 2 - 2
Admin.NET/Admin.NET.Core/Logging/ElasticSearchLoggingWriter.cs

@@ -68,8 +68,8 @@ public class ElasticSearchLoggingWriter : IDatabaseLoggingWriter, IDisposable
             Status = loggingMonitor.returnInformation.httpStatusCode,
             RemoteIp = remoteIPv4,
             Location = ipLocation,
-            Longitude = longitude,
-            Latitude = latitude,
+            Longitude = (decimal?)longitude,
+            Latitude = (decimal?)latitude,
             Browser = loggingMonitor.userAgent,
             Os = loggingMonitor.osDescription + " " + loggingMonitor.osArchitecture,
             Elapsed = loggingMonitor.timeOperationElapsedMilliseconds,

+ 1 - 1
Admin.NET/Admin.NET.Core/Logging/LoggingSetup.cs

@@ -45,7 +45,7 @@ public static class LoggingSetup
                     options.WithTraceId = true; // 显示线程Id
                     options.WithStackFrame = true; // 显示程序集
                     options.FileNameRule = fileName => string.Format(fileName, DateTime.Now, logLevel.ToString()); // 每天创建一个文件
-                    options.WriteFilter = logMsg => logMsg.LogLevel >= logLevel; // 日志级别
+                    options.WriteFilter = logMsg => logMsg.LogLevel == logLevel; // 日志级别
                     options.HandleWriteError = (writeError) => // 写入失败时启用备用文件
                     {
                         writeError.UseRollbackFileName(Path.GetFileNameWithoutExtension(writeError.CurrentFileName) + "-oops" + Path.GetExtension(writeError.CurrentFileName));

+ 6 - 6
Admin.NET/Admin.NET.Core/Service/CodeGen/SysCodeGenService.cs

@@ -188,7 +188,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
             if (item.Type.IsDefined(typeof(LogTableAttribute))) tbConfigId = SqlSugarConst.LogConfigId;
             if (tbConfigId != configId) continue;
 
-            var table = dbTableInfos.FirstOrDefault(u => string.Equals(u.Name, (config!.DbSettings.EnableUnderLine ? UtilMethods.ToUnderLine(item.DbTableName) : item.DbTableName), StringComparison.CurrentCultureIgnoreCase));
+            var table = dbTableInfos.FirstOrDefault(u => string.Equals(u.Name, (config!.DbSettings.EnableUnderLine ? item.DbTableName.ToUnderLine() : item.DbTableName), StringComparison.CurrentCultureIgnoreCase));
             if (table == null) continue;
             tableOutputList.Add(new TableOutput
             {
@@ -211,7 +211,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
         // 切库---多库代码生成用
         var provider = _db.AsTenant().GetConnectionScope(configId);
         var config = _dbConnectionOptions.ConnectionConfigs.FirstOrDefault(u => u.ConfigId.ToString() == configId) ?? throw Oops.Oh(ErrorCodeEnum.D1401);
-        if (config.DbSettings.EnableUnderLine) tableName = UtilMethods.ToUnderLine(tableName);
+        if (config.DbSettings.EnableUnderLine) tableName = tableName.ToUnderLine();
         // 获取实体类型属性
         var entityType = provider.DbMaintenance.GetTableInfoList(false).FirstOrDefault(u => u.Name == tableName);
         if (entityType == null) return null;
@@ -225,7 +225,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
         // 按原始类型的顺序获取所有实体类型属性(不包含导航属性,会返回null)
         var columnList = provider.DbMaintenance.GetColumnInfosByTableName(tableName).Select(u => new ColumnOuput
         {
-            ColumnName = config!.DbSettings.EnableUnderLine ? UtilMethods.ToUnderLine(u.DbColumnName) : u.DbColumnName,
+            ColumnName = config!.DbSettings.EnableUnderLine ? u.DbColumnName.ToUnderLine() : u.DbColumnName,
             ColumnKey = u.IsPrimarykey.ToString(),
             DataType = u.DataType.ToString(),
             NetType = CodeGenUtil.ConvertDataType(u, provider.CurrentConnectionConfig.DbType),
@@ -233,7 +233,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
         }).ToList();
         foreach (var column in columnList)
         {
-            var property = properties.FirstOrDefault(e => (config!.DbSettings.EnableUnderLine ? UtilMethods.ToUnderLine(e.ColumnName) : e.ColumnName) == column.ColumnName);
+            var property = properties.FirstOrDefault(e => (config!.DbSettings.EnableUnderLine ? e.ColumnName.ToUnderLine() : e.ColumnName) == column.ColumnName);
             column.ColumnComment ??= property?.ColumnComment;
             column.PropertyName = property?.PropertyName;
         }
@@ -250,7 +250,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
         if (entityType == null) return null;
 
         var config = _dbConnectionOptions.ConnectionConfigs.FirstOrDefault(u => u.ConfigId.ToString() == input.ConfigId);
-        var dbTableName = config!.DbSettings.EnableUnderLine ? UtilMethods.ToUnderLine(entityType.DbTableName) : entityType.DbTableName;
+        var dbTableName = config!.DbSettings.EnableUnderLine ? entityType.DbTableName.ToUnderLine() : entityType.DbTableName;
 
         // 切库---多库代码生成用
         var provider = _db.AsTenant().GetConnectionScope(!string.IsNullOrEmpty(input.ConfigId) ? input.ConfigId : SqlSugarConst.MainConfigId);
@@ -335,7 +335,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
             if (des.Length > 0) description = ((DescriptionAttribute)des[0]).Description;
 
             var dbTableName = sugarAttribute == null || string.IsNullOrWhiteSpace(((SugarTable)sugarAttribute).TableName) ? ct.Name : ((SugarTable)sugarAttribute).TableName;
-            if (config.DbSettings.EnableUnderLine) dbTableName = UtilMethods.ToUnderLine(dbTableName);
+            if (config.DbSettings.EnableUnderLine) dbTableName = dbTableName.ToUnderLine();
 
             entityInfos.Add(new EntityInfo
             {

+ 6 - 6
Admin.NET/Admin.NET.Core/Service/DataBase/SysDatabaseService.cs

@@ -70,7 +70,7 @@ public class SysDatabaseService : IDynamicApiController, ITransient
                 var visualColumn = new VisualColumn
                 {
                     TableName = columnInfo.DbTableName,
-                    ColumnName = dbOptions.DbSettings.EnableUnderLine ? UtilMethods.ToUnderLine(columnInfo.DbColumnName) : columnInfo.DbColumnName,
+                    ColumnName = dbOptions.DbSettings.EnableUnderLine ? columnInfo.DbColumnName.ToUnderLine() : columnInfo.DbColumnName,
                     DataType = columnInfo.PropertyInfo.PropertyType.Name,
                     DataLength = columnInfo.Length.ToString(),
                     ColumnDescription = columnInfo.ColumnDescription,
@@ -86,10 +86,10 @@ public class SysDatabaseService : IDynamicApiController, ITransient
                     var relation = new ColumnRelation
                     {
                         SourceTableName = columnInfo.DbTableName,
-                        SourceColumnName = dbOptions.DbSettings.EnableUnderLine ? UtilMethods.ToUnderLine(name1) : name1,
+                        SourceColumnName = dbOptions.DbSettings.EnableUnderLine ? name1.ToUnderLine() : name1,
                         Type = columnInfo.Navigat.GetNavigateType() == NavigateType.OneToOne ? "ONE_TO_ONE" : "ONE_TO_MANY",
-                        TargetTableName = dbOptions.DbSettings.EnableUnderLine ? UtilMethods.ToUnderLine(columnInfo.DbColumnName) : columnInfo.DbColumnName,
-                        TargetColumnName = dbOptions.DbSettings.EnableUnderLine ? UtilMethods.ToUnderLine(targetColumnName) : targetColumnName
+                        TargetTableName = dbOptions.DbSettings.EnableUnderLine ? columnInfo.DbColumnName.ToUnderLine() : columnInfo.DbColumnName,
+                        TargetColumnName = dbOptions.DbSettings.EnableUnderLine ? targetColumnName.ToUnderLine() : targetColumnName
                     };
                     columnRelationList.Add(relation);
                 }
@@ -304,7 +304,7 @@ public class SysDatabaseService : IDynamicApiController, ITransient
         var typeBuilder = db.DynamicBuilder().CreateClass(input.TableName, new SugarTable() { TableName = input.TableName, TableDescription = input.Description });
         input.DbColumnInfoList.ForEach(u =>
         {
-            var dbColumnName = config!.DbSettings.EnableUnderLine ? UtilMethods.ToUnderLine(u.DbColumnName.Trim()) : u.DbColumnName.Trim();
+            var dbColumnName = config!.DbSettings.EnableUnderLine ? u.DbColumnName.Trim().ToUnderLine() : u.DbColumnName.Trim();
             // 虚拟类都默认string类型,具体以列数据类型为准
             typeBuilder.CreateProperty(dbColumnName, typeof(string), new SugarColumn()
             {
@@ -431,7 +431,7 @@ public class SysDatabaseService : IDynamicApiController, ITransient
         Type entityType = null;
         foreach (var item in entityInfos)
         {
-            if (tableInfo.Name.ToLower() != (config.DbSettings.EnableUnderLine ? UtilMethods.ToUnderLine(item.DbTableName) : item.DbTableName).ToLower()) continue;
+            if (tableInfo.Name.ToLower() != (config.DbSettings.EnableUnderLine ? item.DbTableName.ToUnderLine() : item.DbTableName).ToLower()) continue;
             entityType = item.Type;
             break;
         }

+ 2 - 2
Admin.NET/Admin.NET.Core/Service/Log/SysLogVisService.cs

@@ -66,8 +66,8 @@ public class SysLogVisService : IDynamicApiController, ITransient
             .Select(u => new LogVisOutput
             {
                 Location = u.Location,
-                Longitude = u.Longitude,
-                Latitude = u.Latitude,
+                Longitude = (double?)u.Longitude,
+                Latitude = (double?)u.Latitude,
                 RealName = u.RealName,
                 LogDateTime = u.LogDateTime
             }).ToListAsync();

+ 2 - 2
Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarSetup.cs

@@ -82,7 +82,7 @@ public static class SqlSugarSetup
                 if (!type.GetCustomAttributes<SugarTable>().Any())
                     return;
                 if (config.DbSettings.EnableUnderLine && !entity.DbTableName.Contains('_'))
-                    entity.DbTableName = UtilMethods.ToUnderLine(entity.DbTableName); // 驼峰转下划线
+                    entity.DbTableName = entity.DbTableName.ToUnderLine(); // 驼峰转下划线
             },
             EntityService = (type, column) => // 处理列
             {
@@ -92,7 +92,7 @@ public static class SqlSugarSetup
                 if (new NullabilityInfoContext().Create(type).WriteState is NullabilityState.Nullable)
                     column.IsNullable = true;
                 if (config.DbSettings.EnableUnderLine && !column.IsIgnore && !column.DbColumnName.Contains('_'))
-                    column.DbColumnName = UtilMethods.ToUnderLine(column.DbColumnName); // 驼峰转下划线
+                    column.DbColumnName = column.DbColumnName.ToUnderLine(); // 驼峰转下划线
             },
             DataInfoCacheService = new SqlSugarCache(),
         };

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

@@ -12,11 +12,11 @@
     </PropertyGroup>
 
     <ItemGroup>
-      <PackageReference Include="Furion.Xunit" Version="4.9.7.98" />
+      <PackageReference Include="Furion.Xunit" Version="4.9.7.105" />
       <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
       <PackageReference Include="Selenium.Support" Version="4.34.0" />
       <PackageReference Include="Selenium.WebDriver" Version="4.34.0" />
-      <PackageReference Include="Selenium.WebDriver.MSEdgeDriver" Version="138.0.3351.83" />
+      <PackageReference Include="Selenium.WebDriver.MSEdgeDriver" Version="138.0.3351.95" />
       <PackageReference Include="xunit.assert" Version="2.9.3" />
     </ItemGroup>
 

+ 79 - 0
Web/api_build/build.ps1

@@ -0,0 +1,79 @@
+# 启用UTF-8编码
+[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
+
+# 获取脚本所在目录
+$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
+
+# 设置默认参数
+$moduleName = "apiServices"
+$apiServicesPath = Join-Path (Join-Path $scriptDir "..") "src\api-services\"
+$apiUrl = "http://localhost:5005/swagger/Default/swagger.json"
+
+# 根据传入的参数修改配置
+if ($args[0] -eq "approvalFlow") {
+    $moduleName = "approvalFlow"
+    $apiServicesPath = Join-Path (Join-Path $scriptDir "..") "src\api-plugins\approvalFlow\"
+    $apiUrl = "http://localhost:5005/swagger/ApprovalFlow/swagger.json"
+} elseif ($args[0] -eq "dingTalk") {
+    $moduleName = "dingTalk"
+    $apiServicesPath = Join-Path (Join-Path $scriptDir "..") "src\api-plugins\dingTalk\"
+    $apiUrl = "http://localhost:5005/swagger/DingTalk/swagger.json"
+} elseif ($args[0] -eq "goView") {
+    $moduleName = "goView"
+    $apiServicesPath = Join-Path (Join-Path $scriptDir "..") "src\api-plugins\goView\"
+    # 注意:PowerShell会自动处理URL编码,所以不需要手动添加%20等
+    $apiUrl = "http://localhost:5005/swagger/GoView 大屏可视化/swagger.json"
+}
+
+# 输出信息和删除现有目录
+Write-Output "================================ 删除目录 $moduleName ================================"
+if (Test-Path $apiServicesPath) {
+    Remove-Item -Path $apiServicesPath -Recurse -Force
+}
+
+# 开始生成代码
+Write-Output "================================ 开始生成 $moduleName ================================"
+
+# 输出调试信息
+Write-Output "脚本目录: $scriptDir"
+Write-Output "模块名称: $moduleName"
+Write-Output "输出路径: $apiServicesPath"
+Write-Output "API URL: $apiUrl"
+
+# 执行代码生成命令
+try {
+    $codeGenJar = Join-Path $scriptDir "swagger-codegen-cli.jar"
+    java -jar $codeGenJar generate -i $apiUrl -l typescript-axios -o $apiServicesPath
+    if ($LASTEXITCODE -ne 0) {
+        throw "Java命令执行失败,退出代码: $LASTEXITCODE"
+    }
+} catch {
+    Write-Error "代码生成失败: $_"
+    exit 1
+}
+
+# 删除不必要的文件和文件夹
+Write-Output "================================ 删除不必要的文件和文件夹 ================================"
+
+$filesToDelete = @(
+    "$apiServicesPath\.swagger-codegen",
+    "$apiServicesPath\.gitignore",
+    "$apiServicesPath\.npmignore",
+    "$apiServicesPath\.swagger-codegen-ignore",
+    "$apiServicesPath\git_push.sh",
+    "$apiServicesPath\package.json",
+    "$apiServicesPath\README.md",
+    "$apiServicesPath\tsconfig.json"
+)
+
+foreach ($filePath in $filesToDelete) {
+    if (Test-Path $filePath) {
+        if ((Get-Item $filePath) -is [System.IO.DirectoryInfo]) {
+            Remove-Item -Path $filePath -Recurse -Force
+        } else {
+            Remove-Item -Path $filePath -Force
+        }
+    }
+}
+
+Write-Output "================================ 生成结束 ================================"

+ 1 - 0
Web/api_build/readme.md

@@ -35,6 +35,7 @@ Swagger Codegen 读取 swagger.json 生成 typescript-axios 客户端后,直
 
 - 启动 API 端服务,确保 http://localhost:5005/ 可以访问
 - Windows:运行 `build.bat`
+  - Windows 11 运行 `build.bat` 失败时,可改用 `.\build.ps1`
 - Linux / Mac:运行`./build.sh`
 
 > http://localhost:5005/ 为默认的 API 地址,如果要连接其他地址,请自行调整对应脚本

+ 13 - 8
Web/package.json

@@ -2,7 +2,7 @@
 	"name": "admin.net",
 	"type": "module",
 	"version": "2.4.33",
-	"lastBuildTime": "2025.07.19",
+	"lastBuildTime": "2025.07.25",
 	"description": "Admin.NET 站在巨人肩膀上的 .NET 通用权限开发框架",
 	"author": "zuohuaijun",
 	"license": "MIT",
@@ -16,6 +16,11 @@
 		"build-dingTalk-api": "cd api_build/ && build.bat dingTalk",
 		"build-goView-api": "cd api_build/ && build.bat goView",
 		"build-all-api": "npm run build-api && npm run build-approvalFlow-api &&  npm run build-dingTalk-api && npm run build-goView-api",
+		"build-api-ps": "cd api_build/ && pwsh -ExecutionPolicy Bypass -File build.ps1",
+		"build-approvalFlow-api-ps": "cd api_build/ && pwsh -ExecutionPolicy Bypass -File build.ps1 approvalFlow",
+		"build-dingTalk-api-ps": "cd api_build/ && pwsh -ExecutionPolicy Bypass -File build.ps1 dingTalk",
+		"build-goView-api-ps": "cd api_build/ && pwsh -ExecutionPolicy Bypass -File build.ps1 goView",
+		"build-all-api-ps": "npm run build-api-ps && npm run build-approvalFlow-api-ps &&  npm run build-dingTalk-api-ps && npm run build-goView-api-ps",
 		"translate": "node scripts/translate.cjs"
 	},
 	"dependencies": {
@@ -31,7 +36,7 @@
 		"@wangeditor/editor-for-vue": "^5.1.12",
 		"animate.css": "^4.1.1",
 		"async-validator": "^4.2.5",
-		"axios": "^1.10.0",
+		"axios": "^1.11.0",
 		"countup.js": "^2.8.2",
 		"cropperjs": "^1.6.2",
 		"echarts": "^5.6.0",
@@ -61,12 +66,12 @@
 		"splitpanes": "^4.0.4",
 		"vcrontab-3": "^3.3.22",
 		"vform3-builds": "^3.0.10",
-		"vue": "^3.5.17",
+		"vue": "^3.5.18",
 		"vue-clipboard3": "^2.0.0",
 		"vue-demi": "^0.14.10",
 		"vue-draggable-plus": "^0.6.0",
 		"vue-grid-layout": "3.0.0-beta1",
-		"vue-i18n": "^11.1.10",
+		"vue-i18n": "^11.1.11",
 		"vue-json-pretty": "^2.5.0",
 		"vue-plugin-hiprint": "^0.0.60",
 		"vue-router": "^4.5.1",
@@ -82,12 +87,12 @@
 		"@types/node": "^22.16.4",
 		"@types/nprogress": "^0.2.3",
 		"@types/sortablejs": "^1.15.8",
-		"@typescript-eslint/eslint-plugin": "^8.37.0",
-		"@typescript-eslint/parser": "^8.37.0",
+		"@typescript-eslint/eslint-plugin": "^8.38.0",
+		"@typescript-eslint/parser": "^8.38.0",
 		"@vitejs/plugin-vue": "^6.0.0",
 		"@vitejs/plugin-vue-jsx": "^5.0.1",
-		"@vue/compiler-sfc": "^3.5.17",
 		"cli-progress": "^3.12.0",
+		"@vue/compiler-sfc": "^3.5.18",
 		"code-inspector-plugin": "^0.20.17",
 		"colors": "^1.4.0",
 		"dotenv": "^17.2.0",
@@ -100,8 +105,8 @@
 		"sass": "^1.89.2",
 		"terser": "^5.43.1",
 		"typescript": "^5.8.3",
-		"vite": "^7.0.5",
 		"vite-auto-i18n-plugin": "^1.1.5",
+		"vite": "^7.0.6",
 		"vite-plugin-cdn-import": "^1.0.1",
 		"vite-plugin-compression2": "^2.2.0",
 		"vite-plugin-vue-setup-extend": "^0.4.0",