Skip to content
Merged
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 @@ -134,6 +134,9 @@ set(SHARED_SOURCES
view/EquipmentClass/equipmentclassblock.cpp
view/EquipmentClass/equipmentclassblock.h
view/EquipmentClass/equipmentclassblock.ui
view/RegisterCenter/checkuserblock.cpp
view/RegisterCenter/checkuserblock.h
view/RegisterCenter/checkuserblock.ui
view/equipmentManage/equipment_home.cpp
view/equipmentManage/equipment_home.h
view/equipmentManage/equipment_home.ui
Expand Down
10 changes: 6 additions & 4 deletions main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#include "view/loginPage/registerpage.h"
#include "view/messageCenter/messagewindow.h"
#include "view/equipmentManage/equipment_home.h"
#include "view/RegisterCenter/checknewuser.h"
#include "view/SplashScreen/nativesplash.h"
//#include "view/SplashScreen/splashscreen.h"

Expand All @@ -35,8 +36,8 @@ int main(int argc, char *argv[]) {

qInstallMessageHandler(service::customMessageHandler); //拦截部分错误,真的修不好了喵眼不见心不烦

view::SplashScreen::nativeSplash splash;
splash.show();
//view::SplashScreen::SplashScreen splash;
//splash.show();


service::logger::instance().setLogFile(
Expand All @@ -49,7 +50,7 @@ int main(int argc, char *argv[]) {
service::initDB();


view::login::loginPage b;

// QFile styleFile(":/styles/fluent.qss");
// if (styleFile.open(QFile::ReadOnly | QFile::Text)) {
// QString styleSheet = QLatin1String(styleFile.readAll());
Expand All @@ -58,8 +59,9 @@ int main(int argc, char *argv[]) {
// } else {
// log(LogLevel::ERR) << "无法加载样式表文件: " << styleFile.fileName();
// }
b.show();

view::login::loginPage b;
b.show();
//splash.close();

setup_tasks();
Expand Down
140 changes: 140 additions & 0 deletions module/data/data_UserControl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,12 @@ namespace data::UserControl {
QString storedPassword = row["password"].toString();
QString status = row["status"].toString();

bool issys = permission::isUserInGroup(userId, "System");
if (issys) {
log(service::LogLevel::ERR) << "登录失败。用户属于系统: " << idNumber;
return std::unexpected(UserControlError::UserNotFound);
}

if (status != "AllRight") {
log(service::LogLevel::ERR) << "登录失败。用户状态异常: " << idNumber << " status: " << status;
return std::unexpected(UserControlError::UserNotFound);
Expand Down Expand Up @@ -493,4 +499,138 @@ namespace data::UserControl {
return groupsMap;
}
}
namespace check {
QList<int> getAllUserId(int page, int pageSize) {
service::DatabaseManager db(service::Path::user());
QString query = R"(
SELECT id FROM users WHERE status != 'Deleted' AND id_number NOT LIKE '-%'
ORDER BY created_at DESC
LIMIT ? OFFSET ?
)";
QVariantList params;
params << pageSize << (page - 1) * pageSize;

auto results = db.executePreparedQueryAndFetchAll(query, params);
QList<int> userIds;
for (const auto &row: results) {
userIds.append(row["id"].toInt());
}
return userIds;
}

QList<int> getUncheckedUserId(int page, int pageSize) {
service::DatabaseManager db(service::Path::user());
QString query = R"(
SELECT id FROM users WHERE status == 'Unchecked' AND id_number NOT LIKE '-%'
ORDER BY created_at DESC
LIMIT ? OFFSET ?
)";
int offset = (page - 1) * pageSize;
auto results = db.executePreparedQueryAndFetchAll(query, {pageSize, offset});
QList<int> userIds;
for (const auto &row: results) {
userIds.append(row["id"].toInt());
}
return userIds;
}

QList<int> getAllUserId() {
service::DatabaseManager db(service::Path::user());
QString query = R"(
SELECT id FROM users WHERE status != 'Deleted' AND id_number NOT LIKE '-%'
)";
auto results = db.executePreparedQueryAndFetchAll(query, {});
QList<int> userIds;
for (const auto &row: results) {
userIds.append(row["id"].toInt());
}
return userIds;
}

QList<int> getUncheckedUserId() {
service::DatabaseManager db(service::Path::user());
QString query = R"(
SELECT id FROM users WHERE status == 'Unchecked' AND id_number NOT LIKE '-%'
)";
auto results = db.executePreparedQueryAndFetchAll(query, {});
QList<int> userIds;
for (const auto &row: results) {
userIds.append(row["id"].toInt());
}
return userIds;
}

int getUncheckedUserCount() {
service::DatabaseManager db(service::Path::user());
QString query = R"(
SELECT COUNT(*) as count FROM users WHERE status == 'Unchecked'
)";
auto results = db.executePreparedQueryAndFetchAll(query, {});

if (!results.isEmpty()) {
return results.first()["count"].toInt();
}

return 0;
}

int getAllUserCount() {
service::DatabaseManager db(service::Path::user());
QString query = R"(
SELECT COUNT(*) as count FROM users WHERE status != 'Deleted'
)";
auto results = db.executePreparedQueryAndFetchAll(query, {});

if (!results.isEmpty()) {
return results.first()["count"].toInt();
}

return 0;
}

bool allowUserRegister(int userId) {
service::DatabaseManager db(service::Path::user());
QString query = R"(
UPDATE users SET status = 'AllRight' WHERE id = ? AND status = 'Unchecked'
)";
if (!db.executePreparedNonQuery(query, {userId})) {
return false;
}
return true;
}

