Imports System.Data.Common Imports System.Drawing.Drawing2D Imports System.IO Imports System.Net Imports System.Text Imports Newtonsoft.Json Public Class FrmLogin #Region "多语种" ''' 语言名称和版本信息 Public dicNC As New Dictionary(Of String, Integer) ''' ''' 初始化多语种 ''' 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 ''' ''' 获取云端数据版本 ''' ''' Private Function GetCloudVersionInfo() As DataTable Dim dtVer As DataTable = _SqlLogin.GetCloudVersionInfo() Return dtVer End Function ''' ''' 获取云端数据 ''' ''' Private Function GetCloudDataInfo(languageName As String) As DataTable Dim dtData As DataTable = _SqlLogin.GetCloudDataInfo(languageName) Return dtData End Function ''' ''' 初始化界面控件文本 ''' 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 ''' ''' 处理登录信息 ''' 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 ''' ''' Post请求 ''' ''' ''' ''' 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 "登录" ''' 是否正在登录 Private _isLogging As Boolean ''' ''' 登录界面加载事件 ''' ''' ''' 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 ''' ''' 点击登录 ''' ''' ''' 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 '''' '''' 使用账号密码登录 '''' '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 '''' '''' 用户校验 '''' '''' 'Private Sub CheckUserAccount(userAccount As String) ' If String.IsNullOrWhiteSpace(userAccount) Then ' Throw New Exception($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.PleaseEnterYourUserAccount)}!") '’请输入用户账号! ' End If 'End Sub '''' '''' 密码校验 '''' '''' 'Private Sub CheckUserPassword(userPassword As String) ' If String.IsNullOrWhiteSpace(userPassword) Then ' Throw New Exception($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.PleaseEnterYourPassword)}!") '’请输入密码! ' End If 'End Sub '''' '''' 获取密码校验 '''' '''' 本地密码 '''' 云端密码 '''' '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 ''' ''' 取消登录 ''' ''' ''' Private Sub Cancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel.Click Me.Close() End Sub ''' ''' 窗体关闭事件 ''' ''' ''' 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 ''' ''' 下拉选择语言 ''' ''' ''' 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