112 lines
3.5 KiB
C++
112 lines
3.5 KiB
C++
#include "faultquery.h"
|
|
#include "faulttable.h"
|
|
#include <QVBoxLayout>
|
|
#include <QHBoxLayout>
|
|
#include <QLabel>
|
|
#include <QPushButton>
|
|
#include <QMessageBox>
|
|
#include "global.h"
|
|
|
|
FaultQueryPage::FaultQueryPage(AppContext* ctx, QWidget* parent)
|
|
: BasePage(ctx, parent)
|
|
{
|
|
m_categories << "机器人底盘" << "机械臂" << "洗消系统" << "气体检测仪";
|
|
|
|
QVBoxLayout* root = new QVBoxLayout(this);
|
|
root->setContentsMargins(36, 20, 36, 20);
|
|
root->setSpacing(16);
|
|
|
|
// 顶条:标题 + 汇总数
|
|
m_title = label("历史故障", 28, C::TEXT, true, this);
|
|
root->addWidget(m_title);
|
|
|
|
QHBoxLayout* main = new QHBoxLayout();
|
|
main->setSpacing(28);
|
|
|
|
// 表格
|
|
m_table = new FaultTable(this);
|
|
connect(m_table, &FaultTable::rowClicked, this, &FaultQueryPage::onRowClicked);
|
|
main->addWidget(m_table, 1);
|
|
|
|
// 分类按钮列(垂直居中 + 平均分布)
|
|
QWidget* right = new QWidget(this);
|
|
QVBoxLayout* rightLay = new QVBoxLayout(right);
|
|
rightLay->setContentsMargins(0, 0, 0, 0);
|
|
rightLay->setSpacing(8);
|
|
for (const QString& cat : m_categories) {
|
|
QPushButton* b = button(cat + "故障", "", right);
|
|
b->setCheckable(true);
|
|
b->setFixedHeight(110);
|
|
b->setStyleSheet(QString("font-size:24px;background-color:%1;color:%2;border:1px solid %3;border-radius:12px;")
|
|
.arg(C::PANEL_HI, C::TEXT, C::BORDER));
|
|
connect(b, &QPushButton::toggled, this, &FaultQueryPage::onCategoryToggled);
|
|
m_categoryButtons << b;
|
|
rightLay->addStretch(1);
|
|
rightLay->addWidget(b);
|
|
}
|
|
rightLay->addStretch(1);
|
|
right->setFixedWidth(360);
|
|
main->addWidget(right);
|
|
|
|
root->addLayout(main, 1);
|
|
|
|
// 底部:返回
|
|
QHBoxLayout* bottomLay = new QHBoxLayout();
|
|
bottomLay->addStretch(1);
|
|
QPushButton* back = button("返回", "", this);
|
|
back->setFixedSize(144, 76);
|
|
connect(back, &QPushButton::clicked, this, [this]() { emit navigate(m_returnPage); });
|
|
bottomLay->addWidget(back);
|
|
root->addLayout(bottomLay);
|
|
|
|
refresh();
|
|
}
|
|
|
|
void FaultQueryPage::onCategoryToggled(bool on)
|
|
{
|
|
// 单选筛选:确定当前选中的分类
|
|
QString selected;
|
|
for (int i = 0; i < m_categoryButtons.size(); ++i) {
|
|
if (m_categoryButtons[i]->isChecked()) {
|
|
selected = m_categories[i];
|
|
break;
|
|
}
|
|
}
|
|
m_filter = selected;
|
|
Q_UNUSED(on);
|
|
refresh();
|
|
}
|
|
|
|
void FaultQueryPage::refresh()
|
|
{
|
|
// 按分类过滤
|
|
QVector<FaultRecord> data;
|
|
for (const FaultRecord& r : ctx()->faultHistory) {
|
|
if (m_filter.isEmpty() || r.system == m_filter)
|
|
data.append(r);
|
|
}
|
|
|
|
m_table->setData(data);
|
|
|
|
if (m_filter.isEmpty())
|
|
m_title->setText(QString("历史故障(共 %1 条)").arg(data.size()));
|
|
else
|
|
m_title->setText(QString("%1历史故障(共 %2 条)").arg(m_filter).arg(data.size()));
|
|
}
|
|
|
|
void FaultQueryPage::onRowClicked(int globalIndex)
|
|
{
|
|
// 找到当前过滤后列表中的记录
|
|
QVector<FaultRecord> data;
|
|
for (const FaultRecord& r : ctx()->faultHistory) {
|
|
if (m_filter.isEmpty() || r.system == m_filter)
|
|
data.append(r);
|
|
}
|
|
if (globalIndex < 0 || globalIndex >= data.size())
|
|
return;
|
|
const FaultRecord& r = data[globalIndex];
|
|
QMessageBox::information(this, "故障详情",
|
|
QString("故障时间:%1\n分系统:%2\n故障代码:%3\n故障描述:%4")
|
|
.arg(r.time, r.system, r.code, r.desc));
|
|
}
|