LAPTOP-T815PCOQ\25526
2024-11-20 8dbd14952aa622587a92866dc01943869ea4f9dc
SourceCode/Bond/BondEq/UserManagerDlg.cpp
@@ -5,10 +5,14 @@
#include "BondEq.h"
#include "afxdialogex.h"
#include "UserManagerDlg.h"
#include "InputDialog.h"
#include "UserManager.h"
#include "NewCellTypes/GridCellCombo.h"
#include "NewCellTypes/GridCellNumeric.h"
#include <set>
const COLORREF CURR_USER_BK_COLOR = RGB(0, 255, 0);
// CUserManagerDlg 对话框
@@ -110,12 +114,12 @@
   if (!usersData.empty()) {
      m_gridUserManager.SetRowCount(usersData.size() + 1);
      for (size_t i = 0; i < usersData.size(); i++) {
      for (int i = 0; i < usersData.size(); i++) {
         int nRowIdx = i + 1;
         int nColIdx = 0;
         m_gridUserManager.SetItemText(nRowIdx, nColIdx++, std::to_string(i + 1).c_str());
         for (size_t j = 0; j < usersData[i].size(); j++) {
         for (int j = 0; j < usersData[i].size(); j++) {
            if (usersData[i][1].empty()) {
               continue;
            }
@@ -174,8 +178,9 @@
   }
   for (int i = 0; i < nCols; i++) {
      bool ret = m_gridUserManager.SetItemBkColour(nCurrNameRow, i, RGB(0, 255, 0));
      m_gridUserManager.SetItemBkColour(nCurrNameRow, i, CURR_USER_BK_COLOR);
   }
   m_gridUserManager.SetItemState(nCurrNameRow, 3, GVIS_READONLY);
   m_gridUserManager.Invalidate();
   m_gridUserManager.UpdateWindow();
@@ -190,6 +195,22 @@
      return;
   }
   CInputDialog inputDialog(_T("添加用户"), _T("请输入用户名:"));
   if (inputDialog.DoModal() != IDOK) {
      return;
   }
   CString inputText = inputDialog.GetInputText();
   if (inputText.IsEmpty()) {
      AfxMessageBox(_T("用户名不能为空!"), MB_OK | MB_ICONEXCLAMATION);
      return;
   }
   if (IsUsernameDuplicate(inputText)) {
      AfxMessageBox(_T("用户名重复!"), MB_OK | MB_ICONEXCLAMATION);
      return;
   }
   int nRowCount = pGridCtrl->GetRowCount();
   pGridCtrl->SetRowCount(nRowCount + 1);
   int newRowIndex = nRowCount;
@@ -197,8 +218,7 @@
   CString strText;
   strText.Format(_T("%d"), newRowIndex);
   pGridCtrl->SetItemText(newRowIndex, 0, strText);
   strText.Format(_T("User%d"), newRowIndex);
   pGridCtrl->SetItemText(newRowIndex, 1, strText);
   pGridCtrl->SetItemText(newRowIndex, 1, inputText);
   pGridCtrl->SetItemText(newRowIndex, 2, _T("123456"));
   pGridCtrl->SetItemText(newRowIndex, 3, _T("操作员"));
   pGridCtrl->SetItemText(newRowIndex, 4, _T("30"));
@@ -445,16 +465,20 @@
   // 第4列为权限列, 第8列为角色描述列, 从映射中查找对应描述
   if (nCol == 3) {
      CString selectedRole = m_gridUserManager.GetItemText(nRow, nCol);
      auto it = m_mapRoleDescriptions.find(selectedRole);
      if (it != m_mapRoleDescriptions.end()) {
         m_gridUserManager.SetItemText(nRow, 7, it->second);
         m_gridUserManager.RedrawCell(nRow, 7);
      if (m_gridUserManager.GetItemBkColour(nRow, nCol) == CURR_USER_BK_COLOR) {
         AfxMessageBox(_T("当前登录用户权限不能修改!"));
      }
      else {
         m_gridUserManager.SetItemText(nRow, 7, _T(""));
         m_gridUserManager.RedrawCell(nRow, 7);
         CString selectedRole = m_gridUserManager.GetItemText(nRow, nCol);
         auto it = m_mapRoleDescriptions.find(selectedRole);
         if (it != m_mapRoleDescriptions.end()) {
            m_gridUserManager.SetItemText(nRow, 7, it->second);
            m_gridUserManager.RedrawCell(nRow, 7);
         }
         else {
            m_gridUserManager.SetItemText(nRow, 7, _T(""));
            m_gridUserManager.RedrawCell(nRow, 7);
         }
      }
   }
@@ -540,11 +564,50 @@
{
   // TODO: 在此添加控件通知处理程序代码
   std::vector<std::vector<std::string>> vecData;
   std::set<std::string> usernameSet; // 用于存储用户名,检查是否重复
   int nCurrUserRow = -1;
   UserManager& userManager = UserManager::getInstance();
   for (int i = 1; i < m_gridUserManager.GetRowCount(); ++i) {
      std::vector<std::string> rowData;
      CString cellText = m_gridUserManager.GetItemText(i, 1);
      std::string username = CT2A(cellText.GetString());
      cellText = m_gridUserManager.GetItemText(i, 2);
      std::string userpass = CT2A(cellText.GetString());
      if (username.empty() || userpass.empty()) {
         AfxMessageBox(_T("用户名和密码不能为空!"));
         return;
      }
      if (usernameSet.find(username) != usernameSet.end()) {
         CString message;
         message.Format(_T("用户名 [%s] 重复,请修改后保存!"), cellText);
         AfxMessageBox(message, MB_ICONEXCLAMATION);
         return;
      }
      usernameSet.insert(username);
      if (nCurrUserRow == -1 && m_gridUserManager.GetItemBkColour(i, 0) == CURR_USER_BK_COLOR){
         nCurrUserRow = i;
         if (username.compare(userManager.getCurrentUser()) != 0) {
            userManager.setCurrentUser(username);
         }
         if (userpass.compare(userManager.getCurrentPass()) != 0) {
            userManager.setCurrentPass(userpass);
         }
         userManager.clearSession();
         userManager.saveSession();
      }
      for (int j = 1; j < m_gridUserManager.GetColumnCount() - 1; ++j) {
         CString cellText = m_gridUserManager.GetItemText(i, j);
         std::string cellString = CT2A(cellText.GetString());
         // 第4列是权限,转换为数字字符串
         if (j == 3) {
            if (cellText == _T("管理员"))
               cellString = "0";
@@ -562,6 +625,6 @@
      vecData.push_back(rowData);
   }
   UserManager::getInstance().setUsers(vecData);
   userManager.setUsers(vecData);
   CDialogEx::OnOK();
}