diff --git a/ClientsLibrary/AccountSupport/AccountLogin.cs b/ClientsLibrary/AccountSupport/AccountLogin.cs
new file mode 100644
index 0000000..061ac4c
--- /dev/null
+++ b/ClientsLibrary/AccountSupport/AccountLogin.cs
@@ -0,0 +1,195 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HslCommunication;
+using System.Threading;
+using Newtonsoft.Json.Linq;
+using CommonLibrary;
+using HslCommunication.BasicFramework;
+
+namespace ClientsLibrary
+{
+
+ /*********************************************************************************
+ *
+ * 统一的账户登录模型
+ *
+ *
+ *********************************************************************************/
+
+
+ ///
+ /// 用户客户端使用的统一登录的逻辑
+ ///
+ public class AccountLogin
+ {
+ ///
+ /// 系统统一的登录模型
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static bool AccountLoginServer(Action message_show, Action start_update, Action thread_finish,string userName,string password,bool remember,string clientType)
+ {
+ message_show.Invoke("正在维护检查...");
+
+ Thread.Sleep(200);
+
+ // 请求指令头数据,该数据需要更具实际情况更改
+ OperateResultString result = UserClient.Net_simplify_client.ReadFromServer(CommonLibrary.CommonHeadCode.SimplifyHeadCode.维护检查);
+ if (result.IsSuccess)
+ {
+ byte[] temp = Encoding.Unicode.GetBytes(result.Content);
+ // 例如返回结果为1说明允许登录,0则说明服务器处于维护中,并将信息显示
+ if (result.Content != "1")
+ {
+ message_show.Invoke(result.Content.Substring(1));
+ thread_finish.Invoke();
+ return false;
+ }
+ }
+ else
+ {
+ // 访问失败
+ message_show.Invoke(result.Message);
+ thread_finish.Invoke();
+ return false;
+ }
+
+
+
+ // 检查账户
+ message_show.Invoke("正在检查账户...");
+
+ // 延时
+ Thread.Sleep(200);
+
+ //===================================================================================
+ // 根据实际情况校验,选择数据库校验或是将用户名密码发至服务器校验
+ // 以下展示了服务器校验的方法,如您需要数据库校验,请删除下面并改成SQL访问验证的方式
+
+ // 包装数据
+ JObject json = new JObject
+ {
+ { UserAccount.UserNameText, new JValue(userName) },
+ { UserAccount.PasswordText, new JValue(password) },
+ { UserAccount.LoginWayText, new JValue(clientType) },
+ { UserAccount.DeviceUniqueID, new JValue(UserClient.JsonSettings.SystemInfo) }
+ };
+ result = UserClient.Net_simplify_client.ReadFromServer(CommonHeadCode.SimplifyHeadCode.账户检查, json.ToString());
+ if (result.IsSuccess)
+ {
+ // 服务器应该返回账户的信息
+ UserAccount account = JObject.Parse(result.Content).ToObject();
+ if (!account.LoginEnable)
+ {
+ // 不允许登录
+ message_show.Invoke(account.ForbidMessage);
+ thread_finish.Invoke();
+ return false;
+ }
+ UserClient.UserAccount = account;
+ }
+ else
+ {
+ // 访问失败
+ message_show.Invoke(result.Message);
+ thread_finish.Invoke();
+ return false;
+ }
+
+ // 登录成功,进行保存用户名称和密码
+ UserClient.JsonSettings.LoginName = userName;
+ UserClient.JsonSettings.Password = remember ? password : "";
+ UserClient.JsonSettings.LoginTime = DateTime.Now;
+ UserClient.JsonSettings.SaveToFile();
+
+
+ // 版本验证
+ message_show.Invoke("正在验证版本...");
+
+ // 延时
+ Thread.Sleep(200);
+
+ result = UserClient.Net_simplify_client.ReadFromServer(CommonLibrary.CommonHeadCode.SimplifyHeadCode.更新检查);
+ if (result.IsSuccess)
+ {
+ // 服务器应该返回服务器的版本号
+ SystemVersion sv = new SystemVersion(result.Content);
+ // 系统账户跳过低版本检测,该做法存在一定的风险,需要开发者仔细确认安全隐患
+ if (UserClient.UserAccount.UserName != "admin")
+ {
+ if (UserClient.CurrentVersion != sv)
+ {
+ // 保存新版本信息
+ UserClient.JsonSettings.IsNewVersionRunning = true;
+ UserClient.JsonSettings.SaveToFile();
+ // 和当前系统版本号不一致,启动更新
+ start_update.Invoke();
+ return false;
+ }
+ }
+ else
+ {
+ if (UserClient.CurrentVersion < sv)
+ {
+ // 保存新版本信息
+ UserClient.JsonSettings.IsNewVersionRunning = true;
+ UserClient.JsonSettings.SaveToFile();
+ // 和当前系统版本号不一致,启动更新
+ start_update.Invoke();
+ return false;
+ }
+ }
+ }
+ else
+ {
+ // 访问失败
+ message_show.Invoke(result.Message);
+ thread_finish.Invoke();
+ return false;
+ }
+
+
+ //
+ // 验证结束后,根据需要是否下载服务器的数据,或是等到进入主窗口下载也可以
+ // 如果有参数决定主窗口的显示方式,那么必要在下面向服务器请求数据
+ // 以下展示了初始化参数的功能
+
+ message_show.Invoke("正在下载参数...");
+
+ // 延时
+ Thread.Sleep(200);
+
+
+ result = UserClient.Net_simplify_client.ReadFromServer(CommonLibrary.CommonHeadCode.SimplifyHeadCode.参数下载);
+ if (result.IsSuccess)
+ {
+ // 服务器返回初始化的数据,此处进行数据的提取,有可能包含了多个数据
+ json = JObject.Parse(result.Content);
+ // 例如公告数据
+ UserClient.Announcement = SoftBasic.GetValueFromJsonObject(json, nameof(UserClient.Announcement), "");
+ if (json[nameof(UserClient.SystemFactories)] != null)
+ {
+ UserClient.SystemFactories = json[nameof(UserClient.SystemFactories)].ToObject>();
+ }
+ }
+ else
+ {
+ // 访问失败
+ message_show.Invoke(result.Message);
+ thread_finish.Invoke();
+ return false;
+ }
+
+ return true;
+ }
+
+ }
+}
diff --git a/ClientsLibrary/FormDownloading.Designer.cs b/ClientsLibrary/BasicSupport/FormDownloading.Designer.cs
similarity index 100%
rename from ClientsLibrary/FormDownloading.Designer.cs
rename to ClientsLibrary/BasicSupport/FormDownloading.Designer.cs
diff --git a/ClientsLibrary/FormDownloading.cs b/ClientsLibrary/BasicSupport/FormDownloading.cs
similarity index 100%
rename from ClientsLibrary/FormDownloading.cs
rename to ClientsLibrary/BasicSupport/FormDownloading.cs
diff --git a/ClientsLibrary/FormDownloading.resx b/ClientsLibrary/BasicSupport/FormDownloading.resx
similarity index 100%
rename from ClientsLibrary/FormDownloading.resx
rename to ClientsLibrary/BasicSupport/FormDownloading.resx
diff --git a/ClientsLibrary/BasicSupport/FormShowMachineId.Designer.cs b/ClientsLibrary/BasicSupport/FormShowMachineId.Designer.cs
new file mode 100644
index 0000000..b3627e6
--- /dev/null
+++ b/ClientsLibrary/BasicSupport/FormShowMachineId.Designer.cs
@@ -0,0 +1,83 @@
+namespace ClientsLibrary
+{
+ partial class FormShowMachineId
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormShowMachineId));
+ this.textBox1 = new System.Windows.Forms.TextBox();
+ this.userButton_login = new HslCommunication.Controls.UserButton();
+ this.SuspendLayout();
+ //
+ // textBox1
+ //
+ this.textBox1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.textBox1.Location = new System.Drawing.Point(29, 26);
+ this.textBox1.Name = "textBox1";
+ this.textBox1.ReadOnly = true;
+ this.textBox1.Size = new System.Drawing.Size(294, 29);
+ this.textBox1.TabIndex = 0;
+ //
+ // userButton_login
+ //
+ this.userButton_login.BackColor = System.Drawing.Color.Transparent;
+ this.userButton_login.CustomerInformation = "";
+ this.userButton_login.EnableColor = System.Drawing.Color.FromArgb(((int)(((byte)(190)))), ((int)(((byte)(190)))), ((int)(((byte)(190)))));
+ this.userButton_login.Font = new System.Drawing.Font("微软雅黑", 9F);
+ this.userButton_login.Location = new System.Drawing.Point(125, 65);
+ this.userButton_login.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
+ this.userButton_login.Name = "userButton_login";
+ this.userButton_login.Size = new System.Drawing.Size(108, 27);
+ this.userButton_login.TabIndex = 6;
+ this.userButton_login.UIText = "复制到剪贴板";
+ this.userButton_login.Click += new System.EventHandler(this.userButton_login_Click);
+ //
+ // FormShowMachineId
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(356, 105);
+ this.Controls.Add(this.userButton_login);
+ this.Controls.Add(this.textBox1);
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "FormShowMachineId";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+ this.Text = "显示机器码";
+ this.Load += new System.EventHandler(this.FormShowMachineId_Load);
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.TextBox textBox1;
+ private HslCommunication.Controls.UserButton userButton_login;
+ }
+}
\ No newline at end of file
diff --git a/ClientsLibrary/BasicSupport/FormShowMachineId.cs b/ClientsLibrary/BasicSupport/FormShowMachineId.cs
new file mode 100644
index 0000000..975fb6c
--- /dev/null
+++ b/ClientsLibrary/BasicSupport/FormShowMachineId.cs
@@ -0,0 +1,29 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace ClientsLibrary
+{
+ public partial class FormShowMachineId : Form
+ {
+ public FormShowMachineId()
+ {
+ InitializeComponent();
+ }
+
+ private void userButton_login_Click(object sender, EventArgs e)
+ {
+ Clipboard.SetText(textBox1.Text);
+ }
+
+ private void FormShowMachineId_Load(object sender, EventArgs e)
+ {
+ textBox1.Text = UserClient.JsonSettings.SystemInfo;
+ }
+ }
+}
diff --git a/ClientsLibrary/BasicSupport/FormShowMachineId.resx b/ClientsLibrary/BasicSupport/FormShowMachineId.resx
new file mode 100644
index 0000000..a8166cc
--- /dev/null
+++ b/ClientsLibrary/BasicSupport/FormShowMachineId.resx
@@ -0,0 +1,294 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+
+ AAABAAYAICAQAAEABADoAgAAZgAAABAQEAABAAQAKAEAAE4DAAAgIAAAAQAIAKgIAAB2BAAAEBAAAAEA
+ CABoBQAAHg0AACAgAAABACAAqBAAAIYSAAAQEAAAAQAgAGgEAAAuIwAAKAAAACAAAABAAAAAAQAEAAAA
+ AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA
+ /wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAAAAAAAAAA///////////////////wAP//
+ ////////////////8AD/d3d3f/d3d3f/d3d3f/AA/3d3d3/3d3d3/3d3d3/wAP93d3d/93d3d/93d3d/
+ 8AD/d3d3f/d3d3f/d3d3f/AA/3d3d3/3d3d3/3d3d3/wAP93d3d/93d3d/93d3d/8AD/d3d3f/d3d3f/
+ d3d3f/AA///////////////////wAP//////////////////8AD/d3d3f/d3d3f/AAAAAAAA/3d3d3/3
+ d3d3/wAAAAAAAP93d3d/93d3d/8AAAAAAAD/d3d3f/d3d3f/AA/wAAAA/3d3d3/3d3d3/wD//wAAAP93
+ d3d/93d3d/8P///wAAD/d3d3f/d3d3f///d//wAA//////////////93d//wAP/////////////3d3d/
+ /wD/d3d3f/AAAA//d3d3d//w/3d3d3/wAAD/93d3d3d///93d3d/8AAA//d3d3d3f///d3d3f/AAAA//
+ d3d3d//w/3d3d3/wAAAA//d3d3//AP93d3d/8AAAAA//d3f/8AD/d3d3f/AAAAAA//d//wAA/4iIiI/w
+ AAAAAA////AAAP//////8AAAAAAA//8AAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAP//
+ //8AAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAD/8AAA//AAAP/wAA
+ Dn8AAAw/AAAIHwAAAA8AAAAHAAAAAwAfgAEAHwAAAB8AAAAfgAEAH8ADAB/gBwAf8A8AH/gfAB/8P///
+ /n//////KAAAABAAAAAgAAAAAQAEAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAACA
+ gACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAA
+ AAAAAAAAD////////wAPd393f3d/AA93f3d/d38AD3d/d393fwAP////////AA93f3d/AAAAD3d/d38A
+ 8AAPd393fw9/AA//////93fwD3d/AA93d38Pd38AAPd38A93fwAAD38AD///AAAA8AAAAAAAAAAAAP//
+ AAD//wAAgAMAAIADAACAAwAAgAMAAIADAACAPwAAgDcAAIAjAACAAQAAg4AAAIPBAACD4wAAg/cAAP//
+ AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAEAAAAAAAAAAAAAAABAAAAAQAAAAAAAEJCQgCGhoYAycnJAPb2
+ 9gD5+fkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQE
+ BAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQEAQEBAQEBAQQEAQEBAQEBAQQEAQEBAQEBAQQEAAAABAQBAQEB
+ AQEBBAQBAQEBAQEBBAQBAQEBAQEBBAQAAAAEBAEBAQEBAQEEBAEBAQEBAQEEBAEBAQEBAQEEBAAAAAQE
+ AQEBAQEBAQQEAQEBAQEBAQQEAQEBAQEBAQQEAAAABAQBAQEBAQEBBAQBAQEBAQEBBAQBAQEBAQEBBAQA
+ AAAEBAEBAQEBAQEEBAEBAQEBAQEEBAEBAQEBAQEEBAAAAAQEAQEBAQEBAQQEAQEBAQEBAQQEAQEBAQEB
+ AQQEAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQE
+ BAQEBAQEBAAAAAQEAQEBAQEBAQQEAQEBAQEBAQQEAAAAAAAAAAAAAAAABAQBAQEBAQEBBAQBAQEBAQEB
+ BAQAAAAAAAAAAAAAAAAEBAEBAQEBAQEEBAEBAQEBAQEEBAAAAAAAAAAAAAAAAAQEAQEBAQEBAQQEAQEB
+ AQEBAQQEAAAABQUAAAAAAAAABAQBAQEBAQEBBAQBAQEBAQEBBAQAAAUEBAUAAAAAAAAEBAEBAQEBAQEE
+ BAEBAQEBAQEEBAAFBAQEBAUAAAAAAAQEAQEBAQEBAQQEAQEBAQEBAQQEBQQEAgIEBAUAAAAABAQEBAQE
+ BAQEBAQEBAQEBAQEBAQEBAIBAQIEBAUAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQCAQEBAQIEBAUAAAQE
+ AQEBAQEBAQQEAAAAAAAABQQEAgEBAQEBAQIEBAUABAQBAQEBAQEBBAQAAAAAAAUEBAIBAQEBAQEBAQIE
+ BAUEBAEBAQEBAQEEBAAAAAAABQQEAgEBAQEBAQEBAgQEBQQEAQEBAQEBAQQEAAAAAAAABQQEAgEBAQEB
+ AQIEBAUABAQBAQEBAQEBBAQAAAAAAAAABQQEAgEBAQECBAQFAAAEBAEBAQEBAQEEBAAAAAAAAAAABQQE
+ AgEBAgQEBQAAAAQEAQEBAQEBAQQEAAAAAAAAAAAABQQEAgIEBAUAAAAABAQDAwMDAwMDBAQAAAAAAAAA
+ AAAABQQEBAQFAAAAAAAEBAQEBAQEBAQEBAAAAAAAAAAAAAAABQQEBQAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAABQUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////AAAABwAA
+ AAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAA//AAAP/wAAD/8AAA5/AAAMPwAA
+ CB8AAAAPAAAABwAAAAMAH4ABAB8AAAAfAAAAH4ABAB/AAwAf4AcAH/APAB/4HwAf/D////5//////ygA
+ AAAQAAAAIAAAAAEACAAAAAAAAAEAAAAAAAAAAAAAAAEAAAABAAAAAAAAQkJCAGRkZACGhoYA6+vrAPb2
+ 9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAABQUFBQUFBQUFBQUFBQAAAAUBAQEFAQEBBQEBAQUAAAAFAQEBBQEBAQUBAQEF
+ AAAABQEBAQUBAQEFAQEBBQAAAAUFBQUFBQUFBQUFBQUAAAAFAQEBBQEBAQUAAAAAAAAABQEBAQUBAQEF
+ AAAFAAAAAAUBAQEFAQEBBQAEAwQAAAAFBQUFBQUFBQUEAgECBAAABQEBAQUAAAAFAwEBAQMFAAUBAQEF
+ AAAAAAQCAQIEAAAFAQEBBQAAAAAABAMEAAAABQUFBQUAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAP//
+ AAD//wAAgAMAAIADAACAAwAAgAMAAIADAACAPwAAgDcAAIAjAACAAQAAg4AAAIPBAACD4wAAg/cAAP//
+ AAAoAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b2
+ 9v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b2
+ 9v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2/wAAAAAAAAAAAAAAAPb2
+ 9v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b2
+ 9v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/AAAAAAAA
+ AAAAAAAA9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v9CQkL/QkJC/0JC
+ Qv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b2
+ 9v8AAAAAAAAAAAAAAAD29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2/0JC
+ Qv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JC
+ Qv/29vb/9vb2/wAAAAAAAAAAAAAAAPb29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//b2
+ 9v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JC
+ Qv9CQkL/QkJC//b29v/29vb/AAAAAAAAAAAAAAAA9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JC
+ Qv9CQkL/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v9CQkL/QkJC/0JC
+ Qv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v8AAAAAAAAAAAAAAAD29vb/9vb2/0JCQv9CQkL/QkJC/0JC
+ Qv9CQkL/QkJC/0JCQv/29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2/0JC
+ Qv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2/wAAAAAAAAAAAAAAAPb29v/29vb/QkJC/0JC
+ Qv9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//b2
+ 9v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/AAAAAAAAAAAAAAAA9vb2//b2
+ 9v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JC
+ Qv9CQkL/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v8AAAAAAAAAAAAA
+ AAD29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b2
+ 9v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2/wAA
+ AAAAAAAAAAAAAPb29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b2
+ 9v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b2
+ 9v/29vb/AAAAAAAAAAAAAAAA9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b2
+ 9v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JC
+ Qv/29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2/wAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JC
+ Qv9CQkL/QkJC//b29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/AAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2//b29v9CQkL/QkJC/0JC
+ Qv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b2
+ 9v8AAAAAAAAAAAAAAAD29vaf9vb2nwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2/0JC
+ Qv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JC
+ Qv/29vb/9vb2/wAAAAAAAAAA9vb2n/b29v/29vb/9vb2nwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb2
+ 9v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JC
+ Qv9CQkL/QkJC//b29v/29vb/AAAAAPb29p/29vb/9vb2//b29v/29vb/9vb2nwAAAAAAAAAAAAAAAAAA
+ AAAAAAAA9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v9CQkL/QkJC/0JC
+ Qv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vaf9vb2//b29v+Ghob/hoaG//b29v/29vb/9vb2nwAA
+ AAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b2
+ 9v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/hoaG/0JCQv9CQkL/hoaG//b2
+ 9v/29vb/9vb2nwAAAAAAAAAAAAAAAPb29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b2
+ 9v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2/4aGhv9CQkL/QkJC/0JC
+ Qv9CQkL/hoaG//b29v/29vb/9vb2nwAAAAAAAAAA9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JC
+ Qv9CQkL/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vaf9vb2//b29v+Ghob/QkJC/0JC
+ Qv9CQkL/QkJC/0JCQv9CQkL/hoaG//b29v/29vb/9vb2nwAAAAD29vb/9vb2/0JCQv9CQkL/QkJC/0JC
+ Qv9CQkL/QkJC/0JCQv/29vb/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2n/b29v/29vb/hoaG/0JC
+ Qv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/hoaG//b29v/29vb/9vb2n/b29v/29vb/QkJC/0JC
+ Qv9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAD29vaf9vb2//b2
+ 9v+Ghob/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv+Ghob/9vb2//b29v/29vaf9vb2//b2
+ 9v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAD29vaf9vb2//b29v+Ghob/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/hoaG//b29v/29vb/9vb2nwAA
+ AAD29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2/wAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAD29vaf9vb2//b29v+Ghob/QkJC/0JCQv9CQkL/QkJC/4aGhv/29vb/9vb2//b2
+ 9p8AAAAAAAAAAPb29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/AAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vaf9vb2//b29v+Ghob/QkJC/0JCQv+Ghob/9vb2//b2
+ 9v/29vafAAAAAAAAAAAAAAAA9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b2
+ 9v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vaf9vb2//b29v+Ghob/hoaG//b2
+ 9v/29vb/9vb2nwAAAAAAAAAAAAAAAAAAAAD29vb/9vb2/8nJyf/Jycn/ycnJ/8nJyf/Jycn/ycnJ/8nJ
+ yf/29vb/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vaf9vb2//b2
+ 9v/29vb/9vb2//b29p8AAAAAAAAAAAAAAAAAAAAAAAAAAPb29v/29vb/9vb2//b29v/29vb/9vb2//b2
+ 9v/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAD29vaf9vb2//b29v/29vafAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2QPb29kD29vZA9vb2QPb2
+ 9kD29vZA9vb2QPb29kD29vZA9vb2QPb29kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAD29vaf9vb2nwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//
+ //8AAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAD/8AAA//AAAP/wAA
+ Dn8AAAw/AAAIHwAAAA8AAAAHAAAAAwAfgAEAHwAAAB8AAAAfgAEAH8ADAB/gBwAf8A8AH/gfAB/8PwAf
+ /n//////KAAAABAAAAAgAAAAAQAgAAAAAABABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb2
+ 9v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAA
+ AAD29vb/QkJC/0JCQv9CQkL/9vb2/0JCQv9CQkL/QkJC//b29v9CQkL/QkJC/0JCQv/29vb/AAAAAAAA
+ AAAAAAAA9vb2/0JCQv9CQkL/QkJC//b29v9CQkL/QkJC/0JCQv/29vb/QkJC/0JCQv9CQkL/9vb2/wAA
+ AAAAAAAAAAAAAPb29v9CQkL/QkJC/0JCQv/29vb/QkJC/0JCQv9CQkL/9vb2/0JCQv9CQkL/QkJC//b2
+ 9v8AAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b2
+ 9v/29vb/AAAAAAAAAAAAAAAA9vb2/0JCQv9CQkL/QkJC//b29v9CQkL/QkJC/0JCQv/29vb/AAAAAAAA
+ AAD29vYgAAAAAAAAAAAAAAAAAAAAAPb29v9CQkL/QkJC/0JCQv/29vb/QkJC/0JCQv9CQkL/9vb2/wAA
+ AAD29vZg9vb2//b29mAAAAAAAAAAAAAAAAD29vb/QkJC/0JCQv9CQkL/9vb2/0JCQv9CQkL/QkJC//b2
+ 9v/29vZg6+vr/4aGhv/r6+v/9vb2YAAAAAAAAAAA9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b2
+ 9v/29vb/6+vr/2RkZP9CQkL/ZGRk/+vr6//29vZgAAAAAPb29v9CQkL/QkJC/0JCQv/29vb/AAAAAAAA
+ AAD29vYg9vb2/4aGhv9CQkL/QkJC/0JCQv+Ghob/9vb27wAAAAD29vb/QkJC/0JCQv9CQkL/9vb2/wAA
+ AAAAAAAAAAAAAPb29mDr6+v/ZGRk/0JCQv9kZGT/6urq7/b29jAAAAAA9vb2/0JCQv9CQkL/QkJC//b2
+ 9v8AAAAAAAAAAAAAAAAAAAAA9vb2YOvr6/+Ghob/6urq7/b29jAAAAAAAAAAAPb29v/29vb/9vb2//b2
+ 9v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAD29vZg9vb27/b29jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAIAD
+ AACAAwAAgAMAAIADAACAAwAAgDcAAIAjAACAAQAAgAAAAIMAAACDgAAAg8EAAIPjAAD//wAA
+
+
+
\ No newline at end of file
diff --git a/ClientsLibrary/ClientsLibrary.csproj b/ClientsLibrary/ClientsLibrary.csproj
index 61116c8..839b402 100644
--- a/ClientsLibrary/ClientsLibrary.csproj
+++ b/ClientsLibrary/ClientsLibrary.csproj
@@ -49,12 +49,19 @@
-
+
+
Form
-
+
FormDownloading.cs
+
+ Form
+
+
+ FormShowMachineId.cs
+
Form
@@ -78,9 +85,12 @@
-
+
FormDownloading.cs
+
+ FormShowMachineId.cs
+
FormLogView.cs
diff --git a/ClientsLibrary/RegistryEditor_5838.ico b/ClientsLibrary/RegistryEditor_5838.ico
new file mode 100644
index 0000000..7e7fe7e
Binary files /dev/null and b/ClientsLibrary/RegistryEditor_5838.ico differ
diff --git a/ClientsLibrary/UserClient.cs b/ClientsLibrary/UserClient.cs
index d625cbe..3455c38 100644
--- a/ClientsLibrary/UserClient.cs
+++ b/ClientsLibrary/UserClient.cs
@@ -38,7 +38,7 @@ namespace ClientsLibrary
///
/// 服务器的IP地址,默认为127.0.0.1,可用于单机调试,云服务器端:117.48.203.204
///
- public static string ServerIp { get; } = "127.0.0.1";//用于测试的云服务器地址
+ public static string ServerIp { get; } = "117.48.203.204";//用于测试的云服务器地址
///
diff --git a/CommonLibrary/BasicSupport/SoftSettings.cs b/CommonLibrary/BasicSupport/SoftSettings.cs
index 4659d43..7bd8fc8 100644
--- a/CommonLibrary/BasicSupport/SoftSettings.cs
+++ b/CommonLibrary/BasicSupport/SoftSettings.cs
@@ -48,8 +48,7 @@ namespace CommonLibrary
///
public string Announcement { get; set; } = "测试公告";
///
- /// 是否允许账户登录
- /// 超级管理员账户除外
+ /// 是否允许账户登录,超级管理员账户除外
///
public bool Can_Account_Login { get; set; } = true;
///
diff --git a/软件系统客户端Wpf/LoginWindow.xaml b/软件系统客户端Wpf/LoginWindow.xaml
index 6f6f4df..f756fec 100644
--- a/软件系统客户端Wpf/LoginWindow.xaml
+++ b/软件系统客户端Wpf/LoginWindow.xaml
@@ -88,8 +88,8 @@
- 版本号:
- V1.0.0
+ 版本号:
+ V1.0.0
本软件著作权归某某所有
diff --git a/软件系统客户端Wpf/LoginWindow.xaml.cs b/软件系统客户端Wpf/LoginWindow.xaml.cs
index 870c54f..08bbfb6 100644
--- a/软件系统客户端Wpf/LoginWindow.xaml.cs
+++ b/软件系统客户端Wpf/LoginWindow.xaml.cs
@@ -28,14 +28,60 @@ namespace 软件系统客户端Wpf
///
public partial class LoginWindow : Window
{
+ #region Constructor
+
public LoginWindow()
{
InitializeComponent();
+ // 加载本地保存的数据
UserClient.JsonSettings.FileSavePath = AppDomain.CurrentDomain.BaseDirectory + @"JsonSettings.txt";
UserClient.JsonSettings.LoadByFile();
}
+ #endregion
+
+ #region Window Load
+
+ private void Window_Loaded(object sender, RoutedEventArgs e)
+ {
+ WindowToolTip.Opacity = 0;
+ TextBlockSoftName.Text = CommonLibrary.Resource.StringResouce.SoftName;
+ TextBlockSoftVersion.Text = UserClient.CurrentVersion.ToString();
+ TextBlockSoftCopyright.Text = $"本软件著作权归{CommonLibrary.Resource.StringResouce.SoftCopyRight}所有";
+
+
+ // 上次登录为7天以前则清除账户密码
+ if ((DateTime.Now - UserClient.JsonSettings.LoginTime).TotalDays < 7)
+ {
+ //加载数据
+ NameTextBox.Text = UserClient.JsonSettings.LoginName ?? "";
+ PasswordBox.Password = UserClient.JsonSettings.Password ?? "";
+ Remember.IsChecked = UserClient.JsonSettings.Password != "";
+ }
+ //初始化输入焦点
+ if (UserClient.JsonSettings.Password != "") LoginButton.Focus();
+ else if (UserClient.JsonSettings.LoginName != "") PasswordBox.Focus();
+ else NameTextBox.Focus();
+
+
+ // 加载原先保存的主题配色
+ if (File.Exists(AppDomain.CurrentDomain.BaseDirectory + @"Palette.txt"))
+ {
+ using (StreamReader sr = new StreamReader(AppDomain.CurrentDomain.BaseDirectory + @"Palette.txt", Encoding.UTF8))
+ {
+ string temp = sr.ReadToEnd();
+ MaterialDesignThemes.Wpf.Palette obj = JObject.Parse(temp).ToObject();
+ new PaletteHelper().ReplacePalette(obj);
+ }
+ }
+ }
+
+ #endregion
+
+ #region Login Click
+
+
private void Button_Click(object sender, RoutedEventArgs e)
{
//启动线程登录
@@ -66,10 +112,11 @@ namespace 软件系统客户端Wpf
ThreadAccountLogin.Start();
}
+
+ #endregion
+
#region 账户验证的逻辑块
-
-
private string UserName = string.Empty;
private string UserPassword = string.Empty;
private bool IsChecked = false;
@@ -86,183 +133,63 @@ namespace 软件系统客户端Wpf
//定义委托
Action message_show = delegate (string message)
{
- SetInformationString(message);
+ Dispatcher.Invoke(new Action(() =>
+ {
+ SetInformationString(message);
+ }));
};
Action start_update = delegate
{
- //需要该exe支持,否则将无法是实现自动版本控制
- string update_file_name = AppDomain.CurrentDomain.BaseDirectory + @"软件自动更新.exe";
- try
+ Dispatcher.Invoke(new Action(() =>
{
- System.Diagnostics.Process.Start(update_file_name);
- Environment.Exit(0);//退出系统
- }
- catch
- {
- MessageBox.Show("更新程序启动失败,请检查文件是否丢失,联系管理员获取。");
- }
+ //需要该exe支持,否则将无法是实现自动版本控制
+ string update_file_name = AppDomain.CurrentDomain.BaseDirectory + @"软件自动更新.exe";
+ try
+ {
+ System.Diagnostics.Process.Start(update_file_name);
+ Environment.Exit(0);//退出系统
+ }
+ catch
+ {
+ MessageBox.Show("更新程序启动失败,请检查文件是否丢失,联系管理员获取。");
+ }
+ }));
};
Action thread_finish = delegate
{
- UISettings(true);
+ Dispatcher.Invoke(new Action(() =>
+ {
+ UISettings(true);
+ }));
};
- //延时
- Thread.Sleep(400);
- //请求指令头数据,该数据需要更具实际情况更改
- OperateResultString result = UserClient.Net_simplify_client.ReadFromServer(CommonHeadCode.SimplifyHeadCode.维护检查);
- if (result.IsSuccess)
+ // 启动密码验证
+ if (AccountLogin.AccountLoginServer(
+ message_show,
+ start_update,
+ thread_finish,
+ UserName,
+ UserPassword,
+ IsChecked,
+ "wpf"))
{
- byte[] temp = Encoding.Unicode.GetBytes(result.Content);
- //例如返回结果为1说明允许登录,0则说明服务器处于维护中,并将信息显示
- if (result.Content != "1")
+ //启动主窗口
+ Dispatcher.Invoke(new Action(() =>
{
- Dispatcher.Invoke(message_show, result.Content.Substring(1));
- Dispatcher.Invoke(thread_finish);
+ DialogResult = true;
return;
- }
+ }));
}
- else
- {
- //访问失败
- Dispatcher.Invoke(message_show, result.Message);
- Dispatcher.Invoke(thread_finish);
- return;
- }
-
-
-
- //检查账户
- Dispatcher.Invoke(message_show, "正在检查账户...");
-
- //延时
- Thread.Sleep(400);
-
- //===================================================================================
- // 根据实际情况校验,选择数据库校验或是将用户名密码发至服务器校验
- // 以下展示了服务器校验的方法,如您需要数据库校验,请删除下面并改成SQL访问验证的方式
-
- //包装数据
- JObject json = new JObject
- {
- { UserAccount.UserNameText, new JValue(UserName) },
- { UserAccount.PasswordText, new JValue(UserPassword) },
- { UserAccount.LoginWayText, new JValue("wpf") }
- };
- result = UserClient.Net_simplify_client.ReadFromServer(CommonLibrary.CommonHeadCode.SimplifyHeadCode.账户检查, json.ToString());
- if (result.IsSuccess)
- {
- //服务器应该返回账户的信息
- UserAccount account = JObject.Parse(result.Content).ToObject();
- if (!account.LoginEnable)
- {
- //不允许登录
- Dispatcher.Invoke(message_show, account.ForbidMessage);
- Dispatcher.Invoke(thread_finish);
- return;
- }
- UserClient.UserAccount = account;
- }
- else
- {
- //访问失败
- Dispatcher.Invoke(message_show, result.Message);
- Dispatcher.Invoke(thread_finish);
- return;
- }
-
- //登录成功,进行保存用户名称和密码
- UserClient.JsonSettings.LoginName = UserName;
- UserClient.JsonSettings.Password = IsChecked ? UserPassword : "";
- UserClient.JsonSettings.LoginTime = DateTime.Now;
- UserClient.JsonSettings.SaveToFile();
-
-
- //版本验证
- Dispatcher.Invoke(message_show, "正在验证版本...");
-
- //延时
- Thread.Sleep(400);
-
- result = UserClient.Net_simplify_client.ReadFromServer(CommonLibrary.CommonHeadCode.SimplifyHeadCode.更新检查);
- if (result.IsSuccess)
- {
- //服务器应该返回服务器的版本号
- SystemVersion sv = new SystemVersion(result.Content);
- //系统账户跳过低版本检测
- if (UserClient.UserAccount.UserName != "admin")
- {
- if (UserClient.CurrentVersion != sv)
- {
- //保存新版本信息
- UserClient.JsonSettings.IsNewVersionRunning = true;
- UserClient.JsonSettings.SaveToFile();
- //和当前系统版本号不一致,启动更新
- Dispatcher.Invoke(start_update);
- return;
- }
- }
- else
- {
- if (UserClient.CurrentVersion < sv)
- {
- //保存新版本信息
- UserClient.JsonSettings.IsNewVersionRunning = true;
- UserClient.JsonSettings.SaveToFile();
- //和当前系统版本号不一致,启动更新
- Dispatcher.Invoke(start_update);
- return;
- }
- }
- }
- else
- {
- //访问失败
- Dispatcher.Invoke(message_show, result.Message);
- Dispatcher.Invoke(thread_finish);
- return;
- }
-
-
- //================================================================================
- //验证结束后,根据需要是否下载服务器的数据,或是等到进入主窗口下载也可以
- //如果有参数决定主窗口的显示方式,那么必要在下面向服务器请求数据
- //以下展示了初始化参数的功能
- Dispatcher.Invoke(message_show, "正在下载参数...");
-
- //延时
- Thread.Sleep(400);
-
-
- result = UserClient.Net_simplify_client.ReadFromServer(CommonLibrary.CommonHeadCode.SimplifyHeadCode.参数下载);
- if (result.IsSuccess)
- {
- //服务器返回初始化的数据,此处进行数据的提取,有可能包含了多个数据
- json = Newtonsoft.Json.Linq.JObject.Parse(result.Content);
- //例如公告数据
- UserClient.Announcement = SoftBasic.GetValueFromJsonObject(json, nameof(UserClient.Announcement), "");
-
- }
- else
- {
- //访问失败
- Dispatcher.Invoke(message_show, result.Message);
- Dispatcher.Invoke(thread_finish);
- return;
- }
-
- //启动主窗口
- Dispatcher.Invoke(new Action(() =>
- {
- DialogResult = true;
- return;
- }));
+
}
#endregion
+ #region User Interface
+
+
private void UISettings(bool enable)
{
NameTextBox.IsEnabled = enable;
@@ -302,39 +229,7 @@ namespace 软件系统客户端Wpf
LoginButton.Focus();
}
- private void Window_Loaded(object sender, RoutedEventArgs e)
- {
- WindowToolTip.Opacity = 0;
- TextBlockSoftName.Text = CommonLibrary.Resource.StringResouce.SoftName;
- TextBlockSoftVersion.Text = UserClient.CurrentVersion.ToString();
- TextBlockSoftCopyright.Text = $"本软件著作权归{CommonLibrary.Resource.StringResouce.SoftCopyRight}所有";
-
- // 上次登录为7天以前则清除账户密码
- if ((DateTime.Now - UserClient.JsonSettings.LoginTime).TotalDays < 7)
- {
- //加载数据
- NameTextBox.Text = UserClient.JsonSettings.LoginName ?? "";
- PasswordBox.Password = UserClient.JsonSettings.Password ?? "";
- Remember.IsChecked = UserClient.JsonSettings.Password != "";
- }
- //初始化输入焦点
- if (UserClient.JsonSettings.Password != "") LoginButton.Focus();
- else if (UserClient.JsonSettings.LoginName != "") PasswordBox.Focus();
- else NameTextBox.Focus();
-
-
-
- if (File.Exists(AppDomain.CurrentDomain.BaseDirectory + @"Palette.txt"))
- {
- using (StreamReader sr = new StreamReader(AppDomain.CurrentDomain.BaseDirectory + @"Palette.txt", Encoding.UTF8))
- {
- string temp = sr.ReadToEnd();
- MaterialDesignThemes.Wpf.Palette obj = JObject.Parse(temp).ToObject();
- new PaletteHelper().ReplacePalette(obj);
- }
- }
- }
private void NameTextBox_KeyDown(object sender, KeyEventArgs e)
{
@@ -345,5 +240,19 @@ namespace 软件系统客户端Wpf
{
if (e.Key == Key.Enter) Button_Click(null, new RoutedEventArgs());
}
+
+
+ private void TextBlock_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
+ {
+ using (FormShowMachineId form = new FormShowMachineId())
+ {
+ form.ShowDialog();
+ }
+ }
+
+ #endregion
+
+
+
}
}
diff --git a/软件系统客户端模版/FormLogin.Designer.cs b/软件系统客户端模版/FormLogin.Designer.cs
index 22f6984..8f44cf3 100644
--- a/软件系统客户端模版/FormLogin.Designer.cs
+++ b/软件系统客户端模版/FormLogin.Designer.cs
@@ -35,7 +35,7 @@ namespace 软件系统客户端模版
this.textBox_userName = new System.Windows.Forms.TextBox();
this.textBox_password = new System.Windows.Forms.TextBox();
this.label3 = new System.Windows.Forms.Label();
- this.userButton_login = new UserButton();
+ this.userButton_login = new HslCommunication.Controls.UserButton();
this.label_version = new System.Windows.Forms.Label();
this.label_copyright = new System.Windows.Forms.Label();
this.label_status = new System.Windows.Forms.Label();
@@ -106,6 +106,7 @@ namespace 软件系统客户端模版
// label_version
//
this.label_version.AutoSize = true;
+ this.label_version.Cursor = System.Windows.Forms.Cursors.Hand;
this.label_version.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label_version.ForeColor = System.Drawing.Color.Gray;
this.label_version.Location = new System.Drawing.Point(1, 176);
@@ -113,6 +114,7 @@ namespace 软件系统客户端模版
this.label_version.Size = new System.Drawing.Size(44, 17);
this.label_version.TabIndex = 6;
this.label_version.Text = "版本:";
+ this.label_version.Click += new System.EventHandler(this.label_version_Click);
//
// label_copyright
//
diff --git a/软件系统客户端模版/FormLogin.cs b/软件系统客户端模版/FormLogin.cs
index 947305a..dd08e35 100644
--- a/软件系统客户端模版/FormLogin.cs
+++ b/软件系统客户端模版/FormLogin.cs
@@ -146,193 +146,75 @@ namespace 软件系统客户端模版
private void ThreadCheckAccount()
{
// 定义委托
+
+ // 消息显示委托
Action message_show = delegate (string message)
- {
- label_status.Text = message;
- };
+ {
+ if (IsHandleCreated) Invoke(new Action(() =>
+ {
+ label_status.Text = message;
+ }));
+ };
+ // 启动更新委托
Action start_update = delegate
{
- // 需要该exe支持,否则将无法是实现自动版本控制
- string update_file_name = Application.StartupPath + @"\软件自动更新.exe";
- try
+ if (IsHandleCreated) Invoke(new Action(() =>
{
- System.Diagnostics.Process.Start(update_file_name);
- Environment.Exit(0);//退出系统
- }
- catch
- {
- MessageBox.Show("更新程序启动失败,请检查文件是否丢失,联系管理员获取。");
- }
+ // 需要该exe支持,否则将无法是实现自动版本控制
+ string update_file_name = Application.StartupPath + @"\软件自动更新.exe";
+ try
+ {
+ System.Diagnostics.Process.Start(update_file_name);
+ Environment.Exit(0);//退出系统
+ }
+ catch
+ {
+ MessageBox.Show("更新程序启动失败,请检查文件是否丢失,联系管理员获取。");
+ }
+ }));
};
+ // 结束的控件使能委托
Action thread_finish = delegate
{
- UISettings(true);
+ if (IsHandleCreated) Invoke(new Action(() =>
+ {
+ UISettings(true);
+ }));
};
- // 延时
- Thread.Sleep(200);
-
- // 请求指令头数据,该数据需要更具实际情况更改
- OperateResultString result = UserClient.Net_simplify_client.ReadFromServer(CommonLibrary.CommonHeadCode.SimplifyHeadCode.维护检查);
- if(result.IsSuccess)
+ // 启动密码验证
+ if(AccountLogin.AccountLoginServer(
+ message_show,
+ start_update,
+ thread_finish,
+ textBox_userName.Text,
+ textBox_password.Text,
+ checkBox_remeber.Checked,
+ "winform"))
{
- byte[] temp = Encoding.Unicode.GetBytes(result.Content);
- // 例如返回结果为1说明允许登录,0则说明服务器处于维护中,并将信息显示
- if (result.Content != "1")
+ // 启动主窗口
+ if (IsHandleCreated) Invoke(new Action(() =>
{
- if (IsHandleCreated) Invoke(message_show, result.Content.Substring(1));
- if (IsHandleCreated) Invoke(thread_finish);
+ DialogResult = DialogResult.OK;
return;
- }
+ }));
}
- else
- {
- // 访问失败
- if (IsHandleCreated) Invoke(message_show, result.Message);
- if (IsHandleCreated) Invoke(thread_finish);
- return;
- }
-
-
-
- // 检查账户
- if (IsHandleCreated) Invoke(message_show, "正在检查账户...");
- else return;
-
- // 延时
- Thread.Sleep(200);
-
- //===================================================================================
- // 根据实际情况校验,选择数据库校验或是将用户名密码发至服务器校验
- // 以下展示了服务器校验的方法,如您需要数据库校验,请删除下面并改成SQL访问验证的方式
-
- // 包装数据
- JObject json = new JObject
- {
- { UserAccount.UserNameText, new JValue(textBox_userName.Text) },
- { UserAccount.PasswordText, new JValue(textBox_password.Text) },
- { UserAccount.LoginWayText, new JValue("winform") },
- { UserAccount.DeviceUniqueID, new JValue(UserClient.JsonSettings.SystemInfo) }
- };
- result = UserClient.Net_simplify_client.ReadFromServer(CommonLibrary.CommonHeadCode.SimplifyHeadCode.账户检查, json.ToString());
- if (result.IsSuccess)
- {
- // 服务器应该返回账户的信息
- UserAccount account = JObject.Parse(result.Content).ToObject();
- if(!account.LoginEnable)
- {
- // 不允许登录
- if (IsHandleCreated) Invoke(message_show, account.ForbidMessage);
- if (IsHandleCreated) Invoke(thread_finish);
- return;
- }
- UserClient.UserAccount = account;
- }
- else
- {
- // 访问失败
- if (IsHandleCreated) Invoke(message_show, result.Message);
- if (IsHandleCreated) Invoke(thread_finish);
- return;
- }
-
- // 登录成功,进行保存用户名称和密码
- UserClient.JsonSettings.LoginName = textBox_userName.Text;
- UserClient.JsonSettings.Password = checkBox_remeber.Checked ? textBox_password.Text : "";
- UserClient.JsonSettings.LoginTime = DateTime.Now;
- UserClient.JsonSettings.SaveToFile();
-
-
- // 版本验证
- if (IsHandleCreated) Invoke(message_show, "正在验证版本...");
- else return;
-
- // 延时
- Thread.Sleep(200);
-
- result = UserClient.Net_simplify_client.ReadFromServer(CommonLibrary.CommonHeadCode.SimplifyHeadCode.更新检查);
- if (result.IsSuccess)
- {
- // 服务器应该返回服务器的版本号
- SystemVersion sv = new SystemVersion(result.Content);
- // 系统账户跳过低版本检测,该做法存在一定的风险,需要开发者仔细确认安全隐患
- if (UserClient.UserAccount.UserName != "admin")
- {
- if (UserClient.CurrentVersion != sv)
- {
- // 保存新版本信息
- UserClient.JsonSettings.IsNewVersionRunning = true;
- UserClient.JsonSettings.SaveToFile();
- // 和当前系统版本号不一致,启动更新
- if (IsHandleCreated) Invoke(start_update);
- return;
- }
- }
- else
- {
- if (UserClient.CurrentVersion < sv)
- {
- // 保存新版本信息
- UserClient.JsonSettings.IsNewVersionRunning = true;
- UserClient.JsonSettings.SaveToFile();
- // 和当前系统版本号不一致,启动更新
- if (IsHandleCreated) Invoke(start_update);
- return;
- }
- }
- }
- else
- {
- // 访问失败
- if (IsHandleCreated) Invoke(message_show, result.Message);
- if (IsHandleCreated) Invoke(thread_finish);
- return;
- }
-
-
- //
- // 验证结束后,根据需要是否下载服务器的数据,或是等到进入主窗口下载也可以
- // 如果有参数决定主窗口的显示方式,那么必要在下面向服务器请求数据
- // 以下展示了初始化参数的功能
-
- if (IsHandleCreated) Invoke(message_show, "正在下载参数...");
- else return;
-
- // 延时
- Thread.Sleep(200);
-
-
- result = UserClient.Net_simplify_client.ReadFromServer(CommonLibrary.CommonHeadCode.SimplifyHeadCode.参数下载);
- if(result.IsSuccess)
- {
- // 服务器返回初始化的数据,此处进行数据的提取,有可能包含了多个数据
- json = JObject.Parse(result.Content);
- // 例如公告数据
- UserClient.Announcement = SoftBasic.GetValueFromJsonObject(json, nameof(UserClient.Announcement), "");
- if (json[nameof(UserClient.SystemFactories)] != null)
- {
- UserClient.SystemFactories = json[nameof(UserClient.SystemFactories)].ToObject>();
- }
- }
- else
- {
- // 访问失败
- if (IsHandleCreated) Invoke(message_show, result.Message);
- if (IsHandleCreated) Invoke(thread_finish);
- return;
- }
-
- // 启动主窗口
- if (IsHandleCreated) Invoke(new Action(() =>
- {
- DialogResult = DialogResult.OK;
- return;
- }));
}
+
#endregion
+ #region 显示本机ID
+
+ private void label_version_Click(object sender, EventArgs e)
+ {
+ using (FormShowMachineId form = new FormShowMachineId())
+ {
+ form.ShowDialog();
+ }
+ }
+ #endregion
}
}
diff --git a/软件系统浏览器模版/Controllers/AccountController.cs b/软件系统浏览器模版/Controllers/AccountController.cs
index 66577c5..c5211c8 100644
--- a/软件系统浏览器模版/Controllers/AccountController.cs
+++ b/软件系统浏览器模版/Controllers/AccountController.cs
@@ -44,7 +44,7 @@ namespace 软件系统浏览器模版.Controllers
public ActionResult Login(FormCollection fc)
{
//请求指令头数据,该数据需要更具实际情况更改
- OperateResultString result = UserClient.Net_simplify_client.ReadFromServer(CommonLibrary.CommonHeadCode.SimplifyHeadCode.维护检查);
+ OperateResultString result = UserClient.Net_simplify_client.ReadFromServer(CommonHeadCode.SimplifyHeadCode.维护检查);
if (result.IsSuccess)
{
//例如返回结果为1说明允许登录,0则说明服务器处于维护中,并将信息显示