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 { /// /// LoginControl.xaml 的交互逻辑 /// 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(); } /// /// 自动登录 /// /// /// private void AutoLogin(Action callback, Action 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(encryptor.Decrypt(content)); Result res = HttpClientCreator.PostSyncAction("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 res = HttpClientCreator.GetSyncAction("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}"); }); } /// /// 加载插件主Tab /// 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(); } /// /// 登陆点击事件 /// /// /// 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 res = HttpClientCreator.PostSyncAction("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; } } }