bool banUser(int userId) {
service::DatabaseManager db(service::Path::user());
QString query = R"(
UPDATE users SET status = 'Banned' WHERE id = ?
)";
if (!db.executePreparedNonQuery(query, {userId})) {
return false;
}
return true;
}

bool unbanUser(int userId) {
service::DatabaseManager db(service::Path::user());
QString query = R"(
UPDATE users SET status = 'AllRight' WHERE id = ? AND status = 'Banned'
)";
if (!db.executePreparedNonQuery(query, {userId})) {
return false;
}
return true;
}

QString getUserStatus(int userId) {
service::DatabaseManager db(service::Path::user());
QString query = R"(
SELECT status FROM users WHERE id = ?
)";
auto results = db.executePreparedQueryAndFetchAll(query, {userId});
if (results.isEmpty()) {
return QString();
}
return results.first()["status"].toString();
}
}
}
22 changes: 22 additions & 0 deletions module/data/data_UserControl.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,15 @@ namespace data::UserControl {
MutiResultFound
};

struct UserData {
int userId;
int id_number;
QString username;
QList<QMap<int, QString> > groups;
QString status;
QDateTime created_at;
};

inline int currentUserId = -1;

// 内建用户组ID字典
Expand Down Expand Up @@ -270,6 +279,19 @@ namespace data::UserControl {
QMap<int,QString> loadUsersMap();
QMap<int,QString> loadGroupsMap();
}
namespace check {
QList<int> getAllUserId(int page = 1, int itemsPerPage = 10);
QList<int> getUncheckedUserId(int page = 1, int itemsPerPage = 10);
QList<int> getAllUserId();
QList<int> getUncheckedUserId();
int getUncheckedUserCount();
int getAllUserCount();
bool allowUserRegister(int userId);
bool banUser(int userId);
bool unbanUser(int userId);

QString getUserStatus(int userId);
}
}


Expand Down
3 changes: 1 addition & 2 deletions view/EquipmentClass/equipmentclassmanagehomepage.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,6 @@ EquipmentClassManageHomepage::~EquipmentClassManageHomepage() {
}

