From db9d120efcfe76bb73df089dca8986eca9ee0e6f Mon Sep 17 00:00:00 2001
From: chenluhua1980 <Chenluhua@qq.com>
Date: 星期三, 10 十二月 2025 10:11:37 +0800
Subject: [PATCH] 1.扫码上报,但未在配置中设置变量;

---
 SourceCode/Bond/Servo/CUserManager2Dlg.cpp |  299 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 284 insertions(+), 15 deletions(-)

diff --git a/SourceCode/Bond/Servo/CUserManager2Dlg.cpp b/SourceCode/Bond/Servo/CUserManager2Dlg.cpp
index 7d47ecd..84be473 100644
--- a/SourceCode/Bond/Servo/CUserManager2Dlg.cpp
+++ b/SourceCode/Bond/Servo/CUserManager2Dlg.cpp
@@ -1,20 +1,20 @@
-锘�// CUserManager2Dlg.cpp: 瀹炵幇鏂囦欢
+锘�// CUserManager2Dlg.cpp
 //
 
 #include "stdafx.h"
 #include "Servo.h"
 #include "CUserManager2Dlg.h"
 #include "afxdialogex.h"
-
-
-// CUserManager2Dlg 瀵硅瘽妗�
+#include "CUserEdit2Dlg.h"
+#include "InputDialog.h"
+#include "resource.h"
+#include "ToolUnits.h"
 
 IMPLEMENT_DYNAMIC(CUserManager2Dlg, CDialogEx)
 
-CUserManager2Dlg::CUserManager2Dlg(CWnd* pParent /*=nullptr*/)
+CUserManager2Dlg::CUserManager2Dlg(CWnd* pParent)
 	: CDialogEx(IDD_DIALOG_USER_MANAGER2, pParent)
 {
-
 }
 
 CUserManager2Dlg::~CUserManager2Dlg()
@@ -24,30 +24,299 @@
 void CUserManager2Dlg::DoDataExchange(CDataExchange* pDX)
 {
 	CDialogEx::DoDataExchange(pDX);
+	DDX_Control(pDX, IDC_LIST1, m_listUsers);
 }
-
 
 BEGIN_MESSAGE_MAP(CUserManager2Dlg, CDialogEx)
 	ON_WM_SIZE()
+	ON_BN_CLICKED(IDC_BUTTON_ADD, &CUserManager2Dlg::OnBnClickedButtonAdd)
+	ON_BN_CLICKED(IDC_BUTTON_EDIT, &CUserManager2Dlg::OnBnClickedButtonEdit)
+	ON_BN_CLICKED(IDC_BUTTON_DEL, &CUserManager2Dlg::OnBnClickedButtonDel)
+	ON_BN_CLICKED(IDC_BUTTON_RESET_PWD, &CUserManager2Dlg::OnBnClickedButtonResetPwd)
+	ON_BN_CLICKED(IDC_BUTTON_ENABLE, &CUserManager2Dlg::OnBnClickedButtonEnable)
+	ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST1, &CUserManager2Dlg::OnLvnItemchangedUsers)
 END_MESSAGE_MAP()
-
-
-// CUserManager2Dlg 娑堟伅澶勭悊绋嬪簭
-
 
 BOOL CUserManager2Dlg::OnInitDialog()
 {
 	CDialogEx::OnInitDialog();
 
-	// TODO:  鍦ㄦ娣诲姞棰濆鐨勫垵濮嬪寲
+	InitList();
+	RefreshUserList();
+	UpdateButtonState();
 
-	return TRUE;  // return TRUE unless you set the focus to a control
-				  // 寮傚父: OCX 灞炴�ч〉搴旇繑鍥� FALSE
+	return TRUE;
 }
 
 void CUserManager2Dlg::OnSize(UINT nType, int cx, int cy)
 {
 	CDialogEx::OnSize(nType, cx, cy);
+}
 
