Skip to content
Merged

fix #84

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down
12 changes: 12 additions & 0 deletions module/data/data_UserControl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -671,6 +671,18 @@ namespace data::UserControl {
return results.first()["username"].toString();
}

std::expected<int, UserInfoError> 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"(
Expand Down
2 changes: 2 additions & 0 deletions module/data/data_UserControl.h
Original file line number Diff line number Diff line change
Expand Up @@ -277,6 +277,8 @@ namespace data::UserControl {

std::expected<QString, UserInfoError> getUserNameByIdNumber(QString IdNumber);

std::expected<int, UserInfoError> getIdByIdNumber(QString IdNumber);

/**
* @brief 更改指定用户的用户名。
*
Expand Down
46 changes: 46 additions & 0 deletions view/RegisterCenter/changepasswordadmin.cpp
Original file line number Diff line number Diff line change
@@ -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
32 changes: 32 additions & 0 deletions view/RegisterCenter/changepasswordadmin.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
//
// Created by gouzuang on 25-7-13.
//

#ifndef CHANGEPASSWORDADMIN_H
#define CHANGEPASSWORDADMIN_H

#include <QWidget>

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
217 changes: 217 additions & 0 deletions view/RegisterCenter/changepasswordadmin.ui
Original file line number Diff line number Diff line change
@@ -0,0 +1,217 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>view::RegisterCenter::ChangePasswordAdmin</class>
<widget class="QWidget" name="view::RegisterCenter::ChangePasswordAdmin">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>467</width>
<height>390</height>
</rect>
</property>
<property name="windowTitle">
<string>ChangePasswordAdmin</string>
</property>
<property name="styleSheet">
<string notr="true">/* --- 整个窗口的背景 --- */
QWidget#view--RegisterCenter--ChangePasswordAdmin {
background-color: #F3F3F3; /* 柔和的浅灰色背景 */
font-family: &quot;Segoe UI Variable&quot;, &quot;Microsoft YaHei UI&quot;, 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 的样式。
*/
</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<widget class="QFrame" name="frame">
<property name="frameShape">
<enum>QFrame::Shape::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Shadow::Raised</enum>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QLabel" name="label">
<property name="minimumSize">
<size>
<width>0</width>
<height>50</height>
</size>
</property>
<property name="font">
<font>
<family>Microsoft YaHei UI</family>
<pointsize>16</pointsize>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>修改密码</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label_3">
<property name="text">
<string>学工号:</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="id_number"/>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>新密码:</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="new_password"/>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QLabel" name="message">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string>提示信息</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="UpdateButton">
<property name="styleSheet">
<string notr="true">/* 核心是柔和的色彩、更精细的圆角和边框 */
QPushButton#UpdateButton {
background-color: #0078D4; /* Win11 标志性的蓝色 */
color: white;
/* 边框与背景同色,用于占位和过渡,使其看起来无边框但有形体 */
border: 1px solid #0078D4;
border-radius: 4px; /* Win11 风格的精细圆角 (通常是 4px 或 6px) */
padding: 8px 16px;
/* 优先使用 Win11 默认英文字体, 中文回退到雅黑 */
font-family: &quot;Segoe UI Variable&quot;, &quot;Microsoft YaHei UI&quot;;
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;
}
</string>
</property>
<property name="text">
<string>修改密码</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
7 changes: 7 additions & 0 deletions view/RegisterCenter/checknewuser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

#include "checknewuser.h"

#include "changepasswordadmin.h"
#include "checkuserblock.h"
#include "registernewuser.h"
#include "ui_CheckNewUser.h"
Expand Down Expand Up @@ -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();
}
}
1 change: 1 addition & 0 deletions view/RegisterCenter/checknewuser.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
30 changes: 30 additions & 0 deletions view/RegisterCenter/checknewuser.ui
Original file line number Diff line number Diff line change
Expand Up @@ -296,6 +296,36 @@ QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="ChangePasswordButton">
<property name="styleSheet">
<string notr="true">/* ---- “新建”按钮 (主操作按钮) ---- */
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;
}
</string>
</property>
<property name="text">
<string>修改密码</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
Expand Down
Loading