😎修复大屏相关

This commit is contained in:
zuohuaijun 2025-05-13 14:55:24 +08:00
parent 14aa237618
commit c487187709
4 changed files with 50 additions and 50 deletions

View File

@ -0,0 +1,31 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 微信AccessToken有效性检查作业任务
/// </summary>
[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<WechatApiClientFactory>();
await wechatApiClientFactory.CheckWechatAccessTokenAsync();
await wechatApiClientFactory.CheckWxOpenAccessTokenAsync();
}
}

View File

@ -10,7 +10,7 @@
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1,maximum-scale=1,user-scalable=0"> <meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1,maximum-scale=1,user-scalable=0">
<meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=yes" media="(min-width: 769px)"> <meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=yes" media="(min-width: 769px)">
<link rel="icon" href="./favicon.ico" /> <link rel="icon" href="./favicon.ico" />
<title>GoView</title> <title>Admin.NET</title>
<link rel="stylesheet" href="./index.css" /> <link rel="stylesheet" href="./index.css" />
</head> </head>
<body> <body>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

View File

@ -18,11 +18,7 @@
<layout-header></layout-header> <layout-header></layout-header>
<div class="go-login"> <div class="go-login">
<div class="go-login-carousel"> <div class="go-login-carousel">
<n-carousel <n-carousel autoplay dot-type="line" :interval="Number(carouselInterval)">
autoplay
dot-type="line"
:interval="Number(carouselInterval)"
>
<img <img
v-for="(item, i) in carouselImgList" v-for="(item, i) in carouselImgList"
:key="i" :key="i"
@ -37,24 +33,14 @@
<n-collapse-transition :appear="true" :show="show"> <n-collapse-transition :appear="true" :show="show">
<n-card class="login-account-card" :title="$t('login.desc')"> <n-card class="login-account-card" :title="$t('login.desc')">
<div class="login-account-top"> <div class="login-account-top">
<img <img class="login-account-top-logo" src="~@/assets/images/login/input.png" alt="展示图片" />
class="login-account-top-logo"
src="~@/assets/images/login/input.png"
alt="展示图片"
/>
</div> </div>
<n-form <n-form ref="formRef" label-placement="left" size="large" :model="formInline" :rules="rules">
ref="formRef"
label-placement="left"
size="large"
:model="formInline"
:rules="rules"
>
<n-form-item path="username"> <n-form-item path="username">
<n-input <n-input
v-model:value="formInline.username" v-model:value="formInline.username"
type="text" type="text"
maxlength="16" maxlength="30"
:placeholder="$t('global.form_account')" :placeholder="$t('global.form_account')"
@keydown.enter="handleSubmit" @keydown.enter="handleSubmit"
> >
@ -69,7 +55,7 @@
<n-input <n-input
v-model:value="formInline.password" v-model:value="formInline.password"
type="password" type="password"
maxlength="16" maxlength="30"
show-password-on="click" show-password-on="click"
:placeholder="$t('global.form_password')" :placeholder="$t('global.form_password')"
@keydown.enter="handleSubmit" @keydown.enter="handleSubmit"
@ -84,21 +70,14 @@
<n-form-item> <n-form-item>
<div class="flex justify-between"> <div class="flex justify-between">
<div class="flex-initial"> <div class="flex-initial">
<n-checkbox v-model:checked="autoLogin">{{ <n-checkbox v-model:checked="autoLogin">{{ $t('login.form_auto') }}</n-checkbox>
$t('login.form_auto')
}}</n-checkbox>
</div> </div>
</div> </div>
</n-form-item> </n-form-item>
<n-form-item> <n-form-item>
<n-button <n-button type="primary" @click="handleSubmit" size="large" :loading="loading" block>{{
type="primary" $t('login.form_button')
@click="handleSubmit" }}</n-button>
size="large"
:loading="loading"
block
>{{ $t('login.form_button') }}</n-button
>
</n-form-item> </n-form-item>
</n-form> </n-form>
</n-card> </n-card>
@ -141,21 +120,21 @@ const systemStore = useSystemStore()
const t = window['$t'] const t = window['$t']
const formInline = reactive({ const formInline = reactive({
username: 'admin', username: 'superadmin',
password: '123456', password: 'Admin.NET++010101'
}) })
const rules = { const rules = {
username: { username: {
required: true, required: true,
message: t('global.form_account'), message: t('global.form_account'),
trigger: 'blur', trigger: 'blur'
}, },
password: { password: {
required: true, required: true,
message: t('global.form_password'), message: t('global.form_password'),
trigger: 'blur', trigger: 'blur'
}, }
} }
// //
@ -165,17 +144,7 @@ const shuffleTimiing = ref()
const carouselImgList = ['one', 'two', 'three'] const carouselImgList = ['one', 'two', 'three']
// //
const bgList = ref([ const bgList = ref(['bar_y', 'bar_x', 'line_gradient', 'line', 'funnel', 'heatmap', 'map', 'pie', 'radar'])
'bar_y',
'bar_x',
'line_gradient',
'line',
'funnel',
'heatmap',
'map',
'pie',
'radar',
])
// url // url
const getImageUrl = (name: string, folder: string) => { const getImageUrl = (name: string, folder: string) => {
@ -201,11 +170,11 @@ const handleSubmit = async (e: Event) => {
username, username,
password password
}) })
if(res && res.data) { if (res && res.data) {
const { tokenValue, tokenName } = res.data.token const { tokenValue, tokenName } = res.data.token
const { nickname, username, id } = res.data.userinfo const { nickname, username, id } = res.data.userinfo
// pinia // pinia
systemStore.setItem(SystemStoreEnum.USER_INFO, { systemStore.setItem(SystemStoreEnum.USER_INFO, {
[SystemStoreUserInfoEnum.USER_TOKEN]: tokenValue, [SystemStoreUserInfoEnum.USER_TOKEN]: tokenValue,
[SystemStoreUserInfoEnum.TOKEN_NAME]: tokenName, [SystemStoreUserInfoEnum.TOKEN_NAME]: tokenName,
@ -214,7 +183,7 @@ const handleSubmit = async (e: Event) => {
[SystemStoreUserInfoEnum.NICK_NAME]: nickname, [SystemStoreUserInfoEnum.NICK_NAME]: nickname,
t t
}) })
window['$message'].success(t('login.login_success')) window['$message'].success(t('login.login_success'))
routerTurnByName(PageEnum.BASE_HOME_NAME, true) routerTurnByName(PageEnum.BASE_HOME_NAME, true)
} }