Imports Newtonsoft.Json Public Class BFrmLogin ' TODO: 插入代码,以使用提供的用户名和密码执行自定义的身份验证 ' (请参阅 https://go.microsoft.com/fwlink/?LinkId=35339)。 ' 随后自定义主体可附加到当前线程的主体,如下所示: ' My.User.CurrentPrincipal = CustomPrincipal ' 其中 CustomPrincipal 是用于执行身份验证的 IPrincipal 实现。 ' 随后,My.User 将返回 CustomPrincipal 对象中封装的标识信息 ' 如用户名、显示名等 ''' 是否记住密码 Private _isRecordPassWord As Boolean ''' 是否自动登录 Private _isAutoLogin As Boolean ''' 是否正在登录中 Private _isLogging As Boolean ''' 产品索引 Private _appid As Integer = 6 'BLV_Studio = 6 'CSerialConfigTools = 1 'Face server = 2 'auth server = 3 'blv_oa.com = 4 'RCU_MAC binding = 5 'BLV_Studio = 6 Private Sub FrmLogin_Load(sender As Object, e As EventArgs) Handles Me.Load LoadSettings() Try TxtUserName.ForeColor = Color.FromArgb(0, 155, 134) TxtUserName.Text = Aes128.DecryptStr(My.Settings.UserAccount, Aes128.ServerAesKey) Catch ex As Exception ' TxtUserName.Text = String.Empty End Try Try TxtPwd.ForeColor = Color.FromArgb(0, 155, 134) TxtPwd.Text = Aes128.DecryptStr(My.Settings.UserPassword, Aes128.ServerAesKey) Catch ex As Exception 'TxtPwd.Text = String.Empty End Try TxtUserName_Leave(Nothing, Nothing) TxtPwd_Leave(Nothing, Nothing) ChkAutoLogin.Checked = _isAutoLogin ChkRecordPwd.Checked = _isRecordPassWord Text = $"{Application.ProductName} {Application.ProductVersion}" End Sub Private Sub LoginForm_Shown(sender As Object, e As EventArgs) Handles Me.Shown If _isAutoLogin Then TmrAutoLogin.Start() End If End Sub Private Sub FrmLogin_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing SaveSettings() End Sub Private Sub BtnLogin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnLogin.Click CloseAutoLogin() If _isLogging Then Return _isLogging = True BtnLogin.BackgroundImage = BLV_Studio.My.Resources.Resources._6 Dim user As String = TxtUserName.Text Dim pwd As String = TxtPwd.Text Try CheckUserAccount(user) CheckUserPassword(pwd) Dim login As LoginReturn = GetAccountAuth(user, pwd, _appid) '显示 Dim frm As New FrmMain frm.Account = user frm.Pawss = pwd frm.AccountAuth = login.Data frm.Show() '关闭窗体 Me.Close() Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.OkOnly, "登录失败") BtnLogin.BackgroundImage = BLV_Studio.My.Resources.Resources._5 End Try _isLogging = False End Sub Private Function GetAccountAuth(user As String, pwd As String, appid As Integer) As LoginReturn Dim jsonString As String = HttpMothod.PostData("http://auth.blv-oa.com/OTApi/Login", $"Uid={user}&Pwd={pwd}&appid={_appid}") If String.IsNullOrWhiteSpace(jsonString) Then Throw New Exception($"用户鉴权异常,请联系管理员") Dim login As LoginReturn = JsonConvert.DeserializeObject(Of LoginReturn)(jsonString) If login Is Nothing Then Throw New Exception($"解析用户权限错误!") If login.Status <> 200 Then Throw New Exception($"Status: {login.Status} Msg:{login.Message}") Return login End Function Private Sub BtnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnCancel.Click Me.Close() End Sub ''' 记住密码复选框状态修改触发事件 Private Sub ChkKeepPwd_CheckedChanged(sender As Object, e As EventArgs) Handles ChkRecordPwd.CheckedChanged _isRecordPassWord = ChkRecordPwd.Checked End Sub ''' 自动登录复选框状态修改触发事件 Private Sub Chk_AutoLogin_CheckedChanged(sender As Object, e As EventArgs) Handles ChkAutoLogin.CheckedChanged _isAutoLogin = ChkAutoLogin.Checked End Sub Private Sub TxtPwd_TextChanged(sender As Object, e As EventArgs) Handles TxtUserName.TextChanged, TxtPwd.TextChanged CloseAutoLogin() End Sub Private Sub LoginForm_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing SaveSettings() End Sub Private Sub TmrAutoLogin_Tick(sender As Object, e As EventArgs) Handles TmrAutoLogin.Tick If String.IsNullOrEmpty(TxtUserName.Text) Then Return ' BtnLogin.PerformClick() End Sub Private Sub CheckUserAccount(userAccount As String) If String.IsNullOrWhiteSpace(userAccount) Then Throw New Exception($"请输入用户账号!") End If End Sub Private Sub CheckUserPassword(userPassword As String) If String.IsNullOrWhiteSpace(userPassword) Then Throw New Exception($"请输入密码!") End If End Sub ''' 读取Setting中的缓存量 Private Sub LoadSettings() My.Settings.Reload() '读取Setting中的内容 _isAutoLogin = False ' My.Settings.IsAutoLogin _isRecordPassWord = My.Settings.IsRecordPassWord End Sub ''' 保存Setting中的缓存量 Private Sub SaveSettings() My.Settings.IsAutoLogin = _isAutoLogin My.Settings.IsRecordPassWord = _isRecordPassWord If _isRecordPassWord Then My.Settings.UserAccount = Aes128.EncryptStr(TxtUserName.Text, Aes128.ServerAesKey) My.Settings.UserPassword = Aes128.EncryptStr(TxtPwd.Text, Aes128.ServerAesKey) Else My.Settings.UserAccount = String.Empty My.Settings.UserPassword = String.Empty End If My.Settings.Save() End Sub Private Sub CloseAutoLogin() If TmrAutoLogin.Enabled Then TmrAutoLogin.Stop() Text = $"{My.Application.Info.ProductName} Login [Auto Login Cancelled...]" End If End Sub Private Sub TxtPwd_Enter(sender As Object, e As EventArgs) Handles TxtPwd.Enter If (TxtPwd.Text.Trim().Equals("请输入密码")) Then TxtPwd.Text = "" End If End Sub Private Sub TxtUserName_Enter(sender As Object, e As EventArgs) Handles TxtUserName.Enter If (TxtUserName.Text.Trim().Equals("请输入账号")) Then TxtUserName.Text = "" End If End Sub Private Sub TxtUserName_Leave(sender As Object, e As EventArgs) Handles TxtUserName.Leave 'TxtUserName.ForeColor = Color.Black If (String.IsNullOrWhiteSpace(TxtUserName.Text)) Then TxtUserName.ForeColor = Color.FromArgb(0, 155, 134) TxtUserName.Text = "请输入账号" End If End Sub Private Sub TxtPwd_Leave(sender As Object, e As EventArgs) Handles TxtPwd.Leave 'TxtPwd.ForeColor = Color.Black TxtPwd.PasswordChar = "*" If (String.IsNullOrWhiteSpace(TxtPwd.Text)) OrElse TxtUserName.Text.Trim().Equals("请输入账号") Then TxtPwd.ForeColor = Color.FromArgb(0, 155, 134) TxtPwd.PasswordChar = String.Empty TxtPwd.Text = "请输入密码" End If End Sub End Class