void EquipmentClassManageHomepage::initializeUI() {
// 假设你的.ui文件中QScrollArea内的QWidget的objectName是scrollAreaWidgetContents
// 这与MessageWindow中的messageBoxAreaItem是类似作用
auto *layout = new QVBoxLayout(ui->scrollAreaWidgetContents);
layout->setSpacing(5);
layout->setAlignment(Qt::AlignTop);
Expand Down Expand Up @@ -92,6 +90,7 @@ void EquipmentClassManageHomepage::on_addButton_clicked() {
}

void EquipmentClassManageHomepage::on_refreshButton_clicked() {
m_totalPages = data::UserControl::check::getAllUserCount() / m_itemsPerPage + 1;
loadEquipmentClasses();
}

Expand Down
19 changes: 19 additions & 0 deletions view/EquipmentClass/equipmentclassmanagehomepage.ui
Original file line number Diff line number Diff line change
Expand Up @@ -258,6 +258,16 @@ QPushButton {
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">
Expand All @@ -276,6 +286,15 @@ QPushButton {
padding: 8px 16px;
font-weight: 600;
font-size: 10pt;
}
QPushButton:hover { /* 鼠标悬停时 */
background-color: #f0f0f0; /* 可以是更浅的颜色 */
}

QPushButton:pressed { /* 按钮按下时 */
background-color: #e0e0e0; /* 可以是更深的颜色 */
padding-top: 9px; /* 让按钮看起来稍微下沉 */
padding-bottom: 7px;
}</string>
</property>
<property name="text">
Expand Down
86 changes: 84 additions & 2 deletions view/RegisterCenter/checknewuser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,97 @@
// You may need to build the project (run Qt uic code generator) to get "ui_CheckNewUser.h" resolved

#include "checknewuser.h"

#include "checkuserblock.h"
#include "ui_CheckNewUser.h"

namespace view::RegisterCenter {
CheckNewUser::CheckNewUser(QWidget *parent) :
QWidget(parent), ui(new Ui::CheckNewUser) {
QWidget(parent), ui(new Ui::CheckNewUser),
m_currentPage(1),m_itemsPerPage(10),m_totalPages(){
ui->setupUi(this);
service::style::setMica(this);

loadDataFromDatabase(m_currentPage);
}

CheckNewUser::~CheckNewUser() {
delete ui;
}
} // view::RegisterCenter

void CheckNewUser::loadDataFromDatabase(int page) {
// --- 分页逻辑初始化 ---
m_currentPage = 1;
// 从数据层获取总页数
m_totalPages = data::UserControl::check::getAllUserCount() / m_itemsPerPage + 1;
updatePaginationControls();

// 从数据库获取设备分类数据
auto records = data::UserControl::check::getAllUserId(page, m_itemsPerPage);

ui->scrollAreaWidgetContents->setUpdatesEnabled(false);

auto *layout = qobject_cast<QVBoxLayout *>(ui->scrollAreaWidgetContents->layout());
if (!layout) {
layout = new QVBoxLayout(ui->scrollAreaWidgetContents);
layout->setSpacing(5);
layout->setAlignment(Qt::AlignTop);
layout = qobject_cast<QVBoxLayout *>(ui->scrollAreaWidgetContents->layout());
if (!layout) {
log(LogLevel::ERR) << "错误:布局创建后仍然为空!";
return; // 提前退出以避免崩溃
}
}

// 清除现有的消息块
QLayoutItem *child;
while ((child = layout->takeAt(0)) != nullptr) {
delete child->widget();
delete child;
}

// 为每个设备分类记录创建信息块
for (const auto &record : records) {
auto *block = new CheckUserBlock(record); // 创建信息块实例
layout->addWidget(block);
}

// 加载完数据后更新分页控件
ui->scrollAreaWidgetContents->setUpdatesEnabled(true);
updatePaginationControls();
ui->label_num->setNum(data::UserControl::check::getAllUserCount());
ui->label_num_2->setNum(data::UserControl::check::getUncheckedUserCount());
}

void CheckNewUser::updatePaginationControls() {
if (m_totalPages == 0) {
ui->pageLabel->setText("0 / 0");
ui->prevButton->setEnabled(false);
ui->nextButton->setEnabled(false);
return;
}
ui->pageLabel->setText(QString("%1 / %2").arg(m_currentPage).arg(m_totalPages));
}

void CheckNewUser::on_prevButton_clicked() {
if (m_currentPage > 1) {
m_currentPage--;
loadDataFromDatabase(m_currentPage);
}
}

void CheckNewUser::on_nextButton_clicked() {
if (m_currentPage < m_totalPages) {
m_currentPage++;
loadDataFromDatabase(m_currentPage);
}
}

void CheckNewUser::on_addButton_clicked() {
}

void CheckNewUser::on_refreshButton_clicked() {
m_totalPages = data::UserControl::check::getAllUserCount() / m_itemsPerPage + 1;
loadDataFromDatabase();
}
}
Loading