diff --git a/Admin.NET/Admin.NET.Core/Job/WechatAccessTokenCheckJob.cs b/Admin.NET/Admin.NET.Core/Job/WechatAccessTokenCheckJob.cs new file mode 100644 index 00000000..70528980 --- /dev/null +++ b/Admin.NET/Admin.NET.Core/Job/WechatAccessTokenCheckJob.cs @@ -0,0 +1,31 @@ +// 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/GoView/index.html b/GoView/index.html index 91784b06..037f1bf0 100644 --- a/GoView/index.html +++ b/GoView/index.html @@ -10,7 +10,7 @@ - GoView + Admin.NET diff --git a/GoView/src/assets/images/login/input.png b/GoView/src/assets/images/login/input.png index dc264671..da794297 100644 Binary files a/GoView/src/assets/images/login/input.png and b/GoView/src/assets/images/login/input.png differ diff --git a/GoView/src/views/login/index.vue b/GoView/src/views/login/index.vue index f2e9e10f..f9f095da 100644 --- a/GoView/src/views/login/index.vue +++ b/GoView/src/views/login/index.vue @@ -18,11 +18,7 @@ - + - + - + @@ -69,7 +55,7 @@ - {{ - $t('login.form_auto') - }} + {{ $t('login.form_auto') }} - {{ $t('login.form_button') }} + {{ + $t('login.form_button') + }} @@ -141,21 +120,21 @@ const systemStore = useSystemStore() const t = window['$t'] const formInline = reactive({ - username: 'admin', - password: '123456', + username: 'superadmin', + password: 'Admin.NET++010101' }) const rules = { username: { required: true, message: t('global.form_account'), - trigger: 'blur', + trigger: 'blur' }, password: { required: true, message: t('global.form_password'), - trigger: 'blur', - }, + trigger: 'blur' + } } // 定时器 @@ -165,17 +144,7 @@ const shuffleTimiing = ref() const carouselImgList = ['one', 'two', 'three'] // 背景图 -const bgList = ref([ - 'bar_y', - 'bar_x', - 'line_gradient', - 'line', - 'funnel', - 'heatmap', - 'map', - 'pie', - 'radar', -]) +const bgList = ref(['bar_y', 'bar_x', 'line_gradient', 'line', 'funnel', 'heatmap', 'map', 'pie', 'radar']) // 处理url获取 const getImageUrl = (name: string, folder: string) => { @@ -201,11 +170,11 @@ const handleSubmit = async (e: Event) => { username, password }) - if(res && res.data) { + if (res && res.data) { const { tokenValue, tokenName } = res.data.token const { nickname, username, id } = res.data.userinfo - // 存储到 pinia + // 存储到 pinia systemStore.setItem(SystemStoreEnum.USER_INFO, { [SystemStoreUserInfoEnum.USER_TOKEN]: tokenValue, [SystemStoreUserInfoEnum.TOKEN_NAME]: tokenName, @@ -214,7 +183,7 @@ const handleSubmit = async (e: Event) => { [SystemStoreUserInfoEnum.NICK_NAME]: nickname, t }) - + window['$message'].success(t('login.login_success')) routerTurnByName(PageEnum.BASE_HOME_NAME, true) }