代码重构,winform和wpf登录系统的逻辑进行提炼

This commit is contained in:
dathlin
2017-09-16 13:29:33 +08:00
parent 6e7da51f2f
commit 060968cdc2
16 changed files with 774 additions and 371 deletions

View File

@@ -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
{
/*********************************************************************************
*
* 统一的账户登录模型
*
*
*********************************************************************************/
/// <summary>
/// 用户客户端使用的统一登录的逻辑
/// </summary>
public class AccountLogin
{
/// <summary>
/// 系统统一的登录模型
/// </summary>
/// <param name="message_show"></param>
/// <param name="start_update"></param>
/// <param name="thread_finish"></param>
/// <param name="userName"></param>
/// <param name="password"></param>
/// <param name="remember"></param>
/// <param name="clientType"></param>
/// <returns></returns>
public static bool AccountLoginServer(Action<string> 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<UserAccount>();
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<List<string>>();
}
}
else
{
// 访问失败
message_show.Invoke(result.Message);
thread_finish.Invoke();
return false;
}
return true;
}
}
}

View File

@@ -0,0 +1,83 @@
namespace ClientsLibrary
{
partial class FormShowMachineId
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
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;
}
}

View File

@@ -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;
}
}
}

View File

@@ -0,0 +1,294 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
</root>

View File

@@ -49,12 +49,19 @@
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="FormDownloading.cs"> <Compile Include="AccountSupport\AccountLogin.cs" />
<Compile Include="BasicSupport\FormDownloading.cs">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
<Compile Include="FormDownloading.Designer.cs"> <Compile Include="BasicSupport\FormDownloading.Designer.cs">
<DependentUpon>FormDownloading.cs</DependentUpon> <DependentUpon>FormDownloading.cs</DependentUpon>
</Compile> </Compile>
<Compile Include="BasicSupport\FormShowMachineId.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="BasicSupport\FormShowMachineId.Designer.cs">
<DependentUpon>FormShowMachineId.cs</DependentUpon>
</Compile>
<Compile Include="LogsSupport\FormLogView.cs"> <Compile Include="LogsSupport\FormLogView.cs">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
@@ -78,9 +85,12 @@
<Compile Include="UserPortrait.cs" /> <Compile Include="UserPortrait.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<EmbeddedResource Include="FormDownloading.resx"> <EmbeddedResource Include="BasicSupport\FormDownloading.resx">
<DependentUpon>FormDownloading.cs</DependentUpon> <DependentUpon>FormDownloading.cs</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="BasicSupport\FormShowMachineId.resx">
<DependentUpon>FormShowMachineId.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="LogsSupport\FormLogView.resx"> <EmbeddedResource Include="LogsSupport\FormLogView.resx">
<DependentUpon>FormLogView.cs</DependentUpon> <DependentUpon>FormLogView.cs</DependentUpon>
</EmbeddedResource> </EmbeddedResource>

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

View File

@@ -38,7 +38,7 @@ namespace ClientsLibrary
/// <summary> /// <summary>
/// 服务器的IP地址默认为127.0.0.1可用于单机调试云服务器端117.48.203.204 /// 服务器的IP地址默认为127.0.0.1可用于单机调试云服务器端117.48.203.204
/// </summary> /// </summary>
public static string ServerIp { get; } = "127.0.0.1";//用于测试的云服务器地址 public static string ServerIp { get; } = "117.48.203.204";//用于测试的云服务器地址
/// <summary> /// <summary>

View File

@@ -48,8 +48,7 @@ namespace CommonLibrary
/// </summary> /// </summary>
public string Announcement { get; set; } = "测试公告"; public string Announcement { get; set; } = "测试公告";
/// <summary> /// <summary>
/// 是否允许账户登录 /// 是否允许账户登录,超级管理员账户除外
/// 超级管理员账户除外
/// </summary> /// </summary>
public bool Can_Account_Login { get; set; } = true; public bool Can_Account_Login { get; set; } = true;
/// <summary> /// <summary>

View File

@@ -88,8 +88,8 @@
<ColumnDefinition Width="*"></ColumnDefinition> <ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="auto"></ColumnDefinition> <ColumnDefinition Width="auto"></ColumnDefinition>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Style="{StaticResource Caption}">版本号:</TextBlock> <TextBlock Grid.Column="0" Style="{StaticResource Caption}" MouseLeftButtonDown="TextBlock_MouseLeftButtonDown">版本号:</TextBlock>
<TextBlock x:Name="TextBlockSoftVersion" Grid.Column="1" Style="{StaticResource Caption}">V1.0.0</TextBlock> <TextBlock x:Name="TextBlockSoftVersion" Grid.Column="1" Style="{StaticResource Caption}" MouseLeftButtonDown="TextBlock_MouseLeftButtonDown">V1.0.0</TextBlock>
<TextBlock x:Name="TextBlockSoftCopyright" Grid.Column="3" Style="{StaticResource Caption}">本软件著作权归某某所有</TextBlock> <TextBlock x:Name="TextBlockSoftCopyright" Grid.Column="3" Style="{StaticResource Caption}">本软件著作权归某某所有</TextBlock>
</Grid> </Grid>
</Grid> </Grid>

