diff --git a/CMakeLists.txt b/CMakeLists.txt index 19ffa3f..8b6982d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -148,6 +148,9 @@ set(SHARED_SOURCES view/RegisterCenter/registernewuser.cpp view/RegisterCenter/registernewuser.h view/RegisterCenter/registernewuser.ui + view/RegisterCenter/changepasswordadmin.cpp + view/RegisterCenter/changepasswordadmin.h + view/RegisterCenter/changepasswordadmin.ui ) list(REMOVE_DUPLICATES SHARED_SOURCES) diff --git a/module/data/data_UserControl.cpp b/module/data/data_UserControl.cpp index 7377641..6f1fc94 100644 --- a/module/data/data_UserControl.cpp +++ b/module/data/data_UserControl.cpp @@ -671,6 +671,18 @@ namespace data::UserControl { return results.first()["username"].toString(); } + std::expected getIdByIdNumber(QString IdNumber) { + service::DatabaseManager db(service::Path::user()); + QString query = "SELECT id FROM users WHERE id_number = ? AND status != 'Deleted'"; + auto results = db.executePreparedQueryAndFetchAll(query, {IdNumber}); + + if (results.isEmpty()) { + return std::unexpected(UserInfoError::UserNotFound); + } + + return results.first()["id"].toInt(); + } + void changeUserName(int userId, const QString &newName) { service::DatabaseManager db(service::Path::user()); QString updateQuery = R"( diff --git a/module/data/data_UserControl.h b/module/data/data_UserControl.h index df0ab76..bd90754 100644 --- a/module/data/data_UserControl.h +++ b/module/data/data_UserControl.h @@ -277,6 +277,8 @@ namespace data::UserControl { std::expected getUserNameByIdNumber(QString IdNumber); + std::expected getIdByIdNumber(QString IdNumber); + /** * @brief 更改指定用户的用户名。 * diff --git a/view/RegisterCenter/changepasswordadmin.cpp b/view/RegisterCenter/changepasswordadmin.cpp new file mode 100644 index 0000000..c586f68 --- /dev/null +++ b/view/RegisterCenter/changepasswordadmin.cpp @@ -0,0 +1,46 @@ +// +// Created by gouzuang on 25-7-13. +// + +// You may need to build the project (run Qt uic code generator) to get "ui_ChangePasswordAdmin.h" resolved + +#include "changepasswordadmin.h" +#include "ui_ChangePasswordAdmin.h" + +namespace view::RegisterCenter { +ChangePasswordAdmin::ChangePasswordAdmin(QWidget *parent) : + QWidget(parent), ui(new Ui::ChangePasswordAdmin) { + ui->setupUi(this); + ui->message->setVisible(false); + service::style::setMica(this); +} + +ChangePasswordAdmin::~ChangePasswordAdmin() { + delete ui; +} + +void ChangePasswordAdmin::on_UpdateButton_clicked() { + auto id_number = ui->id_number->text(); + auto new_password = ui->new_password->text(); + if (id_number.isEmpty() || new_password.isEmpty()) { + log(LogLevel::ERR) << "错误:身份证号或新密码不能为空!"; + show_message("错误:身份证号或新密码不能为空!"); + return; + } + auto userId = data::UserControl::UserInfo::getIdByIdNumber(id_number); + if (userId.has_value()) { + auto id = userId.value(); + data::UserControl::Login::updateUserPassword(id, new_password); + }else { + return; + } +} + +void ChangePasswordAdmin::show_message(QString message, int timeout) { + ui->message->setText(message); + ui->message->setVisible(true); + QTimer::singleShot(timeout, this, [this]() { + ui->message->setVisible(false); + }); +} +} // view::RegisterCenter diff --git a/view/RegisterCenter/changepasswordadmin.h b/view/RegisterCenter/changepasswordadmin.h new file mode 100644 index 0000000..df817e4 --- /dev/null +++ b/view/RegisterCenter/changepasswordadmin.h @@ -0,0 +1,32 @@ +// +// Created by gouzuang on 25-7-13. +// + +#ifndef CHANGEPASSWORDADMIN_H +#define CHANGEPASSWORDADMIN_H + +#include + +namespace view::RegisterCenter { +QT_BEGIN_NAMESPACE +namespace Ui { class ChangePasswordAdmin; } +QT_END_NAMESPACE + +class ChangePasswordAdmin : public QWidget { +Q_OBJECT + +public: + explicit ChangePasswordAdmin(QWidget *parent = nullptr); + ~ChangePasswordAdmin() override; + +public slots: + void on_UpdateButton_clicked(); + +private: + Ui::ChangePasswordAdmin *ui; + void show_message(QString message, int timeout = 10000); + +}; +} // view::RegisterCenter + +#endif //CHANGEPASSWORDADMIN_H diff --git a/view/RegisterCenter/changepasswordadmin.ui b/view/RegisterCenter/changepasswordadmin.ui new file mode 100644 index 0000000..853d892 --- /dev/null +++ b/view/RegisterCenter/changepasswordadmin.ui @@ -0,0 +1,217 @@ + + + view::RegisterCenter::ChangePasswordAdmin + + + + 0 + 0 + 467 + 390 + + + + ChangePasswordAdmin + + + /* --- 整个窗口的背景 --- */ + QWidget#view--RegisterCenter--ChangePasswordAdmin { + background-color: #F3F3F3; /* 柔和的浅灰色背景 */ + font-family: "Segoe UI Variable", "Microsoft YaHei UI", sans-serif; /* 优先使用 + Win11 默认字体 */ + } + + /* --- 主框架 (QFrame) 的样式 --- */ + QFrame#frame { + background-color: transparent; /* 白色背景,突出内容 */ + border: 0px solid #E0E0E0; /* 精细的浅灰色边框 */ + border-radius: 8px; /* 柔和的圆角 */ + margin: 20px; /* 距离窗口边缘的边距 */ + 、 + } + + /* --- 标题 (修改密码 Label) 的样式 --- */ + QLabel#label { + color: #333333; /* 深灰色文本 */ + padding-bottom: 10px; /* 标题下方留出空间 */ + border-bottom: 1px solid #EEEEEE; /* 标题下方的细分隔线 */ + margin-bottom: 15px; /* 分隔线下方留出空间 */ + } + + /* --- 输入框 (QLineEdit) 的样式 --- */ + QLineEdit { + border: 1px solid #CCCCCC; /* 浅灰色边框 */ + border-radius: 4px; /* 精细的圆角 */ + padding: 8px 10px; /* 内部填充 */ + font-size: 10pt; + color: #333333; /* 文本颜色 */ + background-color: #FFFFFF; /* 白色背景 */ + } + + QLineEdit:focus { + border: 1px solid #0078D4; /* 聚焦时边框变为 Win11 蓝色 */ + outline: none; /* 移除默认焦点轮廓 */ + } + + /* --- 提示信息 Label (message) 的样式 --- */ + QLabel#message { + color: #0078D4; /* 默认蓝色,可以根据提示类型调整颜色 (如成功/失败) */ + font-size: 9pt; + font-weight: 500; + margin-top: 5px; + } + + /* --- 标签 (学工号, 新密码 Label) 的样式 --- */ + QLabel#label_3, QLabel#label_2 { + color: #555555; /* 较深的灰色文本 */ + font-size: 10pt; + min-width: 60px; /* 确保标签有最小宽度,对齐输入框 */ + } + + /* --- 注册用户按钮 (UpdateButton) 的样式 --- */ + /* 你的 UI 文件中已经有非常详细的 UpdateButton 样式了,这里就不重复了。 + 如果你想统一风格,可以考虑移除 UI 文件中的内联样式, + 然后将这个 QSS 块添加到这里。 + 为了避免冲突和重复,这里**不包含** UpdateButton 的样式。 + */ + + + + + + + QFrame::Shape::StyledPanel + + + QFrame::Shadow::Raised + + + + + + + 0 + 50 + + + + + Microsoft YaHei UI + 16 + true + + + + 修改密码 + + + + + + + + + 学工号: + + + + + + + + + + + + + + 新密码: + + + + + + + + + + + + + + true + + + 提示信息 + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + /* 核心是柔和的色彩、更精细的圆角和边框 */ + QPushButton#UpdateButton { + background-color: #0078D4; /* Win11 标志性的蓝色 */ + color: white; + /* 边框与背景同色,用于占位和过渡,使其看起来无边框但有形体 */ + border: 1px solid #0078D4; + border-radius: 4px; /* Win11 风格的精细圆角 (通常是 4px 或 6px) */ + padding: 8px 16px; + /* 优先使用 Win11 默认英文字体, 中文回退到雅黑 */ + font-family: "Segoe UI Variable", "Microsoft YaHei UI"; + font-weight: 600; /* 使用 Semi-bold,字体效果更接近Win11原生 */ + font-size: 10pt; + } + + /* ---- 更新按钮 - Win11 风格 (鼠标悬停) ---- */ + /* 悬停时,背景和边框会有一个微妙的提亮效果 */ + QPushButton#UpdateButton:hover { + background-color: #1185E5; + border-color: #1185E5; + } + + /* ---- 更新按钮 - Win11 风格 (鼠标按下) ---- */ + /* 按下时,背景和边框变暗,模拟按下的深度感 */ + QPushButton#UpdateButton:pressed { + background-color: #006ABC; + border-color: #006ABC; + color: rgba(255, 255, 255, 0.9); /* 文字也略微变暗,增加真实感 */ + } + + /* ---- 更新按钮 - Win11 风格 (不可点击) ---- */ + /* 采用非常低调的灰色,与系统禁用控件的风格统一 */ + QPushButton#UpdateButton:disabled { + background-color: #F0F0F0; + color: #A3A3A3; + border: 1px solid #E5E5E5; + } + + + + 修改密码 + + + + + + + + + + + + + diff --git a/view/RegisterCenter/checknewuser.cpp b/view/RegisterCenter/checknewuser.cpp index ad109f3..7813042 100644 --- a/view/RegisterCenter/checknewuser.cpp +++ b/view/RegisterCenter/checknewuser.cpp @@ -6,6 +6,7 @@ #include "checknewuser.h" +#include "changepasswordadmin.h" #include "checkuserblock.h" #include "registernewuser.h" #include "ui_CheckNewUser.h" @@ -102,4 +103,10 @@ void CheckNewUser::updatePaginationControls() { (m_totalPages = data::UserControl::check::getAllUserCount()-1) / m_itemsPerPage + 1; loadDataFromDatabase(); } + + void CheckNewUser::on_ChangePasswordButton_clicked() { + view::RegisterCenter::ChangePasswordAdmin *ChangePasswordAdmin = new view::RegisterCenter::ChangePasswordAdmin(); + service::MutiWindow::manager().addWindow(ChangePasswordAdmin); + ChangePasswordAdmin->show(); + } } diff --git a/view/RegisterCenter/checknewuser.h b/view/RegisterCenter/checknewuser.h index 892dfe9..fc2a305 100644 --- a/view/RegisterCenter/checknewuser.h +++ b/view/RegisterCenter/checknewuser.h @@ -28,6 +28,7 @@ private slots: void on_nextButton_clicked(); void on_addButton_clicked(); void on_refreshButton_clicked(); + void on_ChangePasswordButton_clicked(); private: Ui::CheckNewUser *ui; int m_currentPage; diff --git a/view/RegisterCenter/checknewuser.ui b/view/RegisterCenter/checknewuser.ui index 4c1730c..d5331e8 100644 --- a/view/RegisterCenter/checknewuser.ui +++ b/view/RegisterCenter/checknewuser.ui @@ -296,6 +296,36 @@ QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { + + + + /* ---- “新建”按钮 (主操作按钮) ---- */ + QPushButton { + background-color: #0078D4; + color: white; + border: none; + border-radius: 4px; + padding: 8px 16px; + font-weight: 600; + font-size: 10pt; + } + + QPushButton:hover { /* 鼠标悬停时 */ + background-color: #005FA8; /* 比默认蓝色稍深一点 */ + } + + QPushButton:pressed { /* 按钮按下时 */ + background-color: #004C8C; /* 更深的蓝色 */ + padding-top: 9px; /* 模拟下沉效果 */ + padding-bottom: 7px; + } + + + + 修改密码 + + + diff --git a/view/RegisterCenter/checkuserblock.h b/view/RegisterCenter/checkuserblock.h index 1b63aa1..516a1f3 100644 --- a/view/RegisterCenter/checkuserblock.h +++ b/view/RegisterCenter/checkuserblock.h @@ -34,6 +34,8 @@ namespace view::RegisterCenter { void setButtonStyle(); + void RejectCheck(); + public slots: void AcceptCheck();