Files
Desktop_BLVStudio/BLV_Studio/FrmLogin.vb

222 lines
7.3 KiB
VB.net
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Imports Newtonsoft.Json
Public Class BFrmLogin
' TODO: 插入代码,以使用提供的用户名和密码执行自定义的身份验证
' (请参阅 https://go.microsoft.com/fwlink/?LinkId=35339)。
' 随后自定义主体可附加到当前线程的主体,如下所示:
' My.User.CurrentPrincipal = CustomPrincipal
' 其中 CustomPrincipal 是用于执行身份验证的 IPrincipal 实现。
' 随后My.User 将返回 CustomPrincipal 对象中封装的标识信息
' 如用户名、显示名等
''' <summary>是否记住密码</summary>
Private _isRecordPassWord As Boolean
''' <summary>是否自动登录</summary>
Private _isAutoLogin As Boolean
''' <summary>是否正在登录中</summary>
Private _isLogging As Boolean
''' <summary>产品索引</summary>
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
''' <summary>记住密码复选框状态修改触发事件</summary>
Private Sub ChkKeepPwd_CheckedChanged(sender As Object, e As EventArgs) Handles ChkRecordPwd.CheckedChanged
_isRecordPassWord = ChkRecordPwd.Checked
End Sub
''' <summary>自动登录复选框状态修改触发事件</summary>
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
''' <summary>读取Setting中的缓存量</summary>
Private Sub LoadSettings()
My.Settings.Reload() '读取Setting中的内容
_isAutoLogin = False ' My.Settings.IsAutoLogin
_isRecordPassWord = My.Settings.IsRecordPassWord
End Sub
''' <summary>保存Setting中的缓存量</summary>
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