453 lines
15 KiB
VB.net
453 lines
15 KiB
VB.net
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 |