Files
Desktop_BLVStudio_EN/BLV_Studio/Control/FrmLogin.vb
2025-12-11 14:22:51 +08:00

453 lines
15 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 System.Data.Common
Imports System.Drawing.Drawing2D
Imports System.IO
Imports System.Net
Imports System.Text
Imports Newtonsoft.Json
Public Class FrmLogin
#Region "多语种"
''' <summary> 语言名称和版本信息 </summary>
Public dicNC As New Dictionary(Of String, Integer)
''' <summary>
''' 初始化多语种
''' </summary>
Private Sub InitmultiLanguage()
Dim lag As DataTable = GetCloudVersionInfo()
For index = 0 To lag.Rows.Count - 1
dicNC.Add(lag(index)(0), lag(index)(1))
Next
ComboBox1.Items.AddRange(dicNC.Keys.ToArray)
If ComboBox1.Items.Count > 0 Then ComboBox1.SelectedIndex = 0
End Sub
''' <summary>
''' 获取云端数据版本
''' </summary>
''' <returns></returns>
Private Function GetCloudVersionInfo() As DataTable
Dim dtVer As DataTable = _SqlLogin.GetCloudVersionInfo()
Return dtVer
End Function
''' <summary>
''' 获取云端数据
''' </summary>
''' <returns></returns>
Private Function GetCloudDataInfo(languageName As String) As DataTable
Dim dtData As DataTable = _SqlLogin.GetCloudDataInfo(languageName)
Return dtData
End Function
''' <summary>
''' 初始化界面控件文本
''' </summary>
Private Sub InitMultiLanguageInfo()
'If IsNothing(LanguageData) Then Return
Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.Login) & $" v{Application.ProductVersion}"
UsernameLabel.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.UserName)
PasswordLabel.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.PassWord)
CheckBox1.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.AutomaticLogin)
LblLanguage.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.Language)
CheckBox2.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.RememberPassWord)
OK.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.LoginDetermine)
Cancel.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.LoginCancel)
End Sub
#End Region
#Region "登录接口"
Public _countIndex As Integer = 0
''' <summary>
''' 处理登录信息
''' </summary>
Private Function DealLoginInfo() As Boolean
Dim user As String = UsernameTextBox.Text
Dim pwd As String = PasswordTextBox.Text
user = user.Trim()
pwd = pwd.Trim()
' MsgBox("1.1")
Dim jsonString As String = String.Empty
Try
jsonString = PostData("http://auth.blv-oa.com/OTApi/Login", $"Uid={user}&Pwd={pwd}&appid=1")
'jsonString = PostData("http://47.119.147.104:90/OTApi/Login", $"Uid={user}&Pwd={pwd}&appid=1")
' MsgBox("1.2")
Catch ex As Exception
MsgBox($"{ex.Message}!请联系管理员")
' MsgBox("1.3")
End Try
Console.WriteLine(jsonString)
If jsonString = Nothing Then
Return False
End If
'MsgBox("1.4")
Dim login As LoginBLL = JsonConvert.DeserializeObject(Of LoginBLL)(jsonString)
If login Is Nothing Then
MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.LoginFailed)}{LanguageData.StringList(MultiLanguageDAL.StringEnum.NoLoginInformationIsDisplayed)}")
Return False
End If
'MsgBox("1.5")
Console.WriteLine($"解析登录数据:{login.Status} {login.Message}")
If login.Status <> 200 Then
MsgBox($"登陆错误:{login.Status}-" & login.Message)
Return False
End If
' MsgBox("1.6")
'取数据
Dim index As Integer = 0
_loginData.Clear()
_countIndex = 0
'MsgBox("1.7")
For i = 0 To login.Data.HotelData.Count - 1
'组ID, 组名
For j = 0 To login.Data.HotelData.Item(i).Hotels.Count - 1
'酒店ID, 酒店编码, 酒店名称
For k = 0 To login.Data.HotelData.Item(i).Hotels.Item(j).Auth.Count - 1
'权限状态权限ID, 权限名称
index += 1
Dim data As New LoginReturnDataBLL
data.HotelGroupsId = login.Data.HotelData.Item(i).HotelGroupsId
data.HotelGroupsName = login.Data.HotelData.Item(i).HotelGroupsName
data.HotelId = login.Data.HotelData.Item(i).Hotels.Item(j).HotelId
data.Code = login.Data.HotelData.Item(i).Hotels.Item(j).Code
data.HotelName = login.Data.HotelData.Item(i).Hotels.Item(j).HotelName
data.AuthotypeId = login.Data.HotelData.Item(i).Hotels.Item(j).Auth(k).AuthotypeId
data.AuthorityId = login.Data.HotelData.Item(i).Hotels.Item(j).Auth(k).AuthorityId
data.AuthorityName = login.Data.HotelData.Item(i).Hotels.Item(j).Auth(k).AuthorityName
_countIndex += 1
Dim key As String = $"{login.Data.HotelData.Item(i).Hotels.Item(j).HotelName}{login.Data.HotelData.Item(i).Hotels.Item(j).Code}-{_countIndex}"
_loginData.Add(key, data)
Next
Next
' MsgBox("1.8")
Next
'MsgBox("1.9")
Return True
End Function
''' <summary>
''' Post请求
''' </summary>
''' <param name="url"></param>
''' <param name="data"></param>
''' <returns></returns>
Public Shared Function PostData(ByVal url As String, ByVal data As String) As String
ServicePointManager.Expect100Continue = False
Dim request As HttpWebRequest = WebRequest.Create(url)
'//Post请求方式
request.Method = "POST"
'内容类型
request.ContentType = "application/x-www-form-urlencoded"
'将URL编码后的字符串转化为字节
Dim encoding As New UTF8Encoding()
Dim bys As Byte() = encoding.GetBytes(data)
'设置请求的 ContentLength
request.ContentLength = bys.Length
'获得请 求流
Dim newStream As Stream = request.GetRequestStream()
newStream.Write(bys, 0, bys.Length)
newStream.Close()
'获得响应流
Dim sr As StreamReader = New StreamReader(request.GetResponse().GetResponseStream)
Return sr.ReadToEnd
End Function
'Public Shared Function GetData(url As String) As String
' Dim str As String = $"http://47.119.147.104:90/OTApi/Login?Uid=AdminBlv&Pwd=123456&appid=1"
' Dim request As HttpWebRequest = CType(WebRequest.Create(str), HttpWebRequest)
' request.Accept = "text/html,application/xhtml+xml,*/*"
' request.ContentType = "application/json"
' request.Method = "Post"
' Dim sr As StreamReader = New StreamReader(request.GetResponse().GetResponseStream)
' Return sr.ReadToEnd
'End Function
'Public Shared Function GetData(ByVal url As String, ByVal data As String) As String
' Dim request As HttpWebRequest = WebRequest.Create(url + "?" + data)
' request.Method = "GET"
' Dim sr As StreamReader = New StreamReader(request.GetResponse().GetResponseStream)
' Return sr.ReadToEnd
'End Function
#End Region
#Region "登录"
''' <summary> 是否正在登录 </summary>
Private _isLogging As Boolean
''' <summary>
''' 登录界面加载事件
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub FrmLogin_Load(sender As Object, e As EventArgs) Handles Me.Load
If ConnLoginDataSourse() = False Then
MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.DatabaseConnectionFailed)}{LanguageData.StringList(MultiLanguageDAL.StringEnum.CheckWhetherTheNetworkConnectionIsSuccessful)}")
Return
End If
'连接登录数据库
InitmultiLanguage() '多语种初始化
InitMultiLanguageInfo()
UsernameTextBox.Text = My.Settings.User
PasswordTextBox.Text = My.Settings.PassWord
'asdfghjkl()
End Sub
''' <summary>
''' 点击登录
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click
'MsgBox("0")
DealHotelListInterfaceInfo()
'DealHostListInterfaceInfo()
'DealSetHostMACInterfaceInfo()
'MsgBox("1")
Static time As Date = Now
While True
If DealLoginInfo() = False Then
Return
Else
Exit While
End If
If (Now - time).TotalMilliseconds > 2000 Then
MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.LoginTimeout)}")
Return
End If
Threading.Thread.Sleep(100)
End While
'MsgBox("2")
Try
_userNames = UsernameTextBox.Text
'If AccountLogin() = False Then '从云端获取用户信息
' Exit Sub
'End If
DialogResult = DialogResult.OK
FrmCSeriesConfig.Show()
Me.Close() '登录完成关闭登录页面
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.OkOnly, $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.LoginFailed)}") ''登录失败
End Try
'MsgBox("3")
_isLogging = False
End Sub
'''' <summary>
'''' 使用账号密码登录
'''' </summary>
'Private Function AccountLogin() As Boolean
' Dim userAccount As String = UsernameTextBox.Text
' Dim userPassword As String = PasswordTextBox.Text
' CheckUserAccount(userAccount)
' CheckUserPassword(userPassword)
' Dim dtUser As DataTable = _SqlLogin.GetUserInfo(userAccount, userPassword)
' If dtUser.Rows.Count = 0 Then
' MessageBox.Show($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.NoSuchUser)}") ''用户不存在
' Return False
' ElseIf dtUser.Rows.Count > 0 Then
' Dim createTime As String = dtUser(0)(3)
' createTime = createTime.Replace("/", "-")
' Dim userPass As String = $"{userAccount.ToUpper()}{userPassword}{createTime}"
' Dim pwd As String = GetStringMd5(userPass)
' Dim pwdcloud As String = dtUser(0)(2) '获取查询密码
' _userNames = dtUser(0)(1) '获取用户名
' 'Console.WriteLine($"用户:{_userNames}")
' 'Console.WriteLine($"输入密码:{pwd}")
' 'Console.WriteLine($"查询密码:{pwdcloud}")
' _userData = dtUser
' If GetPassWordCheck(pwd, pwdcloud) = True Then
' MessageBox.Show($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.IncorrectPasswordPleaseTryAgain)}") '’密码错误,请重试
' Return False
' End If
' End If
' Return True
'End Function
'''' <summary>
'''' 用户校验
'''' </summary>
'''' <param name="userAccount"></param>
'Private Sub CheckUserAccount(userAccount As String)
' If String.IsNullOrWhiteSpace(userAccount) Then
' Throw New Exception($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.PleaseEnterYourUserAccount)}") '’请输入用户账号!
' End If
'End Sub
'''' <summary>
'''' 密码校验
'''' </summary>
'''' <param name="userPassword"></param>
'Private Sub CheckUserPassword(userPassword As String)
' If String.IsNullOrWhiteSpace(userPassword) Then
' Throw New Exception($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.PleaseEnterYourPassword)}") '’请输入密码!
' End If
'End Sub
'''' <summary>
'''' 获取密码校验
'''' </summary>
'''' <param name="pwd">本地密码</param>
'''' <param name="pwdcloud">云端密码</param>
'''' <returns></returns>
'Private Function GetPassWordCheck(pwd As String, pwdcloud As String) As Boolean
' If String.IsNullOrWhiteSpace(pwd) OrElse String.IsNullOrWhiteSpace(pwdcloud) Then Return False
' If String.Compare(pwd, pwdcloud) = 0 Then Return False
' Return True
'End Function
''' <summary>
''' 取消登录
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub Cancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel.Click
Me.Close()
End Sub
''' <summary>
''' 窗体关闭事件
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub FrmLogin_Closed(sender As Object, e As EventArgs) Handles Me.Closed
If CheckBox2.Checked = True Then
My.Settings.User = UsernameTextBox.Text
My.Settings.PassWord = PasswordTextBox.Text
My.Settings.Save()
End If
End Sub
''' <summary>
''' 下拉选择语言
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
Dim SName As String = ComboBox1.Text
Dim path As String = $"{ComboBox1.Text}.xml"
If String.IsNullOrEmpty(SName) Then Return
If IO.File.Exists(path) Then
LanguageData = MultiLanguageDAL.DeserializeFormXml(Of MultiLanguageDAL)(path)
If LanguageData.Version <> dicNC(SName) Then
LanguageData.Version = dicNC(SName)
LanguageData.InitializeByDataTable(GetCloudDataInfo(SName))
MultiLanguageDAL.SerializeToXml(Of MultiLanguageDAL)($"{SName}.xml", LanguageData)
End If
Else
LanguageData = New MultiLanguageDAL
LanguageData.Name = SName
LanguageData.Version = dicNC(SName)
LanguageData.InitializeByDataTable(GetCloudDataInfo(SName))
MultiLanguageDAL.SerializeToXml(Of MultiLanguageDAL)($"{SName}.xml", LanguageData)
End If
'设置到控件上
InitMultiLanguageInfo()
End Sub
#End Region
Private Sub asdfghjkl()
''剪贴板
'Dim picture As Image
'If My.Computer.Clipboard.ContainsImage() Then
' picture = My.Computer.Clipboard.GetImage
'End If
''播放声音
'My.Computer.Audio.Play("SoundFile.wav", AudioPlayMode.BackgroundLoop)
''创建字体
'Dim italicFont As New Font("Courier New", 12, FontStyle.Italic)
''控件&组件
'' For more information on the rich text format characters, see: http://www.microsoft.com/downloads/details.aspx?FamilyID=e5b8ebc2-6ad6-49f0-8c90-e4f763e3f04f&DisplayLang=en
'RichTextBox1.Rtf = "{\rtf1\ansi This is in \b bold\b0.}"
''窗体控件添加提示
'Dim tooltip As New ToolTip()
'tooltip.SetToolTip(OK, "你好")
'With ProgressBar1
' .Minimum = 1
' .Maximum = 100000
' .Value = 1
' .Step = 1
' For i As Integer = .Minimum To .Maximum
' ' Perform one step of the action being tracked.
' .PerformStep()
' Next i
'End With
''绘图
'Dim path As New GraphicsPath()
'Dim points() As Point = {
' New Point(0, 0),
' New Point(100, 0),
' New Point(100, 100),
' New Point(0, 0)}
'path.AddLines(points)
'Dim surface As Graphics = PictureBox1.CreateGraphics
'surface.DrawPath(Pens.Black, path)
End Sub
End Class