From 552b0d6e5d9f02c5f50e7407f0b274f4b926a043 Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期四, 12 六月 2025 09:53:57 +0800
Subject: [PATCH] Merge branch 'clh'

---
 SourceCode/Bond/Servo/ChangePasswordDlg.cpp |  123 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 123 insertions(+), 0 deletions(-)

diff --git a/SourceCode/Bond/Servo/ChangePasswordDlg.cpp b/SourceCode/Bond/Servo/ChangePasswordDlg.cpp
new file mode 100644
index 0000000..5a8a9f0
--- /dev/null
+++ b/SourceCode/Bond/Servo/ChangePasswordDlg.cpp
@@ -0,0 +1,123 @@
+锘�// CChangePasswordDlg.cpp: 瀹炵幇鏂囦欢
+//
+
+#include "stdafx.h"
+#include "Servo.h"
+#include "afxdialogex.h"
+#include "ChangePasswordDlg.h"
+#include "UserManager.h"
+#include "SystemLogManager.h"
+
+
+// CChangePasswordDlg 瀵硅瘽妗�
+
+IMPLEMENT_DYNAMIC(CChangePasswordDlg, CDialogEx)
+
+CChangePasswordDlg::CChangePasswordDlg(CWnd* pParent /*=nullptr*/)
+	: CDialogEx(IDD_DIALOG_CHANGE_PASSWORD, pParent)
+{
+}
+
+CChangePasswordDlg::~CChangePasswordDlg()
+{
+}
+
+bool CChangePasswordDlg::changeUserPassword(UserManager& userManager, const std::string& username, const std::string& newPassword)
+{
+    if (!userManager.changePassword(username, newPassword)) {
+        AfxMessageBox(_T("淇敼鐢ㄦ埛瀵嗙爜澶辫触銆�"));
+        return false;
+    }
+
+    return true;
+}
+
+void CChangePasswordDlg::DoDataExchange(CDataExchange* pDX)
+{
+	CDialogEx::DoDataExchange(pDX);
+	DDX_Control(pDX, IDC_EDIT_CHANGE_USERNAME, m_editUsername);
+	DDX_Control(pDX, IDC_EDIT_CHANGE_CURRENT_PASSWORD, m_editCurrentPassword);
+	DDX_Control(pDX, IDC_EDIT_CHANGE_NEW_PASSWORD, m_editNewPassword);
+	DDX_Control(pDX, IDC_EDIT_CHANGE_CONFIRM_PASSWORD, m_editConfirmPassword);
+}
+
+
+BEGIN_MESSAGE_MAP(CChangePasswordDlg, CDialogEx)
+	ON_BN_CLICKED(IDOK, &CChangePasswordDlg::OnBnClickedOk)
+END_MESSAGE_MAP()
+
+
+// CChangePasswordDlg 娑堟伅澶勭悊绋嬪簭
+
+
+BOOL CChangePasswordDlg::OnInitDialog()
+{
+    CDialogEx::OnInitDialog();
+
+    // 璁剧疆绐楀彛鏍囬鍜屽垵濮嬪��
+    SetWindowText(_T("淇敼瀵嗙爜"));
+
+    UserManager& userManager = UserManager::getInstance();
+    if (userManager.isLoggedIn()) {
+        m_editUsername.SetWindowText(userManager.getCurrentUser().c_str());
+    }
+
+    return TRUE;
+}
+
+void CChangePasswordDlg::OnBnClickedOk()
+{
+    CString username, currentPassword, newPassword, confirmPassword;
+    m_editUsername.GetWindowText(username);
+    m_editCurrentPassword.GetWindowText(currentPassword);
+    m_editNewPassword.GetWindowText(newPassword);
+    m_editConfirmPassword.GetWindowText(confirmPassword);
+
+    if (username.IsEmpty() || currentPassword.IsEmpty() || newPassword.IsEmpty() || confirmPassword.IsEmpty()) {
+        AfxMessageBox(_T("鎵�鏈夊瓧娈靛潎涓哄繀濉」銆�"));
+        return;
+    }
+
+    if (newPassword.Compare(confirmPassword) != 0) {
+        AfxMessageBox(_T("鏂板瘑鐮佷笌纭瀵嗙爜涓嶅尮閰嶃��"));
+        return;
+    }
+
+    SystemLogManager& logManager = SystemLogManager::getInstance();
+    if (newPassword.Compare(currentPassword) == 0) {
+        EndDialog(IDCANCEL);
+        return;
+    }
+
+#ifdef UNICODE
+    std::string strUsername = CStringA(username);
+    std::string strCurrentPassword = CStringA(currentPassword);
+    std::string strNewPassword = CStringA(newPassword);
+#else
+    std::string strUsername = username;
+    std::string strCurrentPassword = currentPassword;
+    std::string strNewPassword = newPassword;
+#endif
+
+    UserManager& userManager = UserManager::getInstance();
+    if (userManager.isLoggedIn() && strCurrentPassword.compare(userManager.getCurrentPass()) == 0) {
+        if (changeUserPassword(userManager, strUsername, strNewPassword)) {
+            EndDialog(IDOK);
+			logManager.log(SystemLogManager::LogType::Info, "淇敼瀵嗙爜鎴愬姛锛�", strUsername);
+        }
+    }
+    else {
+        if (userManager.login(strUsername, strCurrentPassword)) {
+            if (changeUserPassword(userManager, strUsername, strNewPassword)) {
+                EndDialog(IDOK);
+                logManager.log(SystemLogManager::LogType::Info, "淇敼瀵嗙爜鎴愬姛锛�", strUsername);
+            }
+            else {
+                userManager.logout();
+            }
+        }
+        else {
+            AfxMessageBox(_T("褰撳墠鐢ㄦ埛鍚嶆垨瀵嗙爜杈撳叆閿欒銆�"));
+        }
+    }
+}

--
Gitblit v1.9.3