blastrecord.cpp 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. #include "blastrecord.h"
  2. #include "../components/loadingWidget.h"
  3. #include "../utils/backendapimanager.h"
  4. #include "ui_blastrecord.h"
  5. BlastRecord::BlastRecord(QWidget* parent)
  6. : QWidget(parent), ui(new Ui::BlastRecord), dao(DatabaseManager::getInstance().getDatabase()) {
  7. ui->setupUi(this);
  8. m_pPageWidget = new PageWidget;
  9. connect(m_pPageWidget, &PageWidget::currentPageChanged, this, &BlastRecord::PageChanged);
  10. connect(m_pPageWidget->getComboBox(), QOverload<int>::of(&QComboBox::currentIndexChanged), this,
  11. &BlastRecord::onComboBoxIndexChanged);
  12. m_pageSize = 10;
  13. m_currentPage = 1;
  14. ui->verticalLayout_4->addWidget(m_pPageWidget);
  15. loadAndRefreshData();
  16. }
  17. void BlastRecord::loadAndRefreshData() {
  18. LoadingWidget::showLoading(this, "正在加载数据,请稍候...");
  19. QJsonObject params;
  20. QJsonObject blastData = backendAPIManager::getBlastRecords(m_currentPage, m_pageSize, params);
  21. LoadingWidget::hideLoading();
  22. m_currentPage = blastData["pageIndex"].toInt();
  23. m_pageSize = blastData["pageSize"].toInt();
  24. m_totalCount = blastData["count"].toInt();
  25. QList<QSharedPointer<HBlastRecord>> blastRecords;
  26. for (const QJsonValue& value : blastData["list"].toArray()) {
  27. QJsonObject jsonObj = value.toObject();
  28. QSharedPointer<HBlastRecord> record(new HBlastRecord);
  29. record->setProjectName(jsonObj["projectName"].toString());
  30. record->setIsOfflineBlast(jsonObj["isOfflineBlast"].toBool());
  31. record->setAppVersion(jsonObj["appVersion"].toString());
  32. record->setEquipmentSn(jsonObj["equipmentSn"].toString());
  33. record->setRegDetCount(jsonObj["regDetCount"].toString().toInt());
  34. record->setBlastAt(QDateTime::fromString(jsonObj["blastAt"].toString(), Qt::ISODateWithMs));
  35. blastRecords.append(record);
  36. }
  37. drawTable(blastRecords);
  38. }
  39. void BlastRecord::drawTable(QList<QSharedPointer<HBlastRecord>> blastRecordsList) {
  40. m_pPageWidget->setMaxPage(ceil(static_cast<double>(m_totalCount) / m_pageSize));
  41. QStandardItemModel* model;
  42. model = new QStandardItemModel(this);
  43. // 定义表头信息
  44. QList<HeaderInfo> headers = {
  45. {"工程名称", "projectName"}, {"是否离线", "isOfflineBlast"}, {"app版本", "appVersion"},
  46. {"起爆器编号", "equipmentSn"}, {"注册雷管", "regDetCount"}, {"起爆时间", "blastAt"},
  47. };
  48. QStringList headerLabels;
  49. QMap<int, QString> propMap;
  50. for (int i = 0; i < headers.size(); ++i) {
  51. headerLabels << headers[i].label;
  52. propMap[i] = headers[i].prop;
  53. }
  54. model->setHorizontalHeaderLabels(headerLabels);
  55. for (int row = 0; row < blastRecordsList.size(); ++row) {
  56. HBlastRecord& HBlastRecord = *blastRecordsList.at(row).data();
  57. for (int col = 0; col < headers.size(); ++col) {
  58. QString prop = propMap[col];
  59. QStandardItem* item = nullptr;
  60. if (!prop.isEmpty()) {
  61. QMetaProperty metaProp =
  62. HBlastRecord.metaObject()->property(HBlastRecord.metaObject()->indexOfProperty(prop.toUtf8()));
  63. QVariant value = metaProp.read(&HBlastRecord);
  64. if (value.type() == QVariant::DateTime) {
  65. QDateTime dateTime = value.toDateTime();
  66. item = new QStandardItem(dateTime.toString("yyyy-MM-dd HH:mm:ss"));
  67. } else if (prop == "isOfflineBlast") {
  68. item = new QStandardItem(value.toBool() ? "离线爆破" : "线上爆破");
  69. } else {
  70. item = new QStandardItem(value.toString());
  71. }
  72. } else {
  73. item = new QStandardItem("操作");
  74. }
  75. if (item) {
  76. item->setTextAlignment(Qt::AlignCenter);
  77. model->setItem(row, col, item);
  78. }
  79. }
  80. }
  81. ui->tableView->setModel(model);
  82. ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
  83. ui->tableView->setAlternatingRowColors(true); // 启用交替行颜色
  84. ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
  85. }
  86. void BlastRecord::PageChanged(int page) {
  87. m_currentPage = page;
  88. loadAndRefreshData();
  89. }
  90. void BlastRecord::onComboBoxIndexChanged(int index) {
  91. QVariant variant = m_pPageWidget->getComboBox()->itemData(index);
  92. int value = variant.toInt();
  93. m_pageSize = value;
  94. loadAndRefreshData();
  95. }
  96. void BlastRecord::dataTable(const QJsonDocument& jsonDoc) {
  97. model = new QStandardItemModel(this);
  98. model->setHorizontalHeaderLabels(
  99. {"工程名称", "离线爆破", "app版本", "起爆器编号", "注册雷管", "起爆时间", "上报时间"});
  100. for (const QJsonValue& jsonValue : dataArray) {
  101. QJsonObject jsonObj = jsonValue.toObject();
  102. QList<QStandardItem*> items = jsonToItem(jsonObj);
  103. model->appendRow(items);
  104. }
  105. ui->tableView->setModel(model);
  106. ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
  107. ui->tableView->setAlternatingRowColors(true);
  108. }
  109. QList<QStandardItem*> BlastRecord::jsonToItem(const QJsonObject& jsonObj) {
  110. QStandardItem* nameItem = new QStandardItem(jsonObj["name"].toString());
  111. nameItem->setTextAlignment(Qt::AlignCenter);
  112. qDebug() << "jsonObj:" << jsonObj;
  113. QStandardItem* isOfflineBlastItem = new QStandardItem(jsonObj["isOfflineBlast"].toString());
  114. QStandardItem* equipItem = new QStandardItem(jsonObj["equipmentSn"].toString());
  115. QStandardItem* typeItem = new QStandardItem(jsonObj["equipmentTypeName"].toString());
  116. QStandardItem* statusItem = new QStandardItem(jsonObj["statusName"].toString());
  117. QStandardItem* onlineItem = new QStandardItem(jsonObj["onlineName"].toString());
  118. QString createdAtStr = jsonObj["createdAt"].toString();
  119. QDateTime createdAt = QDateTime::fromString(createdAtStr, Qt::ISODateWithMs);
  120. QString formattedCreatedAt = createdAt.toString("yyyy-MM-dd HH:mm:ss");
  121. QStandardItem* createdItem = new QStandardItem(formattedCreatedAt);
  122. return QList<QStandardItem*>() << nameItem << isOfflineBlastItem << equipItem << typeItem << statusItem
  123. << onlineItem;
  124. }
  125. BlastRecord::~BlastRecord() { delete ui; }