-	// TODO: 鍦ㄦ澶勬坊鍔犳秷鎭鐞嗙▼搴忎唬鐮�
+void CUserManager2Dlg::InitList()
+{
+	DWORD dwStyle = m_listUsers.GetExtendedStyle();
+	m_listUsers.SetExtendedStyle(dwStyle | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
+	m_listUsers.InsertColumn(0, _T("璐﹀彿"), LVCFMT_LEFT, 90);
+	m_listUsers.InsertColumn(1, _T("鏄剧ず鍚�"), LVCFMT_LEFT, 100);
+	m_listUsers.InsertColumn(2, _T("瑙掕壊"), LVCFMT_LEFT, 80);
+	m_listUsers.InsertColumn(3, _T("绾у埆"), LVCFMT_LEFT, 60);
+	m_listUsers.InsertColumn(4, _T("鐘舵��"), LVCFMT_LEFT, 70);
+}
+
+void CUserManager2Dlg::RefreshUserList()
+{
+	CString selectedName;
+	int currentIndex = GetSelectedIndex();
+	if (currentIndex >= 0 && currentIndex < static_cast<int>(m_users.size())) {
+		selectedName = m_users[currentIndex].userName.c_str();
+	}
+
+	m_users = CUserManager2::getInstance().getUsers();
+	m_listUsers.DeleteAllItems();
+
+	for (size_t i = 0; i < m_users.size(); ++i) {
+		const auto& user = m_users[i];
+		CString account(user.userName.c_str());
+		CString display(user.displayName.c_str());
+		CString role(user.roleName.empty() ? L"-" : user.roleName.c_str());
+		CString level;
+		level.Format(_T("%d"), user.roleLevel);
+		CString state = user.enabled ? _T("鍚敤") : _T("绂佺敤");
+
+		int row = m_listUsers.InsertItem(static_cast<int>(i), account);
+		m_listUsers.SetItemText(row, 1, display);
+		m_listUsers.SetItemText(row, 2, role);
+		m_listUsers.SetItemText(row, 3, level);
+		m_listUsers.SetItemText(row, 4, state);
+	}
+
+	if (!selectedName.IsEmpty()) {
+		for (int i = 0; i < m_listUsers.GetItemCount(); ++i) {
+			if (selectedName.CompareNoCase(m_listUsers.GetItemText(i, 0)) == 0) {
+				m_listUsers.SetItemState(i, LVIS_SELECTED, LVIS_SELECTED);
+				m_listUsers.EnsureVisible(i, FALSE);
+				break;
+			}
+		}
+	}
+	UpdateButtonState();
+}
+
+void CUserManager2Dlg::UpdateButtonState()
+{
+	int index = GetSelectedIndex();
+	BOOL hasSelection = (index >= 0);
+
+	auto enable = [&](int id, BOOL enableFlag) {
+		if (CWnd* p = GetDlgItem(id)) {
+			p->EnableWindow(enableFlag);
+		}
+	};
+
+	enable(IDC_BUTTON_EDIT, hasSelection);
+	enable(IDC_BUTTON_DEL, hasSelection);
+	enable(IDC_BUTTON_RESET_PWD, hasSelection);
+	enable(IDC_BUTTON_ENABLE, hasSelection);
+
+	CString toggleText = _T("绂佺敤/鍚敤");
+	if (const auto* user = GetSelectedUser()) {
+		toggleText = user->enabled ? _T("绂佺敤") : _T("鍚敤");
+		if (IsCurrentUser(*user)) {
+			enable(IDC_BUTTON_DEL, FALSE);
+			enable(IDC_BUTTON_ENABLE, FALSE);
+		}
+	}
+
+	SetDlgItemText(IDC_BUTTON_ENABLE, toggleText);
+}
+
+int CUserManager2Dlg::GetSelectedIndex() const
+{
+	if (!::IsWindow(m_listUsers.GetSafeHwnd())) {
+		return -1;
+	}
+	return m_listUsers.GetNextItem(-1, LVNI_SELECTED);
+}
+
+const CUserManager2::UserInfo* CUserManager2Dlg::GetSelectedUser() const
+{
+	int index = GetSelectedIndex();
+	if (index < 0 || index >= static_cast<int>(m_users.size())) {
+		return nullptr;
+	}
+	return &m_users[index];
+}
+
+std::wstring CUserManager2Dlg::ToWString(const CString& text) const
+{
+	CString trimmed(text);
+	trimmed.Trim();
+
+	std::string str((LPTSTR)(LPCTSTR)trimmed);
+	return CToolUnits::AnsiToWString(str);
+}
+
+void CUserManager2Dlg::ShowErrorMessage(const CString& action, int code)
+{
+	const wchar_t* detail = UX_ErrorMessage(code);
+	CString msg;
+	msg.Format(_T("%s: %s"), action.GetString(), detail ? detail : L"Unknown");
+	AfxMessageBox(msg, MB_ICONERROR);
+}
+
+bool CUserManager2Dlg::IsCurrentUser(const CUserManager2::UserInfo& info) const
+{
+	CString current(CUserManager2::getInstance().getCurrentUserName().c_str());
+	CString account(info.userName.c_str());
+	current.Trim();
+	account.Trim();
+	return !current.IsEmpty() && current.CompareNoCase(account) == 0;
+}
+
+void CUserManager2Dlg::OnBnClickedButtonAdd()
+{
+	CUserEdit2Dlg dlg(false, this);
+	if (dlg.DoModal() != IDOK) {
+		return;
+	}
+
+	CString account = dlg.m_strUsername;
+	account.Trim();
+	CString display = dlg.m_strDisplayName;
+	display.Trim();
+	if (display.IsEmpty()) {
+		display = account;
+	}
+	CString role = dlg.m_strRole;
+	role.Trim();
+	CString password = dlg.m_strPassword;
+	password.Trim();
+
+	int rc = CUserManager2::getInstance().addUser(ToWString(account), ToWString(display), ToWString(password), ToWString(role), dlg.m_bEnabled == TRUE);
+	if (rc == UX_OK) {
+		RefreshUserList();
+		AfxMessageBox(_T("鏂板鐢ㄦ埛鎴愬姛"));
+	}
+	else {
+		ShowErrorMessage(_T("鏂板鐢ㄦ埛澶辫触"), rc);
+	}
+}
+
+void CUserManager2Dlg::OnBnClickedButtonEdit()
+{
+	const auto* user = GetSelectedUser();
+	if (!user) {
+		AfxMessageBox(_T("璇烽�夋嫨鐢ㄦ埛"));
+		return;
+	}
+
+	CUserEdit2Dlg dlg(true, this);
+	dlg.m_strUsername = user->userName.c_str();
+	dlg.m_strDisplayName = user->displayName.c_str();
+	dlg.m_strRole = user->roleName.c_str();
+	dlg.m_bEnabled = user->enabled ? TRUE : FALSE;
+	if (dlg.DoModal() != IDOK) {
+		return;
+	}
+
+	CString display = dlg.m_strDisplayName;
+	display.Trim();
+	CString password = dlg.m_strPassword;
+	password.Trim();
+	CString role = dlg.m_strRole;
+	role.Trim();
+
+	int rc = CUserManager2::getInstance().updateUser(user->userName, ToWString(display), ToWString(password), ToWString(role), dlg.m_bEnabled == TRUE);
+	if (rc == UX_OK) {
+		RefreshUserList();
+		AfxMessageBox(_T("淇濆瓨鎴愬姛"));
+	}
+	else {
+		ShowErrorMessage(_T("淇濆瓨澶辫触"), rc);
+	}
+}
+
+void CUserManager2Dlg::OnBnClickedButtonDel()
+{
+	const auto* user = GetSelectedUser();
+	if (!user) {
+		AfxMessageBox(_T("璇烽�夋嫨鐢ㄦ埛"));
+		return;
+	}
+
+	if (IsCurrentUser(*user)) {
+		AfxMessageBox(_T("涓嶈兘鍒犻櫎褰撳墠鐧诲綍鐢ㄦ埛"));
+		return;
+	}
+
+	CString prompt;
+	prompt.Format(_T("纭畾鍒犻櫎鐢ㄦ埛 %s ?"), CString(user->userName.c_str()));
+	if (AfxMessageBox(prompt, MB_ICONQUESTION | MB_YESNO) != IDYES) {
+		return;
+	}
+
+	int rc = CUserManager2::getInstance().deleteUser(user->userName);
+	if (rc == UX_OK) {
+		RefreshUserList();
+		AfxMessageBox(_T("鍒犻櫎鎴愬姛"));
+	}
+	else {
+		ShowErrorMessage(_T("鍒犻櫎澶辫触"), rc);
+	}
+}
+
+void CUserManager2Dlg::OnBnClickedButtonResetPwd()
+{
+	const auto* user = GetSelectedUser();
+	if (!user) {
+		AfxMessageBox(_T("璇烽�夋嫨鐢ㄦ埛"));
+		return;
+	}
+
+	CInputDialog dlg(_T("閲嶇疆瀵嗙爜"), _T("璇疯緭鍏ユ柊瀵嗙爜:"), this);
+	if (dlg.DoModal() != IDOK) {
+		return;
+	}
+
+	CString password = dlg.GetInputText();
+	password.Trim();
+	if (password.IsEmpty()) {
+		AfxMessageBox(_T("瀵嗙爜涓嶈兘涓虹┖"));
+		return;
+	}
+
+	int rc = CUserManager2::getInstance().resetPassword(user->userName, ToWString(password));
+	if (rc == UX_OK) {
+		AfxMessageBox(_T("瀵嗙爜宸查噸缃�"));
+	}
+	else {
+		ShowErrorMessage(_T("閲嶇疆澶辫触"), rc);
+	}
+}
+
+void CUserManager2Dlg::OnBnClickedButtonEnable()
+{
+	const auto* user = GetSelectedUser();
+	if (!user) {
+		AfxMessageBox(_T("璇烽�夋嫨鐢ㄦ埛"));
+		return;
+	}
+
+	bool enable = !user->enabled;
+	int rc = CUserManager2::getInstance().setUserEnabled(user->userName, enable);
+	if (rc == UX_OK) {
+		RefreshUserList();
+		CString msg = enable ? _T("鐢ㄦ埛宸插惎鐢�") : _T("鐢ㄦ埛宸茬鐢�");
+		AfxMessageBox(msg);
+	}
+	else {
+		ShowErrorMessage(_T("鎿嶄綔澶辫触"), rc);
+	}
+}
+
+void CUserManager2Dlg::OnLvnItemchangedUsers(NMHDR* /*pNMHDR*/, LRESULT* pResult)
+{
+	UpdateButtonState();
+	*pResult = 0;
 }

--
Gitblit v1.9.3