#region
|
|
using System;
|
using System.ComponentModel;
|
using System.Configuration;
|
using System.Data;
|
using System.IO;
|
using System.Windows.Forms;
|
using CSFramework.Library.CommonClass;
|
using CSFrameworkV5.Business;
|
using CSFrameworkV5.Business.BLL_Permission;
|
using CSFrameworkV5.Common;
|
using CSFrameworkV5.Core;
|
using CSFrameworkV5.Core.Common;
|
using CSFrameworkV5.Core.SystemSecurity;
|
using CSFrameworkV5.Language;
|
using CSFrameworkV5.Library.CommonClass;
|
using CSFrameworkV5.Library.PermissionForms;
|
|
#endregion
|
|
///*************************************************************************/
|
///* 文件名 :frmLogin.cs
|
///* 程序说明 : 登录窗体,登录成功后加载MDI主窗体,并显示加载进度。
|
///* 原创作者 :www.csframework.com
|
///* Copyright 2006-2021 C/S框架网 www.csframework.com
|
///**************************************************************************/
|
|
namespace CSFrameworkV5.Library.Entry
|
{
|
/// <summary>
|
/// 登录窗体
|
/// </summary>
|
public partial class frmLogin : frmBase
|
{
|
private LoginSystemAuth _CurrentAuthorization; //登录策略接口
|
private LoginAuthType _LoginAuthType; //当前授权模式
|
|
/// <summary>
|
/// 获取当前用户的账套资料,绑定数据源。
|
/// </summary>
|
/// <param name="user">用户账号</param>
|
/// <param name="pwd">登录密码</param>
|
/// <returns></returns>
|
private bool BindingDataSet(string user, string pwd)
|
{
|
var password = KeyProvider.Default.Encrypt(pwd); /*常规加密*/
|
var data = CommonData.GetSystemDataSet(user, password);
|
DataBinder.BindingLookupEditDataSource(txtDataset, data,
|
"DataSetName", "DataSetID");
|
return data.Rows.Count > 0;
|
}
|
|
private void btnCancel_Click(object sender, EventArgs e)
|
{
|
if (Msg.AskQuestion(LanLib.Get("确定要退出系统吗?")))
|
{
|
frmMain1.IsClosing = true;
|
Application.Exit();
|
}
|
}
|
|
private void btnLogin_Click(object sender, EventArgs e)
|
{
|
try
|
{
|
txtUser.Focus();
|
|
SetButtonEnable(false);
|
Update(); //必须
|
ShowLoginInfo(LanLib.Get("正在验证用户名及密码..."));
|
|
bllUser.ValidateLogin(txtUser.Text, txtPwd.Text); //检查登录文本信息
|
|
var loginUser = GetLoginUser();
|
|
if (_CurrentAuthorization.Login(loginUser)) //调用登录策略
|
{
|
//重新加载系统参数类
|
var data = CommonData.GetSystemSettings4Program(
|
Loginer.CurrentUser.DBID,
|
Loginer.CurrentUser.Account); //系统配置
|
SystemSettings.Current.Load(data);
|
//跟据选项保存登录信息
|
if (chkSaveLoginInfo.Checked) SaveLoginInfo();
|
//获取当前用户的权限
|
var bridge = BridgeFactory.CreateUserBridge();
|
var table = bridge.GetUserActionsList(loginUser.Account);
|
SystemAuthentication.UserAuthorities = table;
|
//获取其它公共数据
|
CommonData.GetCommonInfos();
|
ShowLoginInfo(LanLib.Get("正在获取最新版本..."));
|
//更新数据库最新DLL(开发者不更新版本)
|
var bridgeT = BridgeFactory.CreateCommonDataBridge();
|
var UpgraderName = bridgeT.GetUpgraderVersionData();
|
//不注释时使用线上代码,注释时使用本地代码
|
//foreach (DataRow dr in UpgraderName.Rows)
|
//{
|
// if (dr["upgraderName"].ToStringEx().Contains("CSF"))
|
// {
|
// string PathT = Application.StartupPath + "\\" + dr["upgraderName"].ToStringEx();
|
// if (Directory.Exists(PathT))
|
// {
|
// FileAttributes attr = File.GetAttributes(PathT);
|
// if (attr == FileAttributes.Directory)
|
// {
|
// Directory.Delete(PathT, true); // 3.1、删除文件夹
|
// }
|
// else
|
// {
|
// File.Delete(PathT);// 3.2、删除文件
|
// }
|
// }
|
// try
|
// {
|
// File.Delete(PathT);// 3.2、删除文件
|
// }
|
// catch (Exception)
|
// {
|
// continue;
|
// }
|
// string Version = bridgeT.GetUpgraderVersion(dr["upgraderName"].ToStringEx());
|
// byte[] by = bridgeT.GetUpgrader(dr["upgraderName"].ToStringEx(), Version);
|
// //写入到临时文件
|
// var tmpFile = Path.Combine(Application.StartupPath,
|
// dr["upgraderName"].ToStringEx());
|
// File.WriteAllBytes(tmpFile, by);
|
// }
|
//}
|
ShowLoginInfo(LanLib.Get("已更新至最新版本..."));
|
//初始化日志系统
|
InitLog();
|
//登录成功创建主窗体
|
MdiTools.MainForm = new frmMain1();
|
(MdiTools.MainForm as frmMain1).InitUserInterface(
|
new LoadStatus(lblLoadingInfo));
|
DialogResult = DialogResult.OK; //成功
|
Close(); //关闭登陆窗体
|
}
|
else
|
{
|
ShowLoginInfo(LanLib.Get("登录失败,请检查用户名和密码!"));
|
Msg.Warning(LanLib.Get("登录失败,请检查用户名和密码!"));
|
}
|
}
|
catch (CustomException ex)
|
{
|
//写入本地文件日志-系统异常日志
|
LogLocalException.Log.WriteLog(LogTypeSystem.Exception,
|
ex.Message);
|
|
SetButtonEnable(true);
|
ShowLoginInfo(ex.Message);
|
|
Msg.Warning(ex.Message);
|
}
|
catch (Exception ex)
|
{
|
//写入本地文件日志-系统异常日志
|
LogLocalException.Log.WriteLog(LogTypeSystem.Exception,
|
ex.Message);
|
|
SetButtonEnable(true);
|
ShowLoginInfo(LanLib.Get("登录失败,请检查用户名和密码!"));
|
|
Msg.Warning(LanLib.Get("登录失败,请检查用户名和密码!") + "\r\n" +
|
ex.Message);
|
}
|
}
|
|
private void btnModifyPwd_LinkClicked(object sender,
|
LinkLabelLinkClickedEventArgs e)
|
{
|
try
|
{
|
Hide();
|
var user = new LoginUser();
|
user.Account = txtUser.Text;
|
user.DBID = txtDataset.EditValue.ToStringEx();
|
frmModifyPwd.Execute(user, ModifyPwdType.LoginWindowDirect,
|
this);
|
}
|
finally
|
{
|
Show();
|
}
|
}
|
|
/// <summary>
|
/// 清除登录信息
|
/// </summary>
|
private void ClearLoginInfo()
|
{
|
UserConfig.Current.Password = "";
|
UserConfig.Current.IsSaveLoginInfo = chkSaveLoginInfo.Checked;
|
UserConfig.Current.Save();
|
}
|
|
/// <summary>
|
/// 获取帐套数据库名称
|
/// </summary>
|
/// <returns></returns>
|
private string GetDataSetDBName()
|
{
|
var view =
|
(DataRowView)txtDataset.Properties.GetDataSourceRowByKeyValue(
|
txtDataset.EditValue);
|
return ConvertEx.ToString(view.Row["DBName"]);
|
}
|
|
/// <summary>
|
/// 创建登录使用的对象
|
/// </summary>
|
/// <returns></returns>
|
private LoginUser GetLoginUser()
|
{
|
var loginUser = new LoginUser();
|
loginUser.Account = txtUser.Text;
|
loginUser.Password =
|
KeyProvider.Default.Encrypt(txtPwd.Text); /*常规加密*/
|
loginUser.DBID = txtDataset.EditValue.ToStringEx(); //帐套编号
|
loginUser.DBName = GetDataSetDBName();
|
loginUser.IP = NetTools.GetLocalIP();
|
loginUser.MAC = NetTools.GetLocalMac();
|
loginUser.LoginAuthType = _LoginAuthType;
|
return loginUser;
|
}
|
|
/// <summary>
|
/// 初始化日志系统
|
/// </summary>
|
private void InitLog()
|
{
|
//清空日志对象
|
LogUserOperate.Logs.Clear();
|
|
//注册本地日志对象
|
if (SystemSettings.Current.AllowLocalLog)
|
{
|
var logFile = Application.StartupPath + Globals.DEF_LOCAL_LOG;
|
LogUserOperate.RegisteLog(new LogLocalException(logFile));
|
}
|
|
//注册数据库日志
|
if (SystemSettings.Current.AllowDBLog)
|
LogUserOperate.RegisteLog(new DBLog());
|
}
|
|
/// <summary>
|
/// 初始化登陆窗体, 创建登录策略
|
/// </summary>
|
private void InitLoginWindow()
|
{
|
try
|
{
|
ReadLoginInfo();
|
|
//绑定语言类型数据源
|
var data = DataDictCache.Cache.LanguageType.Copy();
|
DataBinder.BindingLookupEditDataSource(txtLan, data, "LanName",
|
"LanType");
|
|
//有保存登录信息,自动显示帐套。
|
if (txtUser.Text != "" && txtPwd.Text != "" &&
|
ConvertEx.ToString(txtDataset.EditValue) != "")
|
BindingDataSet(txtUser.Text, txtPwd.Text);
|
|
SystemAuthentication.Current = null;
|
|
_CurrentAuthorization = new LoginSystemAuth();
|
_LoginAuthType = SystemSettings.Current.LoginAuthType; //系统设置
|
|
//重新设置语言
|
txtLan.EditValue = UserConfig.Current.LanguageID;
|
if (ConvertEx.ToString(txtLan.EditValue) != "")
|
txtLan_EditValueChanged_1(txtLan, new EventArgs());
|
|
//btnModifyPwd.Visible = !SystemSettings.Current.IsDemoVersion;
|
}
|
catch (Exception ex)
|
{
|
//写入本地文件日志-系统异常日志
|
LogLocalException.Log.WriteLog(LogTypeSystem.Exception,
|
ex.Message);
|
|
Msg.ShowException(ex);
|
}
|
}
|
|
/// <summary>
|
/// 显示登陆窗体.(公共静态方法)
|
/// </summary>
|
public static bool Login()
|
{
|
var form = new frmLogin();
|
var result = form.ShowDialog();
|
var ret = result == DialogResult.OK &&
|
SystemAuthentication.Current != null;
|
return ret;
|
}
|
|
/// <summary>
|
/// 从配置文件读取上次登录的信息
|
/// </summary>
|
private void ReadLoginInfo()
|
{
|
txtUser.Text = UserConfig.Current.User;
|
txtDataset.EditValue = UserConfig.Current.DBID;
|
txtPwd.Text = UserConfig.Current.Password;
|
chkSaveLoginInfo.Checked = UserConfig.Current.IsSaveLoginInfo;
|
txtLan.EditValue = UserConfig.Current.LanguageID;
|
}
|
|
/// <summary>
|
/// 保存本次登录信息
|
/// </summary>
|
private void SaveLoginInfo()
|
{
|
UserConfig.Current.User = txtUser.Text;
|
UserConfig.Current.DBID = txtDataset.EditValue.ToStringEx();
|
UserConfig.Current.Password = txtPwd.Text;
|
UserConfig.Current.IsSaveLoginInfo = chkSaveLoginInfo.Checked;
|
UserConfig.Current.LanguageID = txtLan.EditValue.ToStringEx();
|
UserConfig.Current.Save();
|
}
|
|
/// <summary>
|
/// 设置按钮状态
|
/// </summary>
|
/// <param name="value"></param>
|
private void SetButtonEnable(bool value)
|
{
|
btnLogin.Enabled = value;
|
btnCancel.Enabled = value;
|
btnLogin.Update();
|
btnCancel.Update();
|
}
|
|
public override void SetLanguage()
|
{
|
base.SetLanguage();
|
|
//若是直连模式,显示数据库类型
|
if (BridgeFactory.BridgeType == BridgeType.ADODirect)
|
{
|
var api = BridgeFactory.GetConfigInterface();
|
var ip = api.ServerName == "." ? "localhost" : api.ServerName;
|
lblBridgetype.Text = $"ADO-DIRECT: ({api.DatabaseType}->{ip})";
|
}
|
|
if (BridgeFactory.BridgeType == BridgeType.WindowsService)
|
{
|
//http://localhost:32641/CommonService.svc
|
var url = ConfigurationManager.AppSettings["ICommonService"];
|
var root = url.Split(new[] { "//", "/" },
|
StringSplitOptions.RemoveEmptyEntries)[1];
|
lblBridgetype.Text = "WCF->" + root;
|
}
|
|
//显示版本号
|
lbVersion.Text = Globals.DEF_PROGRAM_VERSION;
|
|
//若注释掉以下代码,必须在【多语言管理】界面修改界面的标题
|
//方式1:窗体标题写死, 方式2:在【多语言管理】界面修改界面的标题
|
//C/S系统快速开发框架-旗舰版 V5.1(2021)
|
Text = LanLib.Get(Globals.DEF_PROGRAM_NAME) +
|
Globals.DEF_PROGRAM_VERSION;
|
}
|
|
/// <summary>
|
/// 显示状态信息
|
/// </summary>
|
/// <param name="info"></param>
|
private void ShowLoginInfo(string info)
|
{
|
lblLoadingInfo.Text = info;
|
lblLoadingInfo.Update();
|
}
|
|
private void txtDataset_QueryPopUp(object sender, CancelEventArgs e)
|
{
|
//下栏帐套,获取当前用户的帐套
|
if (txtUser.Text.Trim() == "")
|
{
|
txtUser.Focus();
|
e.Cancel = true;
|
}
|
else
|
{
|
var success = BindingDataSet(txtUser.Text.Trim(),
|
txtPwd.Text.Trim());
|
if (!success)
|
Msg.Warning(LanLib.Get("加载帐套数据失败!") + "\r\n" +
|
LanLib.Get("错误原因:1.用户名或密码错误 2.用户没有帐套权限"));
|
}
|
}
|
|
private void txtLan_EditValueChanged_1(object sender, EventArgs e)
|
{
|
LanguageType lan;
|
var ok = Enum.TryParse(ConvertEx.ToString(txtLan.EditValue),
|
out lan);
|
if (ok)
|
{
|
UserConfig.Current.LanguageID = txtLan.EditValue.ToStringEx();
|
UserConfig.Current.Save();
|
|
LanLib.Current = lan;
|
SetLanguage();
|
}
|
}
|
|
private void txtPwd_KeyPress(object sender, KeyPressEventArgs e)
|
{
|
if (e.KeyChar == (char)Keys.Enter)
|
{
|
btnLogin.Focus();
|
e.Handled = true;
|
e.KeyChar = (char)Keys.None;
|
}
|
}
|
|
private void txtUser_EditValueChanged(object sender, EventArgs e)
|
{
|
txtPwd.Text = "";
|
}
|
|
#region 窗体构造器,事件
|
|
/// <summary>
|
/// 私有构造器
|
/// </summary>
|
private frmLogin()
|
{
|
InitializeComponent();
|
|
//API函数加载,实现窗体边框阴影效果
|
WinAPI.SetClassLong(Handle, WinAPI.GCL_STYLE,
|
WinAPI.GetClassLong(Handle, WinAPI.GCL_STYLE) |
|
WinAPI.CS_DropSHADOW);
|
|
//拖拽窗体通用类
|
FormDragDrop.Handle(this);
|
}
|
|
private void frmLogin_Load(object sender, EventArgs e)
|
{
|
InitLoginWindow(); //初始化登陆窗体
|
}
|
|
private void frmLogin_Shown(object sender, EventArgs e)
|
{
|
Activate();
|
Focus();
|
}
|
|
#endregion
|
}
|
}
|