diff --git a/Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj b/Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj
index 038d92d7..2a9910d0 100644
--- a/Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj
+++ b/Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj
@@ -28,14 +28,14 @@
-
-
-
+
+
+
-
+
@@ -56,7 +56,7 @@
-
+
@@ -76,9 +76,9 @@
-
-
-
+
+
+
diff --git a/Admin.NET/Admin.NET.Core/Job/WechatAccessTokenCheckJob.cs b/Admin.NET/Admin.NET.Core/Job/WechatAccessTokenCheckJob.cs
deleted file mode 100644
index 70528980..00000000
--- a/Admin.NET/Admin.NET.Core/Job/WechatAccessTokenCheckJob.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
-//
-// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
-//
-// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
-
-namespace Admin.NET.Core;
-
-///
-/// 微信AccessToken有效性检查作业任务
-///
-[JobDetail("job_WechatAccessTokenCheckJob", Description = "微信AccessToken有效性检查", GroupName = "default", Concurrent = false)]
-[PeriodSeconds(60, TriggerId = "trigger_WechatAccessTokenCheckJob", Description = "微信AccessToken有效性检查", RunOnStart = true)]
-public class WechatAccessTokenCheckJob : IJob
-{
- private readonly IServiceScopeFactory _scopeFactory;
-
- public WechatAccessTokenCheckJob(IServiceScopeFactory scopeFactory)
- {
- _scopeFactory = scopeFactory;
- }
-
- public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)
- {
- using var serviceScope = _scopeFactory.CreateScope();
-
- var wechatApiClientFactory = serviceScope.ServiceProvider.GetService();
- await wechatApiClientFactory.CheckWechatAccessTokenAsync();
- await wechatApiClientFactory.CheckWxOpenAccessTokenAsync();
- }
-}
\ No newline at end of file
diff --git a/Admin.NET/Admin.NET.Core/Service/File/SysFileService.cs b/Admin.NET/Admin.NET.Core/Service/File/SysFileService.cs
index 8fce845b..36e70802 100644
--- a/Admin.NET/Admin.NET.Core/Service/File/SysFileService.cs
+++ b/Admin.NET/Admin.NET.Core/Service/File/SysFileService.cs
@@ -310,13 +310,13 @@ public class SysFileService : IDynamicApiController, ITransient
var sysUserRep = _sysFileRep.ChangeRepository>();
var user = await sysUserRep.GetByIdAsync(_userManager.UserId);
+ await sysUserRep.UpdateAsync(u => new SysUser() { Avatar = sysFile.Url }, u => u.Id == user.Id);
// 删除已有头像文件
if (!string.IsNullOrWhiteSpace(user.Avatar))
{
var fileId = Path.GetFileNameWithoutExtension(user.Avatar);
await DeleteFile(new DeleteFileInput { Id = long.Parse(fileId) });
}
- await sysUserRep.UpdateAsync(u => new SysUser() { Avatar = sysFile.Url }, u => u.Id == user.Id);
return sysFile;
}
@@ -332,13 +332,13 @@ public class SysFileService : IDynamicApiController, ITransient
var sysUserRep = _sysFileRep.ChangeRepository>();
var user = await sysUserRep.GetByIdAsync(_userManager.UserId);
+ await sysUserRep.UpdateAsync(u => new SysUser() { Signature = sysFile.Url }, u => u.Id == user.Id);
// 删除已有电子签名文件
if (!string.IsNullOrWhiteSpace(user.Signature) && user.Signature.EndsWith(".png"))
{
var fileId = Path.GetFileNameWithoutExtension(user.Signature);
await DeleteFile(new DeleteFileInput { Id = long.Parse(fileId) });
}
- await sysUserRep.UpdateAsync(u => new SysUser() { Signature = sysFile.Url }, u => u.Id == user.Id);
return sysFile;
}
diff --git a/Admin.NET/Admin.NET.Core/Service/Wechat/SysWechatService.cs b/Admin.NET/Admin.NET.Core/Service/Wechat/SysWechatService.cs
index 4711501b..f8ae94f1 100644
--- a/Admin.NET/Admin.NET.Core/Service/Wechat/SysWechatService.cs
+++ b/Admin.NET/Admin.NET.Core/Service/Wechat/SysWechatService.cs
@@ -16,18 +16,15 @@ public class SysWechatService : IDynamicApiController, ITransient
private readonly SysConfigService _sysConfigService;
private readonly WechatApiClientFactory _wechatApiClientFactory;
private readonly WechatApiClient _wechatApiClient;
- private readonly SysCacheService _sysCacheService;
public SysWechatService(SqlSugarRepository sysOAuthUserRep,
SysConfigService sysConfigService,
- WechatApiClientFactory wechatApiClientFactory,
- SysCacheService sysCacheService)
+ WechatApiClientFactory wechatApiClientFactory)
{
_sysOAuthUserRep = sysOAuthUserRep;
_sysConfigService = sysConfigService;
_wechatApiClientFactory = wechatApiClientFactory;
_wechatApiClient = wechatApiClientFactory.CreateWechatClient();
- _sysCacheService = sysCacheService;
}
///
@@ -198,20 +195,6 @@ public class SysWechatService : IDynamicApiController, ITransient
///
private async Task GetCgibinToken()
{
- // 先从缓存中取 AccessToken
- var wx_accessToken = _sysCacheService.Get("sys_wx_accessToken");
- if (!string.IsNullOrWhiteSpace(wx_accessToken))
- {
- return wx_accessToken;
- }
-
- // 若缓存没有则从微信公众号重新获取 AccessToken
- var reqCgibinToken = new CgibinTokenRequest();
- var resCgibinToken = await _wechatApiClient.ExecuteCgibinTokenAsync(reqCgibinToken);
- if (resCgibinToken.ErrorCode != (int)WechatReturnCodeEnum.请求成功)
- throw Oops.Oh(resCgibinToken.ErrorMessage + " " + resCgibinToken.ErrorCode);
-
- _sysCacheService.Set("sys_wx_accessToken", resCgibinToken.AccessToken, TimeSpan.FromSeconds(resCgibinToken.ExpiresIn)); // 缓存 AccessToken
- return resCgibinToken.AccessToken;
+ return await _wechatApiClientFactory.TryGetWechatAccessTokenAsync();
}
}
\ No newline at end of file
diff --git a/Admin.NET/Admin.NET.Core/Service/Wechat/SysWxOpenService.cs b/Admin.NET/Admin.NET.Core/Service/Wechat/SysWxOpenService.cs
index 6be91517..ce0678f7 100644
--- a/Admin.NET/Admin.NET.Core/Service/Wechat/SysWxOpenService.cs
+++ b/Admin.NET/Admin.NET.Core/Service/Wechat/SysWxOpenService.cs
@@ -16,6 +16,7 @@ public class SysWxOpenService : IDynamicApiController, ITransient
private readonly SysConfigService _sysConfigService;
private readonly WechatApiClient _wechatApiClient;
private readonly SysFileService _sysFileService;
+ private readonly WechatApiClientFactory _wechatApiClientFactory;
public SysWxOpenService(SqlSugarRepository sysOAuthUserRep,
SysConfigService sysConfigService,
@@ -26,6 +27,7 @@ public class SysWxOpenService : IDynamicApiController, ITransient
_sysConfigService = sysConfigService;
_wechatApiClient = wechatApiClientFactory.CreateWxOpenClient();
_sysFileService = sysFileService;
+ _wechatApiClientFactory = wechatApiClientFactory;
}
///
@@ -416,10 +418,6 @@ public class SysWxOpenService : IDynamicApiController, ITransient
///
private async Task GetCgibinToken()
{
- var reqCgibinToken = new CgibinTokenRequest();
- var resCgibinToken = await _wechatApiClient.ExecuteCgibinTokenAsync(reqCgibinToken);
- if (resCgibinToken.ErrorCode != (int)WechatReturnCodeEnum.请求成功)
- throw Oops.Oh(resCgibinToken.ErrorMessage + " " + resCgibinToken.ErrorCode);
- return resCgibinToken.AccessToken;
+ return await _wechatApiClientFactory.TryGetWxOpenAccessTokenAsync();
}
}
\ No newline at end of file
diff --git a/Admin.NET/Admin.NET.Core/Service/Wechat/WechatApiHttpClient.cs b/Admin.NET/Admin.NET.Core/Service/Wechat/WechatApiHttpClient.cs
index cb7bb696..d7c77054 100644
--- a/Admin.NET/Admin.NET.Core/Service/Wechat/WechatApiHttpClient.cs
+++ b/Admin.NET/Admin.NET.Core/Service/Wechat/WechatApiHttpClient.cs
@@ -132,7 +132,7 @@ public partial class WechatApiClientFactory : ISingleton
var req = new CgibinOpenApiQuotaGetRequest
{
- AccessToken = await TryGetWxOpenAccessTokenAsync(),
+ AccessToken = await TryGetWechatAccessTokenAsync(),
CgiPath = "/cgi-bin/token"
};
var client = CreateWechatClient();
diff --git a/Admin.NET/Admin.NET.Web.Core/Admin.NET.Web.Core.csproj b/Admin.NET/Admin.NET.Web.Core/Admin.NET.Web.Core.csproj
index de625f1e..9b526235 100644
--- a/Admin.NET/Admin.NET.Web.Core/Admin.NET.Web.Core.csproj
+++ b/Admin.NET/Admin.NET.Web.Core/Admin.NET.Web.Core.csproj
@@ -12,7 +12,7 @@
-
+
diff --git a/Admin.NET/Plugins/Admin.NET.Plugin.ReZero/Admin.NET.Plugin.ReZero.csproj b/Admin.NET/Plugins/Admin.NET.Plugin.ReZero/Admin.NET.Plugin.ReZero.csproj
index aebf3b39..51b64004 100644
--- a/Admin.NET/Plugins/Admin.NET.Plugin.ReZero/Admin.NET.Plugin.ReZero.csproj
+++ b/Admin.NET/Plugins/Admin.NET.Plugin.ReZero/Admin.NET.Plugin.ReZero.csproj
@@ -26,7 +26,7 @@
-
+
diff --git a/Web/package.json b/Web/package.json
index b7489885..8f0bebfe 100644
--- a/Web/package.json
+++ b/Web/package.json
@@ -2,7 +2,7 @@
"name": "admin.net.pro",
"type": "module",
"version": "2.4.33",
- "lastBuildTime": "2025.05.12",
+ "lastBuildTime": "2025.05.15",
"description": "Admin.NET 站在巨人肩膀上的 .NET 通用权限开发框架",
"author": "zuohuaijun",
"license": "MIT",
@@ -25,7 +25,7 @@
"@vue-office/docx": "^1.6.2",
"@vue-office/excel": "^1.7.14",
"@vue-office/pdf": "^2.0.9",
- "@vueuse/core": "^13.1.0",
+ "@vueuse/core": "^13.2.0",
"@vxe-ui/plugin-export-xlsx": "^4.2.1",
"@vxe-ui/plugin-render-element": "^4.0.11",
"@wangeditor/editor": "^5.1.23",
@@ -80,8 +80,8 @@
"vue-signature-pad": "^3.0.2",
"vue3-flag-icons": "^0.0.3",
"vue3-tree-org": "^4.2.2",
- "vxe-pc-ui": "^4.6.4",
- "vxe-table": "^4.13.25",
+ "vxe-pc-ui": "^4.6.8",
+ "vxe-table": "^4.13.28",
"xe-utils": "^3.7.4",
"xlsx-js-style": "^1.2.0"
},
@@ -89,11 +89,11 @@
"@iconify/vue": "^5.0.0",
"@plugin-web-update-notification/vite": "^2.0.0",
"@types/lodash-es": "^4.17.12",
- "@types/node": "^20.17.46",
+ "@types/node": "^20.17.47",
"@types/nprogress": "^0.2.3",
"@types/sortablejs": "^1.15.8",
- "@typescript-eslint/eslint-plugin": "^8.32.0",
- "@typescript-eslint/parser": "^8.32.0",
+ "@typescript-eslint/eslint-plugin": "^8.32.1",
+ "@typescript-eslint/parser": "^8.32.1",
"@vitejs/plugin-vue": "^5.2.4",
"@vitejs/plugin-vue-jsx": "^4.1.2",
"@vue/compiler-sfc": "^3.5.13",
@@ -106,7 +106,7 @@
"prettier": "^3.5.3",
"rollup-plugin-visualizer": "^5.14.0",
"sass": "^1.88.0",
- "terser": "^5.39.0",
+ "terser": "^5.39.1",
"typescript": "^5.8.3",
"vite": "^6.3.5",
"vite-plugin-cdn-import": "^1.0.1",
diff --git a/Web/src/views/system/onlineUser/signalR.ts b/Web/src/views/system/onlineUser/signalR.ts
index c9f1699a..fe9e33f4 100644
--- a/Web/src/views/system/onlineUser/signalR.ts
+++ b/Web/src/views/system/onlineUser/signalR.ts
@@ -41,9 +41,8 @@ connection.onreconnecting(() => {
connection.onreconnected(() => {
console.log('重连成功');
});
-
+// 用户列表
connection.on('OnlineUserList', () => {});
-
// 接收消息
connection.on('ReceiveMessage', (message: any) => {
var tmpMsg = `