View File

@@ -28,14 +28,60 @@ namespace 软件系统客户端Wpf
/// </summary> /// </summary>
public partial class LoginWindow : Window public partial class LoginWindow : Window
{ {
#region Constructor
public LoginWindow() public LoginWindow()
{ {
InitializeComponent(); InitializeComponent();
// 加载本地保存的数据
UserClient.JsonSettings.FileSavePath = AppDomain.CurrentDomain.BaseDirectory + @"JsonSettings.txt"; UserClient.JsonSettings.FileSavePath = AppDomain.CurrentDomain.BaseDirectory + @"JsonSettings.txt";
UserClient.JsonSettings.LoadByFile(); 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<MaterialDesignThemes.Wpf.Palette>();
new PaletteHelper().ReplacePalette(obj);
}
}
}
#endregion
#region Login Click
private void Button_Click(object sender, RoutedEventArgs e) private void Button_Click(object sender, RoutedEventArgs e)
{ {
//启动线程登录 //启动线程登录
@@ -66,10 +112,11 @@ namespace 软件系统客户端Wpf
ThreadAccountLogin.Start(); ThreadAccountLogin.Start();
} }
#endregion
#region #region
private string UserName = string.Empty; private string UserName = string.Empty;
private string UserPassword = string.Empty; private string UserPassword = string.Empty;
private bool IsChecked = false; private bool IsChecked = false;
@@ -86,183 +133,63 @@ namespace 软件系统客户端Wpf
//定义委托 //定义委托
Action<string> message_show = delegate (string message) Action<string> message_show = delegate (string message)
{ {
SetInformationString(message); Dispatcher.Invoke(new Action(() =>
{
SetInformationString(message);
}));
}; };
Action start_update = delegate Action start_update = delegate
{ {
//需要该exe支持否则将无法是实现自动版本控制 Dispatcher.Invoke(new Action(() =>
string update_file_name = AppDomain.CurrentDomain.BaseDirectory + @"软件自动更新.exe";
try
{ {
System.Diagnostics.Process.Start(update_file_name); //需要该exe支持否则将无法是实现自动版本控制
Environment.Exit(0);//退出系统 string update_file_name = AppDomain.CurrentDomain.BaseDirectory + @"软件自动更新.exe";
} try
catch {
{ System.Diagnostics.Process.Start(update_file_name);
MessageBox.Show("更新程序启动失败,请检查文件是否丢失,联系管理员获取。"); Environment.Exit(0);//退出系统
} }
catch
{
MessageBox.Show("更新程序启动失败,请检查文件是否丢失,联系管理员获取。");
}
}));
}; };
Action thread_finish = delegate 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 (AccountLogin.AccountLoginServer(
if (result.IsSuccess) message_show,
start_update,
thread_finish,
UserName,
UserPassword,
IsChecked,
"wpf"))
{ {
byte[] temp = Encoding.Unicode.GetBytes(result.Content); //启动主窗口
//例如返回结果为1说明允许登录0则说明服务器处于维护中并将信息显示 Dispatcher.Invoke(new Action(() =>
if (result.Content != "1")
{ {
Dispatcher.Invoke(message_show, result.Content.Substring(1)); DialogResult = true;
Dispatcher.Invoke(thread_finish);
return; 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<UserAccount>();
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 #endregion
#region User Interface
private void UISettings(bool enable) private void UISettings(bool enable)
{ {
NameTextBox.IsEnabled = enable; NameTextBox.IsEnabled = enable;
@@ -302,39 +229,7 @@ namespace 软件系统客户端Wpf
LoginButton.Focus(); 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<MaterialDesignThemes.Wpf.Palette>();
new PaletteHelper().ReplacePalette(obj);
}
}
}
private void NameTextBox_KeyDown(object sender, KeyEventArgs e) private void NameTextBox_KeyDown(object sender, KeyEventArgs e)
{ {
@@ -345,5 +240,19 @@ namespace 软件系统客户端Wpf
{ {
if (e.Key == Key.Enter) Button_Click(null, new RoutedEventArgs()); 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
} }
} }

View File

@@ -35,7 +35,7 @@ namespace 软件系统客户端模版
this.textBox_userName = new System.Windows.Forms.TextBox(); this.textBox_userName = new System.Windows.Forms.TextBox();
this.textBox_password = new System.Windows.Forms.TextBox(); this.textBox_password = new System.Windows.Forms.TextBox();
this.label3 = new System.Windows.Forms.Label(); 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_version = new System.Windows.Forms.Label();
this.label_copyright = new System.Windows.Forms.Label(); this.label_copyright = new System.Windows.Forms.Label();
this.label_status = new System.Windows.Forms.Label(); this.label_status = new System.Windows.Forms.Label();
@@ -106,6 +106,7 @@ namespace 软件系统客户端模版
// label_version // label_version
// //
this.label_version.AutoSize = true; 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.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.ForeColor = System.Drawing.Color.Gray;
this.label_version.Location = new System.Drawing.Point(1, 176); 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.Size = new System.Drawing.Size(44, 17);
this.label_version.TabIndex = 6; this.label_version.TabIndex = 6;
this.label_version.Text = "版本:"; this.label_version.Text = "版本:";
this.label_version.Click += new System.EventHandler(this.label_version_Click);
// //
// label_copyright // label_copyright
// //

View File

@@ -146,193 +146,75 @@ namespace 软件系统客户端模版
private void ThreadCheckAccount() private void ThreadCheckAccount()
{ {
// 定义委托 // 定义委托
// 消息显示委托
Action<string> message_show = delegate (string message) Action<string> message_show = delegate (string message)
{ {
label_status.Text = message; if (IsHandleCreated) Invoke(new Action(() =>
}; {
label_status.Text = message;
}));
};
// 启动更新委托
Action start_update = delegate Action start_update = delegate
{ {
// 需要该exe支持否则将无法是实现自动版本控制 if (IsHandleCreated) Invoke(new Action(() =>
string update_file_name = Application.StartupPath + @"\软件自动更新.exe";
try
{ {
System.Diagnostics.Process.Start(update_file_name); // 需要该exe支持否则将无法是实现自动版本控制
Environment.Exit(0);//退出系统 string update_file_name = Application.StartupPath + @"\软件自动更新.exe";
} try
catch {
{ System.Diagnostics.Process.Start(update_file_name);
MessageBox.Show("更新程序启动失败,请检查文件是否丢失,联系管理员获取。"); Environment.Exit(0);//退出系统
} }
catch
{
MessageBox.Show("更新程序启动失败,请检查文件是否丢失,联系管理员获取。");
}
}));
}; };
// 结束的控件使能委托
Action thread_finish = delegate Action thread_finish = delegate
{ {
UISettings(true); if (IsHandleCreated) Invoke(new Action(() =>
{
UISettings(true);
}));
}; };
// 延时 // 启动密码验证
Thread.Sleep(200); if(AccountLogin.AccountLoginServer(
message_show,
// 请求指令头数据,该数据需要更具实际情况更改 start_update,
OperateResultString result = UserClient.Net_simplify_client.ReadFromServer(CommonLibrary.CommonHeadCode.SimplifyHeadCode.); thread_finish,
if(result.IsSuccess) textBox_userName.Text,
textBox_password.Text,
checkBox_remeber.Checked,
"winform"))
{ {
byte[] temp = Encoding.Unicode.GetBytes(result.Content); // 启动主窗口
// 例如返回结果为1说明允许登录0则说明服务器处于维护中并将信息显示 if (IsHandleCreated) Invoke(new Action(() =>
if (result.Content != "1")
{ {
if (IsHandleCreated) Invoke(message_show, result.Content.Substring(1)); DialogResult = DialogResult.OK;
if (IsHandleCreated) Invoke(thread_finish);
return; 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<UserAccount>();
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<List<string>>();
}
}
else
{
// 访问失败
if (IsHandleCreated) Invoke(message_show, result.Message);
if (IsHandleCreated) Invoke(thread_finish);
return;
}
// 启动主窗口
if (IsHandleCreated) Invoke(new Action(() =>
{
DialogResult = DialogResult.OK;
return;
}));
} }
#endregion #endregion
#region ID
private void label_version_Click(object sender, EventArgs e)
{
using (FormShowMachineId form = new FormShowMachineId())
{
form.ShowDialog();
}
}
#endregion
} }
} }

View File

@@ -44,7 +44,7 @@ namespace 软件系统浏览器模版.Controllers
public ActionResult Login(FormCollection fc) 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) if (result.IsSuccess)
{ {
//例如返回结果为1说明允许登录0则说明服务器处于维护中并将信息显示 //例如返回结果为1说明允许登录0则说明服务器处于维护中并将信息显示