#region copyright //------------------------------------------------------------------------------ // 此代码版权声明为全文件覆盖,如有原作者特别声明,会在下方手动补充 // 此代码版权(除特别声明外的代码)归作者本人Diego所有 // 源代码使用协议遵循本仓库的开源协议及附加协议 // Gitee源代码仓库:https://gitee.com/diego2098/ThingsGateway // Github源代码仓库:https://github.com/kimdiego2098/ThingsGateway // 使用文档:https://diego2098.gitee.io/thingsgateway-docs/ // QQ群:605534569 //------------------------------------------------------------------------------ #endregion using Furion.DataEncryption; using Masa.Blazor.Presets; using Microsoft.AspNetCore.Components.Web; using Microsoft.Extensions.Hosting; using ThingsGateway.Admin.Application; using ThingsGateway.Admin.Blazor.Core; using ThingsGateway.Admin.Core; using ThingsGateway.Admin.Core.JsonExtensions; namespace ThingsGateway.Admin.Blazor; /// /// 登录页面 /// public partial class Login { private string CaptchaValue; bool _showPassword; bool _showCaptcha; private readonly LoginInput loginModel = new(); [Inject] AjaxService AjaxService { get; set; } string UserLogoUrl { get; set; } = BlazorResourceConst.ResourceUrl + "images/defaultUser.svg"; string Welcome { get; set; } private ValidCodeOutput CaptchaInfo { get; set; } private string Password { get; set; } private string CONFIG_REMARK { get; set; } private string CONFIG_TITLE { get; set; } private async Task Enter(KeyboardEventArgs e) { if (e.Code == "Enter" || e.Code == "NumpadEnter") { await LoginAsync(); } } private PImageCaptcha captcha; private async Task LoginAsync() { loginModel.ValidCodeReqNo = CaptchaInfo.ValidCodeReqNo; loginModel.ValidCode = CaptchaValue; loginModel.Password = DESCEncryption.Encrypt(Password, DESCKeyConst.DESCKey); if (IsMobile) { loginModel.Device = AuthDeviceTypeEnum.APP; } else { loginModel.Device = AuthDeviceTypeEnum.PC; } var ajaxOption = new AjaxOption { Url = "/auth/b/login", Data = loginModel, }; var str = await AjaxService.GetMessageAsync(ajaxOption); if (str != null) { var ret = str.ToJsonWithT>(); if (ret.Code != 200) { if (captcha != null) { await captcha.RefreshCode(); } await PopupService.EnqueueSnackbarAsync(new("登录错误" + ": " + ret.Msg.ToString(), AlertTypes.Error)); } else { await PopupService.EnqueueSnackbarAsync(new("登录成功", AlertTypes.Success)); await Task.Delay(500); var userId = await App.GetService().GetIdByAccountAsync(loginModel.Account); var data = await App.GetService().GetLoginDefaultRazorAsync(userId); var sameLevelMenus = await App.GetService().GetaMenuAndSpaListAsync(); if (NavigationManager.ToAbsoluteUri(NavigationManager.Uri).AbsolutePath == "/Login" || NavigationManager.ToAbsoluteUri(NavigationManager.Uri).AbsolutePath == "/") await AjaxService.GotoAsync(sameLevelMenus.FirstOrDefault(a => a.Id == data)?.Component ?? "index"); else await AjaxService.GotoAsync(NavigationManager.Uri); } } else { if (captcha != null) { await captcha.RefreshCode(); } await PopupService.EnqueueSnackbarAsync(new("登录错误", AlertTypes.Error)); } } [Inject] private NavigationManager NavigationManager { get; set; } /// protected override async Task OnParametersSetAsync() { if (App.HostEnvironment.IsDevelopment()) { loginModel.Account = "superAdmin"; Password = "111111"; } GetCaptchaInfo(); CONFIG_TITLE = (await App.GetService().GetByConfigKeyAsync(ConfigConst.SYS_CONFIGBASEDEFAULT, ConfigConst.CONFIG_TITLE))?.ConfigValue; CONFIG_REMARK = (await App.GetService().GetByConfigKeyAsync(ConfigConst.SYS_CONFIGBASEDEFAULT, ConfigConst.CONFIG_REMARK))?.ConfigValue; _showCaptcha = (await App.GetService().GetByConfigKeyAsync(ConfigConst.SYS_CONFIGBASEDEFAULT, ConfigConst.CONFIG_CAPTCHA_OPEN))?.ConfigValue?.ToBoolean() == true; Welcome = "欢迎使用" + CONFIG_TITLE + "!"; await base.OnParametersSetAsync(); } private void GetCaptchaInfo() { CaptchaInfo = App.GetService().GetCaptchaInfo(); } private Task RefreshCode() { CaptchaInfo = App.GetService().GetCaptchaInfo(); return Task.FromResult(CaptchaInfo.CodeValue); } }