From c108f21f36e06d349ccbdc381f9267169e03f995 Mon Sep 17 00:00:00 2001 From: Gouzuang <87839812+Gouzuang@users.noreply.github.com> Date: Mon, 14 Jul 2025 09:23:17 +0800 Subject: [PATCH 1/8] =?UTF-8?q?[=E4=BC=98=E5=8C=96]=20=E5=88=86=E9=A1=B5?= =?UTF-8?q?=E4=B8=8E=E5=88=B7=E6=96=B0=E9=80=BB=E8=BE=91=EF=BC=9A=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=E7=94=A8=E6=88=B7=E4=B8=8E=E8=AE=BE=E5=A4=87=E5=88=86?= =?UTF-8?q?=E7=B1=BB=E5=88=86=E9=A1=B5=E5=88=B7=E6=96=B0=E6=B5=81=E7=A8=8B?= =?UTF-8?q?=EF=BC=8C=E5=AE=8C=E5=96=84=E9=A1=B5=E7=A0=81=E4=B8=8E=E6=8E=A7?= =?UTF-8?q?=E4=BB=B6=E7=8A=B6=E6=80=81=E5=90=8C=E6=AD=A5=EF=BC=8C=E6=8F=90?= =?UTF-8?q?=E5=8D=87=E6=95=B0=E6=8D=AE=E5=B1=95=E7=A4=BA=E5=87=86=E7=A1=AE?= =?UTF-8?q?=E6=80=A7=E4=B8=8E=E4=BA=A4=E4=BA=92=E4=BD=93=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- module/data/data_EquipmentManage.cpp | 2 -- tests/test_db.cpp | 5 ----- view/EquipmentClass/equipmentclassdetail.cpp | 2 ++ .../equipmentclassmanagehomepage.cpp | 3 ++- view/RegisterCenter/checknewuser.cpp | 18 +++++++++++------- view/RegisterCenter/checknewuser.h | 2 +- view/SplashScreen/Motive.cpp | 3 +-- view/messageCenter/messagewindow.cpp | 2 -- 8 files changed, 17 insertions(+), 20 deletions(-) diff --git a/module/data/data_EquipmentManage.cpp b/module/data/data_EquipmentManage.cpp index 3ba4beb..dd7a0be 100644 --- a/module/data/data_EquipmentManage.cpp +++ b/module/data/data_EquipmentManage.cpp @@ -130,11 +130,9 @@ namespace data::Equipment { QString queryString = "SELECT id, class_id FROM equipment_instance WHERE name = ?"; QVariantList params = {devName}; - // 使用你已有的 executePreparedQueryAndFetchAll 函数 auto queryResult = db.executePreparedQueryAndFetchAll(queryString, params); if (!queryResult.isEmpty()) { - // 假设设备名称是唯一的,我们只取第一个结果 QVariantMap row = queryResult.first(); result.id = row["id"].toInt(); result.class_id = row["equipment_class_id"].toInt(); diff --git a/tests/test_db.cpp b/tests/test_db.cpp index 9d4bbdd..1ecbda7 100644 --- a/tests/test_db.cpp +++ b/tests/test_db.cpp @@ -38,11 +38,6 @@ private slots: QVERIFY2(dbManager.isConnected(), "数据库管理器在构造后应该处于连接状态"); QVERIFY2(QFile::exists(testDbPath), "数据库文件应该被创建"); } // dbManager 在这里被销毁,析构函数被调用 - - // Assert (after destruction) - // 验证连接是否已被清理。一个简单的验证方法是再次尝试使用相同的连接名(内部实现), - // 如果清理成功,则不会有问题。或者,我们可以假设析构函数工作正常。 - // 对于这个测试,我们主要信任 isConnected 的准确性。 } void testNonQueryExecution() { diff --git a/view/EquipmentClass/equipmentclassdetail.cpp b/view/EquipmentClass/equipmentclassdetail.cpp index 0cc3697..dae946b 100644 --- a/view/EquipmentClass/equipmentclassdetail.cpp +++ b/view/EquipmentClass/equipmentclassdetail.cpp @@ -32,6 +32,8 @@ namespace view::EquipmentClass { ui->UsableNum->setText("0"); ui->listWidget->clear(); + data::Equipment::EquipmentClass::recalculateClassCounts(m_classId); + // 连接信号,当用户输入名称时,检查是否可以创建 connect(ui->EquName, &QLineEdit::textChanged, this, &EquipmentClassDetail::check_can_create); diff --git a/view/EquipmentClass/equipmentclassmanagehomepage.cpp b/view/EquipmentClass/equipmentclassmanagehomepage.cpp index 0e7308b..cdda58c 100644 --- a/view/EquipmentClass/equipmentclassmanagehomepage.cpp +++ b/view/EquipmentClass/equipmentclassmanagehomepage.cpp @@ -90,7 +90,8 @@ void EquipmentClassManageHomepage::on_addButton_clicked() { } void EquipmentClassManageHomepage::on_refreshButton_clicked() { - m_totalPages = data::UserControl::check::getAllUserCount() / m_itemsPerPage + 1; + m_totalPages = (data::Equipment::EquipmentClass::getEquClassCount() / m_itemsPerPage) + 1; + m_currentPage = 1; loadEquipmentClasses(); } diff --git a/view/RegisterCenter/checknewuser.cpp b/view/RegisterCenter/checknewuser.cpp index 7813042..4337489 100644 --- a/view/RegisterCenter/checknewuser.cpp +++ b/view/RegisterCenter/checknewuser.cpp @@ -17,8 +17,13 @@ CheckNewUser::CheckNewUser(QWidget *parent) : m_currentPage(1),m_itemsPerPage(10),m_totalPages(){ ui->setupUi(this); service::style::setMica(this); - + // --- 分页逻辑初始化 --- + m_currentPage = 1; + // 从数据层获取总页数 + m_totalPages = (data::UserControl::check::getAllUserCount() - 1) / m_itemsPerPage + 1; + updatePaginationControls(); loadDataFromDatabase(m_currentPage); + updatePaginationControls(); } CheckNewUser::~CheckNewUser() { @@ -26,11 +31,7 @@ CheckNewUser::~CheckNewUser() { } void CheckNewUser::loadDataFromDatabase(int page) { - // --- 分页逻辑初始化 --- - m_currentPage = 1; - // 从数据层获取总页数 - m_totalPages = (data::UserControl::check::getAllUserCount()-1) / m_itemsPerPage + 1; - updatePaginationControls(); + // 从数据库获取设备分类数据 auto records = data::UserControl::check::getAllUserId(page, m_itemsPerPage); @@ -83,6 +84,7 @@ void CheckNewUser::updatePaginationControls() { if (m_currentPage > 1) { m_currentPage--; loadDataFromDatabase(m_currentPage); + updatePaginationControls(); } } @@ -90,6 +92,7 @@ void CheckNewUser::updatePaginationControls() { if (m_currentPage < m_totalPages) { m_currentPage++; loadDataFromDatabase(m_currentPage); + updatePaginationControls(); } } @@ -100,7 +103,8 @@ void CheckNewUser::updatePaginationControls() { } void CheckNewUser::on_refreshButton_clicked() { - (m_totalPages = data::UserControl::check::getAllUserCount()-1) / m_itemsPerPage + 1; + m_totalPages = (data::UserControl::check::getAllUserCount()-1) / m_itemsPerPage + 1; + m_currentPage = 1; loadDataFromDatabase(); } diff --git a/view/RegisterCenter/checknewuser.h b/view/RegisterCenter/checknewuser.h index fc2a305..b07a449 100644 --- a/view/RegisterCenter/checknewuser.h +++ b/view/RegisterCenter/checknewuser.h @@ -23,7 +23,7 @@ Q_OBJECT private: void updatePaginationControls(); -private slots: +public slots: void on_prevButton_clicked(); void on_nextButton_clicked(); void on_addButton_clicked(); diff --git a/view/SplashScreen/Motive.cpp b/view/SplashScreen/Motive.cpp index 90098b2..2e80216 100644 --- a/view/SplashScreen/Motive.cpp +++ b/view/SplashScreen/Motive.cpp @@ -32,8 +32,7 @@ namespace view { // 居中显示 QScreen *screen = QGuiApplication::primaryScreen(); QRect screenGeometry = screen->geometry(); - // 假设你的SplashScreen在.ui文件中已经设置了固定大小, - // 或者你可以在这里根据QML内容动态调整quickWidget的大小,进而影响this->width() + int x = (screenGeometry.width() - this->width()) / 2; int y = (screenGeometry.height() - this->height()) / 2; this->move(x, y); diff --git a/view/messageCenter/messagewindow.cpp b/view/messageCenter/messagewindow.cpp index ea14b66..f31dccb 100644 --- a/view/messageCenter/messagewindow.cpp +++ b/view/messageCenter/messagewindow.cpp @@ -23,8 +23,6 @@ namespace view::messageCenter { m_currentUserId = data::UserControl::currentUserId; m_currentPage = 1; - // 假设存在一个函数 getMailCount 来获取总邮件数 - // 如果没有,你需要自己在 data::mail 中实现它 m_totalMails = data::mail::getMailCount(m_currentUserId); loadMailsFromDatabase(m_currentUserId, m_currentPage); From 778c6769069bcc51aedecc4adc93481ab505599b Mon Sep 17 00:00:00 2001 From: Gouzuang <87839812+Gouzuang@users.noreply.github.com> Date: Mon, 14 Jul 2025 09:23:26 +0800 Subject: [PATCH 2/8] =?UTF-8?q?[=E4=BF=AE=E5=A4=8D]=20=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E5=AE=A1=E6=A0=B8=E7=95=8C=E9=9D=A2=EF=BC=9A=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=E5=88=B7=E6=96=B0=E6=8C=89=E9=92=AE=E5=88=86=E9=A1=B5=E8=AE=A1?= =?UTF-8?q?=E7=AE=97=E9=80=BB=E8=BE=91=E4=B8=8E=E6=A7=BD=E5=87=BD=E6=95=B0?= =?UTF-8?q?=E5=A3=B0=E6=98=8E=E7=BC=A9=E8=BF=9B=EF=BC=8C=E6=8F=90=E5=8D=87?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=A7=84=E8=8C=83=E6=80=A7=E4=B8=8E=E5=88=86?= =?UTF-8?q?=E9=A1=B5=E5=87=86=E7=A1=AE=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- view/RegisterCenter/checknewuser.cpp | 4 +--- view/RegisterCenter/checknewuser.h | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/view/RegisterCenter/checknewuser.cpp b/view/RegisterCenter/checknewuser.cpp index 4337489..c711a86 100644 --- a/view/RegisterCenter/checknewuser.cpp +++ b/view/RegisterCenter/checknewuser.cpp @@ -31,8 +31,6 @@ CheckNewUser::~CheckNewUser() { } void CheckNewUser::loadDataFromDatabase(int page) { - - // 从数据库获取设备分类数据 auto records = data::UserControl::check::getAllUserId(page, m_itemsPerPage); @@ -103,7 +101,7 @@ void CheckNewUser::updatePaginationControls() { } void CheckNewUser::on_refreshButton_clicked() { - m_totalPages = (data::UserControl::check::getAllUserCount()-1) / m_itemsPerPage + 1; + m_totalPages = (data::UserControl::check::getAllUserCount() - 1) / m_itemsPerPage + 1; m_currentPage = 1; loadDataFromDatabase(); } diff --git a/view/RegisterCenter/checknewuser.h b/view/RegisterCenter/checknewuser.h index b07a449..c72448d 100644 --- a/view/RegisterCenter/checknewuser.h +++ b/view/RegisterCenter/checknewuser.h @@ -24,7 +24,7 @@ Q_OBJECT void updatePaginationControls(); public slots: - void on_prevButton_clicked(); +void on_prevButton_clicked(); void on_nextButton_clicked(); void on_addButton_clicked(); void on_refreshButton_clicked(); From 66e9dcda353616d6801692216135c35485da23f1 Mon Sep 17 00:00:00 2001 From: Gouzuang <87839812+Gouzuang@users.noreply.github.com> Date: Mon, 14 Jul 2025 09:23:32 +0800 Subject: [PATCH 3/8] =?UTF-8?q?[=E4=BF=AE=E5=A4=8D]=20=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E5=AE=A1=E6=A0=B8=E7=95=8C=E9=9D=A2=EF=BC=9A=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=E5=88=B7=E6=96=B0=E6=8C=89=E9=92=AE=E5=88=86=E9=A1=B5=E8=AE=A1?= =?UTF-8?q?=E7=AE=97=E9=80=BB=E8=BE=91=E4=B8=8E=E6=A7=BD=E5=87=BD=E6=95=B0?= =?UTF-8?q?=E5=A3=B0=E6=98=8E=E7=BC=A9=E8=BF=9B=EF=BC=8C=E6=8F=90=E5=8D=87?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=A7=84=E8=8C=83=E6=80=A7=E4=B8=8E=E5=88=86?= =?UTF-8?q?=E9=A1=B5=E5=87=86=E7=A1=AE=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- view/RegisterCenter/checknewuser.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/view/RegisterCenter/checknewuser.h b/view/RegisterCenter/checknewuser.h index c72448d..22379a4 100644 --- a/view/RegisterCenter/checknewuser.h +++ b/view/RegisterCenter/checknewuser.h @@ -25,7 +25,8 @@ Q_OBJECT public slots: void on_prevButton_clicked(); - void on_nextButton_clicked(); + +void on_nextButton_clicked(); void on_addButton_clicked(); void on_refreshButton_clicked(); void on_ChangePasswordButton_clicked(); From 6a6ffbf716f6c5dd9c30519717a2a95c8bfae4a9 Mon Sep 17 00:00:00 2001 From: Gouzuang <87839812+Gouzuang@users.noreply.github.com> Date: Mon, 14 Jul 2025 09:37:27 +0800 Subject: [PATCH 4/8] =?UTF-8?q?[=E4=BC=98=E5=8C=96]=20=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E4=B8=8E=E8=AE=BE=E5=A4=87=E4=BF=A1=E6=81=AF=E5=B1=95=E7=A4=BA?= =?UTF-8?q?=EF=BC=9A=E5=AE=8C=E5=96=84=E7=94=A8=E6=88=B7=E7=BB=84=E4=B8=8E?= =?UTF-8?q?=E5=AD=A6=E5=B7=A5=E5=8F=B7=E6=98=BE=E7=A4=BA=E9=80=BB=E8=BE=91?= =?UTF-8?q?=EF=BC=8C=E6=96=B0=E5=A2=9E=E8=AE=BE=E5=A4=87=E5=88=86=E7=B1=BB?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1=EF=BC=8C?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=8C=89=E9=92=AE=E6=A7=BD=E5=87=BD=E6=95=B0?= =?UTF-8?q?=E5=A3=B0=E6=98=8E=E7=BC=A9=E8=BF=9B=EF=BC=8C=E6=8F=90=E5=8D=87?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=87=86=E7=A1=AE=E6=80=A7=E4=B8=8E=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E8=A7=84=E8=8C=83=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 2 ++ main.cpp | 2 ++ module/data/data_UserControl.cpp | 12 ++++++++++++ module/data/data_UserControl.h | 2 ++ module/scanner/DbCaculator.cpp | 13 +++++++++++++ module/scanner/DbCaculator.h | 10 ++++++++++ view/RegisterCenter/checknewuser.h | 3 ++- view/RegisterCenter/checkuserblock.cpp | 14 ++++++++++++-- 8 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 module/scanner/DbCaculator.cpp create mode 100644 module/scanner/DbCaculator.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 8b6982d..184645f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -151,6 +151,8 @@ set(SHARED_SOURCES view/RegisterCenter/changepasswordadmin.cpp view/RegisterCenter/changepasswordadmin.h view/RegisterCenter/changepasswordadmin.ui + module/scanner/DbCaculator.cpp + module/scanner/DbCaculator.h ) list(REMOVE_DUPLICATES SHARED_SOURCES) diff --git a/main.cpp b/main.cpp index ec7e6d2..444fb28 100644 --- a/main.cpp +++ b/main.cpp @@ -22,6 +22,7 @@ #include "view/RegisterCenter/checknewuser.h" #include "view/SplashScreen/nativesplash.h" //#include "view/SplashScreen/splashscreen.h" +#include "module/scanner/DbCaculator.h" #include "module/scanner/WorkAlert.h" void setup_tasks() { @@ -29,6 +30,7 @@ void setup_tasks() { service::taskManager::getTimer().scheduleTask(60000, []() { bot::InventoryAlert::sendAlert(); bot::WorkAlert::sendAdminCheckNewUserAlert(); + bot::DbCaculator::reCaculate(); }); } diff --git a/module/data/data_UserControl.cpp b/module/data/data_UserControl.cpp index 6f1fc94..97fc3ae 100644 --- a/module/data/data_UserControl.cpp +++ b/module/data/data_UserControl.cpp @@ -683,6 +683,18 @@ namespace data::UserControl { return results.first()["id"].toInt(); } + std::expected getIdNumberById(int Id) { + service::DatabaseManager db(service::Path::user()); + QString query = "SELECT id_number FROM users WHERE id = ? AND status != 'Deleted'"; + auto results = db.executePreparedQueryAndFetchAll(query, {Id}); + + if (results.isEmpty()) { + return std::unexpected(UserInfoError::UserNotFound); + } + + return results.first()["id_number"].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 bd90754..6b693e7 100644 --- a/module/data/data_UserControl.h +++ b/module/data/data_UserControl.h @@ -279,6 +279,8 @@ namespace data::UserControl { std::expected getIdByIdNumber(QString IdNumber); + std::expected getIdNumberById(int Id); + /** * @brief 更改指定用户的用户名。 * diff --git a/module/scanner/DbCaculator.cpp b/module/scanner/DbCaculator.cpp new file mode 100644 index 0000000..720a343 --- /dev/null +++ b/module/scanner/DbCaculator.cpp @@ -0,0 +1,13 @@ +// +// Created by gouzuang on 25-7-14. +// + +#include "DbCaculator.h" + +#include "module/data/data_EquipmentManage.h" + +namespace bot::DbCaculator { + void reCaculate() { + data::Equipment::EquipmentClass::recalculateClassCounts(); + } +} diff --git a/module/scanner/DbCaculator.h b/module/scanner/DbCaculator.h new file mode 100644 index 0000000..3de7d73 --- /dev/null +++ b/module/scanner/DbCaculator.h @@ -0,0 +1,10 @@ +// +// Created by gouzuang on 25-7-14. +// + +#ifndef DBCACULATOR_H +#define DBCACULATOR_H +namespace bot::DbCaculator { + void reCaculate(); +} +#endif //DBCACULATOR_H diff --git a/view/RegisterCenter/checknewuser.h b/view/RegisterCenter/checknewuser.h index 22379a4..f813765 100644 --- a/view/RegisterCenter/checknewuser.h +++ b/view/RegisterCenter/checknewuser.h @@ -27,7 +27,8 @@ public slots: void on_prevButton_clicked(); void on_nextButton_clicked(); - void on_addButton_clicked(); + +void on_addButton_clicked(); void on_refreshButton_clicked(); void on_ChangePasswordButton_clicked(); private: diff --git a/view/RegisterCenter/checkuserblock.cpp b/view/RegisterCenter/checkuserblock.cpp index 4d8d3b5..689bd70 100644 --- a/view/RegisterCenter/checkuserblock.cpp +++ b/view/RegisterCenter/checkuserblock.cpp @@ -24,8 +24,18 @@ namespace view::RegisterCenter { } else { ui->label_name->setText("未设置名称的用户"); } - ui->label_id->setText(QString::number(userId)); - ui->label_group->setText(data::UserControl::permission::getUserInWhichGroup(userId)); + auto id = data::UserControl::UserInfo::getIdNumberById(userId); + if (id.has_value()) { + ui->label_id->setNum(id.value()); + } else { + ui->label_id->setText("未设置学工号的用户"); + } + auto group = data::UserControl::permission::getUserInWhichGroup(userId); + if (group.isEmpty()) { + ui->label_group->setText("未分配组"); + } else { + ui->label_group->setText(group); + } if (data::UserControl::check::getUserStatus(userId) == "Unchecked") { addCheckButton(); From a074276c9d4f43cdeb0e7e2026fdde776a592631 Mon Sep 17 00:00:00 2001 From: Gouzuang <87839812+Gouzuang@users.noreply.github.com> Date: Mon, 14 Jul 2025 10:08:47 +0800 Subject: [PATCH 5/8] =?UTF-8?q?[=E4=BC=98=E5=8C=96]=20=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E5=AE=A1=E6=A0=B8=E7=95=8C=E9=9D=A2=E4=B8=8E=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E7=AE=A1=E7=90=86=EF=BC=9A=E6=96=B0=E5=A2=9E=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E6=90=9C=E7=B4=A2=E5=8A=9F=E8=83=BD=EF=BC=8C=E5=AE=8C=E5=96=84?= =?UTF-8?q?=E8=BE=93=E5=85=A5=E6=A1=86=E6=A0=B7=E5=BC=8F=E4=B8=8E=E4=BA=A4?= =?UTF-8?q?=E4=BA=92=E9=80=BB=E8=BE=91=EF=BC=8C=E4=BF=AE=E6=AD=A3=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E5=88=86=E7=B1=BB=E7=BB=9F=E8=AE=A1=E6=B5=81=E7=A8=8B?= =?UTF-8?q?=EF=BC=8C=E7=A6=81=E6=AD=A2=E8=AE=BE=E5=A4=87=E8=A1=A8=E6=A0=BC?= =?UTF-8?q?=E7=BC=96=E8=BE=91=EF=BC=8C=E6=8F=90=E5=8D=87=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=A3=80=E7=B4=A2=E6=95=88=E7=8E=87=E4=B8=8E=E7=95=8C=E9=9D=A2?= =?UTF-8?q?=E8=A7=84=E8=8C=83=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- module/data/data_UserControl.cpp | 18 +++++++ module/data/data_UserControl.h | 2 + module/scanner/DbCaculator.cpp | 7 ++- view/RegisterCenter/checknewuser.cpp | 39 +++++++++++++++ view/RegisterCenter/checknewuser.h | 69 +++++++++++++++----------- view/RegisterCenter/checknewuser.ui | 36 +++++++++++++- view/equipmentManage/equipment_home.ui | 6 ++- 7 files changed, 144 insertions(+), 33 deletions(-) diff --git a/module/data/data_UserControl.cpp b/module/data/data_UserControl.cpp index 97fc3ae..4f25d8d 100644 --- a/module/data/data_UserControl.cpp +++ b/module/data/data_UserControl.cpp @@ -881,5 +881,23 @@ namespace data::UserControl { } return results.first()["status"].toString(); } + + QList searchUserIdByNameOrIdNumber(QString keyword) { + service::DatabaseManager db(service::Path::user()); + QString query = R"( + SELECT id FROM users + WHERE status != 'Deleted' + AND (username LIKE ? OR id_number LIKE ?) + )"; + auto results = db.executePreparedQueryAndFetchAll(query, { + {"%" + keyword + "%","%" + keyword + "%"} + }); + + QList userIds; + for (const auto &row: results) { + userIds.append(row["id"].toInt()); + } + return userIds; + } } } diff --git a/module/data/data_UserControl.h b/module/data/data_UserControl.h index 6b693e7..26c53ee 100644 --- a/module/data/data_UserControl.h +++ b/module/data/data_UserControl.h @@ -318,6 +318,8 @@ namespace data::UserControl { bool rejectUserRegister(int userId); QString getUserStatus(int userId); + + QList searchUserIdByNameOrIdNumber(QString keyword); } } diff --git a/module/scanner/DbCaculator.cpp b/module/scanner/DbCaculator.cpp index 720a343..d1b964b 100644 --- a/module/scanner/DbCaculator.cpp +++ b/module/scanner/DbCaculator.cpp @@ -8,6 +8,9 @@ namespace bot::DbCaculator { void reCaculate() { - data::Equipment::EquipmentClass::recalculateClassCounts(); - } + auto equipmentClasses = data::Equipment::EquipmentClass::getEquClassList(); + for (const auto &classItem : equipmentClasses) { + int classId = classItem.id; + data::Equipment::EquipmentClass::recalculateClassCounts(classId); + }} } diff --git a/view/RegisterCenter/checknewuser.cpp b/view/RegisterCenter/checknewuser.cpp index c711a86..da15ce1 100644 --- a/view/RegisterCenter/checknewuser.cpp +++ b/view/RegisterCenter/checknewuser.cpp @@ -103,6 +103,7 @@ void CheckNewUser::updatePaginationControls() { void CheckNewUser::on_refreshButton_clicked() { m_totalPages = (data::UserControl::check::getAllUserCount() - 1) / m_itemsPerPage + 1; m_currentPage = 1; + ui->lineEdit->setText(""); loadDataFromDatabase(); } @@ -111,4 +112,42 @@ void CheckNewUser::updatePaginationControls() { service::MutiWindow::manager().addWindow(ChangePasswordAdmin); ChangePasswordAdmin->show(); } + + void CheckNewUser::on_lineEdit_returnPressed() { + auto keyword = ui->lineEdit->text().trimmed(); + auto records = data::UserControl::check::searchUserIdByNameOrIdNumber(keyword); + + ui->scrollAreaWidgetContents->setUpdatesEnabled(false); + + auto *layout = qobject_cast(ui->scrollAreaWidgetContents->layout()); + if (!layout) { + layout = new QVBoxLayout(ui->scrollAreaWidgetContents); + layout->setSpacing(5); + layout->setAlignment(Qt::AlignTop); + layout = qobject_cast(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); + } + + m_totalPages = 1; + m_currentPage = 1; + updatePaginationControls(); + // 加载完数据后更新分页控件 + ui->scrollAreaWidgetContents->setUpdatesEnabled(true); + } } diff --git a/view/RegisterCenter/checknewuser.h b/view/RegisterCenter/checknewuser.h index f813765..096ed74 100644 --- a/view/RegisterCenter/checknewuser.h +++ b/view/RegisterCenter/checknewuser.h @@ -8,35 +8,46 @@ #include namespace view::RegisterCenter { -QT_BEGIN_NAMESPACE -namespace Ui { class CheckNewUser; } -QT_END_NAMESPACE - -class CheckNewUser : public QWidget { -Q_OBJECT - -public: - explicit CheckNewUser(QWidget *parent = nullptr); - ~CheckNewUser() override; - void loadDataFromDatabase(int page=1); - -private: - void updatePaginationControls(); - -public slots: -void on_prevButton_clicked(); - -void on_nextButton_clicked(); - -void on_addButton_clicked(); - void on_refreshButton_clicked(); - void on_ChangePasswordButton_clicked(); -private: - Ui::CheckNewUser *ui; - int m_currentPage; - int m_totalPages; - const int m_itemsPerPage = 10; -}; + QT_BEGIN_NAMESPACE + + namespace Ui { + class CheckNewUser; + } + + QT_END_NAMESPACE + + class CheckNewUser : public QWidget { + Q_OBJECT + + public: + explicit CheckNewUser(QWidget *parent = nullptr); + + ~CheckNewUser() override; + + void loadDataFromDatabase(int page = 1); + + private: + void updatePaginationControls(); + + public slots: + void on_prevButton_clicked(); + + void on_nextButton_clicked(); + + void on_addButton_clicked(); + + void on_refreshButton_clicked(); + + void on_ChangePasswordButton_clicked(); + + void on_lineEdit_returnPressed(); + + private: + Ui::CheckNewUser *ui; + int m_currentPage; + int m_totalPages; + const int m_itemsPerPage = 10; + }; } // view::RegisterCenter #endif //CHECKNEWUSER_H diff --git a/view/RegisterCenter/checknewuser.ui b/view/RegisterCenter/checknewuser.ui index d5331e8..926dc13 100644 --- a/view/RegisterCenter/checknewuser.ui +++ b/view/RegisterCenter/checknewuser.ui @@ -395,6 +395,40 @@ QPushButton { + + + QLineEdit { + /* 基础样式:几乎透明的背景,细微的浅色边框 */ + background-color: rgba(255, 255, 255, 10); /* 几乎全透明的白色背景,数值越低越透明 */ + color: black; /* 文字颜色保持黑色,确保可见性 */ + border: 1px solid rgba(192, 192, 192, 50); /* 极淡的边框,几乎不可见但有存在感 */ + border-radius: 4px; /* 圆角与之前风格统一 */ + padding: 5px 8px; /* 内边距 */ + font-size: 10pt; + min-height: 24px; /* 高度 */ + } + + QLineEdit:hover { + /* 鼠标悬停时:边框稍微明显一点 */ + border: 1px solid rgba(160, 160, 160, 100); /* 边框略微显现 */ + } + + QLineEdit:focus { + /* 聚焦时:背景变为白色,边框高亮为蓝色 */ + background-color: white; /* 聚焦时背景变为不透明白色 */ + border: 1px solid #0078D4; /* 边框高亮为熟悉的蓝色 */ + outline: none; /* 移除默认的焦点虚线框 */ + } + + /* 占位符文本样式 */ + QLineEdit::placeholder { + color: rgba(0, 0, 0, 120); /* 占位符文本略带透明度的黑色,确保可见 */ + } + + + + + Qt::Orientation::Horizontal @@ -445,7 +479,7 @@ QPushButton { 0 0 537 - 426 + 423 diff --git a/view/equipmentManage/equipment_home.ui b/view/equipmentManage/equipment_home.ui index 9be5a3c..3e28991 100644 --- a/view/equipmentManage/equipment_home.ui +++ b/view/equipmentManage/equipment_home.ui @@ -33,7 +33,11 @@ - + + + QAbstractItemView::EditTrigger::NoEditTriggers + + From 9a9a9c6ea77ea85c3924d32abe350f2a02c36c2f Mon Sep 17 00:00:00 2001 From: Gouzuang <87839812+Gouzuang@users.noreply.github.com> Date: Mon, 14 Jul 2025 10:54:42 +0800 Subject: [PATCH 6/8] =?UTF-8?q?[=E4=BC=98=E5=8C=96]=20=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E5=AE=A1=E6=A0=B8=E7=95=8C=E9=9D=A2=EF=BC=9A=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=8B=89=E9=BB=91=E4=B8=8E=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=EF=BC=8C=E5=AE=8C=E5=96=84=E6=8C=89=E9=92=AE?= =?UTF-8?q?=E5=B8=83=E5=B1=80=E4=B8=8E=E7=8A=B6=E6=80=81=E5=B1=95=E7=A4=BA?= =?UTF-8?q?=E9=80=BB=E8=BE=91=EF=BC=8C=E6=8F=90=E5=8D=87=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E7=81=B5=E6=B4=BB=E6=80=A7=E4=B8=8E=E7=95=8C?= =?UTF-8?q?=E9=9D=A2=E8=A7=84=E8=8C=83=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- module/data/data_UserControl.cpp | 11 ++ module/data/data_UserControl.h | 3 + view/RegisterCenter/checkuserblock.cpp | 176 ++++++++++++++++++------- view/RegisterCenter/checkuserblock.h | 7 +- view/RegisterCenter/checkuserblock.ui | 121 +++++++++++++---- 5 files changed, 251 insertions(+), 67 deletions(-) diff --git a/module/data/data_UserControl.cpp b/module/data/data_UserControl.cpp index 4f25d8d..9abbcc4 100644 --- a/module/data/data_UserControl.cpp +++ b/module/data/data_UserControl.cpp @@ -859,6 +859,17 @@ namespace data::UserControl { return true; } + bool deleteUser(int userId) { + service::DatabaseManager db(service::Path::user()); + QString query = R"( + UPDATE users SET status = 'Deleted' WHERE id = ? AND status = 'AllRight' + )"; + if (!db.executePreparedNonQuery(query, {userId})) { + return false; + } + return true; + } + bool rejectUserRegister(int userId) { service::DatabaseManager db(service::Path::user()); QString query = R"( diff --git a/module/data/data_UserControl.h b/module/data/data_UserControl.h index 26c53ee..6c80400 100644 --- a/module/data/data_UserControl.h +++ b/module/data/data_UserControl.h @@ -315,6 +315,9 @@ namespace data::UserControl { bool banUser(int userId); bool unbanUser(int userId); + + bool deleteUser(int userId); + bool rejectUserRegister(int userId); QString getUserStatus(int userId); diff --git a/view/RegisterCenter/checkuserblock.cpp b/view/RegisterCenter/checkuserblock.cpp index 689bd70..48c3617 100644 --- a/view/RegisterCenter/checkuserblock.cpp +++ b/view/RegisterCenter/checkuserblock.cpp @@ -11,11 +11,14 @@ namespace view::RegisterCenter { CheckUserBlock::CheckUserBlock(int userId, QWidget *parent): QWidget(parent), ui(new Ui::CheckUserBlock), userId(userId), acceptButton("接受", this), rejectButton("拒绝", this), - label_status("状态: ", this) { + label_status("状态: ", this), + banButton("拉黑", this), deleteButton("删除", this) { ui->setupUi(this); acceptButton.setVisible(false); rejectButton.setVisible(false); label_status.setVisible(false); + banButton.setVisible(false); + deleteButton.setVisible(false); setButtonStyle(); auto name = data::UserControl::UserInfo::getUserNameById(userId); @@ -37,14 +40,15 @@ namespace view::RegisterCenter { ui->label_group->setText(group); } - if (data::UserControl::check::getUserStatus(userId) == "Unchecked") { - addCheckButton(); - } else { - addStatusString(); - } + addStatusString(); + addCheckButton(); + connect(&acceptButton, &QPushButton::clicked, this, &CheckUserBlock::AcceptCheck); connect(&rejectButton, &QPushButton::clicked, this, &CheckUserBlock::RejectCheck); + connect(&banButton, &QPushButton::clicked, this, &CheckUserBlock::BanUserSwitch); + connect(&deleteButton, &QPushButton::clicked, this, &CheckUserBlock::DeleteUser); + } CheckUserBlock::~CheckUserBlock() { @@ -52,10 +56,75 @@ namespace view::RegisterCenter { } void CheckUserBlock::addCheckButton() { - ui->StatusFrame->layout()->addWidget(&acceptButton); - ui->StatusFrame->layout()->addWidget(&rejectButton); - acceptButton.setVisible(true); - rejectButton.setVisible(true); + if (ui->ButtonFrame) { + if (!ui->ButtonFrame->layout()) { + QHBoxLayout* buttonLayout = new QHBoxLayout(ui->ButtonFrame); + buttonLayout->addStretch(1); + buttonLayout->setContentsMargins(0, 0, 0, 0); + } + } + if (ui->StatusFrame) { + if (!ui->StatusFrame->layout()) { + QHBoxLayout* StatusLayout = new QHBoxLayout(ui->StatusFrame); + StatusLayout->addStretch(1); + StatusLayout->setContentsMargins(0, 0, 0, 0); + } + } + if (data::UserControl::check::getUserStatus(userId) == "Unchecked") { + ui->ButtonFrame->layout()->addWidget(&acceptButton); + ui->ButtonFrame->layout()->addWidget(&rejectButton); + auto status = data::UserControl::check::getUserStatus(userId); + ui->StatusFrame->layout()->addWidget(&label_status); + label_status.setText( + "" + "未审核" // 警告黄 + ); + label_status.setVisible(true); + acceptButton.setVisible(true); + rejectButton.setVisible(true); + label_status.setVisible(true); + } else { + ui->ButtonFrame->layout()->addWidget(&banButton); + ui->ButtonFrame->layout()->addWidget(&deleteButton); + auto status = data::UserControl::check::getUserStatus(userId); + ui->StatusFrame->layout()->addWidget(&label_status); + if (status == "Unchecked") { + label_status.setText( + "" + "未审核" // 警告黄 + ); + } else if (status == "AllRight") { + label_status.setText( + "" + "一切正常" // 成功绿 + ); + } else if (status == "Banned") { + label_status.setText( + "" + "被拉黑" // 中性灰 + ); + banButton.setText("取消拉黑"); + } else if (status == "Rejected") { + label_status.setText( + "" + "已拒绝" // 危险红 + ); + } else { + label_status.setText( + "" + "未知状态" // 保持中性灰 + ); + } + label_status.setVisible(true); + banButton.setVisible(true); + deleteButton.setVisible(true); + } } void CheckUserBlock::addStatusString(QString status) { @@ -65,40 +134,6 @@ namespace view::RegisterCenter { } void CheckUserBlock::addStatusString() { - auto status = data::UserControl::check::getUserStatus(userId); - ui->StatusFrame->layout()->addWidget(&label_status); - if (status == "Unchecked") { - label_status.setText( - "" - "未审核" // 警告黄 - ); - } else if (status == "AllRight") { - label_status.setText( - "" - "一切正常" // 成功绿 - ); - } else if (status == "Banned") { - label_status.setText( - "" - "被拉黑" // 中性灰 - ); - } else if (status == "Rejected") { - label_status.setText( - "" - "已拒绝" // 危险红 - ); - } else { - label_status.setText( - "" - "未知状态" // 保持中性灰 - ); - } - label_status.setVisible(true); } void CheckUserBlock::setButtonStyle() { @@ -146,6 +181,8 @@ namespace view::RegisterCenter { } )"; rejectButton.setStyleSheet(styleSheet2); + banButton.setStyleSheet(styleSheet2); + deleteButton.setStyleSheet(styleSheet2); } void CheckUserBlock::RejectCheck() { @@ -166,6 +203,57 @@ namespace view::RegisterCenter { } } + void CheckUserBlock::BanUserSwitch() { + if (data::UserControl::check::getUserStatus(userId) == "Banned") { + // 如果用户已经被拉黑,则取消拉黑 + if (data::UserControl::check::unbanUser(userId)) { + banButton.setText("拉黑"); + addStatusString( + "" // 图片大小和对齐 + "取消拉黑成功" + ); + } else { + addStatusString( + "" // 图片大小和对齐 + "取消拉黑失败" + ); + } + }else { + if (data::UserControl::check::banUser(userId)) { + banButton.setVisible(false); + addStatusString( + "" // 图片大小和对齐 + "拉黑成功" + ); + } else { + addStatusString( + "" // 图片大小和对齐 + "拉黑失败" + ); + } + } + } + + void CheckUserBlock::DeleteUser() { + if (data::UserControl::check::deleteUser(userId)) { + addStatusString( + "" // 图片大小和对齐 + "删除成功" + ); + } else { + addStatusString( + "" // 图片大小和对齐 + "删除失败" + ); + } + } + void CheckUserBlock::AcceptCheck() { if (data::UserControl::check::allowUserRegister(userId)) { acceptButton.setVisible(false); diff --git a/view/RegisterCenter/checkuserblock.h b/view/RegisterCenter/checkuserblock.h index 516a1f3..e35857a 100644 --- a/view/RegisterCenter/checkuserblock.h +++ b/view/RegisterCenter/checkuserblock.h @@ -36,6 +36,10 @@ namespace view::RegisterCenter { void RejectCheck(); + void BanUserSwitch(); + + void DeleteUser(); + public slots: void AcceptCheck(); @@ -43,7 +47,8 @@ namespace view::RegisterCenter { Ui::CheckUserBlock *ui; int userId; QPushButton acceptButton, - rejectButton; + rejectButton, + banButton,deleteButton; QLabel label_status; void addStatusString(QString status); diff --git a/view/RegisterCenter/checkuserblock.ui b/view/RegisterCenter/checkuserblock.ui index 85c17a8..c9aab5c 100644 --- a/view/RegisterCenter/checkuserblock.ui +++ b/view/RegisterCenter/checkuserblock.ui @@ -7,7 +7,7 @@ 0 0 498 - 295 + 294 @@ -25,19 +25,19 @@ 100 - 100 + 120 16777215 - 100 + 120 - QPushButton#frame { + #frame { /* 设置背景颜色 */ - background-color: #F3F2F1; + background-color: transparent; /* 关键:设置圆角半径,这里设为 8px,你可以根据需要调整 */ border-radius: 8px; @@ -100,15 +100,61 @@ - - - - 150 - 16777215 - - - - QFrame { + + + + 0 + 100 + + + + + 160 + 16777215 + + + + QFrame { + /* 设置背景颜色 */ + background-color: transparent; + + /* 关键:设置圆角半径,这里设为 8px,你可以根据需要调整 */ + border-radius: 8px; + } + + + + + QFrame::Shape::StyledPanel + + + QFrame::Shadow::Raised + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + 150 + 16777215 + + + + QFrame { /* 设置背景颜色 */ background-color: transparent; @@ -117,14 +163,45 @@ } - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - + + + QFrame::Shape::StyledPanel + + + QFrame::Shadow::Raised + + + + + + + + 150 + 16777215 + + + + QFrame { + /* 设置背景颜色 */ + background-color: transparent; + + /* 关键:设置圆角半径,这里设为 8px,你可以根据需要调整 */ + border-radius: 8px; + } + + + + + QFrame::Shape::StyledPanel + + + QFrame::Shadow::Raised + + + + + + From 5b29c41f322834802d1875db3955394838c53ecd Mon Sep 17 00:00:00 2001 From: Gouzuang <87839812+Gouzuang@users.noreply.github.com> Date: Mon, 14 Jul 2025 11:05:07 +0800 Subject: [PATCH 7/8] =?UTF-8?q?[=E4=BC=98=E5=8C=96]=20=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E5=88=86=E7=B1=BB=E7=AE=A1=E7=90=86=EF=BC=9A=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=E5=88=86=E7=B1=BB=E6=90=9C=E7=B4=A2=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=EF=BC=8C=E5=AE=8C=E5=96=84=E8=BE=93=E5=85=A5=E6=A1=86?= =?UTF-8?q?=E6=A0=B7=E5=BC=8F=E4=B8=8E=E4=BA=A4=E4=BA=92=E9=80=BB=E8=BE=91?= =?UTF-8?q?=EF=BC=8C=E6=8F=90=E5=8D=87=E6=95=B0=E6=8D=AE=E6=A3=80=E7=B4=A2?= =?UTF-8?q?=E6=95=88=E7=8E=87=E4=B8=8E=E7=95=8C=E9=9D=A2=E8=A7=84=E8=8C=83?= =?UTF-8?q?=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- module/data/data_EquipmentManage.cpp | 36 ++++++++++++++++++ module/data/data_EquipmentManage.h | 3 ++ .../equipmentclassmanagehomepage.cpp | 38 +++++++++++++++++++ .../equipmentclassmanagehomepage.h | 1 + .../equipmentclassmanagehomepage.ui | 38 ++++++++++++++++++- view/RegisterCenter/checkuserblock.cpp | 15 ++++---- view/RegisterCenter/checkuserblock.h | 2 +- 7 files changed, 122 insertions(+), 11 deletions(-) diff --git a/module/data/data_EquipmentManage.cpp b/module/data/data_EquipmentManage.cpp index dd7a0be..e86c9d3 100644 --- a/module/data/data_EquipmentManage.cpp +++ b/module/data/data_EquipmentManage.cpp @@ -351,6 +351,42 @@ namespace data::Equipment { return newId; } + + QList searchEquClassList(QString keyword) { + service::DatabaseManager db(service::Path::equipment()); + QString queryString = R"( + SELECT + id, + name, + description, + created_at, + total_amount, + usable_amount, + alarm_amount + FROM + equipment_class + WHERE status != 'deleted' AND (name LIKE ? OR description LIKE ?) + )"; + + auto results = db.executePreparedQueryAndFetchAll(queryString, { + "%" + keyword + "%","%" + keyword + "%" + }); + + QList records; + for (const auto &row: results) { + EquipmentClassRecord rec; + rec.id = row["id"].toInt(); + rec.name = row["name"].toString(); + rec.description = row["description"].toString(); + rec.created_at = row["created_at"].toDateTime(); + rec.total_amount = row["total_amount"].toInt(); + rec.usable_amount = row["usable_amount"].toInt(); + rec.alarm_amount = row["alarm_amount"].toInt(); + records.append(rec); + } + return records; + } + // 新增:删除设备类别(软删除,设置status为deleted) bool deleteEquipmentClass(int classId) { service::DatabaseManager db(service::Path::equipment()); diff --git a/module/data/data_EquipmentManage.h b/module/data/data_EquipmentManage.h index 69d2742..26c7ccf 100644 --- a/module/data/data_EquipmentManage.h +++ b/module/data/data_EquipmentManage.h @@ -105,6 +105,9 @@ namespace data::Equipment { * @return 如果创建成功,返回新记录的ID;如果失败,返回 -1。 */ int addEquipmentClass(const EquipmentClassRecord &record); + + QList searchEquClassList(QString keyword); + } namespace EquipmentInstnace { diff --git a/view/EquipmentClass/equipmentclassmanagehomepage.cpp b/view/EquipmentClass/equipmentclassmanagehomepage.cpp index cdda58c..54fe003 100644 --- a/view/EquipmentClass/equipmentclassmanagehomepage.cpp +++ b/view/EquipmentClass/equipmentclassmanagehomepage.cpp @@ -95,6 +95,44 @@ void EquipmentClassManageHomepage::on_refreshButton_clicked() { loadEquipmentClasses(); } +void EquipmentClassManageHomepage::on_lineEdit_returnPressed() { + auto keyword = ui->lineEdit->text().trimmed(); + auto records = data::Equipment::EquipmentClass::searchEquClassList(keyword); + + ui->scrollAreaWidgetContents->setUpdatesEnabled(false); + + auto *layout = qobject_cast(ui->scrollAreaWidgetContents->layout()); + if (!layout) { + layout = new QVBoxLayout(ui->scrollAreaWidgetContents); + layout->setSpacing(5); + layout->setAlignment(Qt::AlignTop); + layout = qobject_cast(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 EquipmentClassBlock(record); // 创建信息块实例 + layout->addWidget(block); + } + + m_totalPages = 1; + m_currentPage = 1; + updatePaginationControls(); + // 加载完数据后更新分页控件 + ui->scrollAreaWidgetContents->setUpdatesEnabled(true); +} + void EquipmentClassManageHomepage::updatePaginationControls() { if (m_totalPages == 0) { ui->pageLabel->setText("0 / 0"); diff --git a/view/EquipmentClass/equipmentclassmanagehomepage.h b/view/EquipmentClass/equipmentclassmanagehomepage.h index 617725b..a4b4ed8 100644 --- a/view/EquipmentClass/equipmentclassmanagehomepage.h +++ b/view/EquipmentClass/equipmentclassmanagehomepage.h @@ -31,6 +31,7 @@ namespace view::EquipmentClass { void on_nextButton_clicked(); void on_addButton_clicked(); void on_refreshButton_clicked(); + void on_lineEdit_returnPressed(); private: Ui::EquipmentClassManageHomepage *ui; diff --git a/view/EquipmentClass/equipmentclassmanagehomepage.ui b/view/EquipmentClass/equipmentclassmanagehomepage.ui index 334c872..8c500d6 100644 --- a/view/EquipmentClass/equipmentclassmanagehomepage.ui +++ b/view/EquipmentClass/equipmentclassmanagehomepage.ui @@ -245,7 +245,7 @@ QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { QFrame::Shadow::Raised - + @@ -301,6 +301,40 @@ QPushButton { 刷新 + + + + + QLineEdit { + /* 基础样式:几乎透明的背景,细微的浅色边框 */ + background-color: rgba(255, 255, 255, 10); /* 几乎全透明的白色背景,数值越低越透明 */ + color: black; /* 文字颜色保持黑色,确保可见性 */ + border: 1px solid rgba(192, 192, 192, 50); /* 极淡的边框,几乎不可见但有存在感 */ + border-radius: 4px; /* 圆角与之前风格统一 */ + padding: 5px 8px; /* 内边距 */ + font-size: 10pt; + min-height: 24px; /* 高度 */ + } + + QLineEdit:hover { + /* 鼠标悬停时:边框稍微明显一点 */ + border: 1px solid rgba(160, 160, 160, 100); /* 边框略微显现 */ + } + + QLineEdit:focus { + /* 聚焦时:背景变为白色,边框高亮为蓝色 */ + background-color: white; /* 聚焦时背景变为不透明白色 */ + border: 1px solid #0078D4; /* 边框高亮为熟悉的蓝色 */ + outline: none; /* 移除默认的焦点虚线框 */ + } + + /* 占位符文本样式 */ + QLineEdit::placeholder { + color: rgba(0, 0, 0, 120); /* 占位符文本略带透明度的黑色,确保可见 */ + } + + + @@ -353,7 +387,7 @@ QPushButton { 0 0 539 - 445 + 442 diff --git a/view/RegisterCenter/checkuserblock.cpp b/view/RegisterCenter/checkuserblock.cpp index 48c3617..2a44790 100644 --- a/view/RegisterCenter/checkuserblock.cpp +++ b/view/RegisterCenter/checkuserblock.cpp @@ -48,7 +48,6 @@ namespace view::RegisterCenter { connect(&rejectButton, &QPushButton::clicked, this, &CheckUserBlock::RejectCheck); connect(&banButton, &QPushButton::clicked, this, &CheckUserBlock::BanUserSwitch); connect(&deleteButton, &QPushButton::clicked, this, &CheckUserBlock::DeleteUser); - } CheckUserBlock::~CheckUserBlock() { @@ -58,14 +57,14 @@ namespace view::RegisterCenter { void CheckUserBlock::addCheckButton() { if (ui->ButtonFrame) { if (!ui->ButtonFrame->layout()) { - QHBoxLayout* buttonLayout = new QHBoxLayout(ui->ButtonFrame); + QHBoxLayout *buttonLayout = new QHBoxLayout(ui->ButtonFrame); buttonLayout->addStretch(1); buttonLayout->setContentsMargins(0, 0, 0, 0); } } if (ui->StatusFrame) { if (!ui->StatusFrame->layout()) { - QHBoxLayout* StatusLayout = new QHBoxLayout(ui->StatusFrame); + QHBoxLayout *StatusLayout = new QHBoxLayout(ui->StatusFrame); StatusLayout->addStretch(1); StatusLayout->setContentsMargins(0, 0, 0, 0); } @@ -76,10 +75,10 @@ namespace view::RegisterCenter { auto status = data::UserControl::check::getUserStatus(userId); ui->StatusFrame->layout()->addWidget(&label_status); label_status.setText( - "" - "未审核" // 警告黄 - ); + "" + "未审核" // 警告黄 + ); label_status.setVisible(true); acceptButton.setVisible(true); rejectButton.setVisible(true); @@ -220,7 +219,7 @@ namespace view::RegisterCenter { "取消拉黑失败" ); } - }else { + } else { if (data::UserControl::check::banUser(userId)) { banButton.setVisible(false); addStatusString( diff --git a/view/RegisterCenter/checkuserblock.h b/view/RegisterCenter/checkuserblock.h index e35857a..cc8de1d 100644 --- a/view/RegisterCenter/checkuserblock.h +++ b/view/RegisterCenter/checkuserblock.h @@ -48,7 +48,7 @@ namespace view::RegisterCenter { int userId; QPushButton acceptButton, rejectButton, - banButton,deleteButton; + banButton, deleteButton; QLabel label_status; void addStatusString(QString status); From b91cece3e5d79010432a8131007c6b6baae27a0a Mon Sep 17 00:00:00 2001 From: Gouzuang <87839812+Gouzuang@users.noreply.github.com> Date: Mon, 14 Jul 2025 11:05:25 +0800 Subject: [PATCH 8/8] =?UTF-8?q?[=E4=BC=98=E5=8C=96]=20=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E5=88=86=E7=B1=BB=E7=AE=A1=E7=90=86=EF=BC=9A=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E5=8F=82=E6=95=B0=E7=BC=A9=E8=BF=9B=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=EF=BC=8C=E5=AE=8C=E5=96=84=E6=A7=BD=E5=87=BD=E6=95=B0?= =?UTF-8?q?=E5=A3=B0=E6=98=8E=E5=B8=83=E5=B1=80=EF=BC=8C=E6=8F=90=E5=8D=87?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=A7=84=E8=8C=83=E6=80=A7=E4=B8=8E=E5=8F=AF?= =?UTF-8?q?=E8=AF=BB=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- module/data/data_EquipmentManage.cpp | 4 ++-- view/EquipmentClass/equipmentclassmanagehomepage.h | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/module/data/data_EquipmentManage.cpp b/module/data/data_EquipmentManage.cpp index e86c9d3..337fa30 100644 --- a/module/data/data_EquipmentManage.cpp +++ b/module/data/data_EquipmentManage.cpp @@ -369,8 +369,8 @@ namespace data::Equipment { )"; auto results = db.executePreparedQueryAndFetchAll(queryString, { - "%" + keyword + "%","%" + keyword + "%" - }); + "%" + keyword + "%", "%" + keyword + "%" + }); QList records; for (const auto &row: results) { diff --git a/view/EquipmentClass/equipmentclassmanagehomepage.h b/view/EquipmentClass/equipmentclassmanagehomepage.h index a4b4ed8..2105d69 100644 --- a/view/EquipmentClass/equipmentclassmanagehomepage.h +++ b/view/EquipmentClass/equipmentclassmanagehomepage.h @@ -31,6 +31,7 @@ namespace view::EquipmentClass { void on_nextButton_clicked(); void on_addButton_clicked(); void on_refreshButton_clicked(); + void on_lineEdit_returnPressed(); private: