using PdmSwPlugin.Commmon.Util.UI;
|
using PdmSwPlugin.Common.Entity.System;
|
using PdmSwPlugin.Common.Util.Http;
|
using PdmSwPlugin.Common.Util;
|
using System;
|
using System.Threading.Tasks;
|
using System.Windows;
|
using System.Windows.Controls;
|
using System.IO;
|
using PdmSwPlugin.Common.Interface;
|
using SolidWorks.Interop.sldworks;
|
using log4net;
|
using PdmSwPlugin.Common.Setting;
|
|
namespace PdmSwPlugin.Main
|
{
|
/// <summary>
|
/// LoginControl.xaml 的交互逻辑
|
/// </summary>
|
public partial class LoginControl : UserControl, ISwAppSetter
|
{
|
|
private static readonly Encryptor encryptor = new Encryptor("aB3dE5fG7hI9jjK1lMnOpQrS2tUvWxYz",
|
"8Wq9RsT4vYx6ZuB1");
|
|
private SldWorks swApp;
|
public SldWorks SwApp => swApp;
|
private ILog Logger = LogManager.GetLogger("Main");
|
private PluginSetting GlobalConfig = PluginSetting.Instance;
|
private Action successCallback;
|
|
public LoginControl(Action successCallback)
|
{
|
this.successCallback = successCallback;
|
InitializeComponent();
|
}
|
|
/// <summary>
|
/// 自动登录
|
/// </summary>
|
/// <param name="callback"></param>
|
/// <param name="reject"></param>
|
private void AutoLogin(Action<PdmUser> callback, Action<Exception> reject)
|
{
|
MaskAdorner.ShowMask(mainGrid, "登陆中...");
|
Task.Run(() =>
|
{
|
try
|
{
|
if (GlobalConfig.ClassicLogin)
|
{
|
string binPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData), "HengXin", "PdmSwPlugin", "bin");
|
if (!File.Exists(binPath))
|
{
|
callback(null);
|
return;
|
}
|
string content = null;
|
if (!BinUtil.LoadStrFromBin(ref content, binPath))
|
{
|
callback(null);
|
return;
|
}
|
try
|
{
|
PdmUser param = JsonUtil.Deserialize<PdmUser>(encryptor.Decrypt(content));
|
Result<PdmUser> res = HttpClientCreator.PostSyncAction<PdmUser>("openApi/wpf/login", new PdmUser
|
{
|
appId = PluginConst.AppId,
|
pluginVersion = PluginConst.Version,
|
username = param.username,
|
password = param.password
|
});
|
PdmUser user = res.HandleResult();
|
user.appId = PluginConst.AppId;
|
user.pluginVersion = PluginConst.Version;
|
user.password = param.password;
|
callback(user);
|
}
|
catch (Exception ex)
|
{
|
Logger.Error("Remember Me Login Failed!", ex);
|
callback(null);
|
}
|
}
|
else
|
{
|
Result<PdmUser> res = HttpClientCreator.GetSyncAction<PdmUser>("openApi/wpf/simpleLogin", new PdmUser
|
{
|
username = System.Environment.UserName,
|
appId = PluginConst.AppId,
|
pluginVersion = PluginConst.Version
|
});
|
PdmUser user = res.HandleResult();
|
user.appId = PluginConst.AppId;
|
user.pluginVersion = PluginConst.Version;
|
callback(user);
|
}
|
}
|
catch (Exception e)
|
{
|
reject(e);
|
}
|
finally
|
{
|
MaskAdorner.HideMask(mainGrid);
|
}
|
});
|
}
|
|
private void UserControl_Loaded(object sender, RoutedEventArgs e)
|
{
|
|
AutoLogin(
|
(user) =>
|
{
|
if (user != null)
|
{
|
Dispatcher.Invoke(() =>
|
{
|
PdmUser.SetLoginUser(user);
|
if (PdmUser.HasLogin())
|
{
|
LoginSuccess();
|
}
|
});
|
}
|
},
|
(ex) =>
|
{
|
Logger.Error("登陆失败!", ex);
|
this.Error($"登陆失败! {ex.Message}");
|
});
|
}
|
|
/// <summary>
|
/// 加载插件主Tab
|
/// </summary>
|
public void LoginSuccess()
|
{
|
if (rememberMeInput.IsChecked == true)
|
{
|
// 勾选自动登录的处理
|
string userInfo = JsonUtil.Stringfiy(PdmUser.LoginUser);
|
string binDir = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData), "HengXin", "PdmSwPlugin");
|
if (!Directory.Exists(binDir))
|
{
|
Directory.CreateDirectory(binDir);
|
}
|
string binPath = Path.Combine(binDir, "bin");
|
BinUtil.SaveStrToBin(encryptor.Encrypt(userInfo), binPath);
|
}
|
successCallback();
|
}
|
|
/// <summary>
|
/// 登陆点击事件
|
/// </summary>
|
/// <param name="sender"></param>
|
/// <param name="e"></param>
|
private void Button_Click(object sender, RoutedEventArgs e)
|
{
|
MaskAdorner.ShowMask(mainGrid, "登陆中...");
|
PdmUser param = new PdmUser
|
{
|
username = usernameTextBlock.Text,
|
password = passwordTextBlock.Password,
|
appId = PluginConst.AppId,
|
pluginVersion = PluginConst.Version
|
};
|
Task.Run(() =>
|
{
|
try
|
{
|
Result<PdmUser> res = HttpClientCreator.PostSyncAction<PdmUser>("openApi/wpf/login", param);
|
PdmUser user = res.HandleResult();
|
user.appId = PluginConst.AppId;
|
user.pluginVersion = PluginConst.Version;
|
user.password = param.password;
|
Dispatcher.Invoke(() =>
|
{
|
PdmUser.SetLoginUser(user);
|
if (PdmUser.HasLogin())
|
{
|
LoginSuccess();
|
}
|
});
|
}
|
catch (Exception ex)
|
{
|
Logger.Error("登陆失败!", ex);
|
this.Error($"登陆失败! {ex.Message}");
|
}
|
finally
|
{
|
MaskAdorner.HideMask(mainGrid);
|
}
|
});
|
}
|
|
public void SetSwApp(SldWorks SwApp)
|
{
|
this.swApp = SwApp;
|
}
|
}
|
}
|