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