From 86db69604c39764fa4a3232f516de96bcf0c7509 Mon Sep 17 00:00:00 2001 From: Gouzuang <87839812+Gouzuang@users.noreply.github.com> Date: Sun, 13 Jul 2025 17:33:49 +0800 Subject: [PATCH 1/3] =?UTF-8?q?[=E4=BC=98=E5=8C=96]=20=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E7=AE=A1=E7=90=86=EF=BC=9A=E6=96=B0=E5=A2=9E=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=91=98=E4=BF=AE=E6=94=B9=E7=94=A8=E6=88=B7=E5=AF=86=E7=A0=81?= =?UTF-8?q?=E7=95=8C=E9=9D=A2=E5=8F=8A=E9=80=BB=E8=BE=91=EF=BC=8C=E5=AE=8C?= =?UTF-8?q?=E5=96=84=E5=AD=A6=E5=B7=A5=E5=8F=B7=E6=9F=A5=E6=89=BE=E4=B8=8E?= =?UTF-8?q?=E5=AF=86=E7=A0=81=E6=9B=B4=E6=96=B0=E5=8A=9F=E8=83=BD=EF=BC=8C?= =?UTF-8?q?=E7=95=8C=E9=9D=A2=E6=A0=B7=E5=BC=8F=E7=BB=9F=E4=B8=80=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 3 + module/data/data_UserControl.cpp | 12 ++ module/data/data_UserControl.h | 2 + view/RegisterCenter/changepasswordadmin.cpp | 45 ++++ view/RegisterCenter/changepasswordadmin.h | 32 +++ view/RegisterCenter/changepasswordadmin.ui | 219 ++++++++++++++++++++ view/RegisterCenter/checknewuser.cpp | 7 + view/RegisterCenter/checknewuser.h | 1 + view/RegisterCenter/checknewuser.ui | 30 +++ view/RegisterCenter/checkuserblock.h | 2 + 10 files changed, 353 insertions(+) create mode 100644 view/RegisterCenter/changepasswordadmin.cpp create mode 100644 view/RegisterCenter/changepasswordadmin.h create mode 100644 view/RegisterCenter/changepasswordadmin.ui 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..3e236a4 --- /dev/null +++ b/view/RegisterCenter/changepasswordadmin.cpp @@ -0,0 +1,45 @@ +// +// 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); +} + +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..a7b24bb --- /dev/null +++ b/view/RegisterCenter/changepasswordadmin.ui @@ -0,0 +1,219 @@ + + + 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: white; /* 白色背景,突出内容 */ + border: 1px solid #E0E0E0; /* 精细的浅灰色边框 */ + border-radius: 8px; /* 柔和的圆角 */ + margin: 20px; /* 距离窗口边缘的边距 */ + padding: 20px; /* 内部填充 */ + /* 简单的阴影效果,增加层次感 */ + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.05); + } + + /* --- 标题 (修改密码 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(); From c54055f29548a01a26ff9ba1b90f672f28f5f71e Mon Sep 17 00:00:00 2001 From: Gouzuang <87839812+Gouzuang@users.noreply.github.com> Date: Sun, 13 Jul 2025 17:35:27 +0800 Subject: [PATCH 2/3] =?UTF-8?q?[=E4=BC=98=E5=8C=96]=20=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=91=98=E4=BF=AE=E6=94=B9=E5=AF=86=E7=A0=81=E7=95=8C=E9=9D=A2?= =?UTF-8?q?=EF=BC=9A=E7=B2=BE=E7=AE=80=E6=A0=B7=E5=BC=8F=E8=A1=A8=E7=BC=A9?= =?UTF-8?q?=E8=BF=9B=E4=B8=8E=E6=B3=A8=E9=87=8A=EF=BC=8C=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E4=B8=BB=E6=A1=86=E6=9E=B6=E8=83=8C=E6=99=AF=E4=B8=BA=E9=80=8F?= =?UTF-8?q?=E6=98=8E=EF=BC=8C=E6=8F=90=E5=8D=87=E7=95=8C=E9=9D=A2=E4=B8=80?= =?UTF-8?q?=E8=87=B4=E6=80=A7=E4=B8=8E=E5=8F=AF=E7=BB=B4=E6=8A=A4=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- view/RegisterCenter/changepasswordadmin.ui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/view/RegisterCenter/changepasswordadmin.ui b/view/RegisterCenter/changepasswordadmin.ui index a7b24bb..7b7b0d7 100644 --- a/view/RegisterCenter/changepasswordadmin.ui +++ b/view/RegisterCenter/changepasswordadmin.ui @@ -23,7 +23,7 @@ /* --- 主框架 (QFrame) 的样式 --- */ QFrame#frame { - background-color: white; /* 白色背景,突出内容 */ + background-color: transparent; /* 白色背景,突出内容 */ border: 1px solid #E0E0E0; /* 精细的浅灰色边框 */ border-radius: 8px; /* 柔和的圆角 */ margin: 20px; /* 距离窗口边缘的边距 */ From f0fd2ade00d1d0f3e3fdc58ffc9f0f4c9ad9aadc Mon Sep 17 00:00:00 2001 From: Gouzuang <87839812+Gouzuang@users.noreply.github.com> Date: Sun, 13 Jul 2025 17:39:29 +0800 Subject: [PATCH 3/3] =?UTF-8?q?[=E4=BC=98=E5=8C=96]=20=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=91=98=E4=BF=AE=E6=94=B9=E5=AF=86=E7=A0=81=E7=95=8C=E9=9D=A2?= =?UTF-8?q?=EF=BC=9A=E4=B8=BB=E6=A1=86=E6=9E=B6=E6=A0=B7=E5=BC=8F=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E4=B8=BA=E6=97=A0=E8=BE=B9=E6=A1=86=EF=BC=8C=E7=A7=BB?= =?UTF-8?q?=E9=99=A4=E5=A4=9A=E4=BD=99=E6=A0=B7=E5=BC=8F=E5=B1=9E=E6=80=A7?= =?UTF-8?q?=EF=BC=8C=E6=96=B0=E5=A2=9E=20Mica=20=E6=95=88=E6=9E=9C?= =?UTF-8?q?=E6=8F=90=E5=8D=87=E8=A7=86=E8=A7=89=E4=B8=80=E8=87=B4=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- view/RegisterCenter/changepasswordadmin.cpp | 1 + view/RegisterCenter/changepasswordadmin.ui | 6 ++---- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/view/RegisterCenter/changepasswordadmin.cpp b/view/RegisterCenter/changepasswordadmin.cpp index 3e236a4..c586f68 100644 --- a/view/RegisterCenter/changepasswordadmin.cpp +++ b/view/RegisterCenter/changepasswordadmin.cpp @@ -12,6 +12,7 @@ ChangePasswordAdmin::ChangePasswordAdmin(QWidget *parent) : QWidget(parent), ui(new Ui::ChangePasswordAdmin) { ui->setupUi(this); ui->message->setVisible(false); + service::style::setMica(this); } ChangePasswordAdmin::~ChangePasswordAdmin() { diff --git a/view/RegisterCenter/changepasswordadmin.ui b/view/RegisterCenter/changepasswordadmin.ui index 7b7b0d7..853d892 100644 --- a/view/RegisterCenter/changepasswordadmin.ui +++ b/view/RegisterCenter/changepasswordadmin.ui @@ -24,12 +24,10 @@ /* --- 主框架 (QFrame) 的样式 --- */ QFrame#frame { background-color: transparent; /* 白色背景,突出内容 */ - border: 1px solid #E0E0E0; /* 精细的浅灰色边框 */ + border: 0px solid #E0E0E0; /* 精细的浅灰色边框 */ border-radius: 8px; /* 柔和的圆角 */ margin: 20px; /* 距离窗口边缘的边距 */ - padding: 20px; /* 内部填充 */ - /* 简单的阴影效果,增加层次感 */ - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.05); + 、 } /* --- 标题 (修改密码 Label) 的样式 --- */