lu
2025-04-19 b084bd77d01a94c8f0a2d20c86a1f45ba7c8a23c
DevApp/Gs.DevApp/DevFrm/FrmLogin.cs
@@ -1,67 +1,259 @@
using Gs.DevApp.ToolBox;
using AutoUpdaterDotNET;
using DevExpress.XtraEditors;
using DevExpress.XtraRichEdit.Export.Rtf;
using Gs.DevApp.Entity;
using Gs.DevApp.Properties;
using Gs.DevApp.ToolBox;
using Newtonsoft.Json;
using System;
using System.Windows.Forms;
using Gs.DevApp.Models;
using Newtonsoft.Json.Linq;
using System;
using System.Configuration;
using System.Linq;
using System.Management;
using System.Net;
using System.Net.Sockets;
using System.Windows.Forms;
namespace Gs.DevApp.DevFrm
{
    public partial class FrmLogin : DevExpress.XtraEditors.XtraForm
    public partial class FrmLogin : XtraForm
    {
        private string _productName = "";
        private string _version = "未知";
        private string _strFont = "";
        private string _webApiUrl = "";
        public FrmLogin()
        {
            InitializeComponent();
            this.Text=lbVersion.Text = System.Configuration.ConfigurationSettings.AppSettings.Get("ProductName").ToString();
            _productName = ConfigurationManager.AppSettings["ProductName"];
            _webApiUrl = ConfigurationManager.AppSettings["WebApiUrl"];
            if (ConfigurationManager.AppSettings["IsAutoUpdater"] == "1")
                _autoUpdate();
            _getFont();
            _getRemember();
            btnLogin.Click += BtnLogin_Click;
            btnCancel.Click += BtnCancel_Click;
            UtilityHelper.SetFont(panel1);
            lbVersion.Text = _productName+ ",版本(" + _version + ")" + ",使用字体(" + _strFont + ")"+",服务地址("+ _webApiUrl + ")";
        }
        private void BtnCancel_Click(object sender, EventArgs e)
        {
            if (MsgHelper.AskQuestion("确定要退出系统吗?"))
            {
                Application.Exit();
            }
            if (MsgHelper.AskQuestion("确定要退出系统吗?")) Application.Exit();
        }
        private void BtnLogin_Click(object sender, EventArgs e)
        {
            int i = 100;
            Gs.DevApp.UserControl.ShowDialogForm sdf = new Gs.DevApp.UserControl.ShowDialogForm("提示", "", "请耐心等候,正在验证您的身份!");
            if (string.IsNullOrEmpty(txtUser.Text.Trim()))
            {
                MsgHelper.Warning("登录账号不能为空!");
                txtUser.Focus();
                return;
            }
            if (string.IsNullOrEmpty(txtPwd.Text.Trim()))
            {
                MsgHelper.Warning("密码不能为空!");
                txtUser.Focus();
                return;
            }
            string strLog = GetMacAddress();
            var _obj = new
            {
                accountPwd = txtUser.Text.Trim(),
                accountNo = txtPwd.Text.Trim(),
                orgGuid = Guid.NewGuid()
                accountPwd = txtPwd.Text.Trim(),
                accountNo = txtUser.Text.Trim(),
                accountLog = strLog
            };
            sdf.SetCaption("执行进度(" + (i - 80) + "/" + i.ToString() + ")");
            try
            {
                string strJson = UtilityHelper.HttpPost("", "User/UserLogin", JsonConvert.SerializeObject(_obj));
                ReturnModel<dynamic> _rtn = ToolBox.UtilityHelper.GetDataByJson(strJson);
                var strJson = UtilityHelper.HttpPost("", "User/UserLogin",
                    JsonConvert.SerializeObject(_obj));
                var _rtn = UtilityHelper.ReturnToDynamic(strJson);
                JObject _login = _rtn.rtnData;
                if (_rtn.rtnCode > 0)
                {
                    Settings.Default.userName = ckRemember.Checked ? txtUser.Text.Trim() : "";
                    Settings.Default.userPwd = ckRemember.Checked ? txtPwd.Text.Trim() : "";
                    Settings.Default.remember = ckRemember.Checked;
                    Settings.Default.Save();
                    LoginInfoModel.CurrentUser.LoginUserGuid = _login["loginGuid"].ToString();
                    LoginInfoModel.CurrentUser.LoginOrgGuid = _login["loginOrgGuid"].ToString();
                    LoginInfoModel.CurrentUser.LoginTime = DateTime.Now.ToString("yyyy-MM-dd hh:mm");
                    DialogResult = DialogResult.OK;
                }
                else
                {
                    ToolBox.MsgHelper.Warning("提示:" + _rtn.rtnMsg);
                    MsgHelper.Warning("提示:" + _rtn.rtnMsg);
                    DialogResult = DialogResult.None;
                }
                sdf.SetCaption("执行进度(" + (i - 10) + "/" + i.ToString() + ")");
            }
            catch (Exception ex)
            {
                sdf.Close();
                ToolBox.MsgHelper.Warning("提示:" + ex.Message);
                DialogResult = DialogResult.Cancel;
                MsgHelper.Warning("提示:" + ex.Message);
            }
        }
        /// <summary>
        ///  读取记住密码
        /// </summary>
        private void _getRemember()
        {
            try
            {
                if (Settings.Default.remember)
                {
                    txtUser.Text = Settings.Default.userName;
                    txtPwd.Text = Settings.Default.userPwd;
                    ckRemember.Checked = true;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        /// <summary>
        /// 读取字体
        /// </summary>
        private void _getFont()
        {
            try
            {
                _strFont = Settings.Default.fontSizeName;
                if (string.IsNullOrEmpty(_strFont))
                    return;
                string[] ary = _strFont.Split(',');
                if (ary.Length < 2)
                    return;
                float _ft = float.Parse(ary[1]);
                #region 设置默认字体、日期格式、汉化dev
                DevExpress.Utils.AppearanceObject.DefaultFont = new System.Drawing.Font(ary[0], _ft);
                DevExpress.XtraEditors.WindowsFormsSettings.DefaultFont = new System.Drawing.Font(ary[0], _ft);
                DevExpress.XtraEditors.WindowsFormsSettings.DefaultMenuFont = new System.Drawing.Font(ary[0], _ft);
                DevExpress.XtraEditors.WindowsFormsSettings.DefaultPrintFont = new System.Drawing.Font(ary[0], _ft);
                #endregion
            }
            catch (Exception)
            {
            }
        }
        private void _autoUpdate()
        {
            _version = ConfigurationManager.AppSettings["Version"];
            AutoUpdater.InstalledVersion = new Version(_version);
            AutoUpdater.Start(ConfigurationManager.AppSettings["AutoUpdaterXml"]);
            AutoUpdater.CheckForUpdateEvent += AutoUpdater_CheckForUpdateEvent;
        }
        private void AutoUpdater_CheckForUpdateEvent(UpdateInfoEventArgs args)
        {
            if (args == null || string.IsNullOrEmpty(args.DownloadURL))
            {
                MsgHelper.ShowError("读取自动更新失败,无法登录,请联系管理员!");
                Close();
                Application.Exit();
                return;
            }
            sdf.Close();
            this.DialogResult = DialogResult.OK;
            if (!args.IsUpdateAvailable)
            {
                return;
            }
            var _strMsg =
                string.Format(
                    $@"有新版本 {args.CurrentVersion} 可用,您使用的是 {args.InstalledVersion}版本,这是必需的更新,按“是(Y)”开始更新应用程序。");
            if (!MsgHelper.AskQuestion(_strMsg))
            {
                Close();
                Application.Exit();
                return;
            }
            try
            {
                if (AutoUpdater.DownloadUpdate(args))
                {
                    var config =
                        ConfigurationManager.OpenExeConfiguration(
                            ConfigurationUserLevel.None);
                    if (config != null)
                    {
                        var appSettings =
                            (AppSettingsSection)config.GetSection(
                                "appSettings");
                        if (appSettings.Settings.AllKeys.Contains("Version"))
                            appSettings.Settings["Version"].Value =
                                args.CurrentVersion;
                        else
                            appSettings.Settings.Add("Version",
                                args.CurrentVersion);
                        config.Save(ConfigurationSaveMode.Modified);
                        ConfigurationManager.RefreshSection("appSettings");
                    }
                    Application.Exit();
                }
                else
                {
                    MsgHelper.ShowError("读取自动更新失败,无法登录,请联系管理员!");
                    Close();
                    Application.Exit();
                }
            }
            catch (Exception exception)
            {
                MsgHelper.ShowError(exception.Message + ":" + exception.GetType());
                Close();
                Application.Exit();
            }
        }
        private string GetMacAddress()
        {
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            try
            {
                sb.Append("主机名: ");
                string hostName = Dns.GetHostName();
                sb.Append(hostName);
                sb.Append(";IPv4: ");
                IPAddress[] addresses = Dns.GetHostAddresses(hostName);
                int i = 0;
                foreach (IPAddress address in addresses)
                {
                    if (address.AddressFamily == AddressFamily.InterNetwork) // 过滤出IPv4地址
                    {
                        if (i > 0)
                            sb.Append(",");
                        sb.Append(address.ToString());
                    }
                }
                i = 0;
                sb.Append(";MAC: ");
                ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
                ManagementObjectCollection moc = mc.GetInstances();
                string macAddress = string.Empty;
                foreach (ManagementObject mo in moc)
                {
                    if ((bool)mo["IPEnabled"])
                    {
                        if (i > 0)
                            sb.Append(",");
                        macAddress = mo["MacAddress"].ToString();
                        sb.Append(macAddress);
                        break;
                    }
                }
                return sb.ToString();
            }
            catch (Exception ex)
            {
                sb.Append(ex.Message);
            }
            return sb.ToString();
        }
    }
}