diff --git a/QPagedTable/QPagedTable.cpp b/QPagedTable/QPagedTable.cpp index 1bb4af0..1ca1322 100644 --- a/QPagedTable/QPagedTable.cpp +++ b/QPagedTable/QPagedTable.cpp @@ -181,6 +181,10 @@ { ui->wdgtPageBtn->setProperty(name, value); } +void QPagedTable::setCheckBoxClass(QString className) +{ + checkProperty.insert("class", className); +} void QPagedTable::setHeaderHeight(int height) { @@ -217,6 +221,17 @@ return filterList; } +void QPagedTable::setRowSelected(int rowIdx, bool selected) +{ + if (multiCheck != MultiCheckType::NONE) { + QCheckBox *checkBox = ui->table->cellWidget(rowIdx, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->setCheckState(selected ? Qt::CheckState::Checked : Qt::CheckState::Unchecked); + } + } +} + QWidget * QPagedTable::buildNewCheckWidget() { QWidget* activeWidget = new QWidget(ui->table); @@ -225,6 +240,7 @@ QCheckBox* check = new QCheckBox(activeWidget); check->setMinimumSize(25, 25); check->setMaximumSize(25, 25); + check->setProperty("class", checkProperty.value("class")); activelayout->addWidget(check, 0, 0); if (multiCheck == MultiCheckType::RADIO) { @@ -241,6 +257,7 @@ QRadioButton* radio = new QRadioButton(activeWidget); radio->setMinimumSize(25, 25); radio->setMaximumSize(25, 25); + radio->setProperty("class", checkProperty.value("class")); activelayout->addWidget(radio, 0, 0); group->addButton(radio); @@ -336,3 +353,18 @@ page.currentPage = page.totalPage - 1; emit reloadTablePagedData(page.currentPage); } + +void QPagedTable::on_table_cellDoubleClicked(int row, int column) +{ + if (multiCheck != MultiCheckType::NONE && doubleClickSelectRow) { + QTableWidget * tableWidget = qobject_cast(sender()); + if (tableWidget) { + QCheckBox *checkBox = tableWidget->cellWidget(row, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->toggle(); + emit tableRowSelected(row, checkBox->isChecked()); + } + } + } +} diff --git a/QPagedTable/QPagedTable.cpp b/QPagedTable/QPagedTable.cpp index 1bb4af0..1ca1322 100644 --- a/QPagedTable/QPagedTable.cpp +++ b/QPagedTable/QPagedTable.cpp @@ -181,6 +181,10 @@ { ui->wdgtPageBtn->setProperty(name, value); } +void QPagedTable::setCheckBoxClass(QString className) +{ + checkProperty.insert("class", className); +} void QPagedTable::setHeaderHeight(int height) { @@ -217,6 +221,17 @@ return filterList; } +void QPagedTable::setRowSelected(int rowIdx, bool selected) +{ + if (multiCheck != MultiCheckType::NONE) { + QCheckBox *checkBox = ui->table->cellWidget(rowIdx, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->setCheckState(selected ? Qt::CheckState::Checked : Qt::CheckState::Unchecked); + } + } +} + QWidget * QPagedTable::buildNewCheckWidget() { QWidget* activeWidget = new QWidget(ui->table); @@ -225,6 +240,7 @@ QCheckBox* check = new QCheckBox(activeWidget); check->setMinimumSize(25, 25); check->setMaximumSize(25, 25); + check->setProperty("class", checkProperty.value("class")); activelayout->addWidget(check, 0, 0); if (multiCheck == MultiCheckType::RADIO) { @@ -241,6 +257,7 @@ QRadioButton* radio = new QRadioButton(activeWidget); radio->setMinimumSize(25, 25); radio->setMaximumSize(25, 25); + radio->setProperty("class", checkProperty.value("class")); activelayout->addWidget(radio, 0, 0); group->addButton(radio); @@ -336,3 +353,18 @@ page.currentPage = page.totalPage - 1; emit reloadTablePagedData(page.currentPage); } + +void QPagedTable::on_table_cellDoubleClicked(int row, int column) +{ + if (multiCheck != MultiCheckType::NONE && doubleClickSelectRow) { + QTableWidget * tableWidget = qobject_cast(sender()); + if (tableWidget) { + QCheckBox *checkBox = tableWidget->cellWidget(row, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->toggle(); + emit tableRowSelected(row, checkBox->isChecked()); + } + } + } +} diff --git a/QPagedTable/QPagedTable.h b/QPagedTable/QPagedTable.h index e561d01..aacb4aa 100644 --- a/QPagedTable/QPagedTable.h +++ b/QPagedTable/QPagedTable.h @@ -50,6 +50,7 @@ void setTotalCount(int totalCount); void setPageButtonIcons(QStringList iconUrls); void setPageButtonProperty(const char* name, QString value); + void setCheckBoxClass(QString className); void setHeaderHeight(int height); void setDataRowHeight(int height); @@ -62,6 +63,7 @@ QTableWidget * getTableInstance(); QList filterCells(QString colName, QString value); + void setRowSelected(int rowIdx, bool selected); private: Ui::QPagedTable *ui; @@ -92,6 +94,8 @@ int frameBorderSize = 0; int multiCheck = MultiCheckType::NONE; + QMap checkProperty; + bool doubleClickSelectRow = true; QButtonGroup * group; @@ -105,9 +109,12 @@ void on_btnPre_clicked(); void on_btnNext_clicked(); void on_btnLast_clicked(); + void on_table_cellDoubleClicked(int row, int column); + signals: void reloadTablePagedData(int currPage); void contextMenuActionTrigged(int actionIdx, int rowIdx, int colIdx); + void tableRowSelected(int rowIdx, bool selected); }; #endif // QPAGEDTABLE_H diff --git a/QPagedTable/QPagedTable.cpp b/QPagedTable/QPagedTable.cpp index 1bb4af0..1ca1322 100644 --- a/QPagedTable/QPagedTable.cpp +++ b/QPagedTable/QPagedTable.cpp @@ -181,6 +181,10 @@ { ui->wdgtPageBtn->setProperty(name, value); } +void QPagedTable::setCheckBoxClass(QString className) +{ + checkProperty.insert("class", className); +} void QPagedTable::setHeaderHeight(int height) { @@ -217,6 +221,17 @@ return filterList; } +void QPagedTable::setRowSelected(int rowIdx, bool selected) +{ + if (multiCheck != MultiCheckType::NONE) { + QCheckBox *checkBox = ui->table->cellWidget(rowIdx, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->setCheckState(selected ? Qt::CheckState::Checked : Qt::CheckState::Unchecked); + } + } +} + QWidget * QPagedTable::buildNewCheckWidget() { QWidget* activeWidget = new QWidget(ui->table); @@ -225,6 +240,7 @@ QCheckBox* check = new QCheckBox(activeWidget); check->setMinimumSize(25, 25); check->setMaximumSize(25, 25); + check->setProperty("class", checkProperty.value("class")); activelayout->addWidget(check, 0, 0); if (multiCheck == MultiCheckType::RADIO) { @@ -241,6 +257,7 @@ QRadioButton* radio = new QRadioButton(activeWidget); radio->setMinimumSize(25, 25); radio->setMaximumSize(25, 25); + radio->setProperty("class", checkProperty.value("class")); activelayout->addWidget(radio, 0, 0); group->addButton(radio); @@ -336,3 +353,18 @@ page.currentPage = page.totalPage - 1; emit reloadTablePagedData(page.currentPage); } + +void QPagedTable::on_table_cellDoubleClicked(int row, int column) +{ + if (multiCheck != MultiCheckType::NONE && doubleClickSelectRow) { + QTableWidget * tableWidget = qobject_cast(sender()); + if (tableWidget) { + QCheckBox *checkBox = tableWidget->cellWidget(row, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->toggle(); + emit tableRowSelected(row, checkBox->isChecked()); + } + } + } +} diff --git a/QPagedTable/QPagedTable.h b/QPagedTable/QPagedTable.h index e561d01..aacb4aa 100644 --- a/QPagedTable/QPagedTable.h +++ b/QPagedTable/QPagedTable.h @@ -50,6 +50,7 @@ void setTotalCount(int totalCount); void setPageButtonIcons(QStringList iconUrls); void setPageButtonProperty(const char* name, QString value); + void setCheckBoxClass(QString className); void setHeaderHeight(int height); void setDataRowHeight(int height); @@ -62,6 +63,7 @@ QTableWidget * getTableInstance(); QList filterCells(QString colName, QString value); + void setRowSelected(int rowIdx, bool selected); private: Ui::QPagedTable *ui; @@ -92,6 +94,8 @@ int frameBorderSize = 0; int multiCheck = MultiCheckType::NONE; + QMap checkProperty; + bool doubleClickSelectRow = true; QButtonGroup * group; @@ -105,9 +109,12 @@ void on_btnPre_clicked(); void on_btnNext_clicked(); void on_btnLast_clicked(); + void on_table_cellDoubleClicked(int row, int column); + signals: void reloadTablePagedData(int currPage); void contextMenuActionTrigged(int actionIdx, int rowIdx, int colIdx); + void tableRowSelected(int rowIdx, bool selected); }; #endif // QPAGEDTABLE_H diff --git a/calibration/CalibrationMainForm.cpp b/calibration/CalibrationMainForm.cpp index 9b778a5..44d203a 100644 --- a/calibration/CalibrationMainForm.cpp +++ b/calibration/CalibrationMainForm.cpp @@ -6,9 +6,72 @@ ui(new Ui::CalibrationMainForm) { ui->setupUi(this); + + initFormWidgets(); + bindSignalAndHandlers(); } CalibrationMainForm::~CalibrationMainForm() { + qDebug() << "~CalibrationMainForm"; delete ui; } + +QMap & CalibrationMainForm::getSelectedTask() +{ + return selectedTask; +} +QStringList CalibrationMainForm::getVerificationItemCatIds() +{ + return verificationItemCatIds; +} +void CalibrationMainForm::setVerificationItemCatIds(QStringList itemCatIds) +{ + verificationItemCatIds = itemCatIds; +} + +void CalibrationMainForm::showEvent(QShowEvent * event) +{ + selectedTask.clear(); + verificationItemCatIds.clear(); + + ui->wdgtCalMain->setCurrentIndex(0); +} + +void CalibrationMainForm::initFormWidgets() +{ + wdgtTask = new TaskListWidget(this); + wdgtConf = new ConfigurationWidget(this); +// wdgtStandardList = new StandardListWidget(this); +// wdgtConnectState = new ConnectStateWidget(this); + + ui->wdgtCalMain->addWidget(wdgtTask); + ui->wdgtCalMain->addWidget(wdgtConf); +// ui->wdgtContent->addWidget(wdgtStandardList); +// ui->wdgtContent->addWidget(wdgtConnectState); + + ui->wdgtCalMain->setCurrentIndex(0); +} + +void CalibrationMainForm::bindSignalAndHandlers() +{ + // 待检设备清单 下一步 切换到 配置检定项和流程 + connect(wdgtTask, &TaskListWidget::taskEquipmentSelected, this, &CalibrationMainForm::nextToConfiguration); + + // 检定程序 上一步 下一步 +// connect(wdgtCheckProgram, &CheckProgramWidget::switchToReSelectTaskEquipment, this, &CalibrationForm::forwardToReSelectTaskEquipment); +// connect(wdgtCheckProgram, &CheckProgramWidget::switchToNextWidget, this, &CalibrationForm::nextToSelectStandardEquipment); + + // 标准设备 上一步 下一步 +// connect(wdgtStandardList, &StandardListWidget::switchToReSelectCheckProgram, this, &CalibrationForm::forwardToReSelectCheckProgram); +// connect(wdgtStandardList, &StandardListWidget::switchToNextWidget, this, &CalibrationForm::nextToConnectionState); + + // 查看连接状态 +// connect(wdgtConnectState, &ConnectStateWidget::switchToReSelectStandardEqpt, this, &CalibrationForm::forwardToReSelectTaskEquipment); +// connect(wdgtConnectState, &ConnectStateWidget::startAutoCalibration, this, &CalibrationForm::nextToAutoCalibration); +} + +void CalibrationMainForm::nextToConfiguration() +{ + ui->wdgtCalMain->setCurrentWidget(wdgtConf); +} diff --git a/QPagedTable/QPagedTable.cpp b/QPagedTable/QPagedTable.cpp index 1bb4af0..1ca1322 100644 --- a/QPagedTable/QPagedTable.cpp +++ b/QPagedTable/QPagedTable.cpp @@ -181,6 +181,10 @@ { ui->wdgtPageBtn->setProperty(name, value); } +void QPagedTable::setCheckBoxClass(QString className) +{ + checkProperty.insert("class", className); +} void QPagedTable::setHeaderHeight(int height) { @@ -217,6 +221,17 @@ return filterList; } +void QPagedTable::setRowSelected(int rowIdx, bool selected) +{ + if (multiCheck != MultiCheckType::NONE) { + QCheckBox *checkBox = ui->table->cellWidget(rowIdx, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->setCheckState(selected ? Qt::CheckState::Checked : Qt::CheckState::Unchecked); + } + } +} + QWidget * QPagedTable::buildNewCheckWidget() { QWidget* activeWidget = new QWidget(ui->table); @@ -225,6 +240,7 @@ QCheckBox* check = new QCheckBox(activeWidget); check->setMinimumSize(25, 25); check->setMaximumSize(25, 25); + check->setProperty("class", checkProperty.value("class")); activelayout->addWidget(check, 0, 0); if (multiCheck == MultiCheckType::RADIO) { @@ -241,6 +257,7 @@ QRadioButton* radio = new QRadioButton(activeWidget); radio->setMinimumSize(25, 25); radio->setMaximumSize(25, 25); + radio->setProperty("class", checkProperty.value("class")); activelayout->addWidget(radio, 0, 0); group->addButton(radio); @@ -336,3 +353,18 @@ page.currentPage = page.totalPage - 1; emit reloadTablePagedData(page.currentPage); } + +void QPagedTable::on_table_cellDoubleClicked(int row, int column) +{ + if (multiCheck != MultiCheckType::NONE && doubleClickSelectRow) { + QTableWidget * tableWidget = qobject_cast(sender()); + if (tableWidget) { + QCheckBox *checkBox = tableWidget->cellWidget(row, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->toggle(); + emit tableRowSelected(row, checkBox->isChecked()); + } + } + } +} diff --git a/QPagedTable/QPagedTable.h b/QPagedTable/QPagedTable.h index e561d01..aacb4aa 100644 --- a/QPagedTable/QPagedTable.h +++ b/QPagedTable/QPagedTable.h @@ -50,6 +50,7 @@ void setTotalCount(int totalCount); void setPageButtonIcons(QStringList iconUrls); void setPageButtonProperty(const char* name, QString value); + void setCheckBoxClass(QString className); void setHeaderHeight(int height); void setDataRowHeight(int height); @@ -62,6 +63,7 @@ QTableWidget * getTableInstance(); QList filterCells(QString colName, QString value); + void setRowSelected(int rowIdx, bool selected); private: Ui::QPagedTable *ui; @@ -92,6 +94,8 @@ int frameBorderSize = 0; int multiCheck = MultiCheckType::NONE; + QMap checkProperty; + bool doubleClickSelectRow = true; QButtonGroup * group; @@ -105,9 +109,12 @@ void on_btnPre_clicked(); void on_btnNext_clicked(); void on_btnLast_clicked(); + void on_table_cellDoubleClicked(int row, int column); + signals: void reloadTablePagedData(int currPage); void contextMenuActionTrigged(int actionIdx, int rowIdx, int colIdx); + void tableRowSelected(int rowIdx, bool selected); }; #endif // QPAGEDTABLE_H diff --git a/calibration/CalibrationMainForm.cpp b/calibration/CalibrationMainForm.cpp index 9b778a5..44d203a 100644 --- a/calibration/CalibrationMainForm.cpp +++ b/calibration/CalibrationMainForm.cpp @@ -6,9 +6,72 @@ ui(new Ui::CalibrationMainForm) { ui->setupUi(this); + + initFormWidgets(); + bindSignalAndHandlers(); } CalibrationMainForm::~CalibrationMainForm() { + qDebug() << "~CalibrationMainForm"; delete ui; } + +QMap & CalibrationMainForm::getSelectedTask() +{ + return selectedTask; +} +QStringList CalibrationMainForm::getVerificationItemCatIds() +{ + return verificationItemCatIds; +} +void CalibrationMainForm::setVerificationItemCatIds(QStringList itemCatIds) +{ + verificationItemCatIds = itemCatIds; +} + +void CalibrationMainForm::showEvent(QShowEvent * event) +{ + selectedTask.clear(); + verificationItemCatIds.clear(); + + ui->wdgtCalMain->setCurrentIndex(0); +} + +void CalibrationMainForm::initFormWidgets() +{ + wdgtTask = new TaskListWidget(this); + wdgtConf = new ConfigurationWidget(this); +// wdgtStandardList = new StandardListWidget(this); +// wdgtConnectState = new ConnectStateWidget(this); + + ui->wdgtCalMain->addWidget(wdgtTask); + ui->wdgtCalMain->addWidget(wdgtConf); +// ui->wdgtContent->addWidget(wdgtStandardList); +// ui->wdgtContent->addWidget(wdgtConnectState); + + ui->wdgtCalMain->setCurrentIndex(0); +} + +void CalibrationMainForm::bindSignalAndHandlers() +{ + // 待检设备清单 下一步 切换到 配置检定项和流程 + connect(wdgtTask, &TaskListWidget::taskEquipmentSelected, this, &CalibrationMainForm::nextToConfiguration); + + // 检定程序 上一步 下一步 +// connect(wdgtCheckProgram, &CheckProgramWidget::switchToReSelectTaskEquipment, this, &CalibrationForm::forwardToReSelectTaskEquipment); +// connect(wdgtCheckProgram, &CheckProgramWidget::switchToNextWidget, this, &CalibrationForm::nextToSelectStandardEquipment); + + // 标准设备 上一步 下一步 +// connect(wdgtStandardList, &StandardListWidget::switchToReSelectCheckProgram, this, &CalibrationForm::forwardToReSelectCheckProgram); +// connect(wdgtStandardList, &StandardListWidget::switchToNextWidget, this, &CalibrationForm::nextToConnectionState); + + // 查看连接状态 +// connect(wdgtConnectState, &ConnectStateWidget::switchToReSelectStandardEqpt, this, &CalibrationForm::forwardToReSelectTaskEquipment); +// connect(wdgtConnectState, &ConnectStateWidget::startAutoCalibration, this, &CalibrationForm::nextToAutoCalibration); +} + +void CalibrationMainForm::nextToConfiguration() +{ + ui->wdgtCalMain->setCurrentWidget(wdgtConf); +} diff --git a/calibration/CalibrationMainForm.h b/calibration/CalibrationMainForm.h index 7d75014..e4bc44c 100644 --- a/calibration/CalibrationMainForm.h +++ b/calibration/CalibrationMainForm.h @@ -3,6 +3,10 @@ #include +#include "dao/service/TaskService.h" +#include "calibration/TaskListWidget.h" +#include "calibration/ConfigurationWidget.h" + namespace Ui { class CalibrationMainForm; } @@ -15,8 +19,38 @@ explicit CalibrationMainForm(QWidget *parent = nullptr); ~CalibrationMainForm(); + QMap & getSelectedTask(); + QStringList getVerificationItemCatIds(); + void setVerificationItemCatIds(QStringList itemCatIds); + + // 选定的检定程序(单选) +// CheckProgramDto selectedCheckProgram; + + // 选定的标准设备清单 +// QMap selectedStdEquipment; + +protected: + void showEvent(QShowEvent * event) override; + + private: Ui::CalibrationMainForm *ui; + + TaskListWidget * wdgtTask; + ConfigurationWidget * wdgtConf; + + // 选择的任务清单(待检设备清单) + QMap selectedTask; + + // 所选待检设备对应的检定项分类 + QStringList verificationItemCatIds; + + void initFormWidgets(); + void bindSignalAndHandlers(); + +private slots: + // 待检设备已选择完毕 + void nextToConfiguration(); }; #endif // CALIBRATIONMAINFORM_H diff --git a/QPagedTable/QPagedTable.cpp b/QPagedTable/QPagedTable.cpp index 1bb4af0..1ca1322 100644 --- a/QPagedTable/QPagedTable.cpp +++ b/QPagedTable/QPagedTable.cpp @@ -181,6 +181,10 @@ { ui->wdgtPageBtn->setProperty(name, value); } +void QPagedTable::setCheckBoxClass(QString className) +{ + checkProperty.insert("class", className); +} void QPagedTable::setHeaderHeight(int height) { @@ -217,6 +221,17 @@ return filterList; } +void QPagedTable::setRowSelected(int rowIdx, bool selected) +{ + if (multiCheck != MultiCheckType::NONE) { + QCheckBox *checkBox = ui->table->cellWidget(rowIdx, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->setCheckState(selected ? Qt::CheckState::Checked : Qt::CheckState::Unchecked); + } + } +} + QWidget * QPagedTable::buildNewCheckWidget() { QWidget* activeWidget = new QWidget(ui->table); @@ -225,6 +240,7 @@ QCheckBox* check = new QCheckBox(activeWidget); check->setMinimumSize(25, 25); check->setMaximumSize(25, 25); + check->setProperty("class", checkProperty.value("class")); activelayout->addWidget(check, 0, 0); if (multiCheck == MultiCheckType::RADIO) { @@ -241,6 +257,7 @@ QRadioButton* radio = new QRadioButton(activeWidget); radio->setMinimumSize(25, 25); radio->setMaximumSize(25, 25); + radio->setProperty("class", checkProperty.value("class")); activelayout->addWidget(radio, 0, 0); group->addButton(radio); @@ -336,3 +353,18 @@ page.currentPage = page.totalPage - 1; emit reloadTablePagedData(page.currentPage); } + +void QPagedTable::on_table_cellDoubleClicked(int row, int column) +{ + if (multiCheck != MultiCheckType::NONE && doubleClickSelectRow) { + QTableWidget * tableWidget = qobject_cast(sender()); + if (tableWidget) { + QCheckBox *checkBox = tableWidget->cellWidget(row, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->toggle(); + emit tableRowSelected(row, checkBox->isChecked()); + } + } + } +} diff --git a/QPagedTable/QPagedTable.h b/QPagedTable/QPagedTable.h index e561d01..aacb4aa 100644 --- a/QPagedTable/QPagedTable.h +++ b/QPagedTable/QPagedTable.h @@ -50,6 +50,7 @@ void setTotalCount(int totalCount); void setPageButtonIcons(QStringList iconUrls); void setPageButtonProperty(const char* name, QString value); + void setCheckBoxClass(QString className); void setHeaderHeight(int height); void setDataRowHeight(int height); @@ -62,6 +63,7 @@ QTableWidget * getTableInstance(); QList filterCells(QString colName, QString value); + void setRowSelected(int rowIdx, bool selected); private: Ui::QPagedTable *ui; @@ -92,6 +94,8 @@ int frameBorderSize = 0; int multiCheck = MultiCheckType::NONE; + QMap checkProperty; + bool doubleClickSelectRow = true; QButtonGroup * group; @@ -105,9 +109,12 @@ void on_btnPre_clicked(); void on_btnNext_clicked(); void on_btnLast_clicked(); + void on_table_cellDoubleClicked(int row, int column); + signals: void reloadTablePagedData(int currPage); void contextMenuActionTrigged(int actionIdx, int rowIdx, int colIdx); + void tableRowSelected(int rowIdx, bool selected); }; #endif // QPAGEDTABLE_H diff --git a/calibration/CalibrationMainForm.cpp b/calibration/CalibrationMainForm.cpp index 9b778a5..44d203a 100644 --- a/calibration/CalibrationMainForm.cpp +++ b/calibration/CalibrationMainForm.cpp @@ -6,9 +6,72 @@ ui(new Ui::CalibrationMainForm) { ui->setupUi(this); + + initFormWidgets(); + bindSignalAndHandlers(); } CalibrationMainForm::~CalibrationMainForm() { + qDebug() << "~CalibrationMainForm"; delete ui; } + +QMap & CalibrationMainForm::getSelectedTask() +{ + return selectedTask; +} +QStringList CalibrationMainForm::getVerificationItemCatIds() +{ + return verificationItemCatIds; +} +void CalibrationMainForm::setVerificationItemCatIds(QStringList itemCatIds) +{ + verificationItemCatIds = itemCatIds; +} + +void CalibrationMainForm::showEvent(QShowEvent * event) +{ + selectedTask.clear(); + verificationItemCatIds.clear(); + + ui->wdgtCalMain->setCurrentIndex(0); +} + +void CalibrationMainForm::initFormWidgets() +{ + wdgtTask = new TaskListWidget(this); + wdgtConf = new ConfigurationWidget(this); +// wdgtStandardList = new StandardListWidget(this); +// wdgtConnectState = new ConnectStateWidget(this); + + ui->wdgtCalMain->addWidget(wdgtTask); + ui->wdgtCalMain->addWidget(wdgtConf); +// ui->wdgtContent->addWidget(wdgtStandardList); +// ui->wdgtContent->addWidget(wdgtConnectState); + + ui->wdgtCalMain->setCurrentIndex(0); +} + +void CalibrationMainForm::bindSignalAndHandlers() +{ + // 待检设备清单 下一步 切换到 配置检定项和流程 + connect(wdgtTask, &TaskListWidget::taskEquipmentSelected, this, &CalibrationMainForm::nextToConfiguration); + + // 检定程序 上一步 下一步 +// connect(wdgtCheckProgram, &CheckProgramWidget::switchToReSelectTaskEquipment, this, &CalibrationForm::forwardToReSelectTaskEquipment); +// connect(wdgtCheckProgram, &CheckProgramWidget::switchToNextWidget, this, &CalibrationForm::nextToSelectStandardEquipment); + + // 标准设备 上一步 下一步 +// connect(wdgtStandardList, &StandardListWidget::switchToReSelectCheckProgram, this, &CalibrationForm::forwardToReSelectCheckProgram); +// connect(wdgtStandardList, &StandardListWidget::switchToNextWidget, this, &CalibrationForm::nextToConnectionState); + + // 查看连接状态 +// connect(wdgtConnectState, &ConnectStateWidget::switchToReSelectStandardEqpt, this, &CalibrationForm::forwardToReSelectTaskEquipment); +// connect(wdgtConnectState, &ConnectStateWidget::startAutoCalibration, this, &CalibrationForm::nextToAutoCalibration); +} + +void CalibrationMainForm::nextToConfiguration() +{ + ui->wdgtCalMain->setCurrentWidget(wdgtConf); +} diff --git a/calibration/CalibrationMainForm.h b/calibration/CalibrationMainForm.h index 7d75014..e4bc44c 100644 --- a/calibration/CalibrationMainForm.h +++ b/calibration/CalibrationMainForm.h @@ -3,6 +3,10 @@ #include +#include "dao/service/TaskService.h" +#include "calibration/TaskListWidget.h" +#include "calibration/ConfigurationWidget.h" + namespace Ui { class CalibrationMainForm; } @@ -15,8 +19,38 @@ explicit CalibrationMainForm(QWidget *parent = nullptr); ~CalibrationMainForm(); + QMap & getSelectedTask(); + QStringList getVerificationItemCatIds(); + void setVerificationItemCatIds(QStringList itemCatIds); + + // 选定的检定程序(单选) +// CheckProgramDto selectedCheckProgram; + + // 选定的标准设备清单 +// QMap selectedStdEquipment; + +protected: + void showEvent(QShowEvent * event) override; + + private: Ui::CalibrationMainForm *ui; + + TaskListWidget * wdgtTask; + ConfigurationWidget * wdgtConf; + + // 选择的任务清单(待检设备清单) + QMap selectedTask; + + // 所选待检设备对应的检定项分类 + QStringList verificationItemCatIds; + + void initFormWidgets(); + void bindSignalAndHandlers(); + +private slots: + // 待检设备已选择完毕 + void nextToConfiguration(); }; #endif // CALIBRATIONMAINFORM_H diff --git a/calibration/CalibrationMainForm.ui b/calibration/CalibrationMainForm.ui index 9b5a9c2..5479af5 100644 --- a/calibration/CalibrationMainForm.ui +++ b/calibration/CalibrationMainForm.ui @@ -1,9 +1,7 @@ + - - - CalibrationMainForm - + 0 @@ -15,7 +13,27 @@ Form + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + - + diff --git a/QPagedTable/QPagedTable.cpp b/QPagedTable/QPagedTable.cpp index 1bb4af0..1ca1322 100644 --- a/QPagedTable/QPagedTable.cpp +++ b/QPagedTable/QPagedTable.cpp @@ -181,6 +181,10 @@ { ui->wdgtPageBtn->setProperty(name, value); } +void QPagedTable::setCheckBoxClass(QString className) +{ + checkProperty.insert("class", className); +} void QPagedTable::setHeaderHeight(int height) { @@ -217,6 +221,17 @@ return filterList; } +void QPagedTable::setRowSelected(int rowIdx, bool selected) +{ + if (multiCheck != MultiCheckType::NONE) { + QCheckBox *checkBox = ui->table->cellWidget(rowIdx, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->setCheckState(selected ? Qt::CheckState::Checked : Qt::CheckState::Unchecked); + } + } +} + QWidget * QPagedTable::buildNewCheckWidget() { QWidget* activeWidget = new QWidget(ui->table); @@ -225,6 +240,7 @@ QCheckBox* check = new QCheckBox(activeWidget); check->setMinimumSize(25, 25); check->setMaximumSize(25, 25); + check->setProperty("class", checkProperty.value("class")); activelayout->addWidget(check, 0, 0); if (multiCheck == MultiCheckType::RADIO) { @@ -241,6 +257,7 @@ QRadioButton* radio = new QRadioButton(activeWidget); radio->setMinimumSize(25, 25); radio->setMaximumSize(25, 25); + radio->setProperty("class", checkProperty.value("class")); activelayout->addWidget(radio, 0, 0); group->addButton(radio); @@ -336,3 +353,18 @@ page.currentPage = page.totalPage - 1; emit reloadTablePagedData(page.currentPage); } + +void QPagedTable::on_table_cellDoubleClicked(int row, int column) +{ + if (multiCheck != MultiCheckType::NONE && doubleClickSelectRow) { + QTableWidget * tableWidget = qobject_cast(sender()); + if (tableWidget) { + QCheckBox *checkBox = tableWidget->cellWidget(row, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->toggle(); + emit tableRowSelected(row, checkBox->isChecked()); + } + } + } +} diff --git a/QPagedTable/QPagedTable.h b/QPagedTable/QPagedTable.h index e561d01..aacb4aa 100644 --- a/QPagedTable/QPagedTable.h +++ b/QPagedTable/QPagedTable.h @@ -50,6 +50,7 @@ void setTotalCount(int totalCount); void setPageButtonIcons(QStringList iconUrls); void setPageButtonProperty(const char* name, QString value); + void setCheckBoxClass(QString className); void setHeaderHeight(int height); void setDataRowHeight(int height); @@ -62,6 +63,7 @@ QTableWidget * getTableInstance(); QList filterCells(QString colName, QString value); + void setRowSelected(int rowIdx, bool selected); private: Ui::QPagedTable *ui; @@ -92,6 +94,8 @@ int frameBorderSize = 0; int multiCheck = MultiCheckType::NONE; + QMap checkProperty; + bool doubleClickSelectRow = true; QButtonGroup * group; @@ -105,9 +109,12 @@ void on_btnPre_clicked(); void on_btnNext_clicked(); void on_btnLast_clicked(); + void on_table_cellDoubleClicked(int row, int column); + signals: void reloadTablePagedData(int currPage); void contextMenuActionTrigged(int actionIdx, int rowIdx, int colIdx); + void tableRowSelected(int rowIdx, bool selected); }; #endif // QPAGEDTABLE_H diff --git a/calibration/CalibrationMainForm.cpp b/calibration/CalibrationMainForm.cpp index 9b778a5..44d203a 100644 --- a/calibration/CalibrationMainForm.cpp +++ b/calibration/CalibrationMainForm.cpp @@ -6,9 +6,72 @@ ui(new Ui::CalibrationMainForm) { ui->setupUi(this); + + initFormWidgets(); + bindSignalAndHandlers(); } CalibrationMainForm::~CalibrationMainForm() { + qDebug() << "~CalibrationMainForm"; delete ui; } + +QMap & CalibrationMainForm::getSelectedTask() +{ + return selectedTask; +} +QStringList CalibrationMainForm::getVerificationItemCatIds() +{ + return verificationItemCatIds; +} +void CalibrationMainForm::setVerificationItemCatIds(QStringList itemCatIds) +{ + verificationItemCatIds = itemCatIds; +} + +void CalibrationMainForm::showEvent(QShowEvent * event) +{ + selectedTask.clear(); + verificationItemCatIds.clear(); + + ui->wdgtCalMain->setCurrentIndex(0); +} + +void CalibrationMainForm::initFormWidgets() +{ + wdgtTask = new TaskListWidget(this); + wdgtConf = new ConfigurationWidget(this); +// wdgtStandardList = new StandardListWidget(this); +// wdgtConnectState = new ConnectStateWidget(this); + + ui->wdgtCalMain->addWidget(wdgtTask); + ui->wdgtCalMain->addWidget(wdgtConf); +// ui->wdgtContent->addWidget(wdgtStandardList); +// ui->wdgtContent->addWidget(wdgtConnectState); + + ui->wdgtCalMain->setCurrentIndex(0); +} + +void CalibrationMainForm::bindSignalAndHandlers() +{ + // 待检设备清单 下一步 切换到 配置检定项和流程 + connect(wdgtTask, &TaskListWidget::taskEquipmentSelected, this, &CalibrationMainForm::nextToConfiguration); + + // 检定程序 上一步 下一步 +// connect(wdgtCheckProgram, &CheckProgramWidget::switchToReSelectTaskEquipment, this, &CalibrationForm::forwardToReSelectTaskEquipment); +// connect(wdgtCheckProgram, &CheckProgramWidget::switchToNextWidget, this, &CalibrationForm::nextToSelectStandardEquipment); + + // 标准设备 上一步 下一步 +// connect(wdgtStandardList, &StandardListWidget::switchToReSelectCheckProgram, this, &CalibrationForm::forwardToReSelectCheckProgram); +// connect(wdgtStandardList, &StandardListWidget::switchToNextWidget, this, &CalibrationForm::nextToConnectionState); + + // 查看连接状态 +// connect(wdgtConnectState, &ConnectStateWidget::switchToReSelectStandardEqpt, this, &CalibrationForm::forwardToReSelectTaskEquipment); +// connect(wdgtConnectState, &ConnectStateWidget::startAutoCalibration, this, &CalibrationForm::nextToAutoCalibration); +} + +void CalibrationMainForm::nextToConfiguration() +{ + ui->wdgtCalMain->setCurrentWidget(wdgtConf); +} diff --git a/calibration/CalibrationMainForm.h b/calibration/CalibrationMainForm.h index 7d75014..e4bc44c 100644 --- a/calibration/CalibrationMainForm.h +++ b/calibration/CalibrationMainForm.h @@ -3,6 +3,10 @@ #include +#include "dao/service/TaskService.h" +#include "calibration/TaskListWidget.h" +#include "calibration/ConfigurationWidget.h" + namespace Ui { class CalibrationMainForm; } @@ -15,8 +19,38 @@ explicit CalibrationMainForm(QWidget *parent = nullptr); ~CalibrationMainForm(); + QMap & getSelectedTask(); + QStringList getVerificationItemCatIds(); + void setVerificationItemCatIds(QStringList itemCatIds); + + // 选定的检定程序(单选) +// CheckProgramDto selectedCheckProgram; + + // 选定的标准设备清单 +// QMap selectedStdEquipment; + +protected: + void showEvent(QShowEvent * event) override; + + private: Ui::CalibrationMainForm *ui; + + TaskListWidget * wdgtTask; + ConfigurationWidget * wdgtConf; + + // 选择的任务清单(待检设备清单) + QMap selectedTask; + + // 所选待检设备对应的检定项分类 + QStringList verificationItemCatIds; + + void initFormWidgets(); + void bindSignalAndHandlers(); + +private slots: + // 待检设备已选择完毕 + void nextToConfiguration(); }; #endif // CALIBRATIONMAINFORM_H diff --git a/calibration/CalibrationMainForm.ui b/calibration/CalibrationMainForm.ui index 9b5a9c2..5479af5 100644 --- a/calibration/CalibrationMainForm.ui +++ b/calibration/CalibrationMainForm.ui @@ -1,9 +1,7 @@ + - - - CalibrationMainForm - + 0 @@ -15,7 +13,27 @@ Form + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + - + diff --git a/calibration/ConfigurationWidget.cpp b/calibration/ConfigurationWidget.cpp new file mode 100644 index 0000000..5e47dc2 --- /dev/null +++ b/calibration/ConfigurationWidget.cpp @@ -0,0 +1,14 @@ +#include "ConfigurationWidget.h" +#include "ui_ConfigurationWidget.h" + +ConfigurationWidget::ConfigurationWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::ConfigurationWidget) +{ + ui->setupUi(this); +} + +ConfigurationWidget::~ConfigurationWidget() +{ + delete ui; +} diff --git a/QPagedTable/QPagedTable.cpp b/QPagedTable/QPagedTable.cpp index 1bb4af0..1ca1322 100644 --- a/QPagedTable/QPagedTable.cpp +++ b/QPagedTable/QPagedTable.cpp @@ -181,6 +181,10 @@ { ui->wdgtPageBtn->setProperty(name, value); } +void QPagedTable::setCheckBoxClass(QString className) +{ + checkProperty.insert("class", className); +} void QPagedTable::setHeaderHeight(int height) { @@ -217,6 +221,17 @@ return filterList; } +void QPagedTable::setRowSelected(int rowIdx, bool selected) +{ + if (multiCheck != MultiCheckType::NONE) { + QCheckBox *checkBox = ui->table->cellWidget(rowIdx, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->setCheckState(selected ? Qt::CheckState::Checked : Qt::CheckState::Unchecked); + } + } +} + QWidget * QPagedTable::buildNewCheckWidget() { QWidget* activeWidget = new QWidget(ui->table); @@ -225,6 +240,7 @@ QCheckBox* check = new QCheckBox(activeWidget); check->setMinimumSize(25, 25); check->setMaximumSize(25, 25); + check->setProperty("class", checkProperty.value("class")); activelayout->addWidget(check, 0, 0); if (multiCheck == MultiCheckType::RADIO) { @@ -241,6 +257,7 @@ QRadioButton* radio = new QRadioButton(activeWidget); radio->setMinimumSize(25, 25); radio->setMaximumSize(25, 25); + radio->setProperty("class", checkProperty.value("class")); activelayout->addWidget(radio, 0, 0); group->addButton(radio); @@ -336,3 +353,18 @@ page.currentPage = page.totalPage - 1; emit reloadTablePagedData(page.currentPage); } + +void QPagedTable::on_table_cellDoubleClicked(int row, int column) +{ + if (multiCheck != MultiCheckType::NONE && doubleClickSelectRow) { + QTableWidget * tableWidget = qobject_cast(sender()); + if (tableWidget) { + QCheckBox *checkBox = tableWidget->cellWidget(row, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->toggle(); + emit tableRowSelected(row, checkBox->isChecked()); + } + } + } +} diff --git a/QPagedTable/QPagedTable.h b/QPagedTable/QPagedTable.h index e561d01..aacb4aa 100644 --- a/QPagedTable/QPagedTable.h +++ b/QPagedTable/QPagedTable.h @@ -50,6 +50,7 @@ void setTotalCount(int totalCount); void setPageButtonIcons(QStringList iconUrls); void setPageButtonProperty(const char* name, QString value); + void setCheckBoxClass(QString className); void setHeaderHeight(int height); void setDataRowHeight(int height); @@ -62,6 +63,7 @@ QTableWidget * getTableInstance(); QList filterCells(QString colName, QString value); + void setRowSelected(int rowIdx, bool selected); private: Ui::QPagedTable *ui; @@ -92,6 +94,8 @@ int frameBorderSize = 0; int multiCheck = MultiCheckType::NONE; + QMap checkProperty; + bool doubleClickSelectRow = true; QButtonGroup * group; @@ -105,9 +109,12 @@ void on_btnPre_clicked(); void on_btnNext_clicked(); void on_btnLast_clicked(); + void on_table_cellDoubleClicked(int row, int column); + signals: void reloadTablePagedData(int currPage); void contextMenuActionTrigged(int actionIdx, int rowIdx, int colIdx); + void tableRowSelected(int rowIdx, bool selected); }; #endif // QPAGEDTABLE_H diff --git a/calibration/CalibrationMainForm.cpp b/calibration/CalibrationMainForm.cpp index 9b778a5..44d203a 100644 --- a/calibration/CalibrationMainForm.cpp +++ b/calibration/CalibrationMainForm.cpp @@ -6,9 +6,72 @@ ui(new Ui::CalibrationMainForm) { ui->setupUi(this); + + initFormWidgets(); + bindSignalAndHandlers(); } CalibrationMainForm::~CalibrationMainForm() { + qDebug() << "~CalibrationMainForm"; delete ui; } + +QMap & CalibrationMainForm::getSelectedTask() +{ + return selectedTask; +} +QStringList CalibrationMainForm::getVerificationItemCatIds() +{ + return verificationItemCatIds; +} +void CalibrationMainForm::setVerificationItemCatIds(QStringList itemCatIds) +{ + verificationItemCatIds = itemCatIds; +} + +void CalibrationMainForm::showEvent(QShowEvent * event) +{ + selectedTask.clear(); + verificationItemCatIds.clear(); + + ui->wdgtCalMain->setCurrentIndex(0); +} + +void CalibrationMainForm::initFormWidgets() +{ + wdgtTask = new TaskListWidget(this); + wdgtConf = new ConfigurationWidget(this); +// wdgtStandardList = new StandardListWidget(this); +// wdgtConnectState = new ConnectStateWidget(this); + + ui->wdgtCalMain->addWidget(wdgtTask); + ui->wdgtCalMain->addWidget(wdgtConf); +// ui->wdgtContent->addWidget(wdgtStandardList); +// ui->wdgtContent->addWidget(wdgtConnectState); + + ui->wdgtCalMain->setCurrentIndex(0); +} + +void CalibrationMainForm::bindSignalAndHandlers() +{ + // 待检设备清单 下一步 切换到 配置检定项和流程 + connect(wdgtTask, &TaskListWidget::taskEquipmentSelected, this, &CalibrationMainForm::nextToConfiguration); + + // 检定程序 上一步 下一步 +// connect(wdgtCheckProgram, &CheckProgramWidget::switchToReSelectTaskEquipment, this, &CalibrationForm::forwardToReSelectTaskEquipment); +// connect(wdgtCheckProgram, &CheckProgramWidget::switchToNextWidget, this, &CalibrationForm::nextToSelectStandardEquipment); + + // 标准设备 上一步 下一步 +// connect(wdgtStandardList, &StandardListWidget::switchToReSelectCheckProgram, this, &CalibrationForm::forwardToReSelectCheckProgram); +// connect(wdgtStandardList, &StandardListWidget::switchToNextWidget, this, &CalibrationForm::nextToConnectionState); + + // 查看连接状态 +// connect(wdgtConnectState, &ConnectStateWidget::switchToReSelectStandardEqpt, this, &CalibrationForm::forwardToReSelectTaskEquipment); +// connect(wdgtConnectState, &ConnectStateWidget::startAutoCalibration, this, &CalibrationForm::nextToAutoCalibration); +} + +void CalibrationMainForm::nextToConfiguration() +{ + ui->wdgtCalMain->setCurrentWidget(wdgtConf); +} diff --git a/calibration/CalibrationMainForm.h b/calibration/CalibrationMainForm.h index 7d75014..e4bc44c 100644 --- a/calibration/CalibrationMainForm.h +++ b/calibration/CalibrationMainForm.h @@ -3,6 +3,10 @@ #include +#include "dao/service/TaskService.h" +#include "calibration/TaskListWidget.h" +#include "calibration/ConfigurationWidget.h" + namespace Ui { class CalibrationMainForm; } @@ -15,8 +19,38 @@ explicit CalibrationMainForm(QWidget *parent = nullptr); ~CalibrationMainForm(); + QMap & getSelectedTask(); + QStringList getVerificationItemCatIds(); + void setVerificationItemCatIds(QStringList itemCatIds); + + // 选定的检定程序(单选) +// CheckProgramDto selectedCheckProgram; + + // 选定的标准设备清单 +// QMap selectedStdEquipment; + +protected: + void showEvent(QShowEvent * event) override; + + private: Ui::CalibrationMainForm *ui; + + TaskListWidget * wdgtTask; + ConfigurationWidget * wdgtConf; + + // 选择的任务清单(待检设备清单) + QMap selectedTask; + + // 所选待检设备对应的检定项分类 + QStringList verificationItemCatIds; + + void initFormWidgets(); + void bindSignalAndHandlers(); + +private slots: + // 待检设备已选择完毕 + void nextToConfiguration(); }; #endif // CALIBRATIONMAINFORM_H diff --git a/calibration/CalibrationMainForm.ui b/calibration/CalibrationMainForm.ui index 9b5a9c2..5479af5 100644 --- a/calibration/CalibrationMainForm.ui +++ b/calibration/CalibrationMainForm.ui @@ -1,9 +1,7 @@ + - - - CalibrationMainForm - + 0 @@ -15,7 +13,27 @@ Form + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + - + diff --git a/calibration/ConfigurationWidget.cpp b/calibration/ConfigurationWidget.cpp new file mode 100644 index 0000000..5e47dc2 --- /dev/null +++ b/calibration/ConfigurationWidget.cpp @@ -0,0 +1,14 @@ +#include "ConfigurationWidget.h" +#include "ui_ConfigurationWidget.h" + +ConfigurationWidget::ConfigurationWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::ConfigurationWidget) +{ + ui->setupUi(this); +} + +ConfigurationWidget::~ConfigurationWidget() +{ + delete ui; +} diff --git a/calibration/ConfigurationWidget.h b/calibration/ConfigurationWidget.h new file mode 100644 index 0000000..b3321c1 --- /dev/null +++ b/calibration/ConfigurationWidget.h @@ -0,0 +1,22 @@ +#ifndef CONFIGURATIONWIDGET_H +#define CONFIGURATIONWIDGET_H + +#include + +namespace Ui { +class ConfigurationWidget; +} + +class ConfigurationWidget : public QWidget +{ + Q_OBJECT + +public: + explicit ConfigurationWidget(QWidget *parent = nullptr); + ~ConfigurationWidget(); + +private: + Ui::ConfigurationWidget *ui; +}; + +#endif // CONFIGURATIONWIDGET_H diff --git a/QPagedTable/QPagedTable.cpp b/QPagedTable/QPagedTable.cpp index 1bb4af0..1ca1322 100644 --- a/QPagedTable/QPagedTable.cpp +++ b/QPagedTable/QPagedTable.cpp @@ -181,6 +181,10 @@ { ui->wdgtPageBtn->setProperty(name, value); } +void QPagedTable::setCheckBoxClass(QString className) +{ + checkProperty.insert("class", className); +} void QPagedTable::setHeaderHeight(int height) { @@ -217,6 +221,17 @@ return filterList; } +void QPagedTable::setRowSelected(int rowIdx, bool selected) +{ + if (multiCheck != MultiCheckType::NONE) { + QCheckBox *checkBox = ui->table->cellWidget(rowIdx, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->setCheckState(selected ? Qt::CheckState::Checked : Qt::CheckState::Unchecked); + } + } +} + QWidget * QPagedTable::buildNewCheckWidget() { QWidget* activeWidget = new QWidget(ui->table); @@ -225,6 +240,7 @@ QCheckBox* check = new QCheckBox(activeWidget); check->setMinimumSize(25, 25); check->setMaximumSize(25, 25); + check->setProperty("class", checkProperty.value("class")); activelayout->addWidget(check, 0, 0); if (multiCheck == MultiCheckType::RADIO) { @@ -241,6 +257,7 @@ QRadioButton* radio = new QRadioButton(activeWidget); radio->setMinimumSize(25, 25); radio->setMaximumSize(25, 25); + radio->setProperty("class", checkProperty.value("class")); activelayout->addWidget(radio, 0, 0); group->addButton(radio); @@ -336,3 +353,18 @@ page.currentPage = page.totalPage - 1; emit reloadTablePagedData(page.currentPage); } + +void QPagedTable::on_table_cellDoubleClicked(int row, int column) +{ + if (multiCheck != MultiCheckType::NONE && doubleClickSelectRow) { + QTableWidget * tableWidget = qobject_cast(sender()); + if (tableWidget) { + QCheckBox *checkBox = tableWidget->cellWidget(row, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->toggle(); + emit tableRowSelected(row, checkBox->isChecked()); + } + } + } +} diff --git a/QPagedTable/QPagedTable.h b/QPagedTable/QPagedTable.h index e561d01..aacb4aa 100644 --- a/QPagedTable/QPagedTable.h +++ b/QPagedTable/QPagedTable.h @@ -50,6 +50,7 @@ void setTotalCount(int totalCount); void setPageButtonIcons(QStringList iconUrls); void setPageButtonProperty(const char* name, QString value); + void setCheckBoxClass(QString className); void setHeaderHeight(int height); void setDataRowHeight(int height); @@ -62,6 +63,7 @@ QTableWidget * getTableInstance(); QList filterCells(QString colName, QString value); + void setRowSelected(int rowIdx, bool selected); private: Ui::QPagedTable *ui; @@ -92,6 +94,8 @@ int frameBorderSize = 0; int multiCheck = MultiCheckType::NONE; + QMap checkProperty; + bool doubleClickSelectRow = true; QButtonGroup * group; @@ -105,9 +109,12 @@ void on_btnPre_clicked(); void on_btnNext_clicked(); void on_btnLast_clicked(); + void on_table_cellDoubleClicked(int row, int column); + signals: void reloadTablePagedData(int currPage); void contextMenuActionTrigged(int actionIdx, int rowIdx, int colIdx); + void tableRowSelected(int rowIdx, bool selected); }; #endif // QPAGEDTABLE_H diff --git a/calibration/CalibrationMainForm.cpp b/calibration/CalibrationMainForm.cpp index 9b778a5..44d203a 100644 --- a/calibration/CalibrationMainForm.cpp +++ b/calibration/CalibrationMainForm.cpp @@ -6,9 +6,72 @@ ui(new Ui::CalibrationMainForm) { ui->setupUi(this); + + initFormWidgets(); + bindSignalAndHandlers(); } CalibrationMainForm::~CalibrationMainForm() { + qDebug() << "~CalibrationMainForm"; delete ui; } + +QMap & CalibrationMainForm::getSelectedTask() +{ + return selectedTask; +} +QStringList CalibrationMainForm::getVerificationItemCatIds() +{ + return verificationItemCatIds; +} +void CalibrationMainForm::setVerificationItemCatIds(QStringList itemCatIds) +{ + verificationItemCatIds = itemCatIds; +} + +void CalibrationMainForm::showEvent(QShowEvent * event) +{ + selectedTask.clear(); + verificationItemCatIds.clear(); + + ui->wdgtCalMain->setCurrentIndex(0); +} + +void CalibrationMainForm::initFormWidgets() +{ + wdgtTask = new TaskListWidget(this); + wdgtConf = new ConfigurationWidget(this); +// wdgtStandardList = new StandardListWidget(this); +// wdgtConnectState = new ConnectStateWidget(this); + + ui->wdgtCalMain->addWidget(wdgtTask); + ui->wdgtCalMain->addWidget(wdgtConf); +// ui->wdgtContent->addWidget(wdgtStandardList); +// ui->wdgtContent->addWidget(wdgtConnectState); + + ui->wdgtCalMain->setCurrentIndex(0); +} + +void CalibrationMainForm::bindSignalAndHandlers() +{ + // 待检设备清单 下一步 切换到 配置检定项和流程 + connect(wdgtTask, &TaskListWidget::taskEquipmentSelected, this, &CalibrationMainForm::nextToConfiguration); + + // 检定程序 上一步 下一步 +// connect(wdgtCheckProgram, &CheckProgramWidget::switchToReSelectTaskEquipment, this, &CalibrationForm::forwardToReSelectTaskEquipment); +// connect(wdgtCheckProgram, &CheckProgramWidget::switchToNextWidget, this, &CalibrationForm::nextToSelectStandardEquipment); + + // 标准设备 上一步 下一步 +// connect(wdgtStandardList, &StandardListWidget::switchToReSelectCheckProgram, this, &CalibrationForm::forwardToReSelectCheckProgram); +// connect(wdgtStandardList, &StandardListWidget::switchToNextWidget, this, &CalibrationForm::nextToConnectionState); + + // 查看连接状态 +// connect(wdgtConnectState, &ConnectStateWidget::switchToReSelectStandardEqpt, this, &CalibrationForm::forwardToReSelectTaskEquipment); +// connect(wdgtConnectState, &ConnectStateWidget::startAutoCalibration, this, &CalibrationForm::nextToAutoCalibration); +} + +void CalibrationMainForm::nextToConfiguration() +{ + ui->wdgtCalMain->setCurrentWidget(wdgtConf); +} diff --git a/calibration/CalibrationMainForm.h b/calibration/CalibrationMainForm.h index 7d75014..e4bc44c 100644 --- a/calibration/CalibrationMainForm.h +++ b/calibration/CalibrationMainForm.h @@ -3,6 +3,10 @@ #include +#include "dao/service/TaskService.h" +#include "calibration/TaskListWidget.h" +#include "calibration/ConfigurationWidget.h" + namespace Ui { class CalibrationMainForm; } @@ -15,8 +19,38 @@ explicit CalibrationMainForm(QWidget *parent = nullptr); ~CalibrationMainForm(); + QMap & getSelectedTask(); + QStringList getVerificationItemCatIds(); + void setVerificationItemCatIds(QStringList itemCatIds); + + // 选定的检定程序(单选) +// CheckProgramDto selectedCheckProgram; + + // 选定的标准设备清单 +// QMap selectedStdEquipment; + +protected: + void showEvent(QShowEvent * event) override; + + private: Ui::CalibrationMainForm *ui; + + TaskListWidget * wdgtTask; + ConfigurationWidget * wdgtConf; + + // 选择的任务清单(待检设备清单) + QMap selectedTask; + + // 所选待检设备对应的检定项分类 + QStringList verificationItemCatIds; + + void initFormWidgets(); + void bindSignalAndHandlers(); + +private slots: + // 待检设备已选择完毕 + void nextToConfiguration(); }; #endif // CALIBRATIONMAINFORM_H diff --git a/calibration/CalibrationMainForm.ui b/calibration/CalibrationMainForm.ui index 9b5a9c2..5479af5 100644 --- a/calibration/CalibrationMainForm.ui +++ b/calibration/CalibrationMainForm.ui @@ -1,9 +1,7 @@ + - - - CalibrationMainForm - + 0 @@ -15,7 +13,27 @@ Form + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + - + diff --git a/calibration/ConfigurationWidget.cpp b/calibration/ConfigurationWidget.cpp new file mode 100644 index 0000000..5e47dc2 --- /dev/null +++ b/calibration/ConfigurationWidget.cpp @@ -0,0 +1,14 @@ +#include "ConfigurationWidget.h" +#include "ui_ConfigurationWidget.h" + +ConfigurationWidget::ConfigurationWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::ConfigurationWidget) +{ + ui->setupUi(this); +} + +ConfigurationWidget::~ConfigurationWidget() +{ + delete ui; +} diff --git a/calibration/ConfigurationWidget.h b/calibration/ConfigurationWidget.h new file mode 100644 index 0000000..b3321c1 --- /dev/null +++ b/calibration/ConfigurationWidget.h @@ -0,0 +1,22 @@ +#ifndef CONFIGURATIONWIDGET_H +#define CONFIGURATIONWIDGET_H + +#include + +namespace Ui { +class ConfigurationWidget; +} + +class ConfigurationWidget : public QWidget +{ + Q_OBJECT + +public: + explicit ConfigurationWidget(QWidget *parent = nullptr); + ~ConfigurationWidget(); + +private: + Ui::ConfigurationWidget *ui; +}; + +#endif // CONFIGURATIONWIDGET_H diff --git a/calibration/ConfigurationWidget.ui b/calibration/ConfigurationWidget.ui new file mode 100644 index 0000000..a567bba --- /dev/null +++ b/calibration/ConfigurationWidget.ui @@ -0,0 +1,21 @@ + + + + + ConfigurationWidget + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + diff --git a/QPagedTable/QPagedTable.cpp b/QPagedTable/QPagedTable.cpp index 1bb4af0..1ca1322 100644 --- a/QPagedTable/QPagedTable.cpp +++ b/QPagedTable/QPagedTable.cpp @@ -181,6 +181,10 @@ { ui->wdgtPageBtn->setProperty(name, value); } +void QPagedTable::setCheckBoxClass(QString className) +{ + checkProperty.insert("class", className); +} void QPagedTable::setHeaderHeight(int height) { @@ -217,6 +221,17 @@ return filterList; } +void QPagedTable::setRowSelected(int rowIdx, bool selected) +{ + if (multiCheck != MultiCheckType::NONE) { + QCheckBox *checkBox = ui->table->cellWidget(rowIdx, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->setCheckState(selected ? Qt::CheckState::Checked : Qt::CheckState::Unchecked); + } + } +} + QWidget * QPagedTable::buildNewCheckWidget() { QWidget* activeWidget = new QWidget(ui->table); @@ -225,6 +240,7 @@ QCheckBox* check = new QCheckBox(activeWidget); check->setMinimumSize(25, 25); check->setMaximumSize(25, 25); + check->setProperty("class", checkProperty.value("class")); activelayout->addWidget(check, 0, 0); if (multiCheck == MultiCheckType::RADIO) { @@ -241,6 +257,7 @@ QRadioButton* radio = new QRadioButton(activeWidget); radio->setMinimumSize(25, 25); radio->setMaximumSize(25, 25); + radio->setProperty("class", checkProperty.value("class")); activelayout->addWidget(radio, 0, 0); group->addButton(radio); @@ -336,3 +353,18 @@ page.currentPage = page.totalPage - 1; emit reloadTablePagedData(page.currentPage); } + +void QPagedTable::on_table_cellDoubleClicked(int row, int column) +{ + if (multiCheck != MultiCheckType::NONE && doubleClickSelectRow) { + QTableWidget * tableWidget = qobject_cast(sender()); + if (tableWidget) { + QCheckBox *checkBox = tableWidget->cellWidget(row, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->toggle(); + emit tableRowSelected(row, checkBox->isChecked()); + } + } + } +} diff --git a/QPagedTable/QPagedTable.h b/QPagedTable/QPagedTable.h index e561d01..aacb4aa 100644 --- a/QPagedTable/QPagedTable.h +++ b/QPagedTable/QPagedTable.h @@ -50,6 +50,7 @@ void setTotalCount(int totalCount); void setPageButtonIcons(QStringList iconUrls); void setPageButtonProperty(const char* name, QString value); + void setCheckBoxClass(QString className); void setHeaderHeight(int height); void setDataRowHeight(int height); @@ -62,6 +63,7 @@ QTableWidget * getTableInstance(); QList filterCells(QString colName, QString value); + void setRowSelected(int rowIdx, bool selected); private: Ui::QPagedTable *ui; @@ -92,6 +94,8 @@ int frameBorderSize = 0; int multiCheck = MultiCheckType::NONE; + QMap checkProperty; + bool doubleClickSelectRow = true; QButtonGroup * group; @@ -105,9 +109,12 @@ void on_btnPre_clicked(); void on_btnNext_clicked(); void on_btnLast_clicked(); + void on_table_cellDoubleClicked(int row, int column); + signals: void reloadTablePagedData(int currPage); void contextMenuActionTrigged(int actionIdx, int rowIdx, int colIdx); + void tableRowSelected(int rowIdx, bool selected); }; #endif // QPAGEDTABLE_H diff --git a/calibration/CalibrationMainForm.cpp b/calibration/CalibrationMainForm.cpp index 9b778a5..44d203a 100644 --- a/calibration/CalibrationMainForm.cpp +++ b/calibration/CalibrationMainForm.cpp @@ -6,9 +6,72 @@ ui(new Ui::CalibrationMainForm) { ui->setupUi(this); + + initFormWidgets(); + bindSignalAndHandlers(); } CalibrationMainForm::~CalibrationMainForm() { + qDebug() << "~CalibrationMainForm"; delete ui; } + +QMap & CalibrationMainForm::getSelectedTask() +{ + return selectedTask; +} +QStringList CalibrationMainForm::getVerificationItemCatIds() +{ + return verificationItemCatIds; +} +void CalibrationMainForm::setVerificationItemCatIds(QStringList itemCatIds) +{ + verificationItemCatIds = itemCatIds; +} + +void CalibrationMainForm::showEvent(QShowEvent * event) +{ + selectedTask.clear(); + verificationItemCatIds.clear(); + + ui->wdgtCalMain->setCurrentIndex(0); +} + +void CalibrationMainForm::initFormWidgets() +{ + wdgtTask = new TaskListWidget(this); + wdgtConf = new ConfigurationWidget(this); +// wdgtStandardList = new StandardListWidget(this); +// wdgtConnectState = new ConnectStateWidget(this); + + ui->wdgtCalMain->addWidget(wdgtTask); + ui->wdgtCalMain->addWidget(wdgtConf); +// ui->wdgtContent->addWidget(wdgtStandardList); +// ui->wdgtContent->addWidget(wdgtConnectState); + + ui->wdgtCalMain->setCurrentIndex(0); +} + +void CalibrationMainForm::bindSignalAndHandlers() +{ + // 待检设备清单 下一步 切换到 配置检定项和流程 + connect(wdgtTask, &TaskListWidget::taskEquipmentSelected, this, &CalibrationMainForm::nextToConfiguration); + + // 检定程序 上一步 下一步 +// connect(wdgtCheckProgram, &CheckProgramWidget::switchToReSelectTaskEquipment, this, &CalibrationForm::forwardToReSelectTaskEquipment); +// connect(wdgtCheckProgram, &CheckProgramWidget::switchToNextWidget, this, &CalibrationForm::nextToSelectStandardEquipment); + + // 标准设备 上一步 下一步 +// connect(wdgtStandardList, &StandardListWidget::switchToReSelectCheckProgram, this, &CalibrationForm::forwardToReSelectCheckProgram); +// connect(wdgtStandardList, &StandardListWidget::switchToNextWidget, this, &CalibrationForm::nextToConnectionState); + + // 查看连接状态 +// connect(wdgtConnectState, &ConnectStateWidget::switchToReSelectStandardEqpt, this, &CalibrationForm::forwardToReSelectTaskEquipment); +// connect(wdgtConnectState, &ConnectStateWidget::startAutoCalibration, this, &CalibrationForm::nextToAutoCalibration); +} + +void CalibrationMainForm::nextToConfiguration() +{ + ui->wdgtCalMain->setCurrentWidget(wdgtConf); +} diff --git a/calibration/CalibrationMainForm.h b/calibration/CalibrationMainForm.h index 7d75014..e4bc44c 100644 --- a/calibration/CalibrationMainForm.h +++ b/calibration/CalibrationMainForm.h @@ -3,6 +3,10 @@ #include +#include "dao/service/TaskService.h" +#include "calibration/TaskListWidget.h" +#include "calibration/ConfigurationWidget.h" + namespace Ui { class CalibrationMainForm; } @@ -15,8 +19,38 @@ explicit CalibrationMainForm(QWidget *parent = nullptr); ~CalibrationMainForm(); + QMap & getSelectedTask(); + QStringList getVerificationItemCatIds(); + void setVerificationItemCatIds(QStringList itemCatIds); + + // 选定的检定程序(单选) +// CheckProgramDto selectedCheckProgram; + + // 选定的标准设备清单 +// QMap selectedStdEquipment; + +protected: + void showEvent(QShowEvent * event) override; + + private: Ui::CalibrationMainForm *ui; + + TaskListWidget * wdgtTask; + ConfigurationWidget * wdgtConf; + + // 选择的任务清单(待检设备清单) + QMap selectedTask; + + // 所选待检设备对应的检定项分类 + QStringList verificationItemCatIds; + + void initFormWidgets(); + void bindSignalAndHandlers(); + +private slots: + // 待检设备已选择完毕 + void nextToConfiguration(); }; #endif // CALIBRATIONMAINFORM_H diff --git a/calibration/CalibrationMainForm.ui b/calibration/CalibrationMainForm.ui index 9b5a9c2..5479af5 100644 --- a/calibration/CalibrationMainForm.ui +++ b/calibration/CalibrationMainForm.ui @@ -1,9 +1,7 @@ + - - - CalibrationMainForm - + 0 @@ -15,7 +13,27 @@ Form + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + - + diff --git a/calibration/ConfigurationWidget.cpp b/calibration/ConfigurationWidget.cpp new file mode 100644 index 0000000..5e47dc2 --- /dev/null +++ b/calibration/ConfigurationWidget.cpp @@ -0,0 +1,14 @@ +#include "ConfigurationWidget.h" +#include "ui_ConfigurationWidget.h" + +ConfigurationWidget::ConfigurationWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::ConfigurationWidget) +{ + ui->setupUi(this); +} + +ConfigurationWidget::~ConfigurationWidget() +{ + delete ui; +} diff --git a/calibration/ConfigurationWidget.h b/calibration/ConfigurationWidget.h new file mode 100644 index 0000000..b3321c1 --- /dev/null +++ b/calibration/ConfigurationWidget.h @@ -0,0 +1,22 @@ +#ifndef CONFIGURATIONWIDGET_H +#define CONFIGURATIONWIDGET_H + +#include + +namespace Ui { +class ConfigurationWidget; +} + +class ConfigurationWidget : public QWidget +{ + Q_OBJECT + +public: + explicit ConfigurationWidget(QWidget *parent = nullptr); + ~ConfigurationWidget(); + +private: + Ui::ConfigurationWidget *ui; +}; + +#endif // CONFIGURATIONWIDGET_H diff --git a/calibration/ConfigurationWidget.ui b/calibration/ConfigurationWidget.ui new file mode 100644 index 0000000..a567bba --- /dev/null +++ b/calibration/ConfigurationWidget.ui @@ -0,0 +1,21 @@ + + + + + ConfigurationWidget + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + diff --git a/calibration/TaskListWidget.cpp b/calibration/TaskListWidget.cpp new file mode 100644 index 0000000..31f16c7 --- /dev/null +++ b/calibration/TaskListWidget.cpp @@ -0,0 +1,202 @@ +#include "TaskListWidget.h" +#include "ui_TaskListWidget.h" + +#include "calibration/CalibrationMainForm.h" + +TaskListWidget::TaskListWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::TaskListWidget) +{ + ui->setupUi(this); + parentForm = (CalibrationMainForm *)parent; + + initForm(); + initFormTable(); + + // 绑定信号与槽 + connect(ui->tableTaskTBDList, &QPagedTable::reloadTablePagedData, this, &TaskListWidget::getTaskToBeDoneList); +} + +TaskListWidget::~TaskListWidget() +{ + qDebug() << "~TaskListWidget"; + delete ui; +} + +void TaskListWidget::showEvent(QShowEvent * event) +{ + ui->tableTaskTBDList->adjustTableWidth(); + getTaskToBeDoneList(0); +} + +void TaskListWidget::resizeEvent(QResizeEvent * event) +{ + ui->tableTaskTBDList->adjustTableWidth(); +} + +void TaskListWidget::initForm() +{ + // 加载样式表 + QString qssStyle = QssFileUtils::loadQssFileContent(":/qss/infoTable.css"); + if (qssStyle.isEmpty() == false) { + this->setStyleSheet(qssStyle); // 仅本窗口生效 + } + + // 查询条件的样式 + QList children = ui->wdgtQueryBox->findChildren(); + for (QWidget * wdgt : children) { + wdgt->setProperty("class", "queryBox"); + + if (QString(wdgt->metaObject()->className()).contains("QLineEdit")) { + // 绑定输入框回车事件 只在密码输入框执行 + connect((QLineEdit *)wdgt, &QLineEdit::returnPressed, this, [=](){ + emit ui->btnQuery->clicked(); + }); + } + } + + // 查询和重置按钮 + ui->btnQuery->setProperty("class", "btnDefault"); + ui->btnResetQuery->setProperty("class", "btnResetQuery"); + + ui->tableTaskTBDList->setTableProperty("class", "defaultTable"); + + // 分页组件 + QStringList btnPageGroupUrls; + btnPageGroupUrls << ":/image/infomation/btnPageFirst.png" << ":/image/infomation/btnPagePre.png" + << ":/image/infomation/btnPageNext.png" << ":/image/infomation/btnPageLast.png"; + ui->tableTaskTBDList->setPageButtonIcons(btnPageGroupUrls); + ui->tableTaskTBDList->setPageButtonProperty("class", "pageBtnGroup"); +} + +void TaskListWidget::initFormTable() +{ + // 初始化查询条件 + SysLocalService localServ; + QList> deptTaskColumns = localServ.getInfomationTableColumns("deptTask"); + ui->tableTaskTBDList->setColumns(deptTaskColumns); + + ui->tableTaskTBDList->setMultiCheckType(QPagedTable::MultiCheckType::MULTI); + ui->tableTaskTBDList->setCheckBoxClass("defaultSolid"); + + ui->tableTaskTBDList->setDataRowHeight(45); + + connect(ui->tableTaskTBDList, &QPagedTable::tableRowSelected, this, &TaskListWidget::rowSelectedHandler); + + initUrgentSelect(); + + ui->tableTaskTBDList->initTableWidget(); + ui->tableTaskTBDList->initTableHeader(); +} + +void TaskListWidget::initUrgentSelect() +{ + ui->selectUrgent->addItem("全部", ""); + ui->selectUrgent->addItem("不加急", "0"); + ui->selectUrgent->addItem("加急", "1"); + + ui->selectUrgent->setView(new QListView()); // 使ComboBox下拉选项 的QSS生效的关键代码 +} + +void TaskListWidget::getTaskToBeDoneList(int currPage) +{ + TaskService taskServ; + taskList.clear(); // 清除之前的结果 + + // 获取所有查询条件 + TaskRequest request; + request.userId = ProMemory::getInstance().getLoginUser().value("id").toString(); + request.sampleName = ui->inputDevName->text(); + request.sampleModel = ui->inputDevModel->text(); + request.customerName = ui->inputCustomer->text(); + request.measureStatusList << "3" << "2"; + request.isUrgent = ui->selectUrgent->currentData().toString(); + + // 查询页 + page.currentPage = currPage; + + // 查询数据库 + taskList = taskServ.getDeptTaskListPage(request, page); + QList> pageData; + for (TaskDTO task : taskList) { + QMap item; + + item.insert("id", task.id); + item.insert("name", task.sampleName); + item.insert("model", task.sampleModel); + item.insert("serialNo", task.manufactureNo); + item.insert("maker", task.manufacturer); + item.insert("custom", task.customerName); + item.insert("requireTime", task.requireOverTime); + item.insert("isUrgent", task.isUrgentName); + item.insert("orderNo", task.orderNo); + item.insert("measureStatus", task.measureStatusName); + + pageData.append(item); + } + + // 设置分页表格数据 + ui->tableTaskTBDList->setTotalCount(page.totalCount); + ui->tableTaskTBDList->setDatas(pageData); + + // 筛选 加急=是 的单元格标红提示 + QList matchedRows = ui->tableTaskTBDList->filterCells("isUrgent", "是"); + if (!matchedRows.isEmpty()) { + for (int row : matchedRows) { + ui->tableTaskTBDList->getTableInstance()->item(row, 10)->setForeground(QBrush("#FF0000")); // 多加了一列复选框 + } + } + + // 勾选上已经选中的记录 + for (int i = 0; i < taskList.size(); i++) { + ui->tableTaskTBDList->setRowSelected(i, parentForm->getSelectedTask().contains(taskList.at(i).sampleId)); + } +} + +void TaskListWidget::rowSelectedHandler(int rowIdx, bool selected) +{ + QString rowId = taskList.at(rowIdx).sampleId; + if (selected) { + parentForm->getSelectedTask().insert(rowId, taskList.at(rowIdx)); + } else { + parentForm->getSelectedTask().remove(rowId); + } +} + +void TaskListWidget::on_btnQuery_clicked() +{ + getTaskToBeDoneList(0); +} + +void TaskListWidget::on_btnResetQuery_clicked() +{ + ui->inputDevName->setText(""); + ui->inputDevModel->setText(""); + ui->inputCustomer->setText(""); + + ui->selectUrgent->setCurrentIndex(0); + + getTaskToBeDoneList(0); +} + + +void TaskListWidget::on_btnNextToConf_clicked() +{ + if (parentForm->getSelectedTask().size() == 0) { + CustomMessageBox::warning(this, "提示", "请选择被检设备!"); + } else { + // 判断多个被检设备 分类和量程是否都相同 + TaskService taskServ; + QStringList itemCats = taskServ.getVerificationItemCatsBySelectedTask(parentForm->getSelectedTask().keys()); + + if (itemCats.size() == 1) { + parentForm->setVerificationItemCatIds(itemCats); + emit taskEquipmentSelected(); + } else if (itemCats.isEmpty()) { + CustomMessageBox::warning(this, "提示", "没找到所选待检设备的检定项分类,请检查相关配置"); + } else { + qDebug() << itemCats; + CustomMessageBox::warning(this, "提示", "所选的多个待检设备检定项目不同,请重新选择"); + } + } +} diff --git a/QPagedTable/QPagedTable.cpp b/QPagedTable/QPagedTable.cpp index 1bb4af0..1ca1322 100644 --- a/QPagedTable/QPagedTable.cpp +++ b/QPagedTable/QPagedTable.cpp @@ -181,6 +181,10 @@ { ui->wdgtPageBtn->setProperty(name, value); } +void QPagedTable::setCheckBoxClass(QString className) +{ + checkProperty.insert("class", className); +} void QPagedTable::setHeaderHeight(int height) { @@ -217,6 +221,17 @@ return filterList; } +void QPagedTable::setRowSelected(int rowIdx, bool selected) +{ + if (multiCheck != MultiCheckType::NONE) { + QCheckBox *checkBox = ui->table->cellWidget(rowIdx, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->setCheckState(selected ? Qt::CheckState::Checked : Qt::CheckState::Unchecked); + } + } +} + QWidget * QPagedTable::buildNewCheckWidget() { QWidget* activeWidget = new QWidget(ui->table); @@ -225,6 +240,7 @@ QCheckBox* check = new QCheckBox(activeWidget); check->setMinimumSize(25, 25); check->setMaximumSize(25, 25); + check->setProperty("class", checkProperty.value("class")); activelayout->addWidget(check, 0, 0); if (multiCheck == MultiCheckType::RADIO) { @@ -241,6 +257,7 @@ QRadioButton* radio = new QRadioButton(activeWidget); radio->setMinimumSize(25, 25); radio->setMaximumSize(25, 25); + radio->setProperty("class", checkProperty.value("class")); activelayout->addWidget(radio, 0, 0); group->addButton(radio); @@ -336,3 +353,18 @@ page.currentPage = page.totalPage - 1; emit reloadTablePagedData(page.currentPage); } + +void QPagedTable::on_table_cellDoubleClicked(int row, int column) +{ + if (multiCheck != MultiCheckType::NONE && doubleClickSelectRow) { + QTableWidget * tableWidget = qobject_cast(sender()); + if (tableWidget) { + QCheckBox *checkBox = tableWidget->cellWidget(row, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->toggle(); + emit tableRowSelected(row, checkBox->isChecked()); + } + } + } +} diff --git a/QPagedTable/QPagedTable.h b/QPagedTable/QPagedTable.h index e561d01..aacb4aa 100644 --- a/QPagedTable/QPagedTable.h +++ b/QPagedTable/QPagedTable.h @@ -50,6 +50,7 @@ void setTotalCount(int totalCount); void setPageButtonIcons(QStringList iconUrls); void setPageButtonProperty(const char* name, QString value); + void setCheckBoxClass(QString className); void setHeaderHeight(int height); void setDataRowHeight(int height); @@ -62,6 +63,7 @@ QTableWidget * getTableInstance(); QList filterCells(QString colName, QString value); + void setRowSelected(int rowIdx, bool selected); private: Ui::QPagedTable *ui; @@ -92,6 +94,8 @@ int frameBorderSize = 0; int multiCheck = MultiCheckType::NONE; + QMap checkProperty; + bool doubleClickSelectRow = true; QButtonGroup * group; @@ -105,9 +109,12 @@ void on_btnPre_clicked(); void on_btnNext_clicked(); void on_btnLast_clicked(); + void on_table_cellDoubleClicked(int row, int column); + signals: void reloadTablePagedData(int currPage); void contextMenuActionTrigged(int actionIdx, int rowIdx, int colIdx); + void tableRowSelected(int rowIdx, bool selected); }; #endif // QPAGEDTABLE_H diff --git a/calibration/CalibrationMainForm.cpp b/calibration/CalibrationMainForm.cpp index 9b778a5..44d203a 100644 --- a/calibration/CalibrationMainForm.cpp +++ b/calibration/CalibrationMainForm.cpp @@ -6,9 +6,72 @@ ui(new Ui::CalibrationMainForm) { ui->setupUi(this); + + initFormWidgets(); + bindSignalAndHandlers(); } CalibrationMainForm::~CalibrationMainForm() { + qDebug() << "~CalibrationMainForm"; delete ui; } + +QMap & CalibrationMainForm::getSelectedTask() +{ + return selectedTask; +} +QStringList CalibrationMainForm::getVerificationItemCatIds() +{ + return verificationItemCatIds; +} +void CalibrationMainForm::setVerificationItemCatIds(QStringList itemCatIds) +{ + verificationItemCatIds = itemCatIds; +} + +void CalibrationMainForm::showEvent(QShowEvent * event) +{ + selectedTask.clear(); + verificationItemCatIds.clear(); + + ui->wdgtCalMain->setCurrentIndex(0); +} + +void CalibrationMainForm::initFormWidgets() +{ + wdgtTask = new TaskListWidget(this); + wdgtConf = new ConfigurationWidget(this); +// wdgtStandardList = new StandardListWidget(this); +// wdgtConnectState = new ConnectStateWidget(this); + + ui->wdgtCalMain->addWidget(wdgtTask); + ui->wdgtCalMain->addWidget(wdgtConf); +// ui->wdgtContent->addWidget(wdgtStandardList); +// ui->wdgtContent->addWidget(wdgtConnectState); + + ui->wdgtCalMain->setCurrentIndex(0); +} + +void CalibrationMainForm::bindSignalAndHandlers() +{ + // 待检设备清单 下一步 切换到 配置检定项和流程 + connect(wdgtTask, &TaskListWidget::taskEquipmentSelected, this, &CalibrationMainForm::nextToConfiguration); + + // 检定程序 上一步 下一步 +// connect(wdgtCheckProgram, &CheckProgramWidget::switchToReSelectTaskEquipment, this, &CalibrationForm::forwardToReSelectTaskEquipment); +// connect(wdgtCheckProgram, &CheckProgramWidget::switchToNextWidget, this, &CalibrationForm::nextToSelectStandardEquipment); + + // 标准设备 上一步 下一步 +// connect(wdgtStandardList, &StandardListWidget::switchToReSelectCheckProgram, this, &CalibrationForm::forwardToReSelectCheckProgram); +// connect(wdgtStandardList, &StandardListWidget::switchToNextWidget, this, &CalibrationForm::nextToConnectionState); + + // 查看连接状态 +// connect(wdgtConnectState, &ConnectStateWidget::switchToReSelectStandardEqpt, this, &CalibrationForm::forwardToReSelectTaskEquipment); +// connect(wdgtConnectState, &ConnectStateWidget::startAutoCalibration, this, &CalibrationForm::nextToAutoCalibration); +} + +void CalibrationMainForm::nextToConfiguration() +{ + ui->wdgtCalMain->setCurrentWidget(wdgtConf); +} diff --git a/calibration/CalibrationMainForm.h b/calibration/CalibrationMainForm.h index 7d75014..e4bc44c 100644 --- a/calibration/CalibrationMainForm.h +++ b/calibration/CalibrationMainForm.h @@ -3,6 +3,10 @@ #include +#include "dao/service/TaskService.h" +#include "calibration/TaskListWidget.h" +#include "calibration/ConfigurationWidget.h" + namespace Ui { class CalibrationMainForm; } @@ -15,8 +19,38 @@ explicit CalibrationMainForm(QWidget *parent = nullptr); ~CalibrationMainForm(); + QMap & getSelectedTask(); + QStringList getVerificationItemCatIds(); + void setVerificationItemCatIds(QStringList itemCatIds); + + // 选定的检定程序(单选) +// CheckProgramDto selectedCheckProgram; + + // 选定的标准设备清单 +// QMap selectedStdEquipment; + +protected: + void showEvent(QShowEvent * event) override; + + private: Ui::CalibrationMainForm *ui; + + TaskListWidget * wdgtTask; + ConfigurationWidget * wdgtConf; + + // 选择的任务清单(待检设备清单) + QMap selectedTask; + + // 所选待检设备对应的检定项分类 + QStringList verificationItemCatIds; + + void initFormWidgets(); + void bindSignalAndHandlers(); + +private slots: + // 待检设备已选择完毕 + void nextToConfiguration(); }; #endif // CALIBRATIONMAINFORM_H diff --git a/calibration/CalibrationMainForm.ui b/calibration/CalibrationMainForm.ui index 9b5a9c2..5479af5 100644 --- a/calibration/CalibrationMainForm.ui +++ b/calibration/CalibrationMainForm.ui @@ -1,9 +1,7 @@ + - - - CalibrationMainForm - + 0 @@ -15,7 +13,27 @@ Form + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + - + diff --git a/calibration/ConfigurationWidget.cpp b/calibration/ConfigurationWidget.cpp new file mode 100644 index 0000000..5e47dc2 --- /dev/null +++ b/calibration/ConfigurationWidget.cpp @@ -0,0 +1,14 @@ +#include "ConfigurationWidget.h" +#include "ui_ConfigurationWidget.h" + +ConfigurationWidget::ConfigurationWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::ConfigurationWidget) +{ + ui->setupUi(this); +} + +ConfigurationWidget::~ConfigurationWidget() +{ + delete ui; +} diff --git a/calibration/ConfigurationWidget.h b/calibration/ConfigurationWidget.h new file mode 100644 index 0000000..b3321c1 --- /dev/null +++ b/calibration/ConfigurationWidget.h @@ -0,0 +1,22 @@ +#ifndef CONFIGURATIONWIDGET_H +#define CONFIGURATIONWIDGET_H + +#include + +namespace Ui { +class ConfigurationWidget; +} + +class ConfigurationWidget : public QWidget +{ + Q_OBJECT + +public: + explicit ConfigurationWidget(QWidget *parent = nullptr); + ~ConfigurationWidget(); + +private: + Ui::ConfigurationWidget *ui; +}; + +#endif // CONFIGURATIONWIDGET_H diff --git a/calibration/ConfigurationWidget.ui b/calibration/ConfigurationWidget.ui new file mode 100644 index 0000000..a567bba --- /dev/null +++ b/calibration/ConfigurationWidget.ui @@ -0,0 +1,21 @@ + + + + + ConfigurationWidget + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + diff --git a/calibration/TaskListWidget.cpp b/calibration/TaskListWidget.cpp new file mode 100644 index 0000000..31f16c7 --- /dev/null +++ b/calibration/TaskListWidget.cpp @@ -0,0 +1,202 @@ +#include "TaskListWidget.h" +#include "ui_TaskListWidget.h" + +#include "calibration/CalibrationMainForm.h" + +TaskListWidget::TaskListWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::TaskListWidget) +{ + ui->setupUi(this); + parentForm = (CalibrationMainForm *)parent; + + initForm(); + initFormTable(); + + // 绑定信号与槽 + connect(ui->tableTaskTBDList, &QPagedTable::reloadTablePagedData, this, &TaskListWidget::getTaskToBeDoneList); +} + +TaskListWidget::~TaskListWidget() +{ + qDebug() << "~TaskListWidget"; + delete ui; +} + +void TaskListWidget::showEvent(QShowEvent * event) +{ + ui->tableTaskTBDList->adjustTableWidth(); + getTaskToBeDoneList(0); +} + +void TaskListWidget::resizeEvent(QResizeEvent * event) +{ + ui->tableTaskTBDList->adjustTableWidth(); +} + +void TaskListWidget::initForm() +{ + // 加载样式表 + QString qssStyle = QssFileUtils::loadQssFileContent(":/qss/infoTable.css"); + if (qssStyle.isEmpty() == false) { + this->setStyleSheet(qssStyle); // 仅本窗口生效 + } + + // 查询条件的样式 + QList children = ui->wdgtQueryBox->findChildren(); + for (QWidget * wdgt : children) { + wdgt->setProperty("class", "queryBox"); + + if (QString(wdgt->metaObject()->className()).contains("QLineEdit")) { + // 绑定输入框回车事件 只在密码输入框执行 + connect((QLineEdit *)wdgt, &QLineEdit::returnPressed, this, [=](){ + emit ui->btnQuery->clicked(); + }); + } + } + + // 查询和重置按钮 + ui->btnQuery->setProperty("class", "btnDefault"); + ui->btnResetQuery->setProperty("class", "btnResetQuery"); + + ui->tableTaskTBDList->setTableProperty("class", "defaultTable"); + + // 分页组件 + QStringList btnPageGroupUrls; + btnPageGroupUrls << ":/image/infomation/btnPageFirst.png" << ":/image/infomation/btnPagePre.png" + << ":/image/infomation/btnPageNext.png" << ":/image/infomation/btnPageLast.png"; + ui->tableTaskTBDList->setPageButtonIcons(btnPageGroupUrls); + ui->tableTaskTBDList->setPageButtonProperty("class", "pageBtnGroup"); +} + +void TaskListWidget::initFormTable() +{ + // 初始化查询条件 + SysLocalService localServ; + QList> deptTaskColumns = localServ.getInfomationTableColumns("deptTask"); + ui->tableTaskTBDList->setColumns(deptTaskColumns); + + ui->tableTaskTBDList->setMultiCheckType(QPagedTable::MultiCheckType::MULTI); + ui->tableTaskTBDList->setCheckBoxClass("defaultSolid"); + + ui->tableTaskTBDList->setDataRowHeight(45); + + connect(ui->tableTaskTBDList, &QPagedTable::tableRowSelected, this, &TaskListWidget::rowSelectedHandler); + + initUrgentSelect(); + + ui->tableTaskTBDList->initTableWidget(); + ui->tableTaskTBDList->initTableHeader(); +} + +void TaskListWidget::initUrgentSelect() +{ + ui->selectUrgent->addItem("全部", ""); + ui->selectUrgent->addItem("不加急", "0"); + ui->selectUrgent->addItem("加急", "1"); + + ui->selectUrgent->setView(new QListView()); // 使ComboBox下拉选项 的QSS生效的关键代码 +} + +void TaskListWidget::getTaskToBeDoneList(int currPage) +{ + TaskService taskServ; + taskList.clear(); // 清除之前的结果 + + // 获取所有查询条件 + TaskRequest request; + request.userId = ProMemory::getInstance().getLoginUser().value("id").toString(); + request.sampleName = ui->inputDevName->text(); + request.sampleModel = ui->inputDevModel->text(); + request.customerName = ui->inputCustomer->text(); + request.measureStatusList << "3" << "2"; + request.isUrgent = ui->selectUrgent->currentData().toString(); + + // 查询页 + page.currentPage = currPage; + + // 查询数据库 + taskList = taskServ.getDeptTaskListPage(request, page); + QList> pageData; + for (TaskDTO task : taskList) { + QMap item; + + item.insert("id", task.id); + item.insert("name", task.sampleName); + item.insert("model", task.sampleModel); + item.insert("serialNo", task.manufactureNo); + item.insert("maker", task.manufacturer); + item.insert("custom", task.customerName); + item.insert("requireTime", task.requireOverTime); + item.insert("isUrgent", task.isUrgentName); + item.insert("orderNo", task.orderNo); + item.insert("measureStatus", task.measureStatusName); + + pageData.append(item); + } + + // 设置分页表格数据 + ui->tableTaskTBDList->setTotalCount(page.totalCount); + ui->tableTaskTBDList->setDatas(pageData); + + // 筛选 加急=是 的单元格标红提示 + QList matchedRows = ui->tableTaskTBDList->filterCells("isUrgent", "是"); + if (!matchedRows.isEmpty()) { + for (int row : matchedRows) { + ui->tableTaskTBDList->getTableInstance()->item(row, 10)->setForeground(QBrush("#FF0000")); // 多加了一列复选框 + } + } + + // 勾选上已经选中的记录 + for (int i = 0; i < taskList.size(); i++) { + ui->tableTaskTBDList->setRowSelected(i, parentForm->getSelectedTask().contains(taskList.at(i).sampleId)); + } +} + +void TaskListWidget::rowSelectedHandler(int rowIdx, bool selected) +{ + QString rowId = taskList.at(rowIdx).sampleId; + if (selected) { + parentForm->getSelectedTask().insert(rowId, taskList.at(rowIdx)); + } else { + parentForm->getSelectedTask().remove(rowId); + } +} + +void TaskListWidget::on_btnQuery_clicked() +{ + getTaskToBeDoneList(0); +} + +void TaskListWidget::on_btnResetQuery_clicked() +{ + ui->inputDevName->setText(""); + ui->inputDevModel->setText(""); + ui->inputCustomer->setText(""); + + ui->selectUrgent->setCurrentIndex(0); + + getTaskToBeDoneList(0); +} + + +void TaskListWidget::on_btnNextToConf_clicked() +{ + if (parentForm->getSelectedTask().size() == 0) { + CustomMessageBox::warning(this, "提示", "请选择被检设备!"); + } else { + // 判断多个被检设备 分类和量程是否都相同 + TaskService taskServ; + QStringList itemCats = taskServ.getVerificationItemCatsBySelectedTask(parentForm->getSelectedTask().keys()); + + if (itemCats.size() == 1) { + parentForm->setVerificationItemCatIds(itemCats); + emit taskEquipmentSelected(); + } else if (itemCats.isEmpty()) { + CustomMessageBox::warning(this, "提示", "没找到所选待检设备的检定项分类,请检查相关配置"); + } else { + qDebug() << itemCats; + CustomMessageBox::warning(this, "提示", "所选的多个待检设备检定项目不同,请重新选择"); + } + } +} diff --git a/calibration/TaskListWidget.h b/calibration/TaskListWidget.h new file mode 100644 index 0000000..5d89a72 --- /dev/null +++ b/calibration/TaskListWidget.h @@ -0,0 +1,55 @@ +#ifndef TASKLISTWIDGET_H +#define TASKLISTWIDGET_H + +#include +#include + +#include "dao/service/SysLocalService.h" +#include "dao/service/TaskService.h" +#include "frame/CustomMessageBox.h" + +class CalibrationMainForm; + +namespace Ui { +class TaskListWidget; +} + +class TaskListWidget : public QWidget +{ + Q_OBJECT + +public: + explicit TaskListWidget(QWidget *parent = nullptr); + ~TaskListWidget(); + +protected: + void showEvent(QShowEvent * event) override; + void resizeEvent(QResizeEvent * event) override; + +private: + Ui::TaskListWidget *ui; + CalibrationMainForm * parentForm; + Page page; + + // 待检设备清单 + QList taskList; + + void initForm(); + void initFormTable(); + + void initMeasureStatusSelect(); + void initUrgentSelect(); + +private slots: + void getTaskToBeDoneList(int currPage); + void rowSelectedHandler(int rowIdx, bool selected); + void on_btnQuery_clicked(); + void on_btnResetQuery_clicked(); + void on_btnNextToConf_clicked(); + +signals: + void taskEquipmentSelected(); + +}; + +#endif // TASKLISTWIDGET_H diff --git a/QPagedTable/QPagedTable.cpp b/QPagedTable/QPagedTable.cpp index 1bb4af0..1ca1322 100644 --- a/QPagedTable/QPagedTable.cpp +++ b/QPagedTable/QPagedTable.cpp @@ -181,6 +181,10 @@ { ui->wdgtPageBtn->setProperty(name, value); } +void QPagedTable::setCheckBoxClass(QString className) +{ + checkProperty.insert("class", className); +} void QPagedTable::setHeaderHeight(int height) { @@ -217,6 +221,17 @@ return filterList; } +void QPagedTable::setRowSelected(int rowIdx, bool selected) +{ + if (multiCheck != MultiCheckType::NONE) { + QCheckBox *checkBox = ui->table->cellWidget(rowIdx, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->setCheckState(selected ? Qt::CheckState::Checked : Qt::CheckState::Unchecked); + } + } +} + QWidget * QPagedTable::buildNewCheckWidget() { QWidget* activeWidget = new QWidget(ui->table); @@ -225,6 +240,7 @@ QCheckBox* check = new QCheckBox(activeWidget); check->setMinimumSize(25, 25); check->setMaximumSize(25, 25); + check->setProperty("class", checkProperty.value("class")); activelayout->addWidget(check, 0, 0); if (multiCheck == MultiCheckType::RADIO) { @@ -241,6 +257,7 @@ QRadioButton* radio = new QRadioButton(activeWidget); radio->setMinimumSize(25, 25); radio->setMaximumSize(25, 25); + radio->setProperty("class", checkProperty.value("class")); activelayout->addWidget(radio, 0, 0); group->addButton(radio); @@ -336,3 +353,18 @@ page.currentPage = page.totalPage - 1; emit reloadTablePagedData(page.currentPage); } + +void QPagedTable::on_table_cellDoubleClicked(int row, int column) +{ + if (multiCheck != MultiCheckType::NONE && doubleClickSelectRow) { + QTableWidget * tableWidget = qobject_cast(sender()); + if (tableWidget) { + QCheckBox *checkBox = tableWidget->cellWidget(row, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->toggle(); + emit tableRowSelected(row, checkBox->isChecked()); + } + } + } +} diff --git a/QPagedTable/QPagedTable.h b/QPagedTable/QPagedTable.h index e561d01..aacb4aa 100644 --- a/QPagedTable/QPagedTable.h +++ b/QPagedTable/QPagedTable.h @@ -50,6 +50,7 @@ void setTotalCount(int totalCount); void setPageButtonIcons(QStringList iconUrls); void setPageButtonProperty(const char* name, QString value); + void setCheckBoxClass(QString className); void setHeaderHeight(int height); void setDataRowHeight(int height); @@ -62,6 +63,7 @@ QTableWidget * getTableInstance(); QList filterCells(QString colName, QString value); + void setRowSelected(int rowIdx, bool selected); private: Ui::QPagedTable *ui; @@ -92,6 +94,8 @@ int frameBorderSize = 0; int multiCheck = MultiCheckType::NONE; + QMap checkProperty; + bool doubleClickSelectRow = true; QButtonGroup * group; @@ -105,9 +109,12 @@ void on_btnPre_clicked(); void on_btnNext_clicked(); void on_btnLast_clicked(); + void on_table_cellDoubleClicked(int row, int column); + signals: void reloadTablePagedData(int currPage); void contextMenuActionTrigged(int actionIdx, int rowIdx, int colIdx); + void tableRowSelected(int rowIdx, bool selected); }; #endif // QPAGEDTABLE_H diff --git a/calibration/CalibrationMainForm.cpp b/calibration/CalibrationMainForm.cpp index 9b778a5..44d203a 100644 --- a/calibration/CalibrationMainForm.cpp +++ b/calibration/CalibrationMainForm.cpp @@ -6,9 +6,72 @@ ui(new Ui::CalibrationMainForm) { ui->setupUi(this); + + initFormWidgets(); + bindSignalAndHandlers(); } CalibrationMainForm::~CalibrationMainForm() { + qDebug() << "~CalibrationMainForm"; delete ui; } + +QMap & CalibrationMainForm::getSelectedTask() +{ + return selectedTask; +} +QStringList CalibrationMainForm::getVerificationItemCatIds() +{ + return verificationItemCatIds; +} +void CalibrationMainForm::setVerificationItemCatIds(QStringList itemCatIds) +{ + verificationItemCatIds = itemCatIds; +} + +void CalibrationMainForm::showEvent(QShowEvent * event) +{ + selectedTask.clear(); + verificationItemCatIds.clear(); + + ui->wdgtCalMain->setCurrentIndex(0); +} + +void CalibrationMainForm::initFormWidgets() +{ + wdgtTask = new TaskListWidget(this); + wdgtConf = new ConfigurationWidget(this); +// wdgtStandardList = new StandardListWidget(this); +// wdgtConnectState = new ConnectStateWidget(this); + + ui->wdgtCalMain->addWidget(wdgtTask); + ui->wdgtCalMain->addWidget(wdgtConf); +// ui->wdgtContent->addWidget(wdgtStandardList); +// ui->wdgtContent->addWidget(wdgtConnectState); + + ui->wdgtCalMain->setCurrentIndex(0); +} + +void CalibrationMainForm::bindSignalAndHandlers() +{ + // 待检设备清单 下一步 切换到 配置检定项和流程 + connect(wdgtTask, &TaskListWidget::taskEquipmentSelected, this, &CalibrationMainForm::nextToConfiguration); + + // 检定程序 上一步 下一步 +// connect(wdgtCheckProgram, &CheckProgramWidget::switchToReSelectTaskEquipment, this, &CalibrationForm::forwardToReSelectTaskEquipment); +// connect(wdgtCheckProgram, &CheckProgramWidget::switchToNextWidget, this, &CalibrationForm::nextToSelectStandardEquipment); + + // 标准设备 上一步 下一步 +// connect(wdgtStandardList, &StandardListWidget::switchToReSelectCheckProgram, this, &CalibrationForm::forwardToReSelectCheckProgram); +// connect(wdgtStandardList, &StandardListWidget::switchToNextWidget, this, &CalibrationForm::nextToConnectionState); + + // 查看连接状态 +// connect(wdgtConnectState, &ConnectStateWidget::switchToReSelectStandardEqpt, this, &CalibrationForm::forwardToReSelectTaskEquipment); +// connect(wdgtConnectState, &ConnectStateWidget::startAutoCalibration, this, &CalibrationForm::nextToAutoCalibration); +} + +void CalibrationMainForm::nextToConfiguration() +{ + ui->wdgtCalMain->setCurrentWidget(wdgtConf); +} diff --git a/calibration/CalibrationMainForm.h b/calibration/CalibrationMainForm.h index 7d75014..e4bc44c 100644 --- a/calibration/CalibrationMainForm.h +++ b/calibration/CalibrationMainForm.h @@ -3,6 +3,10 @@ #include +#include "dao/service/TaskService.h" +#include "calibration/TaskListWidget.h" +#include "calibration/ConfigurationWidget.h" + namespace Ui { class CalibrationMainForm; } @@ -15,8 +19,38 @@ explicit CalibrationMainForm(QWidget *parent = nullptr); ~CalibrationMainForm(); + QMap & getSelectedTask(); + QStringList getVerificationItemCatIds(); + void setVerificationItemCatIds(QStringList itemCatIds); + + // 选定的检定程序(单选) +// CheckProgramDto selectedCheckProgram; + + // 选定的标准设备清单 +// QMap selectedStdEquipment; + +protected: + void showEvent(QShowEvent * event) override; + + private: Ui::CalibrationMainForm *ui; + + TaskListWidget * wdgtTask; + ConfigurationWidget * wdgtConf; + + // 选择的任务清单(待检设备清单) + QMap selectedTask; + + // 所选待检设备对应的检定项分类 + QStringList verificationItemCatIds; + + void initFormWidgets(); + void bindSignalAndHandlers(); + +private slots: + // 待检设备已选择完毕 + void nextToConfiguration(); }; #endif // CALIBRATIONMAINFORM_H diff --git a/calibration/CalibrationMainForm.ui b/calibration/CalibrationMainForm.ui index 9b5a9c2..5479af5 100644 --- a/calibration/CalibrationMainForm.ui +++ b/calibration/CalibrationMainForm.ui @@ -1,9 +1,7 @@ + - - - CalibrationMainForm - + 0 @@ -15,7 +13,27 @@ Form + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + - + diff --git a/calibration/ConfigurationWidget.cpp b/calibration/ConfigurationWidget.cpp new file mode 100644 index 0000000..5e47dc2 --- /dev/null +++ b/calibration/ConfigurationWidget.cpp @@ -0,0 +1,14 @@ +#include "ConfigurationWidget.h" +#include "ui_ConfigurationWidget.h" + +ConfigurationWidget::ConfigurationWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::ConfigurationWidget) +{ + ui->setupUi(this); +} + +ConfigurationWidget::~ConfigurationWidget() +{ + delete ui; +} diff --git a/calibration/ConfigurationWidget.h b/calibration/ConfigurationWidget.h new file mode 100644 index 0000000..b3321c1 --- /dev/null +++ b/calibration/ConfigurationWidget.h @@ -0,0 +1,22 @@ +#ifndef CONFIGURATIONWIDGET_H +#define CONFIGURATIONWIDGET_H + +#include + +namespace Ui { +class ConfigurationWidget; +} + +class ConfigurationWidget : public QWidget +{ + Q_OBJECT + +public: + explicit ConfigurationWidget(QWidget *parent = nullptr); + ~ConfigurationWidget(); + +private: + Ui::ConfigurationWidget *ui; +}; + +#endif // CONFIGURATIONWIDGET_H diff --git a/calibration/ConfigurationWidget.ui b/calibration/ConfigurationWidget.ui new file mode 100644 index 0000000..a567bba --- /dev/null +++ b/calibration/ConfigurationWidget.ui @@ -0,0 +1,21 @@ + + + + + ConfigurationWidget + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + diff --git a/calibration/TaskListWidget.cpp b/calibration/TaskListWidget.cpp new file mode 100644 index 0000000..31f16c7 --- /dev/null +++ b/calibration/TaskListWidget.cpp @@ -0,0 +1,202 @@ +#include "TaskListWidget.h" +#include "ui_TaskListWidget.h" + +#include "calibration/CalibrationMainForm.h" + +TaskListWidget::TaskListWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::TaskListWidget) +{ + ui->setupUi(this); + parentForm = (CalibrationMainForm *)parent; + + initForm(); + initFormTable(); + + // 绑定信号与槽 + connect(ui->tableTaskTBDList, &QPagedTable::reloadTablePagedData, this, &TaskListWidget::getTaskToBeDoneList); +} + +TaskListWidget::~TaskListWidget() +{ + qDebug() << "~TaskListWidget"; + delete ui; +} + +void TaskListWidget::showEvent(QShowEvent * event) +{ + ui->tableTaskTBDList->adjustTableWidth(); + getTaskToBeDoneList(0); +} + +void TaskListWidget::resizeEvent(QResizeEvent * event) +{ + ui->tableTaskTBDList->adjustTableWidth(); +} + +void TaskListWidget::initForm() +{ + // 加载样式表 + QString qssStyle = QssFileUtils::loadQssFileContent(":/qss/infoTable.css"); + if (qssStyle.isEmpty() == false) { + this->setStyleSheet(qssStyle); // 仅本窗口生效 + } + + // 查询条件的样式 + QList children = ui->wdgtQueryBox->findChildren(); + for (QWidget * wdgt : children) { + wdgt->setProperty("class", "queryBox"); + + if (QString(wdgt->metaObject()->className()).contains("QLineEdit")) { + // 绑定输入框回车事件 只在密码输入框执行 + connect((QLineEdit *)wdgt, &QLineEdit::returnPressed, this, [=](){ + emit ui->btnQuery->clicked(); + }); + } + } + + // 查询和重置按钮 + ui->btnQuery->setProperty("class", "btnDefault"); + ui->btnResetQuery->setProperty("class", "btnResetQuery"); + + ui->tableTaskTBDList->setTableProperty("class", "defaultTable"); + + // 分页组件 + QStringList btnPageGroupUrls; + btnPageGroupUrls << ":/image/infomation/btnPageFirst.png" << ":/image/infomation/btnPagePre.png" + << ":/image/infomation/btnPageNext.png" << ":/image/infomation/btnPageLast.png"; + ui->tableTaskTBDList->setPageButtonIcons(btnPageGroupUrls); + ui->tableTaskTBDList->setPageButtonProperty("class", "pageBtnGroup"); +} + +void TaskListWidget::initFormTable() +{ + // 初始化查询条件 + SysLocalService localServ; + QList> deptTaskColumns = localServ.getInfomationTableColumns("deptTask"); + ui->tableTaskTBDList->setColumns(deptTaskColumns); + + ui->tableTaskTBDList->setMultiCheckType(QPagedTable::MultiCheckType::MULTI); + ui->tableTaskTBDList->setCheckBoxClass("defaultSolid"); + + ui->tableTaskTBDList->setDataRowHeight(45); + + connect(ui->tableTaskTBDList, &QPagedTable::tableRowSelected, this, &TaskListWidget::rowSelectedHandler); + + initUrgentSelect(); + + ui->tableTaskTBDList->initTableWidget(); + ui->tableTaskTBDList->initTableHeader(); +} + +void TaskListWidget::initUrgentSelect() +{ + ui->selectUrgent->addItem("全部", ""); + ui->selectUrgent->addItem("不加急", "0"); + ui->selectUrgent->addItem("加急", "1"); + + ui->selectUrgent->setView(new QListView()); // 使ComboBox下拉选项 的QSS生效的关键代码 +} + +void TaskListWidget::getTaskToBeDoneList(int currPage) +{ + TaskService taskServ; + taskList.clear(); // 清除之前的结果 + + // 获取所有查询条件 + TaskRequest request; + request.userId = ProMemory::getInstance().getLoginUser().value("id").toString(); + request.sampleName = ui->inputDevName->text(); + request.sampleModel = ui->inputDevModel->text(); + request.customerName = ui->inputCustomer->text(); + request.measureStatusList << "3" << "2"; + request.isUrgent = ui->selectUrgent->currentData().toString(); + + // 查询页 + page.currentPage = currPage; + + // 查询数据库 + taskList = taskServ.getDeptTaskListPage(request, page); + QList> pageData; + for (TaskDTO task : taskList) { + QMap item; + + item.insert("id", task.id); + item.insert("name", task.sampleName); + item.insert("model", task.sampleModel); + item.insert("serialNo", task.manufactureNo); + item.insert("maker", task.manufacturer); + item.insert("custom", task.customerName); + item.insert("requireTime", task.requireOverTime); + item.insert("isUrgent", task.isUrgentName); + item.insert("orderNo", task.orderNo); + item.insert("measureStatus", task.measureStatusName); + + pageData.append(item); + } + + // 设置分页表格数据 + ui->tableTaskTBDList->setTotalCount(page.totalCount); + ui->tableTaskTBDList->setDatas(pageData); + + // 筛选 加急=是 的单元格标红提示 + QList matchedRows = ui->tableTaskTBDList->filterCells("isUrgent", "是"); + if (!matchedRows.isEmpty()) { + for (int row : matchedRows) { + ui->tableTaskTBDList->getTableInstance()->item(row, 10)->setForeground(QBrush("#FF0000")); // 多加了一列复选框 + } + } + + // 勾选上已经选中的记录 + for (int i = 0; i < taskList.size(); i++) { + ui->tableTaskTBDList->setRowSelected(i, parentForm->getSelectedTask().contains(taskList.at(i).sampleId)); + } +} + +void TaskListWidget::rowSelectedHandler(int rowIdx, bool selected) +{ + QString rowId = taskList.at(rowIdx).sampleId; + if (selected) { + parentForm->getSelectedTask().insert(rowId, taskList.at(rowIdx)); + } else { + parentForm->getSelectedTask().remove(rowId); + } +} + +void TaskListWidget::on_btnQuery_clicked() +{ + getTaskToBeDoneList(0); +} + +void TaskListWidget::on_btnResetQuery_clicked() +{ + ui->inputDevName->setText(""); + ui->inputDevModel->setText(""); + ui->inputCustomer->setText(""); + + ui->selectUrgent->setCurrentIndex(0); + + getTaskToBeDoneList(0); +} + + +void TaskListWidget::on_btnNextToConf_clicked() +{ + if (parentForm->getSelectedTask().size() == 0) { + CustomMessageBox::warning(this, "提示", "请选择被检设备!"); + } else { + // 判断多个被检设备 分类和量程是否都相同 + TaskService taskServ; + QStringList itemCats = taskServ.getVerificationItemCatsBySelectedTask(parentForm->getSelectedTask().keys()); + + if (itemCats.size() == 1) { + parentForm->setVerificationItemCatIds(itemCats); + emit taskEquipmentSelected(); + } else if (itemCats.isEmpty()) { + CustomMessageBox::warning(this, "提示", "没找到所选待检设备的检定项分类,请检查相关配置"); + } else { + qDebug() << itemCats; + CustomMessageBox::warning(this, "提示", "所选的多个待检设备检定项目不同,请重新选择"); + } + } +} diff --git a/calibration/TaskListWidget.h b/calibration/TaskListWidget.h new file mode 100644 index 0000000..5d89a72 --- /dev/null +++ b/calibration/TaskListWidget.h @@ -0,0 +1,55 @@ +#ifndef TASKLISTWIDGET_H +#define TASKLISTWIDGET_H + +#include +#include + +#include "dao/service/SysLocalService.h" +#include "dao/service/TaskService.h" +#include "frame/CustomMessageBox.h" + +class CalibrationMainForm; + +namespace Ui { +class TaskListWidget; +} + +class TaskListWidget : public QWidget +{ + Q_OBJECT + +public: + explicit TaskListWidget(QWidget *parent = nullptr); + ~TaskListWidget(); + +protected: + void showEvent(QShowEvent * event) override; + void resizeEvent(QResizeEvent * event) override; + +private: + Ui::TaskListWidget *ui; + CalibrationMainForm * parentForm; + Page page; + + // 待检设备清单 + QList taskList; + + void initForm(); + void initFormTable(); + + void initMeasureStatusSelect(); + void initUrgentSelect(); + +private slots: + void getTaskToBeDoneList(int currPage); + void rowSelectedHandler(int rowIdx, bool selected); + void on_btnQuery_clicked(); + void on_btnResetQuery_clicked(); + void on_btnNextToConf_clicked(); + +signals: + void taskEquipmentSelected(); + +}; + +#endif // TASKLISTWIDGET_H diff --git a/calibration/TaskListWidget.ui b/calibration/TaskListWidget.ui new file mode 100644 index 0000000..0dd382d --- /dev/null +++ b/calibration/TaskListWidget.ui @@ -0,0 +1,232 @@ + + + TaskListWidget + + + + 0 + 0 + 1245 + 605 + + + + Form + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 10 + + + 10 + + + 10 + + + 10 + + + 10 + + + + + + 0 + 0 + + + + + 150 + 36 + + + + + + + 受检设备名称 + + + + + + + + 0 + 0 + + + + + 150 + 36 + + + + 规格型号 + + + + + + + + 0 + 0 + + + + + 150 + 36 + + + + 委托方 + + + + + + + + 0 + 0 + + + + + 120 + 36 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 100 + 20 + + + + + + + + + 120 + 36 + + + + 查询 + + + + + + + + 120 + 36 + + + + 重置 + + + + + + + Qt::Horizontal + + + + 0 + 0 + + + + + + + + + 200 + 48 + + + + 下一步,配置 + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + + + + QPagedTable + QWidget +
QPagedTable/QPagedTable.h
+
+
+ + +
diff --git a/QPagedTable/QPagedTable.cpp b/QPagedTable/QPagedTable.cpp index 1bb4af0..1ca1322 100644 --- a/QPagedTable/QPagedTable.cpp +++ b/QPagedTable/QPagedTable.cpp @@ -181,6 +181,10 @@ { ui->wdgtPageBtn->setProperty(name, value); } +void QPagedTable::setCheckBoxClass(QString className) +{ + checkProperty.insert("class", className); +} void QPagedTable::setHeaderHeight(int height) { @@ -217,6 +221,17 @@ return filterList; } +void QPagedTable::setRowSelected(int rowIdx, bool selected) +{ + if (multiCheck != MultiCheckType::NONE) { + QCheckBox *checkBox = ui->table->cellWidget(rowIdx, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->setCheckState(selected ? Qt::CheckState::Checked : Qt::CheckState::Unchecked); + } + } +} + QWidget * QPagedTable::buildNewCheckWidget() { QWidget* activeWidget = new QWidget(ui->table); @@ -225,6 +240,7 @@ QCheckBox* check = new QCheckBox(activeWidget); check->setMinimumSize(25, 25); check->setMaximumSize(25, 25); + check->setProperty("class", checkProperty.value("class")); activelayout->addWidget(check, 0, 0); if (multiCheck == MultiCheckType::RADIO) { @@ -241,6 +257,7 @@ QRadioButton* radio = new QRadioButton(activeWidget); radio->setMinimumSize(25, 25); radio->setMaximumSize(25, 25); + radio->setProperty("class", checkProperty.value("class")); activelayout->addWidget(radio, 0, 0); group->addButton(radio); @@ -336,3 +353,18 @@ page.currentPage = page.totalPage - 1; emit reloadTablePagedData(page.currentPage); } + +void QPagedTable::on_table_cellDoubleClicked(int row, int column) +{ + if (multiCheck != MultiCheckType::NONE && doubleClickSelectRow) { + QTableWidget * tableWidget = qobject_cast(sender()); + if (tableWidget) { + QCheckBox *checkBox = tableWidget->cellWidget(row, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->toggle(); + emit tableRowSelected(row, checkBox->isChecked()); + } + } + } +} diff --git a/QPagedTable/QPagedTable.h b/QPagedTable/QPagedTable.h index e561d01..aacb4aa 100644 --- a/QPagedTable/QPagedTable.h +++ b/QPagedTable/QPagedTable.h @@ -50,6 +50,7 @@ void setTotalCount(int totalCount); void setPageButtonIcons(QStringList iconUrls); void setPageButtonProperty(const char* name, QString value); + void setCheckBoxClass(QString className); void setHeaderHeight(int height); void setDataRowHeight(int height); @@ -62,6 +63,7 @@ QTableWidget * getTableInstance(); QList filterCells(QString colName, QString value); + void setRowSelected(int rowIdx, bool selected); private: Ui::QPagedTable *ui; @@ -92,6 +94,8 @@ int frameBorderSize = 0; int multiCheck = MultiCheckType::NONE; + QMap checkProperty; + bool doubleClickSelectRow = true; QButtonGroup * group; @@ -105,9 +109,12 @@ void on_btnPre_clicked(); void on_btnNext_clicked(); void on_btnLast_clicked(); + void on_table_cellDoubleClicked(int row, int column); + signals: void reloadTablePagedData(int currPage); void contextMenuActionTrigged(int actionIdx, int rowIdx, int colIdx); + void tableRowSelected(int rowIdx, bool selected); }; #endif // QPAGEDTABLE_H diff --git a/calibration/CalibrationMainForm.cpp b/calibration/CalibrationMainForm.cpp index 9b778a5..44d203a 100644 --- a/calibration/CalibrationMainForm.cpp +++ b/calibration/CalibrationMainForm.cpp @@ -6,9 +6,72 @@ ui(new Ui::CalibrationMainForm) { ui->setupUi(this); + + initFormWidgets(); + bindSignalAndHandlers(); } CalibrationMainForm::~CalibrationMainForm() { + qDebug() << "~CalibrationMainForm"; delete ui; } + +QMap & CalibrationMainForm::getSelectedTask() +{ + return selectedTask; +} +QStringList CalibrationMainForm::getVerificationItemCatIds() +{ + return verificationItemCatIds; +} +void CalibrationMainForm::setVerificationItemCatIds(QStringList itemCatIds) +{ + verificationItemCatIds = itemCatIds; +} + +void CalibrationMainForm::showEvent(QShowEvent * event) +{ + selectedTask.clear(); + verificationItemCatIds.clear(); + + ui->wdgtCalMain->setCurrentIndex(0); +} + +void CalibrationMainForm::initFormWidgets() +{ + wdgtTask = new TaskListWidget(this); + wdgtConf = new ConfigurationWidget(this); +// wdgtStandardList = new StandardListWidget(this); +// wdgtConnectState = new ConnectStateWidget(this); + + ui->wdgtCalMain->addWidget(wdgtTask); + ui->wdgtCalMain->addWidget(wdgtConf); +// ui->wdgtContent->addWidget(wdgtStandardList); +// ui->wdgtContent->addWidget(wdgtConnectState); + + ui->wdgtCalMain->setCurrentIndex(0); +} + +void CalibrationMainForm::bindSignalAndHandlers() +{ + // 待检设备清单 下一步 切换到 配置检定项和流程 + connect(wdgtTask, &TaskListWidget::taskEquipmentSelected, this, &CalibrationMainForm::nextToConfiguration); + + // 检定程序 上一步 下一步 +// connect(wdgtCheckProgram, &CheckProgramWidget::switchToReSelectTaskEquipment, this, &CalibrationForm::forwardToReSelectTaskEquipment); +// connect(wdgtCheckProgram, &CheckProgramWidget::switchToNextWidget, this, &CalibrationForm::nextToSelectStandardEquipment); + + // 标准设备 上一步 下一步 +// connect(wdgtStandardList, &StandardListWidget::switchToReSelectCheckProgram, this, &CalibrationForm::forwardToReSelectCheckProgram); +// connect(wdgtStandardList, &StandardListWidget::switchToNextWidget, this, &CalibrationForm::nextToConnectionState); + + // 查看连接状态 +// connect(wdgtConnectState, &ConnectStateWidget::switchToReSelectStandardEqpt, this, &CalibrationForm::forwardToReSelectTaskEquipment); +// connect(wdgtConnectState, &ConnectStateWidget::startAutoCalibration, this, &CalibrationForm::nextToAutoCalibration); +} + +void CalibrationMainForm::nextToConfiguration() +{ + ui->wdgtCalMain->setCurrentWidget(wdgtConf); +} diff --git a/calibration/CalibrationMainForm.h b/calibration/CalibrationMainForm.h index 7d75014..e4bc44c 100644 --- a/calibration/CalibrationMainForm.h +++ b/calibration/CalibrationMainForm.h @@ -3,6 +3,10 @@ #include +#include "dao/service/TaskService.h" +#include "calibration/TaskListWidget.h" +#include "calibration/ConfigurationWidget.h" + namespace Ui { class CalibrationMainForm; } @@ -15,8 +19,38 @@ explicit CalibrationMainForm(QWidget *parent = nullptr); ~CalibrationMainForm(); + QMap & getSelectedTask(); + QStringList getVerificationItemCatIds(); + void setVerificationItemCatIds(QStringList itemCatIds); + + // 选定的检定程序(单选) +// CheckProgramDto selectedCheckProgram; + + // 选定的标准设备清单 +// QMap selectedStdEquipment; + +protected: + void showEvent(QShowEvent * event) override; + + private: Ui::CalibrationMainForm *ui; + + TaskListWidget * wdgtTask; + ConfigurationWidget * wdgtConf; + + // 选择的任务清单(待检设备清单) + QMap selectedTask; + + // 所选待检设备对应的检定项分类 + QStringList verificationItemCatIds; + + void initFormWidgets(); + void bindSignalAndHandlers(); + +private slots: + // 待检设备已选择完毕 + void nextToConfiguration(); }; #endif // CALIBRATIONMAINFORM_H diff --git a/calibration/CalibrationMainForm.ui b/calibration/CalibrationMainForm.ui index 9b5a9c2..5479af5 100644 --- a/calibration/CalibrationMainForm.ui +++ b/calibration/CalibrationMainForm.ui @@ -1,9 +1,7 @@ + - - - CalibrationMainForm - + 0 @@ -15,7 +13,27 @@ Form + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + - + diff --git a/calibration/ConfigurationWidget.cpp b/calibration/ConfigurationWidget.cpp new file mode 100644 index 0000000..5e47dc2 --- /dev/null +++ b/calibration/ConfigurationWidget.cpp @@ -0,0 +1,14 @@ +#include "ConfigurationWidget.h" +#include "ui_ConfigurationWidget.h" + +ConfigurationWidget::ConfigurationWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::ConfigurationWidget) +{ + ui->setupUi(this); +} + +ConfigurationWidget::~ConfigurationWidget() +{ + delete ui; +} diff --git a/calibration/ConfigurationWidget.h b/calibration/ConfigurationWidget.h new file mode 100644 index 0000000..b3321c1 --- /dev/null +++ b/calibration/ConfigurationWidget.h @@ -0,0 +1,22 @@ +#ifndef CONFIGURATIONWIDGET_H +#define CONFIGURATIONWIDGET_H + +#include + +namespace Ui { +class ConfigurationWidget; +} + +class ConfigurationWidget : public QWidget +{ + Q_OBJECT + +public: + explicit ConfigurationWidget(QWidget *parent = nullptr); + ~ConfigurationWidget(); + +private: + Ui::ConfigurationWidget *ui; +}; + +#endif // CONFIGURATIONWIDGET_H diff --git a/calibration/ConfigurationWidget.ui b/calibration/ConfigurationWidget.ui new file mode 100644 index 0000000..a567bba --- /dev/null +++ b/calibration/ConfigurationWidget.ui @@ -0,0 +1,21 @@ + + + + + ConfigurationWidget + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + diff --git a/calibration/TaskListWidget.cpp b/calibration/TaskListWidget.cpp new file mode 100644 index 0000000..31f16c7 --- /dev/null +++ b/calibration/TaskListWidget.cpp @@ -0,0 +1,202 @@ +#include "TaskListWidget.h" +#include "ui_TaskListWidget.h" + +#include "calibration/CalibrationMainForm.h" + +TaskListWidget::TaskListWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::TaskListWidget) +{ + ui->setupUi(this); + parentForm = (CalibrationMainForm *)parent; + + initForm(); + initFormTable(); + + // 绑定信号与槽 + connect(ui->tableTaskTBDList, &QPagedTable::reloadTablePagedData, this, &TaskListWidget::getTaskToBeDoneList); +} + +TaskListWidget::~TaskListWidget() +{ + qDebug() << "~TaskListWidget"; + delete ui; +} + +void TaskListWidget::showEvent(QShowEvent * event) +{ + ui->tableTaskTBDList->adjustTableWidth(); + getTaskToBeDoneList(0); +} + +void TaskListWidget::resizeEvent(QResizeEvent * event) +{ + ui->tableTaskTBDList->adjustTableWidth(); +} + +void TaskListWidget::initForm() +{ + // 加载样式表 + QString qssStyle = QssFileUtils::loadQssFileContent(":/qss/infoTable.css"); + if (qssStyle.isEmpty() == false) { + this->setStyleSheet(qssStyle); // 仅本窗口生效 + } + + // 查询条件的样式 + QList children = ui->wdgtQueryBox->findChildren(); + for (QWidget * wdgt : children) { + wdgt->setProperty("class", "queryBox"); + + if (QString(wdgt->metaObject()->className()).contains("QLineEdit")) { + // 绑定输入框回车事件 只在密码输入框执行 + connect((QLineEdit *)wdgt, &QLineEdit::returnPressed, this, [=](){ + emit ui->btnQuery->clicked(); + }); + } + } + + // 查询和重置按钮 + ui->btnQuery->setProperty("class", "btnDefault"); + ui->btnResetQuery->setProperty("class", "btnResetQuery"); + + ui->tableTaskTBDList->setTableProperty("class", "defaultTable"); + + // 分页组件 + QStringList btnPageGroupUrls; + btnPageGroupUrls << ":/image/infomation/btnPageFirst.png" << ":/image/infomation/btnPagePre.png" + << ":/image/infomation/btnPageNext.png" << ":/image/infomation/btnPageLast.png"; + ui->tableTaskTBDList->setPageButtonIcons(btnPageGroupUrls); + ui->tableTaskTBDList->setPageButtonProperty("class", "pageBtnGroup"); +} + +void TaskListWidget::initFormTable() +{ + // 初始化查询条件 + SysLocalService localServ; + QList> deptTaskColumns = localServ.getInfomationTableColumns("deptTask"); + ui->tableTaskTBDList->setColumns(deptTaskColumns); + + ui->tableTaskTBDList->setMultiCheckType(QPagedTable::MultiCheckType::MULTI); + ui->tableTaskTBDList->setCheckBoxClass("defaultSolid"); + + ui->tableTaskTBDList->setDataRowHeight(45); + + connect(ui->tableTaskTBDList, &QPagedTable::tableRowSelected, this, &TaskListWidget::rowSelectedHandler); + + initUrgentSelect(); + + ui->tableTaskTBDList->initTableWidget(); + ui->tableTaskTBDList->initTableHeader(); +} + +void TaskListWidget::initUrgentSelect() +{ + ui->selectUrgent->addItem("全部", ""); + ui->selectUrgent->addItem("不加急", "0"); + ui->selectUrgent->addItem("加急", "1"); + + ui->selectUrgent->setView(new QListView()); // 使ComboBox下拉选项 的QSS生效的关键代码 +} + +void TaskListWidget::getTaskToBeDoneList(int currPage) +{ + TaskService taskServ; + taskList.clear(); // 清除之前的结果 + + // 获取所有查询条件 + TaskRequest request; + request.userId = ProMemory::getInstance().getLoginUser().value("id").toString(); + request.sampleName = ui->inputDevName->text(); + request.sampleModel = ui->inputDevModel->text(); + request.customerName = ui->inputCustomer->text(); + request.measureStatusList << "3" << "2"; + request.isUrgent = ui->selectUrgent->currentData().toString(); + + // 查询页 + page.currentPage = currPage; + + // 查询数据库 + taskList = taskServ.getDeptTaskListPage(request, page); + QList> pageData; + for (TaskDTO task : taskList) { + QMap item; + + item.insert("id", task.id); + item.insert("name", task.sampleName); + item.insert("model", task.sampleModel); + item.insert("serialNo", task.manufactureNo); + item.insert("maker", task.manufacturer); + item.insert("custom", task.customerName); + item.insert("requireTime", task.requireOverTime); + item.insert("isUrgent", task.isUrgentName); + item.insert("orderNo", task.orderNo); + item.insert("measureStatus", task.measureStatusName); + + pageData.append(item); + } + + // 设置分页表格数据 + ui->tableTaskTBDList->setTotalCount(page.totalCount); + ui->tableTaskTBDList->setDatas(pageData); + + // 筛选 加急=是 的单元格标红提示 + QList matchedRows = ui->tableTaskTBDList->filterCells("isUrgent", "是"); + if (!matchedRows.isEmpty()) { + for (int row : matchedRows) { + ui->tableTaskTBDList->getTableInstance()->item(row, 10)->setForeground(QBrush("#FF0000")); // 多加了一列复选框 + } + } + + // 勾选上已经选中的记录 + for (int i = 0; i < taskList.size(); i++) { + ui->tableTaskTBDList->setRowSelected(i, parentForm->getSelectedTask().contains(taskList.at(i).sampleId)); + } +} + +void TaskListWidget::rowSelectedHandler(int rowIdx, bool selected) +{ + QString rowId = taskList.at(rowIdx).sampleId; + if (selected) { + parentForm->getSelectedTask().insert(rowId, taskList.at(rowIdx)); + } else { + parentForm->getSelectedTask().remove(rowId); + } +} + +void TaskListWidget::on_btnQuery_clicked() +{ + getTaskToBeDoneList(0); +} + +void TaskListWidget::on_btnResetQuery_clicked() +{ + ui->inputDevName->setText(""); + ui->inputDevModel->setText(""); + ui->inputCustomer->setText(""); + + ui->selectUrgent->setCurrentIndex(0); + + getTaskToBeDoneList(0); +} + + +void TaskListWidget::on_btnNextToConf_clicked() +{ + if (parentForm->getSelectedTask().size() == 0) { + CustomMessageBox::warning(this, "提示", "请选择被检设备!"); + } else { + // 判断多个被检设备 分类和量程是否都相同 + TaskService taskServ; + QStringList itemCats = taskServ.getVerificationItemCatsBySelectedTask(parentForm->getSelectedTask().keys()); + + if (itemCats.size() == 1) { + parentForm->setVerificationItemCatIds(itemCats); + emit taskEquipmentSelected(); + } else if (itemCats.isEmpty()) { + CustomMessageBox::warning(this, "提示", "没找到所选待检设备的检定项分类,请检查相关配置"); + } else { + qDebug() << itemCats; + CustomMessageBox::warning(this, "提示", "所选的多个待检设备检定项目不同,请重新选择"); + } + } +} diff --git a/calibration/TaskListWidget.h b/calibration/TaskListWidget.h new file mode 100644 index 0000000..5d89a72 --- /dev/null +++ b/calibration/TaskListWidget.h @@ -0,0 +1,55 @@ +#ifndef TASKLISTWIDGET_H +#define TASKLISTWIDGET_H + +#include +#include + +#include "dao/service/SysLocalService.h" +#include "dao/service/TaskService.h" +#include "frame/CustomMessageBox.h" + +class CalibrationMainForm; + +namespace Ui { +class TaskListWidget; +} + +class TaskListWidget : public QWidget +{ + Q_OBJECT + +public: + explicit TaskListWidget(QWidget *parent = nullptr); + ~TaskListWidget(); + +protected: + void showEvent(QShowEvent * event) override; + void resizeEvent(QResizeEvent * event) override; + +private: + Ui::TaskListWidget *ui; + CalibrationMainForm * parentForm; + Page page; + + // 待检设备清单 + QList taskList; + + void initForm(); + void initFormTable(); + + void initMeasureStatusSelect(); + void initUrgentSelect(); + +private slots: + void getTaskToBeDoneList(int currPage); + void rowSelectedHandler(int rowIdx, bool selected); + void on_btnQuery_clicked(); + void on_btnResetQuery_clicked(); + void on_btnNextToConf_clicked(); + +signals: + void taskEquipmentSelected(); + +}; + +#endif // TASKLISTWIDGET_H diff --git a/calibration/TaskListWidget.ui b/calibration/TaskListWidget.ui new file mode 100644 index 0000000..0dd382d --- /dev/null +++ b/calibration/TaskListWidget.ui @@ -0,0 +1,232 @@ + + + TaskListWidget + + + + 0 + 0 + 1245 + 605 + + + + Form + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 10 + + + 10 + + + 10 + + + 10 + + + 10 + + + + + + 0 + 0 + + + + + 150 + 36 + + + + + + + 受检设备名称 + + + + + + + + 0 + 0 + + + + + 150 + 36 + + + + 规格型号 + + + + + + + + 0 + 0 + + + + + 150 + 36 + + + + 委托方 + + + + + + + + 0 + 0 + + + + + 120 + 36 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 100 + 20 + + + + + + + + + 120 + 36 + + + + 查询 + + + + + + + + 120 + 36 + + + + 重置 + + + + + + + Qt::Horizontal + + + + 0 + 0 + + + + + + + + + 200 + 48 + + + + 下一步,配置 + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + + + + QPagedTable + QWidget +
QPagedTable/QPagedTable.h
+
+
+ + +
diff --git a/calibration/calibration.pri b/calibration/calibration.pri index f0e9dfb..8776fe4 100644 --- a/calibration/calibration.pri +++ b/calibration/calibration.pri @@ -1,4 +1,10 @@ HEADERS += $$PWD/CalibrationMainForm.h +HEADERS += $$PWD/TaskListWidget.h +HEADERS += $$PWD/ConfigurationWidget.h SOURCES += $$PWD/CalibrationMainForm.cpp +SOURCES += $$PWD/TaskListWidget.cpp +SOURCES += $$PWD/ConfigurationWidget.cpp FORMS += $$PWD/CalibrationMainForm.ui +FORMS += $$PWD/TaskListWidget.ui +FORMS += $$PWD/ConfigurationWidget.ui diff --git a/QPagedTable/QPagedTable.cpp b/QPagedTable/QPagedTable.cpp index 1bb4af0..1ca1322 100644 --- a/QPagedTable/QPagedTable.cpp +++ b/QPagedTable/QPagedTable.cpp @@ -181,6 +181,10 @@ { ui->wdgtPageBtn->setProperty(name, value); } +void QPagedTable::setCheckBoxClass(QString className) +{ + checkProperty.insert("class", className); +} void QPagedTable::setHeaderHeight(int height) { @@ -217,6 +221,17 @@ return filterList; } +void QPagedTable::setRowSelected(int rowIdx, bool selected) +{ + if (multiCheck != MultiCheckType::NONE) { + QCheckBox *checkBox = ui->table->cellWidget(rowIdx, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->setCheckState(selected ? Qt::CheckState::Checked : Qt::CheckState::Unchecked); + } + } +} + QWidget * QPagedTable::buildNewCheckWidget() { QWidget* activeWidget = new QWidget(ui->table); @@ -225,6 +240,7 @@ QCheckBox* check = new QCheckBox(activeWidget); check->setMinimumSize(25, 25); check->setMaximumSize(25, 25); + check->setProperty("class", checkProperty.value("class")); activelayout->addWidget(check, 0, 0); if (multiCheck == MultiCheckType::RADIO) { @@ -241,6 +257,7 @@ QRadioButton* radio = new QRadioButton(activeWidget); radio->setMinimumSize(25, 25); radio->setMaximumSize(25, 25); + radio->setProperty("class", checkProperty.value("class")); activelayout->addWidget(radio, 0, 0); group->addButton(radio); @@ -336,3 +353,18 @@ page.currentPage = page.totalPage - 1; emit reloadTablePagedData(page.currentPage); } + +void QPagedTable::on_table_cellDoubleClicked(int row, int column) +{ + if (multiCheck != MultiCheckType::NONE && doubleClickSelectRow) { + QTableWidget * tableWidget = qobject_cast(sender()); + if (tableWidget) { + QCheckBox *checkBox = tableWidget->cellWidget(row, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->toggle(); + emit tableRowSelected(row, checkBox->isChecked()); + } + } + } +} diff --git a/QPagedTable/QPagedTable.h b/QPagedTable/QPagedTable.h index e561d01..aacb4aa 100644 --- a/QPagedTable/QPagedTable.h +++ b/QPagedTable/QPagedTable.h @@ -50,6 +50,7 @@ void setTotalCount(int totalCount); void setPageButtonIcons(QStringList iconUrls); void setPageButtonProperty(const char* name, QString value); + void setCheckBoxClass(QString className); void setHeaderHeight(int height); void setDataRowHeight(int height); @@ -62,6 +63,7 @@ QTableWidget * getTableInstance(); QList filterCells(QString colName, QString value); + void setRowSelected(int rowIdx, bool selected); private: Ui::QPagedTable *ui; @@ -92,6 +94,8 @@ int frameBorderSize = 0; int multiCheck = MultiCheckType::NONE; + QMap checkProperty; + bool doubleClickSelectRow = true; QButtonGroup * group; @@ -105,9 +109,12 @@ void on_btnPre_clicked(); void on_btnNext_clicked(); void on_btnLast_clicked(); + void on_table_cellDoubleClicked(int row, int column); + signals: void reloadTablePagedData(int currPage); void contextMenuActionTrigged(int actionIdx, int rowIdx, int colIdx); + void tableRowSelected(int rowIdx, bool selected); }; #endif // QPAGEDTABLE_H diff --git a/calibration/CalibrationMainForm.cpp b/calibration/CalibrationMainForm.cpp index 9b778a5..44d203a 100644 --- a/calibration/CalibrationMainForm.cpp +++ b/calibration/CalibrationMainForm.cpp @@ -6,9 +6,72 @@ ui(new Ui::CalibrationMainForm) { ui->setupUi(this); + + initFormWidgets(); + bindSignalAndHandlers(); } CalibrationMainForm::~CalibrationMainForm() { + qDebug() << "~CalibrationMainForm"; delete ui; } + +QMap & CalibrationMainForm::getSelectedTask() +{ + return selectedTask; +} +QStringList CalibrationMainForm::getVerificationItemCatIds() +{ + return verificationItemCatIds; +} +void CalibrationMainForm::setVerificationItemCatIds(QStringList itemCatIds) +{ + verificationItemCatIds = itemCatIds; +} + +void CalibrationMainForm::showEvent(QShowEvent * event) +{ + selectedTask.clear(); + verificationItemCatIds.clear(); + + ui->wdgtCalMain->setCurrentIndex(0); +} + +void CalibrationMainForm::initFormWidgets() +{ + wdgtTask = new TaskListWidget(this); + wdgtConf = new ConfigurationWidget(this); +// wdgtStandardList = new StandardListWidget(this); +// wdgtConnectState = new ConnectStateWidget(this); + + ui->wdgtCalMain->addWidget(wdgtTask); + ui->wdgtCalMain->addWidget(wdgtConf); +// ui->wdgtContent->addWidget(wdgtStandardList); +// ui->wdgtContent->addWidget(wdgtConnectState); + + ui->wdgtCalMain->setCurrentIndex(0); +} + +void CalibrationMainForm::bindSignalAndHandlers() +{ + // 待检设备清单 下一步 切换到 配置检定项和流程 + connect(wdgtTask, &TaskListWidget::taskEquipmentSelected, this, &CalibrationMainForm::nextToConfiguration); + + // 检定程序 上一步 下一步 +// connect(wdgtCheckProgram, &CheckProgramWidget::switchToReSelectTaskEquipment, this, &CalibrationForm::forwardToReSelectTaskEquipment); +// connect(wdgtCheckProgram, &CheckProgramWidget::switchToNextWidget, this, &CalibrationForm::nextToSelectStandardEquipment); + + // 标准设备 上一步 下一步 +// connect(wdgtStandardList, &StandardListWidget::switchToReSelectCheckProgram, this, &CalibrationForm::forwardToReSelectCheckProgram); +// connect(wdgtStandardList, &StandardListWidget::switchToNextWidget, this, &CalibrationForm::nextToConnectionState); + + // 查看连接状态 +// connect(wdgtConnectState, &ConnectStateWidget::switchToReSelectStandardEqpt, this, &CalibrationForm::forwardToReSelectTaskEquipment); +// connect(wdgtConnectState, &ConnectStateWidget::startAutoCalibration, this, &CalibrationForm::nextToAutoCalibration); +} + +void CalibrationMainForm::nextToConfiguration() +{ + ui->wdgtCalMain->setCurrentWidget(wdgtConf); +} diff --git a/calibration/CalibrationMainForm.h b/calibration/CalibrationMainForm.h index 7d75014..e4bc44c 100644 --- a/calibration/CalibrationMainForm.h +++ b/calibration/CalibrationMainForm.h @@ -3,6 +3,10 @@ #include +#include "dao/service/TaskService.h" +#include "calibration/TaskListWidget.h" +#include "calibration/ConfigurationWidget.h" + namespace Ui { class CalibrationMainForm; } @@ -15,8 +19,38 @@ explicit CalibrationMainForm(QWidget *parent = nullptr); ~CalibrationMainForm(); + QMap & getSelectedTask(); + QStringList getVerificationItemCatIds(); + void setVerificationItemCatIds(QStringList itemCatIds); + + // 选定的检定程序(单选) +// CheckProgramDto selectedCheckProgram; + + // 选定的标准设备清单 +// QMap selectedStdEquipment; + +protected: + void showEvent(QShowEvent * event) override; + + private: Ui::CalibrationMainForm *ui; + + TaskListWidget * wdgtTask; + ConfigurationWidget * wdgtConf; + + // 选择的任务清单(待检设备清单) + QMap selectedTask; + + // 所选待检设备对应的检定项分类 + QStringList verificationItemCatIds; + + void initFormWidgets(); + void bindSignalAndHandlers(); + +private slots: + // 待检设备已选择完毕 + void nextToConfiguration(); }; #endif // CALIBRATIONMAINFORM_H diff --git a/calibration/CalibrationMainForm.ui b/calibration/CalibrationMainForm.ui index 9b5a9c2..5479af5 100644 --- a/calibration/CalibrationMainForm.ui +++ b/calibration/CalibrationMainForm.ui @@ -1,9 +1,7 @@ + - - - CalibrationMainForm - + 0 @@ -15,7 +13,27 @@ Form + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + - + diff --git a/calibration/ConfigurationWidget.cpp b/calibration/ConfigurationWidget.cpp new file mode 100644 index 0000000..5e47dc2 --- /dev/null +++ b/calibration/ConfigurationWidget.cpp @@ -0,0 +1,14 @@ +#include "ConfigurationWidget.h" +#include "ui_ConfigurationWidget.h" + +ConfigurationWidget::ConfigurationWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::ConfigurationWidget) +{ + ui->setupUi(this); +} + +ConfigurationWidget::~ConfigurationWidget() +{ + delete ui; +} diff --git a/calibration/ConfigurationWidget.h b/calibration/ConfigurationWidget.h new file mode 100644 index 0000000..b3321c1 --- /dev/null +++ b/calibration/ConfigurationWidget.h @@ -0,0 +1,22 @@ +#ifndef CONFIGURATIONWIDGET_H +#define CONFIGURATIONWIDGET_H + +#include + +namespace Ui { +class ConfigurationWidget; +} + +class ConfigurationWidget : public QWidget +{ + Q_OBJECT + +public: + explicit ConfigurationWidget(QWidget *parent = nullptr); + ~ConfigurationWidget(); + +private: + Ui::ConfigurationWidget *ui; +}; + +#endif // CONFIGURATIONWIDGET_H diff --git a/calibration/ConfigurationWidget.ui b/calibration/ConfigurationWidget.ui new file mode 100644 index 0000000..a567bba --- /dev/null +++ b/calibration/ConfigurationWidget.ui @@ -0,0 +1,21 @@ + + + + + ConfigurationWidget + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + diff --git a/calibration/TaskListWidget.cpp b/calibration/TaskListWidget.cpp new file mode 100644 index 0000000..31f16c7 --- /dev/null +++ b/calibration/TaskListWidget.cpp @@ -0,0 +1,202 @@ +#include "TaskListWidget.h" +#include "ui_TaskListWidget.h" + +#include "calibration/CalibrationMainForm.h" + +TaskListWidget::TaskListWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::TaskListWidget) +{ + ui->setupUi(this); + parentForm = (CalibrationMainForm *)parent; + + initForm(); + initFormTable(); + + // 绑定信号与槽 + connect(ui->tableTaskTBDList, &QPagedTable::reloadTablePagedData, this, &TaskListWidget::getTaskToBeDoneList); +} + +TaskListWidget::~TaskListWidget() +{ + qDebug() << "~TaskListWidget"; + delete ui; +} + +void TaskListWidget::showEvent(QShowEvent * event) +{ + ui->tableTaskTBDList->adjustTableWidth(); + getTaskToBeDoneList(0); +} + +void TaskListWidget::resizeEvent(QResizeEvent * event) +{ + ui->tableTaskTBDList->adjustTableWidth(); +} + +void TaskListWidget::initForm() +{ + // 加载样式表 + QString qssStyle = QssFileUtils::loadQssFileContent(":/qss/infoTable.css"); + if (qssStyle.isEmpty() == false) { + this->setStyleSheet(qssStyle); // 仅本窗口生效 + } + + // 查询条件的样式 + QList children = ui->wdgtQueryBox->findChildren(); + for (QWidget * wdgt : children) { + wdgt->setProperty("class", "queryBox"); + + if (QString(wdgt->metaObject()->className()).contains("QLineEdit")) { + // 绑定输入框回车事件 只在密码输入框执行 + connect((QLineEdit *)wdgt, &QLineEdit::returnPressed, this, [=](){ + emit ui->btnQuery->clicked(); + }); + } + } + + // 查询和重置按钮 + ui->btnQuery->setProperty("class", "btnDefault"); + ui->btnResetQuery->setProperty("class", "btnResetQuery"); + + ui->tableTaskTBDList->setTableProperty("class", "defaultTable"); + + // 分页组件 + QStringList btnPageGroupUrls; + btnPageGroupUrls << ":/image/infomation/btnPageFirst.png" << ":/image/infomation/btnPagePre.png" + << ":/image/infomation/btnPageNext.png" << ":/image/infomation/btnPageLast.png"; + ui->tableTaskTBDList->setPageButtonIcons(btnPageGroupUrls); + ui->tableTaskTBDList->setPageButtonProperty("class", "pageBtnGroup"); +} + +void TaskListWidget::initFormTable() +{ + // 初始化查询条件 + SysLocalService localServ; + QList> deptTaskColumns = localServ.getInfomationTableColumns("deptTask"); + ui->tableTaskTBDList->setColumns(deptTaskColumns); + + ui->tableTaskTBDList->setMultiCheckType(QPagedTable::MultiCheckType::MULTI); + ui->tableTaskTBDList->setCheckBoxClass("defaultSolid"); + + ui->tableTaskTBDList->setDataRowHeight(45); + + connect(ui->tableTaskTBDList, &QPagedTable::tableRowSelected, this, &TaskListWidget::rowSelectedHandler); + + initUrgentSelect(); + + ui->tableTaskTBDList->initTableWidget(); + ui->tableTaskTBDList->initTableHeader(); +} + +void TaskListWidget::initUrgentSelect() +{ + ui->selectUrgent->addItem("全部", ""); + ui->selectUrgent->addItem("不加急", "0"); + ui->selectUrgent->addItem("加急", "1"); + + ui->selectUrgent->setView(new QListView()); // 使ComboBox下拉选项 的QSS生效的关键代码 +} + +void TaskListWidget::getTaskToBeDoneList(int currPage) +{ + TaskService taskServ; + taskList.clear(); // 清除之前的结果 + + // 获取所有查询条件 + TaskRequest request; + request.userId = ProMemory::getInstance().getLoginUser().value("id").toString(); + request.sampleName = ui->inputDevName->text(); + request.sampleModel = ui->inputDevModel->text(); + request.customerName = ui->inputCustomer->text(); + request.measureStatusList << "3" << "2"; + request.isUrgent = ui->selectUrgent->currentData().toString(); + + // 查询页 + page.currentPage = currPage; + + // 查询数据库 + taskList = taskServ.getDeptTaskListPage(request, page); + QList> pageData; + for (TaskDTO task : taskList) { + QMap item; + + item.insert("id", task.id); + item.insert("name", task.sampleName); + item.insert("model", task.sampleModel); + item.insert("serialNo", task.manufactureNo); + item.insert("maker", task.manufacturer); + item.insert("custom", task.customerName); + item.insert("requireTime", task.requireOverTime); + item.insert("isUrgent", task.isUrgentName); + item.insert("orderNo", task.orderNo); + item.insert("measureStatus", task.measureStatusName); + + pageData.append(item); + } + + // 设置分页表格数据 + ui->tableTaskTBDList->setTotalCount(page.totalCount); + ui->tableTaskTBDList->setDatas(pageData); + + // 筛选 加急=是 的单元格标红提示 + QList matchedRows = ui->tableTaskTBDList->filterCells("isUrgent", "是"); + if (!matchedRows.isEmpty()) { + for (int row : matchedRows) { + ui->tableTaskTBDList->getTableInstance()->item(row, 10)->setForeground(QBrush("#FF0000")); // 多加了一列复选框 + } + } + + // 勾选上已经选中的记录 + for (int i = 0; i < taskList.size(); i++) { + ui->tableTaskTBDList->setRowSelected(i, parentForm->getSelectedTask().contains(taskList.at(i).sampleId)); + } +} + +void TaskListWidget::rowSelectedHandler(int rowIdx, bool selected) +{ + QString rowId = taskList.at(rowIdx).sampleId; + if (selected) { + parentForm->getSelectedTask().insert(rowId, taskList.at(rowIdx)); + } else { + parentForm->getSelectedTask().remove(rowId); + } +} + +void TaskListWidget::on_btnQuery_clicked() +{ + getTaskToBeDoneList(0); +} + +void TaskListWidget::on_btnResetQuery_clicked() +{ + ui->inputDevName->setText(""); + ui->inputDevModel->setText(""); + ui->inputCustomer->setText(""); + + ui->selectUrgent->setCurrentIndex(0); + + getTaskToBeDoneList(0); +} + + +void TaskListWidget::on_btnNextToConf_clicked() +{ + if (parentForm->getSelectedTask().size() == 0) { + CustomMessageBox::warning(this, "提示", "请选择被检设备!"); + } else { + // 判断多个被检设备 分类和量程是否都相同 + TaskService taskServ; + QStringList itemCats = taskServ.getVerificationItemCatsBySelectedTask(parentForm->getSelectedTask().keys()); + + if (itemCats.size() == 1) { + parentForm->setVerificationItemCatIds(itemCats); + emit taskEquipmentSelected(); + } else if (itemCats.isEmpty()) { + CustomMessageBox::warning(this, "提示", "没找到所选待检设备的检定项分类,请检查相关配置"); + } else { + qDebug() << itemCats; + CustomMessageBox::warning(this, "提示", "所选的多个待检设备检定项目不同,请重新选择"); + } + } +} diff --git a/calibration/TaskListWidget.h b/calibration/TaskListWidget.h new file mode 100644 index 0000000..5d89a72 --- /dev/null +++ b/calibration/TaskListWidget.h @@ -0,0 +1,55 @@ +#ifndef TASKLISTWIDGET_H +#define TASKLISTWIDGET_H + +#include +#include + +#include "dao/service/SysLocalService.h" +#include "dao/service/TaskService.h" +#include "frame/CustomMessageBox.h" + +class CalibrationMainForm; + +namespace Ui { +class TaskListWidget; +} + +class TaskListWidget : public QWidget +{ + Q_OBJECT + +public: + explicit TaskListWidget(QWidget *parent = nullptr); + ~TaskListWidget(); + +protected: + void showEvent(QShowEvent * event) override; + void resizeEvent(QResizeEvent * event) override; + +private: + Ui::TaskListWidget *ui; + CalibrationMainForm * parentForm; + Page page; + + // 待检设备清单 + QList taskList; + + void initForm(); + void initFormTable(); + + void initMeasureStatusSelect(); + void initUrgentSelect(); + +private slots: + void getTaskToBeDoneList(int currPage); + void rowSelectedHandler(int rowIdx, bool selected); + void on_btnQuery_clicked(); + void on_btnResetQuery_clicked(); + void on_btnNextToConf_clicked(); + +signals: + void taskEquipmentSelected(); + +}; + +#endif // TASKLISTWIDGET_H diff --git a/calibration/TaskListWidget.ui b/calibration/TaskListWidget.ui new file mode 100644 index 0000000..0dd382d --- /dev/null +++ b/calibration/TaskListWidget.ui @@ -0,0 +1,232 @@ + + + TaskListWidget + + + + 0 + 0 + 1245 + 605 + + + + Form + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 10 + + + 10 + + + 10 + + + 10 + + + 10 + + + + + + 0 + 0 + + + + + 150 + 36 + + + + + + + 受检设备名称 + + + + + + + + 0 + 0 + + + + + 150 + 36 + + + + 规格型号 + + + + + + + + 0 + 0 + + + + + 150 + 36 + + + + 委托方 + + + + + + + + 0 + 0 + + + + + 120 + 36 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 100 + 20 + + + + + + + + + 120 + 36 + + + + 查询 + + + + + + + + 120 + 36 + + + + 重置 + + + + + + + Qt::Horizontal + + + + 0 + 0 + + + + + + + + + 200 + 48 + + + + 下一步,配置 + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + + + + QPagedTable + QWidget +
QPagedTable/QPagedTable.h
+
+
+ + +
diff --git a/calibration/calibration.pri b/calibration/calibration.pri index f0e9dfb..8776fe4 100644 --- a/calibration/calibration.pri +++ b/calibration/calibration.pri @@ -1,4 +1,10 @@ HEADERS += $$PWD/CalibrationMainForm.h +HEADERS += $$PWD/TaskListWidget.h +HEADERS += $$PWD/ConfigurationWidget.h SOURCES += $$PWD/CalibrationMainForm.cpp +SOURCES += $$PWD/TaskListWidget.cpp +SOURCES += $$PWD/ConfigurationWidget.cpp FORMS += $$PWD/CalibrationMainForm.ui +FORMS += $$PWD/TaskListWidget.ui +FORMS += $$PWD/ConfigurationWidget.ui diff --git a/dao/CheckDao.cpp b/dao/CheckDao.cpp new file mode 100644 index 0000000..6fb9efe --- /dev/null +++ b/dao/CheckDao.cpp @@ -0,0 +1,141 @@ +#include "CheckDao.h" + +CheckDao::CheckDao() +{ + +} + +QStringList CheckDao::getMeasureItemCategoryByModels(QStringList modelIds) +{ + QStringList result; + + QSqlDatabase dbLocal = CDbConnectionPool::instance().openConnection("local"); + QSqlQuery query(dbLocal); + + QString sql = "SELECT bbdmii.item_category_id FROM biz_business_device_measure_item_info bbdmii " + "WHERE "; + for (int i = 0; i < modelIds.size() - 1; i++) { + sql += "bbdmii.device_model_id = ? AND "; + } + sql += "bbdmii.device_model_id = ?;"; + query.prepare(sql); + + for (int i = 0; i < modelIds.size(); i++) { + query.bindValue(i, modelIds.at(i)); + } + + bool isSuccess = query.exec(); + if (isSuccess) { + while (query.next()) { + result << query.value("item_category_id").toString(); + } + } else { + qDebug() << "Query execution failed: " << query.lastError().text(); + } + + return result; +} + +QStringList CheckDao::getSelectedTaskMeasureItemCategory(QStringList taskSampleIds) +{ + QStringList resultList; + + QSqlDatabase dbLocal = CDbConnectionPool::instance().openConnection("local"); + QSqlQuery query(dbLocal); + + QString placeholders = QString("?,").repeated(taskSampleIds.size()).chopped(1); + + QString sql = QString("SELECT bbdmii.item_category_id FROM biz_business_device_measure_item_info bbdmii " + "LEFT JOIN eqpt_equipment_model_info eemi ON eemi.id = bbdmii.device_model_id " + "LEFT JOIN eqpt_equipment_info eei ON eei.model_id = eemi.id " + "WHERE eei.id in (%1);").arg(placeholders); + + qDebug() << sql << taskSampleIds; + + query.prepare(sql); + for (QString sampleId : taskSampleIds) { + query.addBindValue(sampleId); + } + + if (query.exec()) { + while (query.next()) { + resultList << query.value(0).toString(); + } + } else { + LogUtil::PrintLog("ERROR", QString("查询所选待检设备的检定项分类失败[%1]").arg(query.lastError().text())); + } + + return resultList; +} + +DeviceMeasureCategoryDto CheckDao::getDeviceMeasureCategoryById(QString categoryId) +{ + DeviceMeasureCategoryDto result; + + QSqlDatabase dbLocal = CDbConnectionPool::instance().openConnection("local"); + QSqlQuery query(dbLocal); + + QString sql = "SELECT bbdmic.* FROM biz_business_device_measure_item_category bbdmic " + "WHERE bbdmic.id = :id"; + + query.prepare(sql); + query.bindValue(":id", categoryId); + + bool isSuccess = query.exec(); + if (isSuccess) { + if (query.first()) { + result.id = query.value("id").toString(); + result.categoryNo = query.value("category_no").toString(); + result.categoryName = query.value("category_name").toString(); + result.deviceType = query.value("device_type").toString(); + result.belongStandardEquipment = query.value("belong_standard_equipment").toString(); + result.measureCategory = query.value("measure_category").toString(); + result.technologyFile = query.value("technology_file").toString(); + } + } else { + LogUtil::PrintLog("ERROR", QString("查询标准设备的检定项分类失败[%1][%2]").arg(categoryId).arg(query.lastError().text())); + } + + qDebug() << "CheckDao::getDeviceMeasureCategoryById: " << query.lastQuery() << categoryId; + + return result; +} + +QList CheckDao::getDeviceRoleByCategory(QString categoryId) +{ + QList result; + + DeviceMeasureCategoryDto category = getDeviceMeasureCategoryById(categoryId); + + QSqlDatabase dbLocal = CDbConnectionPool::instance().openConnection("local"); + QSqlQuery query(dbLocal); + + QString sql = "SELECT * FROM zd_device_role WHERE cateory_id = :cateory or cateory_name = :categoryName;"; + query.prepare(sql); + + query.bindValue(":cateory", categoryId); + query.bindValue(":categoryName", category.categoryName); + bool isSuccess = query.exec(); + if (isSuccess) { + while (query.next()) { + ZdDeviceRoleDto role; + + role.id = query.value("id").toString(); + role.belongVername = query.value("belong_vername").toString(); + role.belongCheckname = query.value("belong_checkname").toString(); + role.categoryId = query.value("cateory_id").toString(); + role.categoryName = query.value("cateory_name").toString(); + role.deviceId = query.value("device_id").toString(); + role.deviceType = query.value("device_type").toString(); + role.role = query.value("role").toString(); + + result.append(role); + } + } else { + LogUtil::PrintLog("ERROR", QString("查询标准设备的角色分类失败[%1][%2][%3]").arg(categoryId).arg(category.categoryName).arg(query.lastError().text())); + } + + qDebug() << "CheckDao::getDeviceRoleByCategory: " << query.lastQuery() << categoryId << category.categoryName; + + return result; +} diff --git a/QPagedTable/QPagedTable.cpp b/QPagedTable/QPagedTable.cpp index 1bb4af0..1ca1322 100644 --- a/QPagedTable/QPagedTable.cpp +++ b/QPagedTable/QPagedTable.cpp @@ -181,6 +181,10 @@ { ui->wdgtPageBtn->setProperty(name, value); } +void QPagedTable::setCheckBoxClass(QString className) +{ + checkProperty.insert("class", className); +} void QPagedTable::setHeaderHeight(int height) { @@ -217,6 +221,17 @@ return filterList; } +void QPagedTable::setRowSelected(int rowIdx, bool selected) +{ + if (multiCheck != MultiCheckType::NONE) { + QCheckBox *checkBox = ui->table->cellWidget(rowIdx, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->setCheckState(selected ? Qt::CheckState::Checked : Qt::CheckState::Unchecked); + } + } +} + QWidget * QPagedTable::buildNewCheckWidget() { QWidget* activeWidget = new QWidget(ui->table); @@ -225,6 +240,7 @@ QCheckBox* check = new QCheckBox(activeWidget); check->setMinimumSize(25, 25); check->setMaximumSize(25, 25); + check->setProperty("class", checkProperty.value("class")); activelayout->addWidget(check, 0, 0); if (multiCheck == MultiCheckType::RADIO) { @@ -241,6 +257,7 @@ QRadioButton* radio = new QRadioButton(activeWidget); radio->setMinimumSize(25, 25); radio->setMaximumSize(25, 25); + radio->setProperty("class", checkProperty.value("class")); activelayout->addWidget(radio, 0, 0); group->addButton(radio); @@ -336,3 +353,18 @@ page.currentPage = page.totalPage - 1; emit reloadTablePagedData(page.currentPage); } + +void QPagedTable::on_table_cellDoubleClicked(int row, int column) +{ + if (multiCheck != MultiCheckType::NONE && doubleClickSelectRow) { + QTableWidget * tableWidget = qobject_cast(sender()); + if (tableWidget) { + QCheckBox *checkBox = tableWidget->cellWidget(row, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->toggle(); + emit tableRowSelected(row, checkBox->isChecked()); + } + } + } +} diff --git a/QPagedTable/QPagedTable.h b/QPagedTable/QPagedTable.h index e561d01..aacb4aa 100644 --- a/QPagedTable/QPagedTable.h +++ b/QPagedTable/QPagedTable.h @@ -50,6 +50,7 @@ void setTotalCount(int totalCount); void setPageButtonIcons(QStringList iconUrls); void setPageButtonProperty(const char* name, QString value); + void setCheckBoxClass(QString className); void setHeaderHeight(int height); void setDataRowHeight(int height); @@ -62,6 +63,7 @@ QTableWidget * getTableInstance(); QList filterCells(QString colName, QString value); + void setRowSelected(int rowIdx, bool selected); private: Ui::QPagedTable *ui; @@ -92,6 +94,8 @@ int frameBorderSize = 0; int multiCheck = MultiCheckType::NONE; + QMap checkProperty; + bool doubleClickSelectRow = true; QButtonGroup * group; @@ -105,9 +109,12 @@ void on_btnPre_clicked(); void on_btnNext_clicked(); void on_btnLast_clicked(); + void on_table_cellDoubleClicked(int row, int column); + signals: void reloadTablePagedData(int currPage); void contextMenuActionTrigged(int actionIdx, int rowIdx, int colIdx); + void tableRowSelected(int rowIdx, bool selected); }; #endif // QPAGEDTABLE_H diff --git a/calibration/CalibrationMainForm.cpp b/calibration/CalibrationMainForm.cpp index 9b778a5..44d203a 100644 --- a/calibration/CalibrationMainForm.cpp +++ b/calibration/CalibrationMainForm.cpp @@ -6,9 +6,72 @@ ui(new Ui::CalibrationMainForm) { ui->setupUi(this); + + initFormWidgets(); + bindSignalAndHandlers(); } CalibrationMainForm::~CalibrationMainForm() { + qDebug() << "~CalibrationMainForm"; delete ui; } + +QMap & CalibrationMainForm::getSelectedTask() +{ + return selectedTask; +} +QStringList CalibrationMainForm::getVerificationItemCatIds() +{ + return verificationItemCatIds; +} +void CalibrationMainForm::setVerificationItemCatIds(QStringList itemCatIds) +{ + verificationItemCatIds = itemCatIds; +} + +void CalibrationMainForm::showEvent(QShowEvent * event) +{ + selectedTask.clear(); + verificationItemCatIds.clear(); + + ui->wdgtCalMain->setCurrentIndex(0); +} + +void CalibrationMainForm::initFormWidgets() +{ + wdgtTask = new TaskListWidget(this); + wdgtConf = new ConfigurationWidget(this); +// wdgtStandardList = new StandardListWidget(this); +// wdgtConnectState = new ConnectStateWidget(this); + + ui->wdgtCalMain->addWidget(wdgtTask); + ui->wdgtCalMain->addWidget(wdgtConf); +// ui->wdgtContent->addWidget(wdgtStandardList); +// ui->wdgtContent->addWidget(wdgtConnectState); + + ui->wdgtCalMain->setCurrentIndex(0); +} + +void CalibrationMainForm::bindSignalAndHandlers() +{ + // 待检设备清单 下一步 切换到 配置检定项和流程 + connect(wdgtTask, &TaskListWidget::taskEquipmentSelected, this, &CalibrationMainForm::nextToConfiguration); + + // 检定程序 上一步 下一步 +// connect(wdgtCheckProgram, &CheckProgramWidget::switchToReSelectTaskEquipment, this, &CalibrationForm::forwardToReSelectTaskEquipment); +// connect(wdgtCheckProgram, &CheckProgramWidget::switchToNextWidget, this, &CalibrationForm::nextToSelectStandardEquipment); + + // 标准设备 上一步 下一步 +// connect(wdgtStandardList, &StandardListWidget::switchToReSelectCheckProgram, this, &CalibrationForm::forwardToReSelectCheckProgram); +// connect(wdgtStandardList, &StandardListWidget::switchToNextWidget, this, &CalibrationForm::nextToConnectionState); + + // 查看连接状态 +// connect(wdgtConnectState, &ConnectStateWidget::switchToReSelectStandardEqpt, this, &CalibrationForm::forwardToReSelectTaskEquipment); +// connect(wdgtConnectState, &ConnectStateWidget::startAutoCalibration, this, &CalibrationForm::nextToAutoCalibration); +} + +void CalibrationMainForm::nextToConfiguration() +{ + ui->wdgtCalMain->setCurrentWidget(wdgtConf); +} diff --git a/calibration/CalibrationMainForm.h b/calibration/CalibrationMainForm.h index 7d75014..e4bc44c 100644 --- a/calibration/CalibrationMainForm.h +++ b/calibration/CalibrationMainForm.h @@ -3,6 +3,10 @@ #include +#include "dao/service/TaskService.h" +#include "calibration/TaskListWidget.h" +#include "calibration/ConfigurationWidget.h" + namespace Ui { class CalibrationMainForm; } @@ -15,8 +19,38 @@ explicit CalibrationMainForm(QWidget *parent = nullptr); ~CalibrationMainForm(); + QMap & getSelectedTask(); + QStringList getVerificationItemCatIds(); + void setVerificationItemCatIds(QStringList itemCatIds); + + // 选定的检定程序(单选) +// CheckProgramDto selectedCheckProgram; + + // 选定的标准设备清单 +// QMap selectedStdEquipment; + +protected: + void showEvent(QShowEvent * event) override; + + private: Ui::CalibrationMainForm *ui; + + TaskListWidget * wdgtTask; + ConfigurationWidget * wdgtConf; + + // 选择的任务清单(待检设备清单) + QMap selectedTask; + + // 所选待检设备对应的检定项分类 + QStringList verificationItemCatIds; + + void initFormWidgets(); + void bindSignalAndHandlers(); + +private slots: + // 待检设备已选择完毕 + void nextToConfiguration(); }; #endif // CALIBRATIONMAINFORM_H diff --git a/calibration/CalibrationMainForm.ui b/calibration/CalibrationMainForm.ui index 9b5a9c2..5479af5 100644 --- a/calibration/CalibrationMainForm.ui +++ b/calibration/CalibrationMainForm.ui @@ -1,9 +1,7 @@ + - - - CalibrationMainForm - + 0 @@ -15,7 +13,27 @@ Form + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + - + diff --git a/calibration/ConfigurationWidget.cpp b/calibration/ConfigurationWidget.cpp new file mode 100644 index 0000000..5e47dc2 --- /dev/null +++ b/calibration/ConfigurationWidget.cpp @@ -0,0 +1,14 @@ +#include "ConfigurationWidget.h" +#include "ui_ConfigurationWidget.h" + +ConfigurationWidget::ConfigurationWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::ConfigurationWidget) +{ + ui->setupUi(this); +} + +ConfigurationWidget::~ConfigurationWidget() +{ + delete ui; +} diff --git a/calibration/ConfigurationWidget.h b/calibration/ConfigurationWidget.h new file mode 100644 index 0000000..b3321c1 --- /dev/null +++ b/calibration/ConfigurationWidget.h @@ -0,0 +1,22 @@ +#ifndef CONFIGURATIONWIDGET_H +#define CONFIGURATIONWIDGET_H + +#include + +namespace Ui { +class ConfigurationWidget; +} + +class ConfigurationWidget : public QWidget +{ + Q_OBJECT + +public: + explicit ConfigurationWidget(QWidget *parent = nullptr); + ~ConfigurationWidget(); + +private: + Ui::ConfigurationWidget *ui; +}; + +#endif // CONFIGURATIONWIDGET_H diff --git a/calibration/ConfigurationWidget.ui b/calibration/ConfigurationWidget.ui new file mode 100644 index 0000000..a567bba --- /dev/null +++ b/calibration/ConfigurationWidget.ui @@ -0,0 +1,21 @@ + + + + + ConfigurationWidget + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + diff --git a/calibration/TaskListWidget.cpp b/calibration/TaskListWidget.cpp new file mode 100644 index 0000000..31f16c7 --- /dev/null +++ b/calibration/TaskListWidget.cpp @@ -0,0 +1,202 @@ +#include "TaskListWidget.h" +#include "ui_TaskListWidget.h" + +#include "calibration/CalibrationMainForm.h" + +TaskListWidget::TaskListWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::TaskListWidget) +{ + ui->setupUi(this); + parentForm = (CalibrationMainForm *)parent; + + initForm(); + initFormTable(); + + // 绑定信号与槽 + connect(ui->tableTaskTBDList, &QPagedTable::reloadTablePagedData, this, &TaskListWidget::getTaskToBeDoneList); +} + +TaskListWidget::~TaskListWidget() +{ + qDebug() << "~TaskListWidget"; + delete ui; +} + +void TaskListWidget::showEvent(QShowEvent * event) +{ + ui->tableTaskTBDList->adjustTableWidth(); + getTaskToBeDoneList(0); +} + +void TaskListWidget::resizeEvent(QResizeEvent * event) +{ + ui->tableTaskTBDList->adjustTableWidth(); +} + +void TaskListWidget::initForm() +{ + // 加载样式表 + QString qssStyle = QssFileUtils::loadQssFileContent(":/qss/infoTable.css"); + if (qssStyle.isEmpty() == false) { + this->setStyleSheet(qssStyle); // 仅本窗口生效 + } + + // 查询条件的样式 + QList children = ui->wdgtQueryBox->findChildren(); + for (QWidget * wdgt : children) { + wdgt->setProperty("class", "queryBox"); + + if (QString(wdgt->metaObject()->className()).contains("QLineEdit")) { + // 绑定输入框回车事件 只在密码输入框执行 + connect((QLineEdit *)wdgt, &QLineEdit::returnPressed, this, [=](){ + emit ui->btnQuery->clicked(); + }); + } + } + + // 查询和重置按钮 + ui->btnQuery->setProperty("class", "btnDefault"); + ui->btnResetQuery->setProperty("class", "btnResetQuery"); + + ui->tableTaskTBDList->setTableProperty("class", "defaultTable"); + + // 分页组件 + QStringList btnPageGroupUrls; + btnPageGroupUrls << ":/image/infomation/btnPageFirst.png" << ":/image/infomation/btnPagePre.png" + << ":/image/infomation/btnPageNext.png" << ":/image/infomation/btnPageLast.png"; + ui->tableTaskTBDList->setPageButtonIcons(btnPageGroupUrls); + ui->tableTaskTBDList->setPageButtonProperty("class", "pageBtnGroup"); +} + +void TaskListWidget::initFormTable() +{ + // 初始化查询条件 + SysLocalService localServ; + QList> deptTaskColumns = localServ.getInfomationTableColumns("deptTask"); + ui->tableTaskTBDList->setColumns(deptTaskColumns); + + ui->tableTaskTBDList->setMultiCheckType(QPagedTable::MultiCheckType::MULTI); + ui->tableTaskTBDList->setCheckBoxClass("defaultSolid"); + + ui->tableTaskTBDList->setDataRowHeight(45); + + connect(ui->tableTaskTBDList, &QPagedTable::tableRowSelected, this, &TaskListWidget::rowSelectedHandler); + + initUrgentSelect(); + + ui->tableTaskTBDList->initTableWidget(); + ui->tableTaskTBDList->initTableHeader(); +} + +void TaskListWidget::initUrgentSelect() +{ + ui->selectUrgent->addItem("全部", ""); + ui->selectUrgent->addItem("不加急", "0"); + ui->selectUrgent->addItem("加急", "1"); + + ui->selectUrgent->setView(new QListView()); // 使ComboBox下拉选项 的QSS生效的关键代码 +} + +void TaskListWidget::getTaskToBeDoneList(int currPage) +{ + TaskService taskServ; + taskList.clear(); // 清除之前的结果 + + // 获取所有查询条件 + TaskRequest request; + request.userId = ProMemory::getInstance().getLoginUser().value("id").toString(); + request.sampleName = ui->inputDevName->text(); + request.sampleModel = ui->inputDevModel->text(); + request.customerName = ui->inputCustomer->text(); + request.measureStatusList << "3" << "2"; + request.isUrgent = ui->selectUrgent->currentData().toString(); + + // 查询页 + page.currentPage = currPage; + + // 查询数据库 + taskList = taskServ.getDeptTaskListPage(request, page); + QList> pageData; + for (TaskDTO task : taskList) { + QMap item; + + item.insert("id", task.id); + item.insert("name", task.sampleName); + item.insert("model", task.sampleModel); + item.insert("serialNo", task.manufactureNo); + item.insert("maker", task.manufacturer); + item.insert("custom", task.customerName); + item.insert("requireTime", task.requireOverTime); + item.insert("isUrgent", task.isUrgentName); + item.insert("orderNo", task.orderNo); + item.insert("measureStatus", task.measureStatusName); + + pageData.append(item); + } + + // 设置分页表格数据 + ui->tableTaskTBDList->setTotalCount(page.totalCount); + ui->tableTaskTBDList->setDatas(pageData); + + // 筛选 加急=是 的单元格标红提示 + QList matchedRows = ui->tableTaskTBDList->filterCells("isUrgent", "是"); + if (!matchedRows.isEmpty()) { + for (int row : matchedRows) { + ui->tableTaskTBDList->getTableInstance()->item(row, 10)->setForeground(QBrush("#FF0000")); // 多加了一列复选框 + } + } + + // 勾选上已经选中的记录 + for (int i = 0; i < taskList.size(); i++) { + ui->tableTaskTBDList->setRowSelected(i, parentForm->getSelectedTask().contains(taskList.at(i).sampleId)); + } +} + +void TaskListWidget::rowSelectedHandler(int rowIdx, bool selected) +{ + QString rowId = taskList.at(rowIdx).sampleId; + if (selected) { + parentForm->getSelectedTask().insert(rowId, taskList.at(rowIdx)); + } else { + parentForm->getSelectedTask().remove(rowId); + } +} + +void TaskListWidget::on_btnQuery_clicked() +{ + getTaskToBeDoneList(0); +} + +void TaskListWidget::on_btnResetQuery_clicked() +{ + ui->inputDevName->setText(""); + ui->inputDevModel->setText(""); + ui->inputCustomer->setText(""); + + ui->selectUrgent->setCurrentIndex(0); + + getTaskToBeDoneList(0); +} + + +void TaskListWidget::on_btnNextToConf_clicked() +{ + if (parentForm->getSelectedTask().size() == 0) { + CustomMessageBox::warning(this, "提示", "请选择被检设备!"); + } else { + // 判断多个被检设备 分类和量程是否都相同 + TaskService taskServ; + QStringList itemCats = taskServ.getVerificationItemCatsBySelectedTask(parentForm->getSelectedTask().keys()); + + if (itemCats.size() == 1) { + parentForm->setVerificationItemCatIds(itemCats); + emit taskEquipmentSelected(); + } else if (itemCats.isEmpty()) { + CustomMessageBox::warning(this, "提示", "没找到所选待检设备的检定项分类,请检查相关配置"); + } else { + qDebug() << itemCats; + CustomMessageBox::warning(this, "提示", "所选的多个待检设备检定项目不同,请重新选择"); + } + } +} diff --git a/calibration/TaskListWidget.h b/calibration/TaskListWidget.h new file mode 100644 index 0000000..5d89a72 --- /dev/null +++ b/calibration/TaskListWidget.h @@ -0,0 +1,55 @@ +#ifndef TASKLISTWIDGET_H +#define TASKLISTWIDGET_H + +#include +#include + +#include "dao/service/SysLocalService.h" +#include "dao/service/TaskService.h" +#include "frame/CustomMessageBox.h" + +class CalibrationMainForm; + +namespace Ui { +class TaskListWidget; +} + +class TaskListWidget : public QWidget +{ + Q_OBJECT + +public: + explicit TaskListWidget(QWidget *parent = nullptr); + ~TaskListWidget(); + +protected: + void showEvent(QShowEvent * event) override; + void resizeEvent(QResizeEvent * event) override; + +private: + Ui::TaskListWidget *ui; + CalibrationMainForm * parentForm; + Page page; + + // 待检设备清单 + QList taskList; + + void initForm(); + void initFormTable(); + + void initMeasureStatusSelect(); + void initUrgentSelect(); + +private slots: + void getTaskToBeDoneList(int currPage); + void rowSelectedHandler(int rowIdx, bool selected); + void on_btnQuery_clicked(); + void on_btnResetQuery_clicked(); + void on_btnNextToConf_clicked(); + +signals: + void taskEquipmentSelected(); + +}; + +#endif // TASKLISTWIDGET_H diff --git a/calibration/TaskListWidget.ui b/calibration/TaskListWidget.ui new file mode 100644 index 0000000..0dd382d --- /dev/null +++ b/calibration/TaskListWidget.ui @@ -0,0 +1,232 @@ + + + TaskListWidget + + + + 0 + 0 + 1245 + 605 + + + + Form + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 10 + + + 10 + + + 10 + + + 10 + + + 10 + + + + + + 0 + 0 + + + + + 150 + 36 + + + + + + + 受检设备名称 + + + + + + + + 0 + 0 + + + + + 150 + 36 + + + + 规格型号 + + + + + + + + 0 + 0 + + + + + 150 + 36 + + + + 委托方 + + + + + + + + 0 + 0 + + + + + 120 + 36 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 100 + 20 + + + + + + + + + 120 + 36 + + + + 查询 + + + + + + + + 120 + 36 + + + + 重置 + + + + + + + Qt::Horizontal + + + + 0 + 0 + + + + + + + + + 200 + 48 + + + + 下一步,配置 + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + + + + QPagedTable + QWidget +
QPagedTable/QPagedTable.h
+
+
+ + +
diff --git a/calibration/calibration.pri b/calibration/calibration.pri index f0e9dfb..8776fe4 100644 --- a/calibration/calibration.pri +++ b/calibration/calibration.pri @@ -1,4 +1,10 @@ HEADERS += $$PWD/CalibrationMainForm.h +HEADERS += $$PWD/TaskListWidget.h +HEADERS += $$PWD/ConfigurationWidget.h SOURCES += $$PWD/CalibrationMainForm.cpp +SOURCES += $$PWD/TaskListWidget.cpp +SOURCES += $$PWD/ConfigurationWidget.cpp FORMS += $$PWD/CalibrationMainForm.ui +FORMS += $$PWD/TaskListWidget.ui +FORMS += $$PWD/ConfigurationWidget.ui diff --git a/dao/CheckDao.cpp b/dao/CheckDao.cpp new file mode 100644 index 0000000..6fb9efe --- /dev/null +++ b/dao/CheckDao.cpp @@ -0,0 +1,141 @@ +#include "CheckDao.h" + +CheckDao::CheckDao() +{ + +} + +QStringList CheckDao::getMeasureItemCategoryByModels(QStringList modelIds) +{ + QStringList result; + + QSqlDatabase dbLocal = CDbConnectionPool::instance().openConnection("local"); + QSqlQuery query(dbLocal); + + QString sql = "SELECT bbdmii.item_category_id FROM biz_business_device_measure_item_info bbdmii " + "WHERE "; + for (int i = 0; i < modelIds.size() - 1; i++) { + sql += "bbdmii.device_model_id = ? AND "; + } + sql += "bbdmii.device_model_id = ?;"; + query.prepare(sql); + + for (int i = 0; i < modelIds.size(); i++) { + query.bindValue(i, modelIds.at(i)); + } + + bool isSuccess = query.exec(); + if (isSuccess) { + while (query.next()) { + result << query.value("item_category_id").toString(); + } + } else { + qDebug() << "Query execution failed: " << query.lastError().text(); + } + + return result; +} + +QStringList CheckDao::getSelectedTaskMeasureItemCategory(QStringList taskSampleIds) +{ + QStringList resultList; + + QSqlDatabase dbLocal = CDbConnectionPool::instance().openConnection("local"); + QSqlQuery query(dbLocal); + + QString placeholders = QString("?,").repeated(taskSampleIds.size()).chopped(1); + + QString sql = QString("SELECT bbdmii.item_category_id FROM biz_business_device_measure_item_info bbdmii " + "LEFT JOIN eqpt_equipment_model_info eemi ON eemi.id = bbdmii.device_model_id " + "LEFT JOIN eqpt_equipment_info eei ON eei.model_id = eemi.id " + "WHERE eei.id in (%1);").arg(placeholders); + + qDebug() << sql << taskSampleIds; + + query.prepare(sql); + for (QString sampleId : taskSampleIds) { + query.addBindValue(sampleId); + } + + if (query.exec()) { + while (query.next()) { + resultList << query.value(0).toString(); + } + } else { + LogUtil::PrintLog("ERROR", QString("查询所选待检设备的检定项分类失败[%1]").arg(query.lastError().text())); + } + + return resultList; +} + +DeviceMeasureCategoryDto CheckDao::getDeviceMeasureCategoryById(QString categoryId) +{ + DeviceMeasureCategoryDto result; + + QSqlDatabase dbLocal = CDbConnectionPool::instance().openConnection("local"); + QSqlQuery query(dbLocal); + + QString sql = "SELECT bbdmic.* FROM biz_business_device_measure_item_category bbdmic " + "WHERE bbdmic.id = :id"; + + query.prepare(sql); + query.bindValue(":id", categoryId); + + bool isSuccess = query.exec(); + if (isSuccess) { + if (query.first()) { + result.id = query.value("id").toString(); + result.categoryNo = query.value("category_no").toString(); + result.categoryName = query.value("category_name").toString(); + result.deviceType = query.value("device_type").toString(); + result.belongStandardEquipment = query.value("belong_standard_equipment").toString(); + result.measureCategory = query.value("measure_category").toString(); + result.technologyFile = query.value("technology_file").toString(); + } + } else { + LogUtil::PrintLog("ERROR", QString("查询标准设备的检定项分类失败[%1][%2]").arg(categoryId).arg(query.lastError().text())); + } + + qDebug() << "CheckDao::getDeviceMeasureCategoryById: " << query.lastQuery() << categoryId; + + return result; +} + +QList CheckDao::getDeviceRoleByCategory(QString categoryId) +{ + QList result; + + DeviceMeasureCategoryDto category = getDeviceMeasureCategoryById(categoryId); + + QSqlDatabase dbLocal = CDbConnectionPool::instance().openConnection("local"); + QSqlQuery query(dbLocal); + + QString sql = "SELECT * FROM zd_device_role WHERE cateory_id = :cateory or cateory_name = :categoryName;"; + query.prepare(sql); + + query.bindValue(":cateory", categoryId); + query.bindValue(":categoryName", category.categoryName); + bool isSuccess = query.exec(); + if (isSuccess) { + while (query.next()) { + ZdDeviceRoleDto role; + + role.id = query.value("id").toString(); + role.belongVername = query.value("belong_vername").toString(); + role.belongCheckname = query.value("belong_checkname").toString(); + role.categoryId = query.value("cateory_id").toString(); + role.categoryName = query.value("cateory_name").toString(); + role.deviceId = query.value("device_id").toString(); + role.deviceType = query.value("device_type").toString(); + role.role = query.value("role").toString(); + + result.append(role); + } + } else { + LogUtil::PrintLog("ERROR", QString("查询标准设备的角色分类失败[%1][%2][%3]").arg(categoryId).arg(category.categoryName).arg(query.lastError().text())); + } + + qDebug() << "CheckDao::getDeviceRoleByCategory: " << query.lastQuery() << categoryId << category.categoryName; + + return result; +} diff --git a/dao/CheckDao.h b/dao/CheckDao.h new file mode 100644 index 0000000..fd3ea01 --- /dev/null +++ b/dao/CheckDao.h @@ -0,0 +1,31 @@ +#ifndef CHECKDAO_H +#define CHECKDAO_H + +#include "BaseDao.h" + +// 检定设备角色 +class ZdDeviceRoleDto { +public: + QString id; + QString belongVername; // 检定装置名称字典 + QString belongCheckname; // 核查装置名称字典 + QString categoryId; // 检定/核查项目id + QString categoryName; // 分类名称 + QString deviceId; // 设备ID + QString deviceType; // 被检0 标准1 + QString role; // 角色 +}; + +class CheckDao : public BaseDao +{ +public: + CheckDao(); + + QStringList getMeasureItemCategoryByModels(QStringList modelIds); + QStringList getSelectedTaskMeasureItemCategory(QStringList taskSampleIds); + DeviceMeasureCategoryDto getDeviceMeasureCategoryById(QString categoryId); + + QList getDeviceRoleByCategory(QString categoryId); +}; + +#endif // CHECKDAO_H diff --git a/QPagedTable/QPagedTable.cpp b/QPagedTable/QPagedTable.cpp index 1bb4af0..1ca1322 100644 --- a/QPagedTable/QPagedTable.cpp +++ b/QPagedTable/QPagedTable.cpp @@ -181,6 +181,10 @@ { ui->wdgtPageBtn->setProperty(name, value); } +void QPagedTable::setCheckBoxClass(QString className) +{ + checkProperty.insert("class", className); +} void QPagedTable::setHeaderHeight(int height) { @@ -217,6 +221,17 @@ return filterList; } +void QPagedTable::setRowSelected(int rowIdx, bool selected) +{ + if (multiCheck != MultiCheckType::NONE) { + QCheckBox *checkBox = ui->table->cellWidget(rowIdx, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->setCheckState(selected ? Qt::CheckState::Checked : Qt::CheckState::Unchecked); + } + } +} + QWidget * QPagedTable::buildNewCheckWidget() { QWidget* activeWidget = new QWidget(ui->table); @@ -225,6 +240,7 @@ QCheckBox* check = new QCheckBox(activeWidget); check->setMinimumSize(25, 25); check->setMaximumSize(25, 25); + check->setProperty("class", checkProperty.value("class")); activelayout->addWidget(check, 0, 0); if (multiCheck == MultiCheckType::RADIO) { @@ -241,6 +257,7 @@ QRadioButton* radio = new QRadioButton(activeWidget); radio->setMinimumSize(25, 25); radio->setMaximumSize(25, 25); + radio->setProperty("class", checkProperty.value("class")); activelayout->addWidget(radio, 0, 0); group->addButton(radio); @@ -336,3 +353,18 @@ page.currentPage = page.totalPage - 1; emit reloadTablePagedData(page.currentPage); } + +void QPagedTable::on_table_cellDoubleClicked(int row, int column) +{ + if (multiCheck != MultiCheckType::NONE && doubleClickSelectRow) { + QTableWidget * tableWidget = qobject_cast(sender()); + if (tableWidget) { + QCheckBox *checkBox = tableWidget->cellWidget(row, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->toggle(); + emit tableRowSelected(row, checkBox->isChecked()); + } + } + } +} diff --git a/QPagedTable/QPagedTable.h b/QPagedTable/QPagedTable.h index e561d01..aacb4aa 100644 --- a/QPagedTable/QPagedTable.h +++ b/QPagedTable/QPagedTable.h @@ -50,6 +50,7 @@ void setTotalCount(int totalCount); void setPageButtonIcons(QStringList iconUrls); void setPageButtonProperty(const char* name, QString value); + void setCheckBoxClass(QString className); void setHeaderHeight(int height); void setDataRowHeight(int height); @@ -62,6 +63,7 @@ QTableWidget * getTableInstance(); QList filterCells(QString colName, QString value); + void setRowSelected(int rowIdx, bool selected); private: Ui::QPagedTable *ui; @@ -92,6 +94,8 @@ int frameBorderSize = 0; int multiCheck = MultiCheckType::NONE; + QMap checkProperty; + bool doubleClickSelectRow = true; QButtonGroup * group; @@ -105,9 +109,12 @@ void on_btnPre_clicked(); void on_btnNext_clicked(); void on_btnLast_clicked(); + void on_table_cellDoubleClicked(int row, int column); + signals: void reloadTablePagedData(int currPage); void contextMenuActionTrigged(int actionIdx, int rowIdx, int colIdx); + void tableRowSelected(int rowIdx, bool selected); }; #endif // QPAGEDTABLE_H diff --git a/calibration/CalibrationMainForm.cpp b/calibration/CalibrationMainForm.cpp index 9b778a5..44d203a 100644 --- a/calibration/CalibrationMainForm.cpp +++ b/calibration/CalibrationMainForm.cpp @@ -6,9 +6,72 @@ ui(new Ui::CalibrationMainForm) { ui->setupUi(this); + + initFormWidgets(); + bindSignalAndHandlers(); } CalibrationMainForm::~CalibrationMainForm() { + qDebug() << "~CalibrationMainForm"; delete ui; } + +QMap & CalibrationMainForm::getSelectedTask() +{ + return selectedTask; +} +QStringList CalibrationMainForm::getVerificationItemCatIds() +{ + return verificationItemCatIds; +} +void CalibrationMainForm::setVerificationItemCatIds(QStringList itemCatIds) +{ + verificationItemCatIds = itemCatIds; +} + +void CalibrationMainForm::showEvent(QShowEvent * event) +{ + selectedTask.clear(); + verificationItemCatIds.clear(); + + ui->wdgtCalMain->setCurrentIndex(0); +} + +void CalibrationMainForm::initFormWidgets() +{ + wdgtTask = new TaskListWidget(this); + wdgtConf = new ConfigurationWidget(this); +// wdgtStandardList = new StandardListWidget(this); +// wdgtConnectState = new ConnectStateWidget(this); + + ui->wdgtCalMain->addWidget(wdgtTask); + ui->wdgtCalMain->addWidget(wdgtConf); +// ui->wdgtContent->addWidget(wdgtStandardList); +// ui->wdgtContent->addWidget(wdgtConnectState); + + ui->wdgtCalMain->setCurrentIndex(0); +} + +void CalibrationMainForm::bindSignalAndHandlers() +{ + // 待检设备清单 下一步 切换到 配置检定项和流程 + connect(wdgtTask, &TaskListWidget::taskEquipmentSelected, this, &CalibrationMainForm::nextToConfiguration); + + // 检定程序 上一步 下一步 +// connect(wdgtCheckProgram, &CheckProgramWidget::switchToReSelectTaskEquipment, this, &CalibrationForm::forwardToReSelectTaskEquipment); +// connect(wdgtCheckProgram, &CheckProgramWidget::switchToNextWidget, this, &CalibrationForm::nextToSelectStandardEquipment); + + // 标准设备 上一步 下一步 +// connect(wdgtStandardList, &StandardListWidget::switchToReSelectCheckProgram, this, &CalibrationForm::forwardToReSelectCheckProgram); +// connect(wdgtStandardList, &StandardListWidget::switchToNextWidget, this, &CalibrationForm::nextToConnectionState); + + // 查看连接状态 +// connect(wdgtConnectState, &ConnectStateWidget::switchToReSelectStandardEqpt, this, &CalibrationForm::forwardToReSelectTaskEquipment); +// connect(wdgtConnectState, &ConnectStateWidget::startAutoCalibration, this, &CalibrationForm::nextToAutoCalibration); +} + +void CalibrationMainForm::nextToConfiguration() +{ + ui->wdgtCalMain->setCurrentWidget(wdgtConf); +} diff --git a/calibration/CalibrationMainForm.h b/calibration/CalibrationMainForm.h index 7d75014..e4bc44c 100644 --- a/calibration/CalibrationMainForm.h +++ b/calibration/CalibrationMainForm.h @@ -3,6 +3,10 @@ #include +#include "dao/service/TaskService.h" +#include "calibration/TaskListWidget.h" +#include "calibration/ConfigurationWidget.h" + namespace Ui { class CalibrationMainForm; } @@ -15,8 +19,38 @@ explicit CalibrationMainForm(QWidget *parent = nullptr); ~CalibrationMainForm(); + QMap & getSelectedTask(); + QStringList getVerificationItemCatIds(); + void setVerificationItemCatIds(QStringList itemCatIds); + + // 选定的检定程序(单选) +// CheckProgramDto selectedCheckProgram; + + // 选定的标准设备清单 +// QMap selectedStdEquipment; + +protected: + void showEvent(QShowEvent * event) override; + + private: Ui::CalibrationMainForm *ui; + + TaskListWidget * wdgtTask; + ConfigurationWidget * wdgtConf; + + // 选择的任务清单(待检设备清单) + QMap selectedTask; + + // 所选待检设备对应的检定项分类 + QStringList verificationItemCatIds; + + void initFormWidgets(); + void bindSignalAndHandlers(); + +private slots: + // 待检设备已选择完毕 + void nextToConfiguration(); }; #endif // CALIBRATIONMAINFORM_H diff --git a/calibration/CalibrationMainForm.ui b/calibration/CalibrationMainForm.ui index 9b5a9c2..5479af5 100644 --- a/calibration/CalibrationMainForm.ui +++ b/calibration/CalibrationMainForm.ui @@ -1,9 +1,7 @@ + - - - CalibrationMainForm - + 0 @@ -15,7 +13,27 @@ Form + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + - + diff --git a/calibration/ConfigurationWidget.cpp b/calibration/ConfigurationWidget.cpp new file mode 100644 index 0000000..5e47dc2 --- /dev/null +++ b/calibration/ConfigurationWidget.cpp @@ -0,0 +1,14 @@ +#include "ConfigurationWidget.h" +#include "ui_ConfigurationWidget.h" + +ConfigurationWidget::ConfigurationWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::ConfigurationWidget) +{ + ui->setupUi(this); +} + +ConfigurationWidget::~ConfigurationWidget() +{ + delete ui; +} diff --git a/calibration/ConfigurationWidget.h b/calibration/ConfigurationWidget.h new file mode 100644 index 0000000..b3321c1 --- /dev/null +++ b/calibration/ConfigurationWidget.h @@ -0,0 +1,22 @@ +#ifndef CONFIGURATIONWIDGET_H +#define CONFIGURATIONWIDGET_H + +#include + +namespace Ui { +class ConfigurationWidget; +} + +class ConfigurationWidget : public QWidget +{ + Q_OBJECT + +public: + explicit ConfigurationWidget(QWidget *parent = nullptr); + ~ConfigurationWidget(); + +private: + Ui::ConfigurationWidget *ui; +}; + +#endif // CONFIGURATIONWIDGET_H diff --git a/calibration/ConfigurationWidget.ui b/calibration/ConfigurationWidget.ui new file mode 100644 index 0000000..a567bba --- /dev/null +++ b/calibration/ConfigurationWidget.ui @@ -0,0 +1,21 @@ + + + + + ConfigurationWidget + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + diff --git a/calibration/TaskListWidget.cpp b/calibration/TaskListWidget.cpp new file mode 100644 index 0000000..31f16c7 --- /dev/null +++ b/calibration/TaskListWidget.cpp @@ -0,0 +1,202 @@ +#include "TaskListWidget.h" +#include "ui_TaskListWidget.h" + +#include "calibration/CalibrationMainForm.h" + +TaskListWidget::TaskListWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::TaskListWidget) +{ + ui->setupUi(this); + parentForm = (CalibrationMainForm *)parent; + + initForm(); + initFormTable(); + + // 绑定信号与槽 + connect(ui->tableTaskTBDList, &QPagedTable::reloadTablePagedData, this, &TaskListWidget::getTaskToBeDoneList); +} + +TaskListWidget::~TaskListWidget() +{ + qDebug() << "~TaskListWidget"; + delete ui; +} + +void TaskListWidget::showEvent(QShowEvent * event) +{ + ui->tableTaskTBDList->adjustTableWidth(); + getTaskToBeDoneList(0); +} + +void TaskListWidget::resizeEvent(QResizeEvent * event) +{ + ui->tableTaskTBDList->adjustTableWidth(); +} + +void TaskListWidget::initForm() +{ + // 加载样式表 + QString qssStyle = QssFileUtils::loadQssFileContent(":/qss/infoTable.css"); + if (qssStyle.isEmpty() == false) { + this->setStyleSheet(qssStyle); // 仅本窗口生效 + } + + // 查询条件的样式 + QList children = ui->wdgtQueryBox->findChildren(); + for (QWidget * wdgt : children) { + wdgt->setProperty("class", "queryBox"); + + if (QString(wdgt->metaObject()->className()).contains("QLineEdit")) { + // 绑定输入框回车事件 只在密码输入框执行 + connect((QLineEdit *)wdgt, &QLineEdit::returnPressed, this, [=](){ + emit ui->btnQuery->clicked(); + }); + } + } + + // 查询和重置按钮 + ui->btnQuery->setProperty("class", "btnDefault"); + ui->btnResetQuery->setProperty("class", "btnResetQuery"); + + ui->tableTaskTBDList->setTableProperty("class", "defaultTable"); + + // 分页组件 + QStringList btnPageGroupUrls; + btnPageGroupUrls << ":/image/infomation/btnPageFirst.png" << ":/image/infomation/btnPagePre.png" + << ":/image/infomation/btnPageNext.png" << ":/image/infomation/btnPageLast.png"; + ui->tableTaskTBDList->setPageButtonIcons(btnPageGroupUrls); + ui->tableTaskTBDList->setPageButtonProperty("class", "pageBtnGroup"); +} + +void TaskListWidget::initFormTable() +{ + // 初始化查询条件 + SysLocalService localServ; + QList> deptTaskColumns = localServ.getInfomationTableColumns("deptTask"); + ui->tableTaskTBDList->setColumns(deptTaskColumns); + + ui->tableTaskTBDList->setMultiCheckType(QPagedTable::MultiCheckType::MULTI); + ui->tableTaskTBDList->setCheckBoxClass("defaultSolid"); + + ui->tableTaskTBDList->setDataRowHeight(45); + + connect(ui->tableTaskTBDList, &QPagedTable::tableRowSelected, this, &TaskListWidget::rowSelectedHandler); + + initUrgentSelect(); + + ui->tableTaskTBDList->initTableWidget(); + ui->tableTaskTBDList->initTableHeader(); +} + +void TaskListWidget::initUrgentSelect() +{ + ui->selectUrgent->addItem("全部", ""); + ui->selectUrgent->addItem("不加急", "0"); + ui->selectUrgent->addItem("加急", "1"); + + ui->selectUrgent->setView(new QListView()); // 使ComboBox下拉选项 的QSS生效的关键代码 +} + +void TaskListWidget::getTaskToBeDoneList(int currPage) +{ + TaskService taskServ; + taskList.clear(); // 清除之前的结果 + + // 获取所有查询条件 + TaskRequest request; + request.userId = ProMemory::getInstance().getLoginUser().value("id").toString(); + request.sampleName = ui->inputDevName->text(); + request.sampleModel = ui->inputDevModel->text(); + request.customerName = ui->inputCustomer->text(); + request.measureStatusList << "3" << "2"; + request.isUrgent = ui->selectUrgent->currentData().toString(); + + // 查询页 + page.currentPage = currPage; + + // 查询数据库 + taskList = taskServ.getDeptTaskListPage(request, page); + QList> pageData; + for (TaskDTO task : taskList) { + QMap item; + + item.insert("id", task.id); + item.insert("name", task.sampleName); + item.insert("model", task.sampleModel); + item.insert("serialNo", task.manufactureNo); + item.insert("maker", task.manufacturer); + item.insert("custom", task.customerName); + item.insert("requireTime", task.requireOverTime); + item.insert("isUrgent", task.isUrgentName); + item.insert("orderNo", task.orderNo); + item.insert("measureStatus", task.measureStatusName); + + pageData.append(item); + } + + // 设置分页表格数据 + ui->tableTaskTBDList->setTotalCount(page.totalCount); + ui->tableTaskTBDList->setDatas(pageData); + + // 筛选 加急=是 的单元格标红提示 + QList matchedRows = ui->tableTaskTBDList->filterCells("isUrgent", "是"); + if (!matchedRows.isEmpty()) { + for (int row : matchedRows) { + ui->tableTaskTBDList->getTableInstance()->item(row, 10)->setForeground(QBrush("#FF0000")); // 多加了一列复选框 + } + } + + // 勾选上已经选中的记录 + for (int i = 0; i < taskList.size(); i++) { + ui->tableTaskTBDList->setRowSelected(i, parentForm->getSelectedTask().contains(taskList.at(i).sampleId)); + } +} + +void TaskListWidget::rowSelectedHandler(int rowIdx, bool selected) +{ + QString rowId = taskList.at(rowIdx).sampleId; + if (selected) { + parentForm->getSelectedTask().insert(rowId, taskList.at(rowIdx)); + } else { + parentForm->getSelectedTask().remove(rowId); + } +} + +void TaskListWidget::on_btnQuery_clicked() +{ + getTaskToBeDoneList(0); +} + +void TaskListWidget::on_btnResetQuery_clicked() +{ + ui->inputDevName->setText(""); + ui->inputDevModel->setText(""); + ui->inputCustomer->setText(""); + + ui->selectUrgent->setCurrentIndex(0); + + getTaskToBeDoneList(0); +} + + +void TaskListWidget::on_btnNextToConf_clicked() +{ + if (parentForm->getSelectedTask().size() == 0) { + CustomMessageBox::warning(this, "提示", "请选择被检设备!"); + } else { + // 判断多个被检设备 分类和量程是否都相同 + TaskService taskServ; + QStringList itemCats = taskServ.getVerificationItemCatsBySelectedTask(parentForm->getSelectedTask().keys()); + + if (itemCats.size() == 1) { + parentForm->setVerificationItemCatIds(itemCats); + emit taskEquipmentSelected(); + } else if (itemCats.isEmpty()) { + CustomMessageBox::warning(this, "提示", "没找到所选待检设备的检定项分类,请检查相关配置"); + } else { + qDebug() << itemCats; + CustomMessageBox::warning(this, "提示", "所选的多个待检设备检定项目不同,请重新选择"); + } + } +} diff --git a/calibration/TaskListWidget.h b/calibration/TaskListWidget.h new file mode 100644 index 0000000..5d89a72 --- /dev/null +++ b/calibration/TaskListWidget.h @@ -0,0 +1,55 @@ +#ifndef TASKLISTWIDGET_H +#define TASKLISTWIDGET_H + +#include +#include + +#include "dao/service/SysLocalService.h" +#include "dao/service/TaskService.h" +#include "frame/CustomMessageBox.h" + +class CalibrationMainForm; + +namespace Ui { +class TaskListWidget; +} + +class TaskListWidget : public QWidget +{ + Q_OBJECT + +public: + explicit TaskListWidget(QWidget *parent = nullptr); + ~TaskListWidget(); + +protected: + void showEvent(QShowEvent * event) override; + void resizeEvent(QResizeEvent * event) override; + +private: + Ui::TaskListWidget *ui; + CalibrationMainForm * parentForm; + Page page; + + // 待检设备清单 + QList taskList; + + void initForm(); + void initFormTable(); + + void initMeasureStatusSelect(); + void initUrgentSelect(); + +private slots: + void getTaskToBeDoneList(int currPage); + void rowSelectedHandler(int rowIdx, bool selected); + void on_btnQuery_clicked(); + void on_btnResetQuery_clicked(); + void on_btnNextToConf_clicked(); + +signals: + void taskEquipmentSelected(); + +}; + +#endif // TASKLISTWIDGET_H diff --git a/calibration/TaskListWidget.ui b/calibration/TaskListWidget.ui new file mode 100644 index 0000000..0dd382d --- /dev/null +++ b/calibration/TaskListWidget.ui @@ -0,0 +1,232 @@ + + + TaskListWidget + + + + 0 + 0 + 1245 + 605 + + + + Form + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 10 + + + 10 + + + 10 + + + 10 + + + 10 + + + + + + 0 + 0 + + + + + 150 + 36 + + + + + + + 受检设备名称 + + + + + + + + 0 + 0 + + + + + 150 + 36 + + + + 规格型号 + + + + + + + + 0 + 0 + + + + + 150 + 36 + + + + 委托方 + + + + + + + + 0 + 0 + + + + + 120 + 36 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 100 + 20 + + + + + + + + + 120 + 36 + + + + 查询 + + + + + + + + 120 + 36 + + + + 重置 + + + + + + + Qt::Horizontal + + + + 0 + 0 + + + + + + + + + 200 + 48 + + + + 下一步,配置 + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + + + + QPagedTable + QWidget +
QPagedTable/QPagedTable.h
+
+
+ + +
diff --git a/calibration/calibration.pri b/calibration/calibration.pri index f0e9dfb..8776fe4 100644 --- a/calibration/calibration.pri +++ b/calibration/calibration.pri @@ -1,4 +1,10 @@ HEADERS += $$PWD/CalibrationMainForm.h +HEADERS += $$PWD/TaskListWidget.h +HEADERS += $$PWD/ConfigurationWidget.h SOURCES += $$PWD/CalibrationMainForm.cpp +SOURCES += $$PWD/TaskListWidget.cpp +SOURCES += $$PWD/ConfigurationWidget.cpp FORMS += $$PWD/CalibrationMainForm.ui +FORMS += $$PWD/TaskListWidget.ui +FORMS += $$PWD/ConfigurationWidget.ui diff --git a/dao/CheckDao.cpp b/dao/CheckDao.cpp new file mode 100644 index 0000000..6fb9efe --- /dev/null +++ b/dao/CheckDao.cpp @@ -0,0 +1,141 @@ +#include "CheckDao.h" + +CheckDao::CheckDao() +{ + +} + +QStringList CheckDao::getMeasureItemCategoryByModels(QStringList modelIds) +{ + QStringList result; + + QSqlDatabase dbLocal = CDbConnectionPool::instance().openConnection("local"); + QSqlQuery query(dbLocal); + + QString sql = "SELECT bbdmii.item_category_id FROM biz_business_device_measure_item_info bbdmii " + "WHERE "; + for (int i = 0; i < modelIds.size() - 1; i++) { + sql += "bbdmii.device_model_id = ? AND "; + } + sql += "bbdmii.device_model_id = ?;"; + query.prepare(sql); + + for (int i = 0; i < modelIds.size(); i++) { + query.bindValue(i, modelIds.at(i)); + } + + bool isSuccess = query.exec(); + if (isSuccess) { + while (query.next()) { + result << query.value("item_category_id").toString(); + } + } else { + qDebug() << "Query execution failed: " << query.lastError().text(); + } + + return result; +} + +QStringList CheckDao::getSelectedTaskMeasureItemCategory(QStringList taskSampleIds) +{ + QStringList resultList; + + QSqlDatabase dbLocal = CDbConnectionPool::instance().openConnection("local"); + QSqlQuery query(dbLocal); + + QString placeholders = QString("?,").repeated(taskSampleIds.size()).chopped(1); + + QString sql = QString("SELECT bbdmii.item_category_id FROM biz_business_device_measure_item_info bbdmii " + "LEFT JOIN eqpt_equipment_model_info eemi ON eemi.id = bbdmii.device_model_id " + "LEFT JOIN eqpt_equipment_info eei ON eei.model_id = eemi.id " + "WHERE eei.id in (%1);").arg(placeholders); + + qDebug() << sql << taskSampleIds; + + query.prepare(sql); + for (QString sampleId : taskSampleIds) { + query.addBindValue(sampleId); + } + + if (query.exec()) { + while (query.next()) { + resultList << query.value(0).toString(); + } + } else { + LogUtil::PrintLog("ERROR", QString("查询所选待检设备的检定项分类失败[%1]").arg(query.lastError().text())); + } + + return resultList; +} + +DeviceMeasureCategoryDto CheckDao::getDeviceMeasureCategoryById(QString categoryId) +{ + DeviceMeasureCategoryDto result; + + QSqlDatabase dbLocal = CDbConnectionPool::instance().openConnection("local"); + QSqlQuery query(dbLocal); + + QString sql = "SELECT bbdmic.* FROM biz_business_device_measure_item_category bbdmic " + "WHERE bbdmic.id = :id"; + + query.prepare(sql); + query.bindValue(":id", categoryId); + + bool isSuccess = query.exec(); + if (isSuccess) { + if (query.first()) { + result.id = query.value("id").toString(); + result.categoryNo = query.value("category_no").toString(); + result.categoryName = query.value("category_name").toString(); + result.deviceType = query.value("device_type").toString(); + result.belongStandardEquipment = query.value("belong_standard_equipment").toString(); + result.measureCategory = query.value("measure_category").toString(); + result.technologyFile = query.value("technology_file").toString(); + } + } else { + LogUtil::PrintLog("ERROR", QString("查询标准设备的检定项分类失败[%1][%2]").arg(categoryId).arg(query.lastError().text())); + } + + qDebug() << "CheckDao::getDeviceMeasureCategoryById: " << query.lastQuery() << categoryId; + + return result; +} + +QList CheckDao::getDeviceRoleByCategory(QString categoryId) +{ + QList result; + + DeviceMeasureCategoryDto category = getDeviceMeasureCategoryById(categoryId); + + QSqlDatabase dbLocal = CDbConnectionPool::instance().openConnection("local"); + QSqlQuery query(dbLocal); + + QString sql = "SELECT * FROM zd_device_role WHERE cateory_id = :cateory or cateory_name = :categoryName;"; + query.prepare(sql); + + query.bindValue(":cateory", categoryId); + query.bindValue(":categoryName", category.categoryName); + bool isSuccess = query.exec(); + if (isSuccess) { + while (query.next()) { + ZdDeviceRoleDto role; + + role.id = query.value("id").toString(); + role.belongVername = query.value("belong_vername").toString(); + role.belongCheckname = query.value("belong_checkname").toString(); + role.categoryId = query.value("cateory_id").toString(); + role.categoryName = query.value("cateory_name").toString(); + role.deviceId = query.value("device_id").toString(); + role.deviceType = query.value("device_type").toString(); + role.role = query.value("role").toString(); + + result.append(role); + } + } else { + LogUtil::PrintLog("ERROR", QString("查询标准设备的角色分类失败[%1][%2][%3]").arg(categoryId).arg(category.categoryName).arg(query.lastError().text())); + } + + qDebug() << "CheckDao::getDeviceRoleByCategory: " << query.lastQuery() << categoryId << category.categoryName; + + return result; +} diff --git a/dao/CheckDao.h b/dao/CheckDao.h new file mode 100644 index 0000000..fd3ea01 --- /dev/null +++ b/dao/CheckDao.h @@ -0,0 +1,31 @@ +#ifndef CHECKDAO_H +#define CHECKDAO_H + +#include "BaseDao.h" + +// 检定设备角色 +class ZdDeviceRoleDto { +public: + QString id; + QString belongVername; // 检定装置名称字典 + QString belongCheckname; // 核查装置名称字典 + QString categoryId; // 检定/核查项目id + QString categoryName; // 分类名称 + QString deviceId; // 设备ID + QString deviceType; // 被检0 标准1 + QString role; // 角色 +}; + +class CheckDao : public BaseDao +{ +public: + CheckDao(); + + QStringList getMeasureItemCategoryByModels(QStringList modelIds); + QStringList getSelectedTaskMeasureItemCategory(QStringList taskSampleIds); + DeviceMeasureCategoryDto getDeviceMeasureCategoryById(QString categoryId); + + QList getDeviceRoleByCategory(QString categoryId); +}; + +#endif // CHECKDAO_H diff --git a/dao/TaskDao.cpp b/dao/TaskDao.cpp index 2c1c86e..45aac80 100644 --- a/dao/TaskDao.cpp +++ b/dao/TaskDao.cpp @@ -37,7 +37,7 @@ query.bindValue(":offset", page.currentPage * page.pageSize); query.bindValue(":limit", page.pageSize); -// qDebug() << sql; +// qDebug() << sql << request.measureStatusList.join(",") << request.deptId << page.currentPage << page.pageSize << totalCount; // 分页查询 bool isSuccess = query.exec(); @@ -86,7 +86,7 @@ query.prepare(sql); bindValueTaskListPage(query, request); -// qDebug() << sql; +// qDebug() << sql << request.measureStatusList.join(','); if (query.exec() && query.next()) { totalCount = query.value("recCount").toInt(); @@ -356,7 +356,11 @@ where = QString("%1 AND bo.is_urgent = :urgent").arg(where); } if (!request.measureStatusList.isEmpty()) { - where = QString("%1 AND blei.measure_status IN (:statusList)").arg(where); + QString tmp; + for (int i = 0; i < request.measureStatusList.size(); i++) { + tmp = QString("%1,:status%2").arg(tmp).arg(i); + } + where = QString("%1 AND blei.measure_status IN ( %2 )").arg(where).arg(tmp.mid(1)); } return where; @@ -389,6 +393,8 @@ query.bindValue(":urgent", request.isUrgent); } if (!request.measureStatusList.isEmpty()) { - query.bindValue(":statusList", request.measureStatusList.join(",")); + for (int i = 0; i < request.measureStatusList.size(); i++) { + query.bindValue(QString(":status%1").arg(i), request.measureStatusList.at(i)); + } } } diff --git a/QPagedTable/QPagedTable.cpp b/QPagedTable/QPagedTable.cpp index 1bb4af0..1ca1322 100644 --- a/QPagedTable/QPagedTable.cpp +++ b/QPagedTable/QPagedTable.cpp @@ -181,6 +181,10 @@ { ui->wdgtPageBtn->setProperty(name, value); } +void QPagedTable::setCheckBoxClass(QString className) +{ + checkProperty.insert("class", className); +} void QPagedTable::setHeaderHeight(int height) { @@ -217,6 +221,17 @@ return filterList; } +void QPagedTable::setRowSelected(int rowIdx, bool selected) +{ + if (multiCheck != MultiCheckType::NONE) { + QCheckBox *checkBox = ui->table->cellWidget(rowIdx, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->setCheckState(selected ? Qt::CheckState::Checked : Qt::CheckState::Unchecked); + } + } +} + QWidget * QPagedTable::buildNewCheckWidget() { QWidget* activeWidget = new QWidget(ui->table); @@ -225,6 +240,7 @@ QCheckBox* check = new QCheckBox(activeWidget); check->setMinimumSize(25, 25); check->setMaximumSize(25, 25); + check->setProperty("class", checkProperty.value("class")); activelayout->addWidget(check, 0, 0); if (multiCheck == MultiCheckType::RADIO) { @@ -241,6 +257,7 @@ QRadioButton* radio = new QRadioButton(activeWidget); radio->setMinimumSize(25, 25); radio->setMaximumSize(25, 25); + radio->setProperty("class", checkProperty.value("class")); activelayout->addWidget(radio, 0, 0); group->addButton(radio); @@ -336,3 +353,18 @@ page.currentPage = page.totalPage - 1; emit reloadTablePagedData(page.currentPage); } + +void QPagedTable::on_table_cellDoubleClicked(int row, int column) +{ + if (multiCheck != MultiCheckType::NONE && doubleClickSelectRow) { + QTableWidget * tableWidget = qobject_cast(sender()); + if (tableWidget) { + QCheckBox *checkBox = tableWidget->cellWidget(row, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->toggle(); + emit tableRowSelected(row, checkBox->isChecked()); + } + } + } +} diff --git a/QPagedTable/QPagedTable.h b/QPagedTable/QPagedTable.h index e561d01..aacb4aa 100644 --- a/QPagedTable/QPagedTable.h +++ b/QPagedTable/QPagedTable.h @@ -50,6 +50,7 @@ void setTotalCount(int totalCount); void setPageButtonIcons(QStringList iconUrls); void setPageButtonProperty(const char* name, QString value); + void setCheckBoxClass(QString className); void setHeaderHeight(int height); void setDataRowHeight(int height); @@ -62,6 +63,7 @@ QTableWidget * getTableInstance(); QList filterCells(QString colName, QString value); + void setRowSelected(int rowIdx, bool selected); private: Ui::QPagedTable *ui; @@ -92,6 +94,8 @@ int frameBorderSize = 0; int multiCheck = MultiCheckType::NONE; + QMap checkProperty; + bool doubleClickSelectRow = true; QButtonGroup * group; @@ -105,9 +109,12 @@ void on_btnPre_clicked(); void on_btnNext_clicked(); void on_btnLast_clicked(); + void on_table_cellDoubleClicked(int row, int column); + signals: void reloadTablePagedData(int currPage); void contextMenuActionTrigged(int actionIdx, int rowIdx, int colIdx); + void tableRowSelected(int rowIdx, bool selected); }; #endif // QPAGEDTABLE_H diff --git a/calibration/CalibrationMainForm.cpp b/calibration/CalibrationMainForm.cpp index 9b778a5..44d203a 100644 --- a/calibration/CalibrationMainForm.cpp +++ b/calibration/CalibrationMainForm.cpp @@ -6,9 +6,72 @@ ui(new Ui::CalibrationMainForm) { ui->setupUi(this); + + initFormWidgets(); + bindSignalAndHandlers(); } CalibrationMainForm::~CalibrationMainForm() { + qDebug() << "~CalibrationMainForm"; delete ui; } + +QMap & CalibrationMainForm::getSelectedTask() +{ + return selectedTask; +} +QStringList CalibrationMainForm::getVerificationItemCatIds() +{ + return verificationItemCatIds; +} +void CalibrationMainForm::setVerificationItemCatIds(QStringList itemCatIds) +{ + verificationItemCatIds = itemCatIds; +} + +void CalibrationMainForm::showEvent(QShowEvent * event) +{ + selectedTask.clear(); + verificationItemCatIds.clear(); + + ui->wdgtCalMain->setCurrentIndex(0); +} + +void CalibrationMainForm::initFormWidgets() +{ + wdgtTask = new TaskListWidget(this); + wdgtConf = new ConfigurationWidget(this); +// wdgtStandardList = new StandardListWidget(this); +// wdgtConnectState = new ConnectStateWidget(this); + + ui->wdgtCalMain->addWidget(wdgtTask); + ui->wdgtCalMain->addWidget(wdgtConf); +// ui->wdgtContent->addWidget(wdgtStandardList); +// ui->wdgtContent->addWidget(wdgtConnectState); + + ui->wdgtCalMain->setCurrentIndex(0); +} + +void CalibrationMainForm::bindSignalAndHandlers() +{ + // 待检设备清单 下一步 切换到 配置检定项和流程 + connect(wdgtTask, &TaskListWidget::taskEquipmentSelected, this, &CalibrationMainForm::nextToConfiguration); + + // 检定程序 上一步 下一步 +// connect(wdgtCheckProgram, &CheckProgramWidget::switchToReSelectTaskEquipment, this, &CalibrationForm::forwardToReSelectTaskEquipment); +// connect(wdgtCheckProgram, &CheckProgramWidget::switchToNextWidget, this, &CalibrationForm::nextToSelectStandardEquipment); + + // 标准设备 上一步 下一步 +// connect(wdgtStandardList, &StandardListWidget::switchToReSelectCheckProgram, this, &CalibrationForm::forwardToReSelectCheckProgram); +// connect(wdgtStandardList, &StandardListWidget::switchToNextWidget, this, &CalibrationForm::nextToConnectionState); + + // 查看连接状态 +// connect(wdgtConnectState, &ConnectStateWidget::switchToReSelectStandardEqpt, this, &CalibrationForm::forwardToReSelectTaskEquipment); +// connect(wdgtConnectState, &ConnectStateWidget::startAutoCalibration, this, &CalibrationForm::nextToAutoCalibration); +} + +void CalibrationMainForm::nextToConfiguration() +{ + ui->wdgtCalMain->setCurrentWidget(wdgtConf); +} diff --git a/calibration/CalibrationMainForm.h b/calibration/CalibrationMainForm.h index 7d75014..e4bc44c 100644 --- a/calibration/CalibrationMainForm.h +++ b/calibration/CalibrationMainForm.h @@ -3,6 +3,10 @@ #include +#include "dao/service/TaskService.h" +#include "calibration/TaskListWidget.h" +#include "calibration/ConfigurationWidget.h" + namespace Ui { class CalibrationMainForm; } @@ -15,8 +19,38 @@ explicit CalibrationMainForm(QWidget *parent = nullptr); ~CalibrationMainForm(); + QMap & getSelectedTask(); + QStringList getVerificationItemCatIds(); + void setVerificationItemCatIds(QStringList itemCatIds); + + // 选定的检定程序(单选) +// CheckProgramDto selectedCheckProgram; + + // 选定的标准设备清单 +// QMap selectedStdEquipment; + +protected: + void showEvent(QShowEvent * event) override; + + private: Ui::CalibrationMainForm *ui; + + TaskListWidget * wdgtTask; + ConfigurationWidget * wdgtConf; + + // 选择的任务清单(待检设备清单) + QMap selectedTask; + + // 所选待检设备对应的检定项分类 + QStringList verificationItemCatIds; + + void initFormWidgets(); + void bindSignalAndHandlers(); + +private slots: + // 待检设备已选择完毕 + void nextToConfiguration(); }; #endif // CALIBRATIONMAINFORM_H diff --git a/calibration/CalibrationMainForm.ui b/calibration/CalibrationMainForm.ui index 9b5a9c2..5479af5 100644 --- a/calibration/CalibrationMainForm.ui +++ b/calibration/CalibrationMainForm.ui @@ -1,9 +1,7 @@ + - - - CalibrationMainForm - + 0 @@ -15,7 +13,27 @@ Form + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + - + diff --git a/calibration/ConfigurationWidget.cpp b/calibration/ConfigurationWidget.cpp new file mode 100644 index 0000000..5e47dc2 --- /dev/null +++ b/calibration/ConfigurationWidget.cpp @@ -0,0 +1,14 @@ +#include "ConfigurationWidget.h" +#include "ui_ConfigurationWidget.h" + +ConfigurationWidget::ConfigurationWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::ConfigurationWidget) +{ + ui->setupUi(this); +} + +ConfigurationWidget::~ConfigurationWidget() +{ + delete ui; +} diff --git a/calibration/ConfigurationWidget.h b/calibration/ConfigurationWidget.h new file mode 100644 index 0000000..b3321c1 --- /dev/null +++ b/calibration/ConfigurationWidget.h @@ -0,0 +1,22 @@ +#ifndef CONFIGURATIONWIDGET_H +#define CONFIGURATIONWIDGET_H + +#include + +namespace Ui { +class ConfigurationWidget; +} + +class ConfigurationWidget : public QWidget +{ + Q_OBJECT + +public: + explicit ConfigurationWidget(QWidget *parent = nullptr); + ~ConfigurationWidget(); + +private: + Ui::ConfigurationWidget *ui; +}; + +#endif // CONFIGURATIONWIDGET_H diff --git a/calibration/ConfigurationWidget.ui b/calibration/ConfigurationWidget.ui new file mode 100644 index 0000000..a567bba --- /dev/null +++ b/calibration/ConfigurationWidget.ui @@ -0,0 +1,21 @@ + + + + + ConfigurationWidget + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + diff --git a/calibration/TaskListWidget.cpp b/calibration/TaskListWidget.cpp new file mode 100644 index 0000000..31f16c7 --- /dev/null +++ b/calibration/TaskListWidget.cpp @@ -0,0 +1,202 @@ +#include "TaskListWidget.h" +#include "ui_TaskListWidget.h" + +#include "calibration/CalibrationMainForm.h" + +TaskListWidget::TaskListWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::TaskListWidget) +{ + ui->setupUi(this); + parentForm = (CalibrationMainForm *)parent; + + initForm(); + initFormTable(); + + // 绑定信号与槽 + connect(ui->tableTaskTBDList, &QPagedTable::reloadTablePagedData, this, &TaskListWidget::getTaskToBeDoneList); +} + +TaskListWidget::~TaskListWidget() +{ + qDebug() << "~TaskListWidget"; + delete ui; +} + +void TaskListWidget::showEvent(QShowEvent * event) +{ + ui->tableTaskTBDList->adjustTableWidth(); + getTaskToBeDoneList(0); +} + +void TaskListWidget::resizeEvent(QResizeEvent * event) +{ + ui->tableTaskTBDList->adjustTableWidth(); +} + +void TaskListWidget::initForm() +{ + // 加载样式表 + QString qssStyle = QssFileUtils::loadQssFileContent(":/qss/infoTable.css"); + if (qssStyle.isEmpty() == false) { + this->setStyleSheet(qssStyle); // 仅本窗口生效 + } + + // 查询条件的样式 + QList children = ui->wdgtQueryBox->findChildren(); + for (QWidget * wdgt : children) { + wdgt->setProperty("class", "queryBox"); + + if (QString(wdgt->metaObject()->className()).contains("QLineEdit")) { + // 绑定输入框回车事件 只在密码输入框执行 + connect((QLineEdit *)wdgt, &QLineEdit::returnPressed, this, [=](){ + emit ui->btnQuery->clicked(); + }); + } + } + + // 查询和重置按钮 + ui->btnQuery->setProperty("class", "btnDefault"); + ui->btnResetQuery->setProperty("class", "btnResetQuery"); + + ui->tableTaskTBDList->setTableProperty("class", "defaultTable"); + + // 分页组件 + QStringList btnPageGroupUrls; + btnPageGroupUrls << ":/image/infomation/btnPageFirst.png" << ":/image/infomation/btnPagePre.png" + << ":/image/infomation/btnPageNext.png" << ":/image/infomation/btnPageLast.png"; + ui->tableTaskTBDList->setPageButtonIcons(btnPageGroupUrls); + ui->tableTaskTBDList->setPageButtonProperty("class", "pageBtnGroup"); +} + +void TaskListWidget::initFormTable() +{ + // 初始化查询条件 + SysLocalService localServ; + QList> deptTaskColumns = localServ.getInfomationTableColumns("deptTask"); + ui->tableTaskTBDList->setColumns(deptTaskColumns); + + ui->tableTaskTBDList->setMultiCheckType(QPagedTable::MultiCheckType::MULTI); + ui->tableTaskTBDList->setCheckBoxClass("defaultSolid"); + + ui->tableTaskTBDList->setDataRowHeight(45); + + connect(ui->tableTaskTBDList, &QPagedTable::tableRowSelected, this, &TaskListWidget::rowSelectedHandler); + + initUrgentSelect(); + + ui->tableTaskTBDList->initTableWidget(); + ui->tableTaskTBDList->initTableHeader(); +} + +void TaskListWidget::initUrgentSelect() +{ + ui->selectUrgent->addItem("全部", ""); + ui->selectUrgent->addItem("不加急", "0"); + ui->selectUrgent->addItem("加急", "1"); + + ui->selectUrgent->setView(new QListView()); // 使ComboBox下拉选项 的QSS生效的关键代码 +} + +void TaskListWidget::getTaskToBeDoneList(int currPage) +{ + TaskService taskServ; + taskList.clear(); // 清除之前的结果 + + // 获取所有查询条件 + TaskRequest request; + request.userId = ProMemory::getInstance().getLoginUser().value("id").toString(); + request.sampleName = ui->inputDevName->text(); + request.sampleModel = ui->inputDevModel->text(); + request.customerName = ui->inputCustomer->text(); + request.measureStatusList << "3" << "2"; + request.isUrgent = ui->selectUrgent->currentData().toString(); + + // 查询页 + page.currentPage = currPage; + + // 查询数据库 + taskList = taskServ.getDeptTaskListPage(request, page); + QList> pageData; + for (TaskDTO task : taskList) { + QMap item; + + item.insert("id", task.id); + item.insert("name", task.sampleName); + item.insert("model", task.sampleModel); + item.insert("serialNo", task.manufactureNo); + item.insert("maker", task.manufacturer); + item.insert("custom", task.customerName); + item.insert("requireTime", task.requireOverTime); + item.insert("isUrgent", task.isUrgentName); + item.insert("orderNo", task.orderNo); + item.insert("measureStatus", task.measureStatusName); + + pageData.append(item); + } + + // 设置分页表格数据 + ui->tableTaskTBDList->setTotalCount(page.totalCount); + ui->tableTaskTBDList->setDatas(pageData); + + // 筛选 加急=是 的单元格标红提示 + QList matchedRows = ui->tableTaskTBDList->filterCells("isUrgent", "是"); + if (!matchedRows.isEmpty()) { + for (int row : matchedRows) { + ui->tableTaskTBDList->getTableInstance()->item(row, 10)->setForeground(QBrush("#FF0000")); // 多加了一列复选框 + } + } + + // 勾选上已经选中的记录 + for (int i = 0; i < taskList.size(); i++) { + ui->tableTaskTBDList->setRowSelected(i, parentForm->getSelectedTask().contains(taskList.at(i).sampleId)); + } +} + +void TaskListWidget::rowSelectedHandler(int rowIdx, bool selected) +{ + QString rowId = taskList.at(rowIdx).sampleId; + if (selected) { + parentForm->getSelectedTask().insert(rowId, taskList.at(rowIdx)); + } else { + parentForm->getSelectedTask().remove(rowId); + } +} + +void TaskListWidget::on_btnQuery_clicked() +{ + getTaskToBeDoneList(0); +} + +void TaskListWidget::on_btnResetQuery_clicked() +{ + ui->inputDevName->setText(""); + ui->inputDevModel->setText(""); + ui->inputCustomer->setText(""); + + ui->selectUrgent->setCurrentIndex(0); + + getTaskToBeDoneList(0); +} + + +void TaskListWidget::on_btnNextToConf_clicked() +{ + if (parentForm->getSelectedTask().size() == 0) { + CustomMessageBox::warning(this, "提示", "请选择被检设备!"); + } else { + // 判断多个被检设备 分类和量程是否都相同 + TaskService taskServ; + QStringList itemCats = taskServ.getVerificationItemCatsBySelectedTask(parentForm->getSelectedTask().keys()); + + if (itemCats.size() == 1) { + parentForm->setVerificationItemCatIds(itemCats); + emit taskEquipmentSelected(); + } else if (itemCats.isEmpty()) { + CustomMessageBox::warning(this, "提示", "没找到所选待检设备的检定项分类,请检查相关配置"); + } else { + qDebug() << itemCats; + CustomMessageBox::warning(this, "提示", "所选的多个待检设备检定项目不同,请重新选择"); + } + } +} diff --git a/calibration/TaskListWidget.h b/calibration/TaskListWidget.h new file mode 100644 index 0000000..5d89a72 --- /dev/null +++ b/calibration/TaskListWidget.h @@ -0,0 +1,55 @@ +#ifndef TASKLISTWIDGET_H +#define TASKLISTWIDGET_H + +#include +#include + +#include "dao/service/SysLocalService.h" +#include "dao/service/TaskService.h" +#include "frame/CustomMessageBox.h" + +class CalibrationMainForm; + +namespace Ui { +class TaskListWidget; +} + +class TaskListWidget : public QWidget +{ + Q_OBJECT + +public: + explicit TaskListWidget(QWidget *parent = nullptr); + ~TaskListWidget(); + +protected: + void showEvent(QShowEvent * event) override; + void resizeEvent(QResizeEvent * event) override; + +private: + Ui::TaskListWidget *ui; + CalibrationMainForm * parentForm; + Page page; + + // 待检设备清单 + QList taskList; + + void initForm(); + void initFormTable(); + + void initMeasureStatusSelect(); + void initUrgentSelect(); + +private slots: + void getTaskToBeDoneList(int currPage); + void rowSelectedHandler(int rowIdx, bool selected); + void on_btnQuery_clicked(); + void on_btnResetQuery_clicked(); + void on_btnNextToConf_clicked(); + +signals: + void taskEquipmentSelected(); + +}; + +#endif // TASKLISTWIDGET_H diff --git a/calibration/TaskListWidget.ui b/calibration/TaskListWidget.ui new file mode 100644 index 0000000..0dd382d --- /dev/null +++ b/calibration/TaskListWidget.ui @@ -0,0 +1,232 @@ + + + TaskListWidget + + + + 0 + 0 + 1245 + 605 + + + + Form + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 10 + + + 10 + + + 10 + + + 10 + + + 10 + + + + + + 0 + 0 + + + + + 150 + 36 + + + + + + + 受检设备名称 + + + + + + + + 0 + 0 + + + + + 150 + 36 + + + + 规格型号 + + + + + + + + 0 + 0 + + + + + 150 + 36 + + + + 委托方 + + + + + + + + 0 + 0 + + + + + 120 + 36 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 100 + 20 + + + + + + + + + 120 + 36 + + + + 查询 + + + + + + + + 120 + 36 + + + + 重置 + + + + + + + Qt::Horizontal + + + + 0 + 0 + + + + + + + + + 200 + 48 + + + + 下一步,配置 + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + + + + QPagedTable + QWidget +
QPagedTable/QPagedTable.h
+
+
+ + +
diff --git a/calibration/calibration.pri b/calibration/calibration.pri index f0e9dfb..8776fe4 100644 --- a/calibration/calibration.pri +++ b/calibration/calibration.pri @@ -1,4 +1,10 @@ HEADERS += $$PWD/CalibrationMainForm.h +HEADERS += $$PWD/TaskListWidget.h +HEADERS += $$PWD/ConfigurationWidget.h SOURCES += $$PWD/CalibrationMainForm.cpp +SOURCES += $$PWD/TaskListWidget.cpp +SOURCES += $$PWD/ConfigurationWidget.cpp FORMS += $$PWD/CalibrationMainForm.ui +FORMS += $$PWD/TaskListWidget.ui +FORMS += $$PWD/ConfigurationWidget.ui diff --git a/dao/CheckDao.cpp b/dao/CheckDao.cpp new file mode 100644 index 0000000..6fb9efe --- /dev/null +++ b/dao/CheckDao.cpp @@ -0,0 +1,141 @@ +#include "CheckDao.h" + +CheckDao::CheckDao() +{ + +} + +QStringList CheckDao::getMeasureItemCategoryByModels(QStringList modelIds) +{ + QStringList result; + + QSqlDatabase dbLocal = CDbConnectionPool::instance().openConnection("local"); + QSqlQuery query(dbLocal); + + QString sql = "SELECT bbdmii.item_category_id FROM biz_business_device_measure_item_info bbdmii " + "WHERE "; + for (int i = 0; i < modelIds.size() - 1; i++) { + sql += "bbdmii.device_model_id = ? AND "; + } + sql += "bbdmii.device_model_id = ?;"; + query.prepare(sql); + + for (int i = 0; i < modelIds.size(); i++) { + query.bindValue(i, modelIds.at(i)); + } + + bool isSuccess = query.exec(); + if (isSuccess) { + while (query.next()) { + result << query.value("item_category_id").toString(); + } + } else { + qDebug() << "Query execution failed: " << query.lastError().text(); + } + + return result; +} + +QStringList CheckDao::getSelectedTaskMeasureItemCategory(QStringList taskSampleIds) +{ + QStringList resultList; + + QSqlDatabase dbLocal = CDbConnectionPool::instance().openConnection("local"); + QSqlQuery query(dbLocal); + + QString placeholders = QString("?,").repeated(taskSampleIds.size()).chopped(1); + + QString sql = QString("SELECT bbdmii.item_category_id FROM biz_business_device_measure_item_info bbdmii " + "LEFT JOIN eqpt_equipment_model_info eemi ON eemi.id = bbdmii.device_model_id " + "LEFT JOIN eqpt_equipment_info eei ON eei.model_id = eemi.id " + "WHERE eei.id in (%1);").arg(placeholders); + + qDebug() << sql << taskSampleIds; + + query.prepare(sql); + for (QString sampleId : taskSampleIds) { + query.addBindValue(sampleId); + } + + if (query.exec()) { + while (query.next()) { + resultList << query.value(0).toString(); + } + } else { + LogUtil::PrintLog("ERROR", QString("查询所选待检设备的检定项分类失败[%1]").arg(query.lastError().text())); + } + + return resultList; +} + +DeviceMeasureCategoryDto CheckDao::getDeviceMeasureCategoryById(QString categoryId) +{ + DeviceMeasureCategoryDto result; + + QSqlDatabase dbLocal = CDbConnectionPool::instance().openConnection("local"); + QSqlQuery query(dbLocal); + + QString sql = "SELECT bbdmic.* FROM biz_business_device_measure_item_category bbdmic " + "WHERE bbdmic.id = :id"; + + query.prepare(sql); + query.bindValue(":id", categoryId); + + bool isSuccess = query.exec(); + if (isSuccess) { + if (query.first()) { + result.id = query.value("id").toString(); + result.categoryNo = query.value("category_no").toString(); + result.categoryName = query.value("category_name").toString(); + result.deviceType = query.value("device_type").toString(); + result.belongStandardEquipment = query.value("belong_standard_equipment").toString(); + result.measureCategory = query.value("measure_category").toString(); + result.technologyFile = query.value("technology_file").toString(); + } + } else { + LogUtil::PrintLog("ERROR", QString("查询标准设备的检定项分类失败[%1][%2]").arg(categoryId).arg(query.lastError().text())); + } + + qDebug() << "CheckDao::getDeviceMeasureCategoryById: " << query.lastQuery() << categoryId; + + return result; +} + +QList CheckDao::getDeviceRoleByCategory(QString categoryId) +{ + QList result; + + DeviceMeasureCategoryDto category = getDeviceMeasureCategoryById(categoryId); + + QSqlDatabase dbLocal = CDbConnectionPool::instance().openConnection("local"); + QSqlQuery query(dbLocal); + + QString sql = "SELECT * FROM zd_device_role WHERE cateory_id = :cateory or cateory_name = :categoryName;"; + query.prepare(sql); + + query.bindValue(":cateory", categoryId); + query.bindValue(":categoryName", category.categoryName); + bool isSuccess = query.exec(); + if (isSuccess) { + while (query.next()) { + ZdDeviceRoleDto role; + + role.id = query.value("id").toString(); + role.belongVername = query.value("belong_vername").toString(); + role.belongCheckname = query.value("belong_checkname").toString(); + role.categoryId = query.value("cateory_id").toString(); + role.categoryName = query.value("cateory_name").toString(); + role.deviceId = query.value("device_id").toString(); + role.deviceType = query.value("device_type").toString(); + role.role = query.value("role").toString(); + + result.append(role); + } + } else { + LogUtil::PrintLog("ERROR", QString("查询标准设备的角色分类失败[%1][%2][%3]").arg(categoryId).arg(category.categoryName).arg(query.lastError().text())); + } + + qDebug() << "CheckDao::getDeviceRoleByCategory: " << query.lastQuery() << categoryId << category.categoryName; + + return result; +} diff --git a/dao/CheckDao.h b/dao/CheckDao.h new file mode 100644 index 0000000..fd3ea01 --- /dev/null +++ b/dao/CheckDao.h @@ -0,0 +1,31 @@ +#ifndef CHECKDAO_H +#define CHECKDAO_H + +#include "BaseDao.h" + +// 检定设备角色 +class ZdDeviceRoleDto { +public: + QString id; + QString belongVername; // 检定装置名称字典 + QString belongCheckname; // 核查装置名称字典 + QString categoryId; // 检定/核查项目id + QString categoryName; // 分类名称 + QString deviceId; // 设备ID + QString deviceType; // 被检0 标准1 + QString role; // 角色 +}; + +class CheckDao : public BaseDao +{ +public: + CheckDao(); + + QStringList getMeasureItemCategoryByModels(QStringList modelIds); + QStringList getSelectedTaskMeasureItemCategory(QStringList taskSampleIds); + DeviceMeasureCategoryDto getDeviceMeasureCategoryById(QString categoryId); + + QList getDeviceRoleByCategory(QString categoryId); +}; + +#endif // CHECKDAO_H diff --git a/dao/TaskDao.cpp b/dao/TaskDao.cpp index 2c1c86e..45aac80 100644 --- a/dao/TaskDao.cpp +++ b/dao/TaskDao.cpp @@ -37,7 +37,7 @@ query.bindValue(":offset", page.currentPage * page.pageSize); query.bindValue(":limit", page.pageSize); -// qDebug() << sql; +// qDebug() << sql << request.measureStatusList.join(",") << request.deptId << page.currentPage << page.pageSize << totalCount; // 分页查询 bool isSuccess = query.exec(); @@ -86,7 +86,7 @@ query.prepare(sql); bindValueTaskListPage(query, request); -// qDebug() << sql; +// qDebug() << sql << request.measureStatusList.join(','); if (query.exec() && query.next()) { totalCount = query.value("recCount").toInt(); @@ -356,7 +356,11 @@ where = QString("%1 AND bo.is_urgent = :urgent").arg(where); } if (!request.measureStatusList.isEmpty()) { - where = QString("%1 AND blei.measure_status IN (:statusList)").arg(where); + QString tmp; + for (int i = 0; i < request.measureStatusList.size(); i++) { + tmp = QString("%1,:status%2").arg(tmp).arg(i); + } + where = QString("%1 AND blei.measure_status IN ( %2 )").arg(where).arg(tmp.mid(1)); } return where; @@ -389,6 +393,8 @@ query.bindValue(":urgent", request.isUrgent); } if (!request.measureStatusList.isEmpty()) { - query.bindValue(":statusList", request.measureStatusList.join(",")); + for (int i = 0; i < request.measureStatusList.size(); i++) { + query.bindValue(QString(":status%1").arg(i), request.measureStatusList.at(i)); + } } } diff --git a/dao/dao.pri b/dao/dao.pri index 8989888..50052cf 100644 --- a/dao/dao.pri +++ b/dao/dao.pri @@ -36,8 +36,8 @@ #HEADERS += $$PWD/ProgramDao.h #SOURCES += $$PWD/ProgramDao.cpp -#HEADERS += $$PWD/CheckDao.h -#SOURCES += $$PWD/CheckDao.cpp +HEADERS += $$PWD/CheckDao.h +SOURCES += $$PWD/CheckDao.cpp #HEADERS += $$PWD/ResSystemFileDao.h #SOURCES += $$PWD/ResSystemFileDao.cpp diff --git a/QPagedTable/QPagedTable.cpp b/QPagedTable/QPagedTable.cpp index 1bb4af0..1ca1322 100644 --- a/QPagedTable/QPagedTable.cpp +++ b/QPagedTable/QPagedTable.cpp @@ -181,6 +181,10 @@ { ui->wdgtPageBtn->setProperty(name, value); } +void QPagedTable::setCheckBoxClass(QString className) +{ + checkProperty.insert("class", className); +} void QPagedTable::setHeaderHeight(int height) { @@ -217,6 +221,17 @@ return filterList; } +void QPagedTable::setRowSelected(int rowIdx, bool selected) +{ + if (multiCheck != MultiCheckType::NONE) { + QCheckBox *checkBox = ui->table->cellWidget(rowIdx, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->setCheckState(selected ? Qt::CheckState::Checked : Qt::CheckState::Unchecked); + } + } +} + QWidget * QPagedTable::buildNewCheckWidget() { QWidget* activeWidget = new QWidget(ui->table); @@ -225,6 +240,7 @@ QCheckBox* check = new QCheckBox(activeWidget); check->setMinimumSize(25, 25); check->setMaximumSize(25, 25); + check->setProperty("class", checkProperty.value("class")); activelayout->addWidget(check, 0, 0); if (multiCheck == MultiCheckType::RADIO) { @@ -241,6 +257,7 @@ QRadioButton* radio = new QRadioButton(activeWidget); radio->setMinimumSize(25, 25); radio->setMaximumSize(25, 25); + radio->setProperty("class", checkProperty.value("class")); activelayout->addWidget(radio, 0, 0); group->addButton(radio); @@ -336,3 +353,18 @@ page.currentPage = page.totalPage - 1; emit reloadTablePagedData(page.currentPage); } + +void QPagedTable::on_table_cellDoubleClicked(int row, int column) +{ + if (multiCheck != MultiCheckType::NONE && doubleClickSelectRow) { + QTableWidget * tableWidget = qobject_cast(sender()); + if (tableWidget) { + QCheckBox *checkBox = tableWidget->cellWidget(row, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->toggle(); + emit tableRowSelected(row, checkBox->isChecked()); + } + } + } +} diff --git a/QPagedTable/QPagedTable.h b/QPagedTable/QPagedTable.h index e561d01..aacb4aa 100644 --- a/QPagedTable/QPagedTable.h +++ b/QPagedTable/QPagedTable.h @@ -50,6 +50,7 @@ void setTotalCount(int totalCount); void setPageButtonIcons(QStringList iconUrls); void setPageButtonProperty(const char* name, QString value); + void setCheckBoxClass(QString className); void setHeaderHeight(int height); void setDataRowHeight(int height); @@ -62,6 +63,7 @@ QTableWidget * getTableInstance(); QList filterCells(QString colName, QString value); + void setRowSelected(int rowIdx, bool selected); private: Ui::QPagedTable *ui; @@ -92,6 +94,8 @@ int frameBorderSize = 0; int multiCheck = MultiCheckType::NONE; + QMap checkProperty; + bool doubleClickSelectRow = true; QButtonGroup * group; @@ -105,9 +109,12 @@ void on_btnPre_clicked(); void on_btnNext_clicked(); void on_btnLast_clicked(); + void on_table_cellDoubleClicked(int row, int column); + signals: void reloadTablePagedData(int currPage); void contextMenuActionTrigged(int actionIdx, int rowIdx, int colIdx); + void tableRowSelected(int rowIdx, bool selected); }; #endif // QPAGEDTABLE_H diff --git a/calibration/CalibrationMainForm.cpp b/calibration/CalibrationMainForm.cpp index 9b778a5..44d203a 100644 --- a/calibration/CalibrationMainForm.cpp +++ b/calibration/CalibrationMainForm.cpp @@ -6,9 +6,72 @@ ui(new Ui::CalibrationMainForm) { ui->setupUi(this); + + initFormWidgets(); + bindSignalAndHandlers(); } CalibrationMainForm::~CalibrationMainForm() { + qDebug() << "~CalibrationMainForm"; delete ui; } + +QMap & CalibrationMainForm::getSelectedTask() +{ + return selectedTask; +} +QStringList CalibrationMainForm::getVerificationItemCatIds() +{ + return verificationItemCatIds; +} +void CalibrationMainForm::setVerificationItemCatIds(QStringList itemCatIds) +{ + verificationItemCatIds = itemCatIds; +} + +void CalibrationMainForm::showEvent(QShowEvent * event) +{ + selectedTask.clear(); + verificationItemCatIds.clear(); + + ui->wdgtCalMain->setCurrentIndex(0); +} + +void CalibrationMainForm::initFormWidgets() +{ + wdgtTask = new TaskListWidget(this); + wdgtConf = new ConfigurationWidget(this); +// wdgtStandardList = new StandardListWidget(this); +// wdgtConnectState = new ConnectStateWidget(this); + + ui->wdgtCalMain->addWidget(wdgtTask); + ui->wdgtCalMain->addWidget(wdgtConf); +// ui->wdgtContent->addWidget(wdgtStandardList); +// ui->wdgtContent->addWidget(wdgtConnectState); + + ui->wdgtCalMain->setCurrentIndex(0); +} + +void CalibrationMainForm::bindSignalAndHandlers() +{ + // 待检设备清单 下一步 切换到 配置检定项和流程 + connect(wdgtTask, &TaskListWidget::taskEquipmentSelected, this, &CalibrationMainForm::nextToConfiguration); + + // 检定程序 上一步 下一步 +// connect(wdgtCheckProgram, &CheckProgramWidget::switchToReSelectTaskEquipment, this, &CalibrationForm::forwardToReSelectTaskEquipment); +// connect(wdgtCheckProgram, &CheckProgramWidget::switchToNextWidget, this, &CalibrationForm::nextToSelectStandardEquipment); + + // 标准设备 上一步 下一步 +// connect(wdgtStandardList, &StandardListWidget::switchToReSelectCheckProgram, this, &CalibrationForm::forwardToReSelectCheckProgram); +// connect(wdgtStandardList, &StandardListWidget::switchToNextWidget, this, &CalibrationForm::nextToConnectionState); + + // 查看连接状态 +// connect(wdgtConnectState, &ConnectStateWidget::switchToReSelectStandardEqpt, this, &CalibrationForm::forwardToReSelectTaskEquipment); +// connect(wdgtConnectState, &ConnectStateWidget::startAutoCalibration, this, &CalibrationForm::nextToAutoCalibration); +} + +void CalibrationMainForm::nextToConfiguration() +{ + ui->wdgtCalMain->setCurrentWidget(wdgtConf); +} diff --git a/calibration/CalibrationMainForm.h b/calibration/CalibrationMainForm.h index 7d75014..e4bc44c 100644 --- a/calibration/CalibrationMainForm.h +++ b/calibration/CalibrationMainForm.h @@ -3,6 +3,10 @@ #include +#include "dao/service/TaskService.h" +#include "calibration/TaskListWidget.h" +#include "calibration/ConfigurationWidget.h" + namespace Ui { class CalibrationMainForm; } @@ -15,8 +19,38 @@ explicit CalibrationMainForm(QWidget *parent = nullptr); ~CalibrationMainForm(); + QMap & getSelectedTask(); + QStringList getVerificationItemCatIds(); + void setVerificationItemCatIds(QStringList itemCatIds); + + // 选定的检定程序(单选) +// CheckProgramDto selectedCheckProgram; + + // 选定的标准设备清单 +// QMap selectedStdEquipment; + +protected: + void showEvent(QShowEvent * event) override; + + private: Ui::CalibrationMainForm *ui; + + TaskListWidget * wdgtTask; + ConfigurationWidget * wdgtConf; + + // 选择的任务清单(待检设备清单) + QMap selectedTask; + + // 所选待检设备对应的检定项分类 + QStringList verificationItemCatIds; + + void initFormWidgets(); + void bindSignalAndHandlers(); + +private slots: + // 待检设备已选择完毕 + void nextToConfiguration(); }; #endif // CALIBRATIONMAINFORM_H diff --git a/calibration/CalibrationMainForm.ui b/calibration/CalibrationMainForm.ui index 9b5a9c2..5479af5 100644 --- a/calibration/CalibrationMainForm.ui +++ b/calibration/CalibrationMainForm.ui @@ -1,9 +1,7 @@ + - - - CalibrationMainForm - + 0 @@ -15,7 +13,27 @@ Form + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + - + diff --git a/calibration/ConfigurationWidget.cpp b/calibration/ConfigurationWidget.cpp new file mode 100644 index 0000000..5e47dc2 --- /dev/null +++ b/calibration/ConfigurationWidget.cpp @@ -0,0 +1,14 @@ +#include "ConfigurationWidget.h" +#include "ui_ConfigurationWidget.h" + +ConfigurationWidget::ConfigurationWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::ConfigurationWidget) +{ + ui->setupUi(this); +} + +ConfigurationWidget::~ConfigurationWidget() +{ + delete ui; +} diff --git a/calibration/ConfigurationWidget.h b/calibration/ConfigurationWidget.h new file mode 100644 index 0000000..b3321c1 --- /dev/null +++ b/calibration/ConfigurationWidget.h @@ -0,0 +1,22 @@ +#ifndef CONFIGURATIONWIDGET_H +#define CONFIGURATIONWIDGET_H + +#include + +namespace Ui { +class ConfigurationWidget; +} + +class ConfigurationWidget : public QWidget +{ + Q_OBJECT + +public: + explicit ConfigurationWidget(QWidget *parent = nullptr); + ~ConfigurationWidget(); + +private: + Ui::ConfigurationWidget *ui; +}; + +#endif // CONFIGURATIONWIDGET_H diff --git a/calibration/ConfigurationWidget.ui b/calibration/ConfigurationWidget.ui new file mode 100644 index 0000000..a567bba --- /dev/null +++ b/calibration/ConfigurationWidget.ui @@ -0,0 +1,21 @@ + + + + + ConfigurationWidget + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + diff --git a/calibration/TaskListWidget.cpp b/calibration/TaskListWidget.cpp new file mode 100644 index 0000000..31f16c7 --- /dev/null +++ b/calibration/TaskListWidget.cpp @@ -0,0 +1,202 @@ +#include "TaskListWidget.h" +#include "ui_TaskListWidget.h" + +#include "calibration/CalibrationMainForm.h" + +TaskListWidget::TaskListWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::TaskListWidget) +{ + ui->setupUi(this); + parentForm = (CalibrationMainForm *)parent; + + initForm(); + initFormTable(); + + // 绑定信号与槽 + connect(ui->tableTaskTBDList, &QPagedTable::reloadTablePagedData, this, &TaskListWidget::getTaskToBeDoneList); +} + +TaskListWidget::~TaskListWidget() +{ + qDebug() << "~TaskListWidget"; + delete ui; +} + +void TaskListWidget::showEvent(QShowEvent * event) +{ + ui->tableTaskTBDList->adjustTableWidth(); + getTaskToBeDoneList(0); +} + +void TaskListWidget::resizeEvent(QResizeEvent * event) +{ + ui->tableTaskTBDList->adjustTableWidth(); +} + +void TaskListWidget::initForm() +{ + // 加载样式表 + QString qssStyle = QssFileUtils::loadQssFileContent(":/qss/infoTable.css"); + if (qssStyle.isEmpty() == false) { + this->setStyleSheet(qssStyle); // 仅本窗口生效 + } + + // 查询条件的样式 + QList children = ui->wdgtQueryBox->findChildren(); + for (QWidget * wdgt : children) { + wdgt->setProperty("class", "queryBox"); + + if (QString(wdgt->metaObject()->className()).contains("QLineEdit")) { + // 绑定输入框回车事件 只在密码输入框执行 + connect((QLineEdit *)wdgt, &QLineEdit::returnPressed, this, [=](){ + emit ui->btnQuery->clicked(); + }); + } + } + + // 查询和重置按钮 + ui->btnQuery->setProperty("class", "btnDefault"); + ui->btnResetQuery->setProperty("class", "btnResetQuery"); + + ui->tableTaskTBDList->setTableProperty("class", "defaultTable"); + + // 分页组件 + QStringList btnPageGroupUrls; + btnPageGroupUrls << ":/image/infomation/btnPageFirst.png" << ":/image/infomation/btnPagePre.png" + << ":/image/infomation/btnPageNext.png" << ":/image/infomation/btnPageLast.png"; + ui->tableTaskTBDList->setPageButtonIcons(btnPageGroupUrls); + ui->tableTaskTBDList->setPageButtonProperty("class", "pageBtnGroup"); +} + +void TaskListWidget::initFormTable() +{ + // 初始化查询条件 + SysLocalService localServ; + QList> deptTaskColumns = localServ.getInfomationTableColumns("deptTask"); + ui->tableTaskTBDList->setColumns(deptTaskColumns); + + ui->tableTaskTBDList->setMultiCheckType(QPagedTable::MultiCheckType::MULTI); + ui->tableTaskTBDList->setCheckBoxClass("defaultSolid"); + + ui->tableTaskTBDList->setDataRowHeight(45); + + connect(ui->tableTaskTBDList, &QPagedTable::tableRowSelected, this, &TaskListWidget::rowSelectedHandler); + + initUrgentSelect(); + + ui->tableTaskTBDList->initTableWidget(); + ui->tableTaskTBDList->initTableHeader(); +} + +void TaskListWidget::initUrgentSelect() +{ + ui->selectUrgent->addItem("全部", ""); + ui->selectUrgent->addItem("不加急", "0"); + ui->selectUrgent->addItem("加急", "1"); + + ui->selectUrgent->setView(new QListView()); // 使ComboBox下拉选项 的QSS生效的关键代码 +} + +void TaskListWidget::getTaskToBeDoneList(int currPage) +{ + TaskService taskServ; + taskList.clear(); // 清除之前的结果 + + // 获取所有查询条件 + TaskRequest request; + request.userId = ProMemory::getInstance().getLoginUser().value("id").toString(); + request.sampleName = ui->inputDevName->text(); + request.sampleModel = ui->inputDevModel->text(); + request.customerName = ui->inputCustomer->text(); + request.measureStatusList << "3" << "2"; + request.isUrgent = ui->selectUrgent->currentData().toString(); + + // 查询页 + page.currentPage = currPage; + + // 查询数据库 + taskList = taskServ.getDeptTaskListPage(request, page); + QList> pageData; + for (TaskDTO task : taskList) { + QMap item; + + item.insert("id", task.id); + item.insert("name", task.sampleName); + item.insert("model", task.sampleModel); + item.insert("serialNo", task.manufactureNo); + item.insert("maker", task.manufacturer); + item.insert("custom", task.customerName); + item.insert("requireTime", task.requireOverTime); + item.insert("isUrgent", task.isUrgentName); + item.insert("orderNo", task.orderNo); + item.insert("measureStatus", task.measureStatusName); + + pageData.append(item); + } + + // 设置分页表格数据 + ui->tableTaskTBDList->setTotalCount(page.totalCount); + ui->tableTaskTBDList->setDatas(pageData); + + // 筛选 加急=是 的单元格标红提示 + QList matchedRows = ui->tableTaskTBDList->filterCells("isUrgent", "是"); + if (!matchedRows.isEmpty()) { + for (int row : matchedRows) { + ui->tableTaskTBDList->getTableInstance()->item(row, 10)->setForeground(QBrush("#FF0000")); // 多加了一列复选框 + } + } + + // 勾选上已经选中的记录 + for (int i = 0; i < taskList.size(); i++) { + ui->tableTaskTBDList->setRowSelected(i, parentForm->getSelectedTask().contains(taskList.at(i).sampleId)); + } +} + +void TaskListWidget::rowSelectedHandler(int rowIdx, bool selected) +{ + QString rowId = taskList.at(rowIdx).sampleId; + if (selected) { + parentForm->getSelectedTask().insert(rowId, taskList.at(rowIdx)); + } else { + parentForm->getSelectedTask().remove(rowId); + } +} + +void TaskListWidget::on_btnQuery_clicked() +{ + getTaskToBeDoneList(0); +} + +void TaskListWidget::on_btnResetQuery_clicked() +{ + ui->inputDevName->setText(""); + ui->inputDevModel->setText(""); + ui->inputCustomer->setText(""); + + ui->selectUrgent->setCurrentIndex(0); + + getTaskToBeDoneList(0); +} + + +void TaskListWidget::on_btnNextToConf_clicked() +{ + if (parentForm->getSelectedTask().size() == 0) { + CustomMessageBox::warning(this, "提示", "请选择被检设备!"); + } else { + // 判断多个被检设备 分类和量程是否都相同 + TaskService taskServ; + QStringList itemCats = taskServ.getVerificationItemCatsBySelectedTask(parentForm->getSelectedTask().keys()); + + if (itemCats.size() == 1) { + parentForm->setVerificationItemCatIds(itemCats); + emit taskEquipmentSelected(); + } else if (itemCats.isEmpty()) { + CustomMessageBox::warning(this, "提示", "没找到所选待检设备的检定项分类,请检查相关配置"); + } else { + qDebug() << itemCats; + CustomMessageBox::warning(this, "提示", "所选的多个待检设备检定项目不同,请重新选择"); + } + } +} diff --git a/calibration/TaskListWidget.h b/calibration/TaskListWidget.h new file mode 100644 index 0000000..5d89a72 --- /dev/null +++ b/calibration/TaskListWidget.h @@ -0,0 +1,55 @@ +#ifndef TASKLISTWIDGET_H +#define TASKLISTWIDGET_H + +#include +#include + +#include "dao/service/SysLocalService.h" +#include "dao/service/TaskService.h" +#include "frame/CustomMessageBox.h" + +class CalibrationMainForm; + +namespace Ui { +class TaskListWidget; +} + +class TaskListWidget : public QWidget +{ + Q_OBJECT + +public: + explicit TaskListWidget(QWidget *parent = nullptr); + ~TaskListWidget(); + +protected: + void showEvent(QShowEvent * event) override; + void resizeEvent(QResizeEvent * event) override; + +private: + Ui::TaskListWidget *ui; + CalibrationMainForm * parentForm; + Page page; + + // 待检设备清单 + QList taskList; + + void initForm(); + void initFormTable(); + + void initMeasureStatusSelect(); + void initUrgentSelect(); + +private slots: + void getTaskToBeDoneList(int currPage); + void rowSelectedHandler(int rowIdx, bool selected); + void on_btnQuery_clicked(); + void on_btnResetQuery_clicked(); + void on_btnNextToConf_clicked(); + +signals: + void taskEquipmentSelected(); + +}; + +#endif // TASKLISTWIDGET_H diff --git a/calibration/TaskListWidget.ui b/calibration/TaskListWidget.ui new file mode 100644 index 0000000..0dd382d --- /dev/null +++ b/calibration/TaskListWidget.ui @@ -0,0 +1,232 @@ + + + TaskListWidget + + + + 0 + 0 + 1245 + 605 + + + + Form + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 10 + + + 10 + + + 10 + + + 10 + + + 10 + + + + + + 0 + 0 + + + + + 150 + 36 + + + + + + + 受检设备名称 + + + + + + + + 0 + 0 + + + + + 150 + 36 + + + + 规格型号 + + + + + + + + 0 + 0 + + + + + 150 + 36 + + + + 委托方 + + + + + + + + 0 + 0 + + + + + 120 + 36 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 100 + 20 + + + + + + + + + 120 + 36 + + + + 查询 + + + + + + + + 120 + 36 + + + + 重置 + + + + + + + Qt::Horizontal + + + + 0 + 0 + + + + + + + + + 200 + 48 + + + + 下一步,配置 + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + + + + QPagedTable + QWidget +
QPagedTable/QPagedTable.h
+
+
+ + +
diff --git a/calibration/calibration.pri b/calibration/calibration.pri index f0e9dfb..8776fe4 100644 --- a/calibration/calibration.pri +++ b/calibration/calibration.pri @@ -1,4 +1,10 @@ HEADERS += $$PWD/CalibrationMainForm.h +HEADERS += $$PWD/TaskListWidget.h +HEADERS += $$PWD/ConfigurationWidget.h SOURCES += $$PWD/CalibrationMainForm.cpp +SOURCES += $$PWD/TaskListWidget.cpp +SOURCES += $$PWD/ConfigurationWidget.cpp FORMS += $$PWD/CalibrationMainForm.ui +FORMS += $$PWD/TaskListWidget.ui +FORMS += $$PWD/ConfigurationWidget.ui diff --git a/dao/CheckDao.cpp b/dao/CheckDao.cpp new file mode 100644 index 0000000..6fb9efe --- /dev/null +++ b/dao/CheckDao.cpp @@ -0,0 +1,141 @@ +#include "CheckDao.h" + +CheckDao::CheckDao() +{ + +} + +QStringList CheckDao::getMeasureItemCategoryByModels(QStringList modelIds) +{ + QStringList result; + + QSqlDatabase dbLocal = CDbConnectionPool::instance().openConnection("local"); + QSqlQuery query(dbLocal); + + QString sql = "SELECT bbdmii.item_category_id FROM biz_business_device_measure_item_info bbdmii " + "WHERE "; + for (int i = 0; i < modelIds.size() - 1; i++) { + sql += "bbdmii.device_model_id = ? AND "; + } + sql += "bbdmii.device_model_id = ?;"; + query.prepare(sql); + + for (int i = 0; i < modelIds.size(); i++) { + query.bindValue(i, modelIds.at(i)); + } + + bool isSuccess = query.exec(); + if (isSuccess) { + while (query.next()) { + result << query.value("item_category_id").toString(); + } + } else { + qDebug() << "Query execution failed: " << query.lastError().text(); + } + + return result; +} + +QStringList CheckDao::getSelectedTaskMeasureItemCategory(QStringList taskSampleIds) +{ + QStringList resultList; + + QSqlDatabase dbLocal = CDbConnectionPool::instance().openConnection("local"); + QSqlQuery query(dbLocal); + + QString placeholders = QString("?,").repeated(taskSampleIds.size()).chopped(1); + + QString sql = QString("SELECT bbdmii.item_category_id FROM biz_business_device_measure_item_info bbdmii " + "LEFT JOIN eqpt_equipment_model_info eemi ON eemi.id = bbdmii.device_model_id " + "LEFT JOIN eqpt_equipment_info eei ON eei.model_id = eemi.id " + "WHERE eei.id in (%1);").arg(placeholders); + + qDebug() << sql << taskSampleIds; + + query.prepare(sql); + for (QString sampleId : taskSampleIds) { + query.addBindValue(sampleId); + } + + if (query.exec()) { + while (query.next()) { + resultList << query.value(0).toString(); + } + } else { + LogUtil::PrintLog("ERROR", QString("查询所选待检设备的检定项分类失败[%1]").arg(query.lastError().text())); + } + + return resultList; +} + +DeviceMeasureCategoryDto CheckDao::getDeviceMeasureCategoryById(QString categoryId) +{ + DeviceMeasureCategoryDto result; + + QSqlDatabase dbLocal = CDbConnectionPool::instance().openConnection("local"); + QSqlQuery query(dbLocal); + + QString sql = "SELECT bbdmic.* FROM biz_business_device_measure_item_category bbdmic " + "WHERE bbdmic.id = :id"; + + query.prepare(sql); + query.bindValue(":id", categoryId); + + bool isSuccess = query.exec(); + if (isSuccess) { + if (query.first()) { + result.id = query.value("id").toString(); + result.categoryNo = query.value("category_no").toString(); + result.categoryName = query.value("category_name").toString(); + result.deviceType = query.value("device_type").toString(); + result.belongStandardEquipment = query.value("belong_standard_equipment").toString(); + result.measureCategory = query.value("measure_category").toString(); + result.technologyFile = query.value("technology_file").toString(); + } + } else { + LogUtil::PrintLog("ERROR", QString("查询标准设备的检定项分类失败[%1][%2]").arg(categoryId).arg(query.lastError().text())); + } + + qDebug() << "CheckDao::getDeviceMeasureCategoryById: " << query.lastQuery() << categoryId; + + return result; +} + +QList CheckDao::getDeviceRoleByCategory(QString categoryId) +{ + QList result; + + DeviceMeasureCategoryDto category = getDeviceMeasureCategoryById(categoryId); + + QSqlDatabase dbLocal = CDbConnectionPool::instance().openConnection("local"); + QSqlQuery query(dbLocal); + + QString sql = "SELECT * FROM zd_device_role WHERE cateory_id = :cateory or cateory_name = :categoryName;"; + query.prepare(sql); + + query.bindValue(":cateory", categoryId); + query.bindValue(":categoryName", category.categoryName); + bool isSuccess = query.exec(); + if (isSuccess) { + while (query.next()) { + ZdDeviceRoleDto role; + + role.id = query.value("id").toString(); + role.belongVername = query.value("belong_vername").toString(); + role.belongCheckname = query.value("belong_checkname").toString(); + role.categoryId = query.value("cateory_id").toString(); + role.categoryName = query.value("cateory_name").toString(); + role.deviceId = query.value("device_id").toString(); + role.deviceType = query.value("device_type").toString(); + role.role = query.value("role").toString(); + + result.append(role); + } + } else { + LogUtil::PrintLog("ERROR", QString("查询标准设备的角色分类失败[%1][%2][%3]").arg(categoryId).arg(category.categoryName).arg(query.lastError().text())); + } + + qDebug() << "CheckDao::getDeviceRoleByCategory: " << query.lastQuery() << categoryId << category.categoryName; + + return result; +} diff --git a/dao/CheckDao.h b/dao/CheckDao.h new file mode 100644 index 0000000..fd3ea01 --- /dev/null +++ b/dao/CheckDao.h @@ -0,0 +1,31 @@ +#ifndef CHECKDAO_H +#define CHECKDAO_H + +#include "BaseDao.h" + +// 检定设备角色 +class ZdDeviceRoleDto { +public: + QString id; + QString belongVername; // 检定装置名称字典 + QString belongCheckname; // 核查装置名称字典 + QString categoryId; // 检定/核查项目id + QString categoryName; // 分类名称 + QString deviceId; // 设备ID + QString deviceType; // 被检0 标准1 + QString role; // 角色 +}; + +class CheckDao : public BaseDao +{ +public: + CheckDao(); + + QStringList getMeasureItemCategoryByModels(QStringList modelIds); + QStringList getSelectedTaskMeasureItemCategory(QStringList taskSampleIds); + DeviceMeasureCategoryDto getDeviceMeasureCategoryById(QString categoryId); + + QList getDeviceRoleByCategory(QString categoryId); +}; + +#endif // CHECKDAO_H diff --git a/dao/TaskDao.cpp b/dao/TaskDao.cpp index 2c1c86e..45aac80 100644 --- a/dao/TaskDao.cpp +++ b/dao/TaskDao.cpp @@ -37,7 +37,7 @@ query.bindValue(":offset", page.currentPage * page.pageSize); query.bindValue(":limit", page.pageSize); -// qDebug() << sql; +// qDebug() << sql << request.measureStatusList.join(",") << request.deptId << page.currentPage << page.pageSize << totalCount; // 分页查询 bool isSuccess = query.exec(); @@ -86,7 +86,7 @@ query.prepare(sql); bindValueTaskListPage(query, request); -// qDebug() << sql; +// qDebug() << sql << request.measureStatusList.join(','); if (query.exec() && query.next()) { totalCount = query.value("recCount").toInt(); @@ -356,7 +356,11 @@ where = QString("%1 AND bo.is_urgent = :urgent").arg(where); } if (!request.measureStatusList.isEmpty()) { - where = QString("%1 AND blei.measure_status IN (:statusList)").arg(where); + QString tmp; + for (int i = 0; i < request.measureStatusList.size(); i++) { + tmp = QString("%1,:status%2").arg(tmp).arg(i); + } + where = QString("%1 AND blei.measure_status IN ( %2 )").arg(where).arg(tmp.mid(1)); } return where; @@ -389,6 +393,8 @@ query.bindValue(":urgent", request.isUrgent); } if (!request.measureStatusList.isEmpty()) { - query.bindValue(":statusList", request.measureStatusList.join(",")); + for (int i = 0; i < request.measureStatusList.size(); i++) { + query.bindValue(QString(":status%1").arg(i), request.measureStatusList.at(i)); + } } } diff --git a/dao/dao.pri b/dao/dao.pri index 8989888..50052cf 100644 --- a/dao/dao.pri +++ b/dao/dao.pri @@ -36,8 +36,8 @@ #HEADERS += $$PWD/ProgramDao.h #SOURCES += $$PWD/ProgramDao.cpp -#HEADERS += $$PWD/CheckDao.h -#SOURCES += $$PWD/CheckDao.cpp +HEADERS += $$PWD/CheckDao.h +SOURCES += $$PWD/CheckDao.cpp #HEADERS += $$PWD/ResSystemFileDao.h #SOURCES += $$PWD/ResSystemFileDao.cpp diff --git a/dao/service/TaskService.cpp b/dao/service/TaskService.cpp index 5af1053..d7bab02 100644 --- a/dao/service/TaskService.cpp +++ b/dao/service/TaskService.cpp @@ -30,6 +30,31 @@ return deptTaskList; } +QList TaskService::getUserTaskToBeDoneListPage(TaskRequest request, Page &page) +{ + TaskDao taskDao; + SystemDao systemDao; + + QList taskList = taskDao.getTaskListPage(request, page); + + // 获取字典值 + systemDao.getTaskMeasureStatusDict(); + + // 为其他字典值填充名称 + for (TaskDTO &task : taskList) { + wrapperTaskDTO(task); + } + + return taskList; +} + +QStringList TaskService::getVerificationItemCatsBySelectedTask(QStringList taskIds) +{ + CheckDao checkDao; + return checkDao.getSelectedTaskMeasureItemCategory(taskIds); +} + + void TaskService::wrapperTaskDTO(TaskDTO &task) { task.isUrgentName = task.isUrgent == "1" ? "是" : "否"; diff --git a/QPagedTable/QPagedTable.cpp b/QPagedTable/QPagedTable.cpp index 1bb4af0..1ca1322 100644 --- a/QPagedTable/QPagedTable.cpp +++ b/QPagedTable/QPagedTable.cpp @@ -181,6 +181,10 @@ { ui->wdgtPageBtn->setProperty(name, value); } +void QPagedTable::setCheckBoxClass(QString className) +{ + checkProperty.insert("class", className); +} void QPagedTable::setHeaderHeight(int height) { @@ -217,6 +221,17 @@ return filterList; } +void QPagedTable::setRowSelected(int rowIdx, bool selected) +{ + if (multiCheck != MultiCheckType::NONE) { + QCheckBox *checkBox = ui->table->cellWidget(rowIdx, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->setCheckState(selected ? Qt::CheckState::Checked : Qt::CheckState::Unchecked); + } + } +} + QWidget * QPagedTable::buildNewCheckWidget() { QWidget* activeWidget = new QWidget(ui->table); @@ -225,6 +240,7 @@ QCheckBox* check = new QCheckBox(activeWidget); check->setMinimumSize(25, 25); check->setMaximumSize(25, 25); + check->setProperty("class", checkProperty.value("class")); activelayout->addWidget(check, 0, 0); if (multiCheck == MultiCheckType::RADIO) { @@ -241,6 +257,7 @@ QRadioButton* radio = new QRadioButton(activeWidget); radio->setMinimumSize(25, 25); radio->setMaximumSize(25, 25); + radio->setProperty("class", checkProperty.value("class")); activelayout->addWidget(radio, 0, 0); group->addButton(radio); @@ -336,3 +353,18 @@ page.currentPage = page.totalPage - 1; emit reloadTablePagedData(page.currentPage); } + +void QPagedTable::on_table_cellDoubleClicked(int row, int column) +{ + if (multiCheck != MultiCheckType::NONE && doubleClickSelectRow) { + QTableWidget * tableWidget = qobject_cast(sender()); + if (tableWidget) { + QCheckBox *checkBox = tableWidget->cellWidget(row, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->toggle(); + emit tableRowSelected(row, checkBox->isChecked()); + } + } + } +} diff --git a/QPagedTable/QPagedTable.h b/QPagedTable/QPagedTable.h index e561d01..aacb4aa 100644 --- a/QPagedTable/QPagedTable.h +++ b/QPagedTable/QPagedTable.h @@ -50,6 +50,7 @@ void setTotalCount(int totalCount); void setPageButtonIcons(QStringList iconUrls); void setPageButtonProperty(const char* name, QString value); + void setCheckBoxClass(QString className); void setHeaderHeight(int height); void setDataRowHeight(int height); @@ -62,6 +63,7 @@ QTableWidget * getTableInstance(); QList filterCells(QString colName, QString value); + void setRowSelected(int rowIdx, bool selected); private: Ui::QPagedTable *ui; @@ -92,6 +94,8 @@ int frameBorderSize = 0; int multiCheck = MultiCheckType::NONE; + QMap checkProperty; + bool doubleClickSelectRow = true; QButtonGroup * group; @@ -105,9 +109,12 @@ void on_btnPre_clicked(); void on_btnNext_clicked(); void on_btnLast_clicked(); + void on_table_cellDoubleClicked(int row, int column); + signals: void reloadTablePagedData(int currPage); void contextMenuActionTrigged(int actionIdx, int rowIdx, int colIdx); + void tableRowSelected(int rowIdx, bool selected); }; #endif // QPAGEDTABLE_H diff --git a/calibration/CalibrationMainForm.cpp b/calibration/CalibrationMainForm.cpp index 9b778a5..44d203a 100644 --- a/calibration/CalibrationMainForm.cpp +++ b/calibration/CalibrationMainForm.cpp @@ -6,9 +6,72 @@ ui(new Ui::CalibrationMainForm) { ui->setupUi(this); + + initFormWidgets(); + bindSignalAndHandlers(); } CalibrationMainForm::~CalibrationMainForm() { + qDebug() << "~CalibrationMainForm"; delete ui; } + +QMap & CalibrationMainForm::getSelectedTask() +{ + return selectedTask; +} +QStringList CalibrationMainForm::getVerificationItemCatIds() +{ + return verificationItemCatIds; +} +void CalibrationMainForm::setVerificationItemCatIds(QStringList itemCatIds) +{ + verificationItemCatIds = itemCatIds; +} + +void CalibrationMainForm::showEvent(QShowEvent * event) +{ + selectedTask.clear(); + verificationItemCatIds.clear(); + + ui->wdgtCalMain->setCurrentIndex(0); +} + +void CalibrationMainForm::initFormWidgets() +{ + wdgtTask = new TaskListWidget(this); + wdgtConf = new ConfigurationWidget(this); +// wdgtStandardList = new StandardListWidget(this); +// wdgtConnectState = new ConnectStateWidget(this); + + ui->wdgtCalMain->addWidget(wdgtTask); + ui->wdgtCalMain->addWidget(wdgtConf); +// ui->wdgtContent->addWidget(wdgtStandardList); +// ui->wdgtContent->addWidget(wdgtConnectState); + + ui->wdgtCalMain->setCurrentIndex(0); +} + +void CalibrationMainForm::bindSignalAndHandlers() +{ + // 待检设备清单 下一步 切换到 配置检定项和流程 + connect(wdgtTask, &TaskListWidget::taskEquipmentSelected, this, &CalibrationMainForm::nextToConfiguration); + + // 检定程序 上一步 下一步 +// connect(wdgtCheckProgram, &CheckProgramWidget::switchToReSelectTaskEquipment, this, &CalibrationForm::forwardToReSelectTaskEquipment); +// connect(wdgtCheckProgram, &CheckProgramWidget::switchToNextWidget, this, &CalibrationForm::nextToSelectStandardEquipment); + + // 标准设备 上一步 下一步 +// connect(wdgtStandardList, &StandardListWidget::switchToReSelectCheckProgram, this, &CalibrationForm::forwardToReSelectCheckProgram); +// connect(wdgtStandardList, &StandardListWidget::switchToNextWidget, this, &CalibrationForm::nextToConnectionState); + + // 查看连接状态 +// connect(wdgtConnectState, &ConnectStateWidget::switchToReSelectStandardEqpt, this, &CalibrationForm::forwardToReSelectTaskEquipment); +// connect(wdgtConnectState, &ConnectStateWidget::startAutoCalibration, this, &CalibrationForm::nextToAutoCalibration); +} + +void CalibrationMainForm::nextToConfiguration() +{ + ui->wdgtCalMain->setCurrentWidget(wdgtConf); +} diff --git a/calibration/CalibrationMainForm.h b/calibration/CalibrationMainForm.h index 7d75014..e4bc44c 100644 --- a/calibration/CalibrationMainForm.h +++ b/calibration/CalibrationMainForm.h @@ -3,6 +3,10 @@ #include +#include "dao/service/TaskService.h" +#include "calibration/TaskListWidget.h" +#include "calibration/ConfigurationWidget.h" + namespace Ui { class CalibrationMainForm; } @@ -15,8 +19,38 @@ explicit CalibrationMainForm(QWidget *parent = nullptr); ~CalibrationMainForm(); + QMap & getSelectedTask(); + QStringList getVerificationItemCatIds(); + void setVerificationItemCatIds(QStringList itemCatIds); + + // 选定的检定程序(单选) +// CheckProgramDto selectedCheckProgram; + + // 选定的标准设备清单 +// QMap selectedStdEquipment; + +protected: + void showEvent(QShowEvent * event) override; + + private: Ui::CalibrationMainForm *ui; + + TaskListWidget * wdgtTask; + ConfigurationWidget * wdgtConf; + + // 选择的任务清单(待检设备清单) + QMap selectedTask; + + // 所选待检设备对应的检定项分类 + QStringList verificationItemCatIds; + + void initFormWidgets(); + void bindSignalAndHandlers(); + +private slots: + // 待检设备已选择完毕 + void nextToConfiguration(); }; #endif // CALIBRATIONMAINFORM_H diff --git a/calibration/CalibrationMainForm.ui b/calibration/CalibrationMainForm.ui index 9b5a9c2..5479af5 100644 --- a/calibration/CalibrationMainForm.ui +++ b/calibration/CalibrationMainForm.ui @@ -1,9 +1,7 @@ + - - - CalibrationMainForm - + 0 @@ -15,7 +13,27 @@ Form + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + - + diff --git a/calibration/ConfigurationWidget.cpp b/calibration/ConfigurationWidget.cpp new file mode 100644 index 0000000..5e47dc2 --- /dev/null +++ b/calibration/ConfigurationWidget.cpp @@ -0,0 +1,14 @@ +#include "ConfigurationWidget.h" +#include "ui_ConfigurationWidget.h" + +ConfigurationWidget::ConfigurationWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::ConfigurationWidget) +{ + ui->setupUi(this); +} + +ConfigurationWidget::~ConfigurationWidget() +{ + delete ui; +} diff --git a/calibration/ConfigurationWidget.h b/calibration/ConfigurationWidget.h new file mode 100644 index 0000000..b3321c1 --- /dev/null +++ b/calibration/ConfigurationWidget.h @@ -0,0 +1,22 @@ +#ifndef CONFIGURATIONWIDGET_H +#define CONFIGURATIONWIDGET_H + +#include + +namespace Ui { +class ConfigurationWidget; +} + +class ConfigurationWidget : public QWidget +{ + Q_OBJECT + +public: + explicit ConfigurationWidget(QWidget *parent = nullptr); + ~ConfigurationWidget(); + +private: + Ui::ConfigurationWidget *ui; +}; + +#endif // CONFIGURATIONWIDGET_H diff --git a/calibration/ConfigurationWidget.ui b/calibration/ConfigurationWidget.ui new file mode 100644 index 0000000..a567bba --- /dev/null +++ b/calibration/ConfigurationWidget.ui @@ -0,0 +1,21 @@ + + + + + ConfigurationWidget + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + diff --git a/calibration/TaskListWidget.cpp b/calibration/TaskListWidget.cpp new file mode 100644 index 0000000..31f16c7 --- /dev/null +++ b/calibration/TaskListWidget.cpp @@ -0,0 +1,202 @@ +#include "TaskListWidget.h" +#include "ui_TaskListWidget.h" + +#include "calibration/CalibrationMainForm.h" + +TaskListWidget::TaskListWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::TaskListWidget) +{ + ui->setupUi(this); + parentForm = (CalibrationMainForm *)parent; + + initForm(); + initFormTable(); + + // 绑定信号与槽 + connect(ui->tableTaskTBDList, &QPagedTable::reloadTablePagedData, this, &TaskListWidget::getTaskToBeDoneList); +} + +TaskListWidget::~TaskListWidget() +{ + qDebug() << "~TaskListWidget"; + delete ui; +} + +void TaskListWidget::showEvent(QShowEvent * event) +{ + ui->tableTaskTBDList->adjustTableWidth(); + getTaskToBeDoneList(0); +} + +void TaskListWidget::resizeEvent(QResizeEvent * event) +{ + ui->tableTaskTBDList->adjustTableWidth(); +} + +void TaskListWidget::initForm() +{ + // 加载样式表 + QString qssStyle = QssFileUtils::loadQssFileContent(":/qss/infoTable.css"); + if (qssStyle.isEmpty() == false) { + this->setStyleSheet(qssStyle); // 仅本窗口生效 + } + + // 查询条件的样式 + QList children = ui->wdgtQueryBox->findChildren(); + for (QWidget * wdgt : children) { + wdgt->setProperty("class", "queryBox"); + + if (QString(wdgt->metaObject()->className()).contains("QLineEdit")) { + // 绑定输入框回车事件 只在密码输入框执行 + connect((QLineEdit *)wdgt, &QLineEdit::returnPressed, this, [=](){ + emit ui->btnQuery->clicked(); + }); + } + } + + // 查询和重置按钮 + ui->btnQuery->setProperty("class", "btnDefault"); + ui->btnResetQuery->setProperty("class", "btnResetQuery"); + + ui->tableTaskTBDList->setTableProperty("class", "defaultTable"); + + // 分页组件 + QStringList btnPageGroupUrls; + btnPageGroupUrls << ":/image/infomation/btnPageFirst.png" << ":/image/infomation/btnPagePre.png" + << ":/image/infomation/btnPageNext.png" << ":/image/infomation/btnPageLast.png"; + ui->tableTaskTBDList->setPageButtonIcons(btnPageGroupUrls); + ui->tableTaskTBDList->setPageButtonProperty("class", "pageBtnGroup"); +} + +void TaskListWidget::initFormTable() +{ + // 初始化查询条件 + SysLocalService localServ; + QList> deptTaskColumns = localServ.getInfomationTableColumns("deptTask"); + ui->tableTaskTBDList->setColumns(deptTaskColumns); + + ui->tableTaskTBDList->setMultiCheckType(QPagedTable::MultiCheckType::MULTI); + ui->tableTaskTBDList->setCheckBoxClass("defaultSolid"); + + ui->tableTaskTBDList->setDataRowHeight(45); + + connect(ui->tableTaskTBDList, &QPagedTable::tableRowSelected, this, &TaskListWidget::rowSelectedHandler); + + initUrgentSelect(); + + ui->tableTaskTBDList->initTableWidget(); + ui->tableTaskTBDList->initTableHeader(); +} + +void TaskListWidget::initUrgentSelect() +{ + ui->selectUrgent->addItem("全部", ""); + ui->selectUrgent->addItem("不加急", "0"); + ui->selectUrgent->addItem("加急", "1"); + + ui->selectUrgent->setView(new QListView()); // 使ComboBox下拉选项 的QSS生效的关键代码 +} + +void TaskListWidget::getTaskToBeDoneList(int currPage) +{ + TaskService taskServ; + taskList.clear(); // 清除之前的结果 + + // 获取所有查询条件 + TaskRequest request; + request.userId = ProMemory::getInstance().getLoginUser().value("id").toString(); + request.sampleName = ui->inputDevName->text(); + request.sampleModel = ui->inputDevModel->text(); + request.customerName = ui->inputCustomer->text(); + request.measureStatusList << "3" << "2"; + request.isUrgent = ui->selectUrgent->currentData().toString(); + + // 查询页 + page.currentPage = currPage; + + // 查询数据库 + taskList = taskServ.getDeptTaskListPage(request, page); + QList> pageData; + for (TaskDTO task : taskList) { + QMap item; + + item.insert("id", task.id); + item.insert("name", task.sampleName); + item.insert("model", task.sampleModel); + item.insert("serialNo", task.manufactureNo); + item.insert("maker", task.manufacturer); + item.insert("custom", task.customerName); + item.insert("requireTime", task.requireOverTime); + item.insert("isUrgent", task.isUrgentName); + item.insert("orderNo", task.orderNo); + item.insert("measureStatus", task.measureStatusName); + + pageData.append(item); + } + + // 设置分页表格数据 + ui->tableTaskTBDList->setTotalCount(page.totalCount); + ui->tableTaskTBDList->setDatas(pageData); + + // 筛选 加急=是 的单元格标红提示 + QList matchedRows = ui->tableTaskTBDList->filterCells("isUrgent", "是"); + if (!matchedRows.isEmpty()) { + for (int row : matchedRows) { + ui->tableTaskTBDList->getTableInstance()->item(row, 10)->setForeground(QBrush("#FF0000")); // 多加了一列复选框 + } + } + + // 勾选上已经选中的记录 + for (int i = 0; i < taskList.size(); i++) { + ui->tableTaskTBDList->setRowSelected(i, parentForm->getSelectedTask().contains(taskList.at(i).sampleId)); + } +} + +void TaskListWidget::rowSelectedHandler(int rowIdx, bool selected) +{ + QString rowId = taskList.at(rowIdx).sampleId; + if (selected) { + parentForm->getSelectedTask().insert(rowId, taskList.at(rowIdx)); + } else { + parentForm->getSelectedTask().remove(rowId); + } +} + +void TaskListWidget::on_btnQuery_clicked() +{ + getTaskToBeDoneList(0); +} + +void TaskListWidget::on_btnResetQuery_clicked() +{ + ui->inputDevName->setText(""); + ui->inputDevModel->setText(""); + ui->inputCustomer->setText(""); + + ui->selectUrgent->setCurrentIndex(0); + + getTaskToBeDoneList(0); +} + + +void TaskListWidget::on_btnNextToConf_clicked() +{ + if (parentForm->getSelectedTask().size() == 0) { + CustomMessageBox::warning(this, "提示", "请选择被检设备!"); + } else { + // 判断多个被检设备 分类和量程是否都相同 + TaskService taskServ; + QStringList itemCats = taskServ.getVerificationItemCatsBySelectedTask(parentForm->getSelectedTask().keys()); + + if (itemCats.size() == 1) { + parentForm->setVerificationItemCatIds(itemCats); + emit taskEquipmentSelected(); + } else if (itemCats.isEmpty()) { + CustomMessageBox::warning(this, "提示", "没找到所选待检设备的检定项分类,请检查相关配置"); + } else { + qDebug() << itemCats; + CustomMessageBox::warning(this, "提示", "所选的多个待检设备检定项目不同,请重新选择"); + } + } +} diff --git a/calibration/TaskListWidget.h b/calibration/TaskListWidget.h new file mode 100644 index 0000000..5d89a72 --- /dev/null +++ b/calibration/TaskListWidget.h @@ -0,0 +1,55 @@ +#ifndef TASKLISTWIDGET_H +#define TASKLISTWIDGET_H + +#include +#include + +#include "dao/service/SysLocalService.h" +#include "dao/service/TaskService.h" +#include "frame/CustomMessageBox.h" + +class CalibrationMainForm; + +namespace Ui { +class TaskListWidget; +} + +class TaskListWidget : public QWidget +{ + Q_OBJECT + +public: + explicit TaskListWidget(QWidget *parent = nullptr); + ~TaskListWidget(); + +protected: + void showEvent(QShowEvent * event) override; + void resizeEvent(QResizeEvent * event) override; + +private: + Ui::TaskListWidget *ui; + CalibrationMainForm * parentForm; + Page page; + + // 待检设备清单 + QList taskList; + + void initForm(); + void initFormTable(); + + void initMeasureStatusSelect(); + void initUrgentSelect(); + +private slots: + void getTaskToBeDoneList(int currPage); + void rowSelectedHandler(int rowIdx, bool selected); + void on_btnQuery_clicked(); + void on_btnResetQuery_clicked(); + void on_btnNextToConf_clicked(); + +signals: + void taskEquipmentSelected(); + +}; + +#endif // TASKLISTWIDGET_H diff --git a/calibration/TaskListWidget.ui b/calibration/TaskListWidget.ui new file mode 100644 index 0000000..0dd382d --- /dev/null +++ b/calibration/TaskListWidget.ui @@ -0,0 +1,232 @@ + + + TaskListWidget + + + + 0 + 0 + 1245 + 605 + + + + Form + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 10 + + + 10 + + + 10 + + + 10 + + + 10 + + + + + + 0 + 0 + + + + + 150 + 36 + + + + + + + 受检设备名称 + + + + + + + + 0 + 0 + + + + + 150 + 36 + + + + 规格型号 + + + + + + + + 0 + 0 + + + + + 150 + 36 + + + + 委托方 + + + + + + + + 0 + 0 + + + + + 120 + 36 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 100 + 20 + + + + + + + + + 120 + 36 + + + + 查询 + + + + + + + + 120 + 36 + + + + 重置 + + + + + + + Qt::Horizontal + + + + 0 + 0 + + + + + + + + + 200 + 48 + + + + 下一步,配置 + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + + + + QPagedTable + QWidget +
QPagedTable/QPagedTable.h
+
+
+ + +
diff --git a/calibration/calibration.pri b/calibration/calibration.pri index f0e9dfb..8776fe4 100644 --- a/calibration/calibration.pri +++ b/calibration/calibration.pri @@ -1,4 +1,10 @@ HEADERS += $$PWD/CalibrationMainForm.h +HEADERS += $$PWD/TaskListWidget.h +HEADERS += $$PWD/ConfigurationWidget.h SOURCES += $$PWD/CalibrationMainForm.cpp +SOURCES += $$PWD/TaskListWidget.cpp +SOURCES += $$PWD/ConfigurationWidget.cpp FORMS += $$PWD/CalibrationMainForm.ui +FORMS += $$PWD/TaskListWidget.ui +FORMS += $$PWD/ConfigurationWidget.ui diff --git a/dao/CheckDao.cpp b/dao/CheckDao.cpp new file mode 100644 index 0000000..6fb9efe --- /dev/null +++ b/dao/CheckDao.cpp @@ -0,0 +1,141 @@ +#include "CheckDao.h" + +CheckDao::CheckDao() +{ + +} + +QStringList CheckDao::getMeasureItemCategoryByModels(QStringList modelIds) +{ + QStringList result; + + QSqlDatabase dbLocal = CDbConnectionPool::instance().openConnection("local"); + QSqlQuery query(dbLocal); + + QString sql = "SELECT bbdmii.item_category_id FROM biz_business_device_measure_item_info bbdmii " + "WHERE "; + for (int i = 0; i < modelIds.size() - 1; i++) { + sql += "bbdmii.device_model_id = ? AND "; + } + sql += "bbdmii.device_model_id = ?;"; + query.prepare(sql); + + for (int i = 0; i < modelIds.size(); i++) { + query.bindValue(i, modelIds.at(i)); + } + + bool isSuccess = query.exec(); + if (isSuccess) { + while (query.next()) { + result << query.value("item_category_id").toString(); + } + } else { + qDebug() << "Query execution failed: " << query.lastError().text(); + } + + return result; +} + +QStringList CheckDao::getSelectedTaskMeasureItemCategory(QStringList taskSampleIds) +{ + QStringList resultList; + + QSqlDatabase dbLocal = CDbConnectionPool::instance().openConnection("local"); + QSqlQuery query(dbLocal); + + QString placeholders = QString("?,").repeated(taskSampleIds.size()).chopped(1); + + QString sql = QString("SELECT bbdmii.item_category_id FROM biz_business_device_measure_item_info bbdmii " + "LEFT JOIN eqpt_equipment_model_info eemi ON eemi.id = bbdmii.device_model_id " + "LEFT JOIN eqpt_equipment_info eei ON eei.model_id = eemi.id " + "WHERE eei.id in (%1);").arg(placeholders); + + qDebug() << sql << taskSampleIds; + + query.prepare(sql); + for (QString sampleId : taskSampleIds) { + query.addBindValue(sampleId); + } + + if (query.exec()) { + while (query.next()) { + resultList << query.value(0).toString(); + } + } else { + LogUtil::PrintLog("ERROR", QString("查询所选待检设备的检定项分类失败[%1]").arg(query.lastError().text())); + } + + return resultList; +} + +DeviceMeasureCategoryDto CheckDao::getDeviceMeasureCategoryById(QString categoryId) +{ + DeviceMeasureCategoryDto result; + + QSqlDatabase dbLocal = CDbConnectionPool::instance().openConnection("local"); + QSqlQuery query(dbLocal); + + QString sql = "SELECT bbdmic.* FROM biz_business_device_measure_item_category bbdmic " + "WHERE bbdmic.id = :id"; + + query.prepare(sql); + query.bindValue(":id", categoryId); + + bool isSuccess = query.exec(); + if (isSuccess) { + if (query.first()) { + result.id = query.value("id").toString(); + result.categoryNo = query.value("category_no").toString(); + result.categoryName = query.value("category_name").toString(); + result.deviceType = query.value("device_type").toString(); + result.belongStandardEquipment = query.value("belong_standard_equipment").toString(); + result.measureCategory = query.value("measure_category").toString(); + result.technologyFile = query.value("technology_file").toString(); + } + } else { + LogUtil::PrintLog("ERROR", QString("查询标准设备的检定项分类失败[%1][%2]").arg(categoryId).arg(query.lastError().text())); + } + + qDebug() << "CheckDao::getDeviceMeasureCategoryById: " << query.lastQuery() << categoryId; + + return result; +} + +QList CheckDao::getDeviceRoleByCategory(QString categoryId) +{ + QList result; + + DeviceMeasureCategoryDto category = getDeviceMeasureCategoryById(categoryId); + + QSqlDatabase dbLocal = CDbConnectionPool::instance().openConnection("local"); + QSqlQuery query(dbLocal); + + QString sql = "SELECT * FROM zd_device_role WHERE cateory_id = :cateory or cateory_name = :categoryName;"; + query.prepare(sql); + + query.bindValue(":cateory", categoryId); + query.bindValue(":categoryName", category.categoryName); + bool isSuccess = query.exec(); + if (isSuccess) { + while (query.next()) { + ZdDeviceRoleDto role; + + role.id = query.value("id").toString(); + role.belongVername = query.value("belong_vername").toString(); + role.belongCheckname = query.value("belong_checkname").toString(); + role.categoryId = query.value("cateory_id").toString(); + role.categoryName = query.value("cateory_name").toString(); + role.deviceId = query.value("device_id").toString(); + role.deviceType = query.value("device_type").toString(); + role.role = query.value("role").toString(); + + result.append(role); + } + } else { + LogUtil::PrintLog("ERROR", QString("查询标准设备的角色分类失败[%1][%2][%3]").arg(categoryId).arg(category.categoryName).arg(query.lastError().text())); + } + + qDebug() << "CheckDao::getDeviceRoleByCategory: " << query.lastQuery() << categoryId << category.categoryName; + + return result; +} diff --git a/dao/CheckDao.h b/dao/CheckDao.h new file mode 100644 index 0000000..fd3ea01 --- /dev/null +++ b/dao/CheckDao.h @@ -0,0 +1,31 @@ +#ifndef CHECKDAO_H +#define CHECKDAO_H + +#include "BaseDao.h" + +// 检定设备角色 +class ZdDeviceRoleDto { +public: + QString id; + QString belongVername; // 检定装置名称字典 + QString belongCheckname; // 核查装置名称字典 + QString categoryId; // 检定/核查项目id + QString categoryName; // 分类名称 + QString deviceId; // 设备ID + QString deviceType; // 被检0 标准1 + QString role; // 角色 +}; + +class CheckDao : public BaseDao +{ +public: + CheckDao(); + + QStringList getMeasureItemCategoryByModels(QStringList modelIds); + QStringList getSelectedTaskMeasureItemCategory(QStringList taskSampleIds); + DeviceMeasureCategoryDto getDeviceMeasureCategoryById(QString categoryId); + + QList getDeviceRoleByCategory(QString categoryId); +}; + +#endif // CHECKDAO_H diff --git a/dao/TaskDao.cpp b/dao/TaskDao.cpp index 2c1c86e..45aac80 100644 --- a/dao/TaskDao.cpp +++ b/dao/TaskDao.cpp @@ -37,7 +37,7 @@ query.bindValue(":offset", page.currentPage * page.pageSize); query.bindValue(":limit", page.pageSize); -// qDebug() << sql; +// qDebug() << sql << request.measureStatusList.join(",") << request.deptId << page.currentPage << page.pageSize << totalCount; // 分页查询 bool isSuccess = query.exec(); @@ -86,7 +86,7 @@ query.prepare(sql); bindValueTaskListPage(query, request); -// qDebug() << sql; +// qDebug() << sql << request.measureStatusList.join(','); if (query.exec() && query.next()) { totalCount = query.value("recCount").toInt(); @@ -356,7 +356,11 @@ where = QString("%1 AND bo.is_urgent = :urgent").arg(where); } if (!request.measureStatusList.isEmpty()) { - where = QString("%1 AND blei.measure_status IN (:statusList)").arg(where); + QString tmp; + for (int i = 0; i < request.measureStatusList.size(); i++) { + tmp = QString("%1,:status%2").arg(tmp).arg(i); + } + where = QString("%1 AND blei.measure_status IN ( %2 )").arg(where).arg(tmp.mid(1)); } return where; @@ -389,6 +393,8 @@ query.bindValue(":urgent", request.isUrgent); } if (!request.measureStatusList.isEmpty()) { - query.bindValue(":statusList", request.measureStatusList.join(",")); + for (int i = 0; i < request.measureStatusList.size(); i++) { + query.bindValue(QString(":status%1").arg(i), request.measureStatusList.at(i)); + } } } diff --git a/dao/dao.pri b/dao/dao.pri index 8989888..50052cf 100644 --- a/dao/dao.pri +++ b/dao/dao.pri @@ -36,8 +36,8 @@ #HEADERS += $$PWD/ProgramDao.h #SOURCES += $$PWD/ProgramDao.cpp -#HEADERS += $$PWD/CheckDao.h -#SOURCES += $$PWD/CheckDao.cpp +HEADERS += $$PWD/CheckDao.h +SOURCES += $$PWD/CheckDao.cpp #HEADERS += $$PWD/ResSystemFileDao.h #SOURCES += $$PWD/ResSystemFileDao.cpp diff --git a/dao/service/TaskService.cpp b/dao/service/TaskService.cpp index 5af1053..d7bab02 100644 --- a/dao/service/TaskService.cpp +++ b/dao/service/TaskService.cpp @@ -30,6 +30,31 @@ return deptTaskList; } +QList TaskService::getUserTaskToBeDoneListPage(TaskRequest request, Page &page) +{ + TaskDao taskDao; + SystemDao systemDao; + + QList taskList = taskDao.getTaskListPage(request, page); + + // 获取字典值 + systemDao.getTaskMeasureStatusDict(); + + // 为其他字典值填充名称 + for (TaskDTO &task : taskList) { + wrapperTaskDTO(task); + } + + return taskList; +} + +QStringList TaskService::getVerificationItemCatsBySelectedTask(QStringList taskIds) +{ + CheckDao checkDao; + return checkDao.getSelectedTaskMeasureItemCategory(taskIds); +} + + void TaskService::wrapperTaskDTO(TaskDTO &task) { task.isUrgentName = task.isUrgent == "1" ? "是" : "否"; diff --git a/dao/service/TaskService.h b/dao/service/TaskService.h index 07290f8..701c988 100644 --- a/dao/service/TaskService.h +++ b/dao/service/TaskService.h @@ -2,6 +2,7 @@ #define TASKSERVICE_H #include "dao/TaskDao.h" +#include "dao/CheckDao.h" #include "dao/SystemDao.h" class TaskService @@ -10,6 +11,9 @@ TaskService(); QList getDeptTaskListPage(TaskRequest request, Page& page); + QList getUserTaskToBeDoneListPage(TaskRequest request, Page& page); + + QStringList getVerificationItemCatsBySelectedTask(QStringList taskIds); private: void wrapperTaskDTO(TaskDTO & task); diff --git a/QPagedTable/QPagedTable.cpp b/QPagedTable/QPagedTable.cpp index 1bb4af0..1ca1322 100644 --- a/QPagedTable/QPagedTable.cpp +++ b/QPagedTable/QPagedTable.cpp @@ -181,6 +181,10 @@ { ui->wdgtPageBtn->setProperty(name, value); } +void QPagedTable::setCheckBoxClass(QString className) +{ + checkProperty.insert("class", className); +} void QPagedTable::setHeaderHeight(int height) { @@ -217,6 +221,17 @@ return filterList; } +void QPagedTable::setRowSelected(int rowIdx, bool selected) +{ + if (multiCheck != MultiCheckType::NONE) { + QCheckBox *checkBox = ui->table->cellWidget(rowIdx, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->setCheckState(selected ? Qt::CheckState::Checked : Qt::CheckState::Unchecked); + } + } +} + QWidget * QPagedTable::buildNewCheckWidget() { QWidget* activeWidget = new QWidget(ui->table); @@ -225,6 +240,7 @@ QCheckBox* check = new QCheckBox(activeWidget); check->setMinimumSize(25, 25); check->setMaximumSize(25, 25); + check->setProperty("class", checkProperty.value("class")); activelayout->addWidget(check, 0, 0); if (multiCheck == MultiCheckType::RADIO) { @@ -241,6 +257,7 @@ QRadioButton* radio = new QRadioButton(activeWidget); radio->setMinimumSize(25, 25); radio->setMaximumSize(25, 25); + radio->setProperty("class", checkProperty.value("class")); activelayout->addWidget(radio, 0, 0); group->addButton(radio); @@ -336,3 +353,18 @@ page.currentPage = page.totalPage - 1; emit reloadTablePagedData(page.currentPage); } + +void QPagedTable::on_table_cellDoubleClicked(int row, int column) +{ + if (multiCheck != MultiCheckType::NONE && doubleClickSelectRow) { + QTableWidget * tableWidget = qobject_cast(sender()); + if (tableWidget) { + QCheckBox *checkBox = tableWidget->cellWidget(row, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->toggle(); + emit tableRowSelected(row, checkBox->isChecked()); + } + } + } +} diff --git a/QPagedTable/QPagedTable.h b/QPagedTable/QPagedTable.h index e561d01..aacb4aa 100644 --- a/QPagedTable/QPagedTable.h +++ b/QPagedTable/QPagedTable.h @@ -50,6 +50,7 @@ void setTotalCount(int totalCount); void setPageButtonIcons(QStringList iconUrls); void setPageButtonProperty(const char* name, QString value); + void setCheckBoxClass(QString className); void setHeaderHeight(int height); void setDataRowHeight(int height); @@ -62,6 +63,7 @@ QTableWidget * getTableInstance(); QList filterCells(QString colName, QString value); + void setRowSelected(int rowIdx, bool selected); private: Ui::QPagedTable *ui; @@ -92,6 +94,8 @@ int frameBorderSize = 0; int multiCheck = MultiCheckType::NONE; + QMap checkProperty; + bool doubleClickSelectRow = true; QButtonGroup * group; @@ -105,9 +109,12 @@ void on_btnPre_clicked(); void on_btnNext_clicked(); void on_btnLast_clicked(); + void on_table_cellDoubleClicked(int row, int column); + signals: void reloadTablePagedData(int currPage); void contextMenuActionTrigged(int actionIdx, int rowIdx, int colIdx); + void tableRowSelected(int rowIdx, bool selected); }; #endif // QPAGEDTABLE_H diff --git a/calibration/CalibrationMainForm.cpp b/calibration/CalibrationMainForm.cpp index 9b778a5..44d203a 100644 --- a/calibration/CalibrationMainForm.cpp +++ b/calibration/CalibrationMainForm.cpp @@ -6,9 +6,72 @@ ui(new Ui::CalibrationMainForm) { ui->setupUi(this); + + initFormWidgets(); + bindSignalAndHandlers(); } CalibrationMainForm::~CalibrationMainForm() { + qDebug() << "~CalibrationMainForm"; delete ui; } + +QMap & CalibrationMainForm::getSelectedTask() +{ + return selectedTask; +} +QStringList CalibrationMainForm::getVerificationItemCatIds() +{ + return verificationItemCatIds; +} +void CalibrationMainForm::setVerificationItemCatIds(QStringList itemCatIds) +{ + verificationItemCatIds = itemCatIds; +} + +void CalibrationMainForm::showEvent(QShowEvent * event) +{ + selectedTask.clear(); + verificationItemCatIds.clear(); + + ui->wdgtCalMain->setCurrentIndex(0); +} + +void CalibrationMainForm::initFormWidgets() +{ + wdgtTask = new TaskListWidget(this); + wdgtConf = new ConfigurationWidget(this); +// wdgtStandardList = new StandardListWidget(this); +// wdgtConnectState = new ConnectStateWidget(this); + + ui->wdgtCalMain->addWidget(wdgtTask); + ui->wdgtCalMain->addWidget(wdgtConf); +// ui->wdgtContent->addWidget(wdgtStandardList); +// ui->wdgtContent->addWidget(wdgtConnectState); + + ui->wdgtCalMain->setCurrentIndex(0); +} + +void CalibrationMainForm::bindSignalAndHandlers() +{ + // 待检设备清单 下一步 切换到 配置检定项和流程 + connect(wdgtTask, &TaskListWidget::taskEquipmentSelected, this, &CalibrationMainForm::nextToConfiguration); + + // 检定程序 上一步 下一步 +// connect(wdgtCheckProgram, &CheckProgramWidget::switchToReSelectTaskEquipment, this, &CalibrationForm::forwardToReSelectTaskEquipment); +// connect(wdgtCheckProgram, &CheckProgramWidget::switchToNextWidget, this, &CalibrationForm::nextToSelectStandardEquipment); + + // 标准设备 上一步 下一步 +// connect(wdgtStandardList, &StandardListWidget::switchToReSelectCheckProgram, this, &CalibrationForm::forwardToReSelectCheckProgram); +// connect(wdgtStandardList, &StandardListWidget::switchToNextWidget, this, &CalibrationForm::nextToConnectionState); + + // 查看连接状态 +// connect(wdgtConnectState, &ConnectStateWidget::switchToReSelectStandardEqpt, this, &CalibrationForm::forwardToReSelectTaskEquipment); +// connect(wdgtConnectState, &ConnectStateWidget::startAutoCalibration, this, &CalibrationForm::nextToAutoCalibration); +} + +void CalibrationMainForm::nextToConfiguration() +{ + ui->wdgtCalMain->setCurrentWidget(wdgtConf); +} diff --git a/calibration/CalibrationMainForm.h b/calibration/CalibrationMainForm.h index 7d75014..e4bc44c 100644 --- a/calibration/CalibrationMainForm.h +++ b/calibration/CalibrationMainForm.h @@ -3,6 +3,10 @@ #include +#include "dao/service/TaskService.h" +#include "calibration/TaskListWidget.h" +#include "calibration/ConfigurationWidget.h" + namespace Ui { class CalibrationMainForm; } @@ -15,8 +19,38 @@ explicit CalibrationMainForm(QWidget *parent = nullptr); ~CalibrationMainForm(); + QMap & getSelectedTask(); + QStringList getVerificationItemCatIds(); + void setVerificationItemCatIds(QStringList itemCatIds); + + // 选定的检定程序(单选) +// CheckProgramDto selectedCheckProgram; + + // 选定的标准设备清单 +// QMap selectedStdEquipment; + +protected: + void showEvent(QShowEvent * event) override; + + private: Ui::CalibrationMainForm *ui; + + TaskListWidget * wdgtTask; + ConfigurationWidget * wdgtConf; + + // 选择的任务清单(待检设备清单) + QMap selectedTask; + + // 所选待检设备对应的检定项分类 + QStringList verificationItemCatIds; + + void initFormWidgets(); + void bindSignalAndHandlers(); + +private slots: + // 待检设备已选择完毕 + void nextToConfiguration(); }; #endif // CALIBRATIONMAINFORM_H diff --git a/calibration/CalibrationMainForm.ui b/calibration/CalibrationMainForm.ui index 9b5a9c2..5479af5 100644 --- a/calibration/CalibrationMainForm.ui +++ b/calibration/CalibrationMainForm.ui @@ -1,9 +1,7 @@ + - - - CalibrationMainForm - + 0 @@ -15,7 +13,27 @@ Form + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + - + diff --git a/calibration/ConfigurationWidget.cpp b/calibration/ConfigurationWidget.cpp new file mode 100644 index 0000000..5e47dc2 --- /dev/null +++ b/calibration/ConfigurationWidget.cpp @@ -0,0 +1,14 @@ +#include "ConfigurationWidget.h" +#include "ui_ConfigurationWidget.h" + +ConfigurationWidget::ConfigurationWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::ConfigurationWidget) +{ + ui->setupUi(this); +} + +ConfigurationWidget::~ConfigurationWidget() +{ + delete ui; +} diff --git a/calibration/ConfigurationWidget.h b/calibration/ConfigurationWidget.h new file mode 100644 index 0000000..b3321c1 --- /dev/null +++ b/calibration/ConfigurationWidget.h @@ -0,0 +1,22 @@ +#ifndef CONFIGURATIONWIDGET_H +#define CONFIGURATIONWIDGET_H + +#include + +namespace Ui { +class ConfigurationWidget; +} + +class ConfigurationWidget : public QWidget +{ + Q_OBJECT + +public: + explicit ConfigurationWidget(QWidget *parent = nullptr); + ~ConfigurationWidget(); + +private: + Ui::ConfigurationWidget *ui; +}; + +#endif // CONFIGURATIONWIDGET_H diff --git a/calibration/ConfigurationWidget.ui b/calibration/ConfigurationWidget.ui new file mode 100644 index 0000000..a567bba --- /dev/null +++ b/calibration/ConfigurationWidget.ui @@ -0,0 +1,21 @@ + + + + + ConfigurationWidget + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + diff --git a/calibration/TaskListWidget.cpp b/calibration/TaskListWidget.cpp new file mode 100644 index 0000000..31f16c7 --- /dev/null +++ b/calibration/TaskListWidget.cpp @@ -0,0 +1,202 @@ +#include "TaskListWidget.h" +#include "ui_TaskListWidget.h" + +#include "calibration/CalibrationMainForm.h" + +TaskListWidget::TaskListWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::TaskListWidget) +{ + ui->setupUi(this); + parentForm = (CalibrationMainForm *)parent; + + initForm(); + initFormTable(); + + // 绑定信号与槽 + connect(ui->tableTaskTBDList, &QPagedTable::reloadTablePagedData, this, &TaskListWidget::getTaskToBeDoneList); +} + +TaskListWidget::~TaskListWidget() +{ + qDebug() << "~TaskListWidget"; + delete ui; +} + +void TaskListWidget::showEvent(QShowEvent * event) +{ + ui->tableTaskTBDList->adjustTableWidth(); + getTaskToBeDoneList(0); +} + +void TaskListWidget::resizeEvent(QResizeEvent * event) +{ + ui->tableTaskTBDList->adjustTableWidth(); +} + +void TaskListWidget::initForm() +{ + // 加载样式表 + QString qssStyle = QssFileUtils::loadQssFileContent(":/qss/infoTable.css"); + if (qssStyle.isEmpty() == false) { + this->setStyleSheet(qssStyle); // 仅本窗口生效 + } + + // 查询条件的样式 + QList children = ui->wdgtQueryBox->findChildren(); + for (QWidget * wdgt : children) { + wdgt->setProperty("class", "queryBox"); + + if (QString(wdgt->metaObject()->className()).contains("QLineEdit")) { + // 绑定输入框回车事件 只在密码输入框执行 + connect((QLineEdit *)wdgt, &QLineEdit::returnPressed, this, [=](){ + emit ui->btnQuery->clicked(); + }); + } + } + + // 查询和重置按钮 + ui->btnQuery->setProperty("class", "btnDefault"); + ui->btnResetQuery->setProperty("class", "btnResetQuery"); + + ui->tableTaskTBDList->setTableProperty("class", "defaultTable"); + + // 分页组件 + QStringList btnPageGroupUrls; + btnPageGroupUrls << ":/image/infomation/btnPageFirst.png" << ":/image/infomation/btnPagePre.png" + << ":/image/infomation/btnPageNext.png" << ":/image/infomation/btnPageLast.png"; + ui->tableTaskTBDList->setPageButtonIcons(btnPageGroupUrls); + ui->tableTaskTBDList->setPageButtonProperty("class", "pageBtnGroup"); +} + +void TaskListWidget::initFormTable() +{ + // 初始化查询条件 + SysLocalService localServ; + QList> deptTaskColumns = localServ.getInfomationTableColumns("deptTask"); + ui->tableTaskTBDList->setColumns(deptTaskColumns); + + ui->tableTaskTBDList->setMultiCheckType(QPagedTable::MultiCheckType::MULTI); + ui->tableTaskTBDList->setCheckBoxClass("defaultSolid"); + + ui->tableTaskTBDList->setDataRowHeight(45); + + connect(ui->tableTaskTBDList, &QPagedTable::tableRowSelected, this, &TaskListWidget::rowSelectedHandler); + + initUrgentSelect(); + + ui->tableTaskTBDList->initTableWidget(); + ui->tableTaskTBDList->initTableHeader(); +} + +void TaskListWidget::initUrgentSelect() +{ + ui->selectUrgent->addItem("全部", ""); + ui->selectUrgent->addItem("不加急", "0"); + ui->selectUrgent->addItem("加急", "1"); + + ui->selectUrgent->setView(new QListView()); // 使ComboBox下拉选项 的QSS生效的关键代码 +} + +void TaskListWidget::getTaskToBeDoneList(int currPage) +{ + TaskService taskServ; + taskList.clear(); // 清除之前的结果 + + // 获取所有查询条件 + TaskRequest request; + request.userId = ProMemory::getInstance().getLoginUser().value("id").toString(); + request.sampleName = ui->inputDevName->text(); + request.sampleModel = ui->inputDevModel->text(); + request.customerName = ui->inputCustomer->text(); + request.measureStatusList << "3" << "2"; + request.isUrgent = ui->selectUrgent->currentData().toString(); + + // 查询页 + page.currentPage = currPage; + + // 查询数据库 + taskList = taskServ.getDeptTaskListPage(request, page); + QList> pageData; + for (TaskDTO task : taskList) { + QMap item; + + item.insert("id", task.id); + item.insert("name", task.sampleName); + item.insert("model", task.sampleModel); + item.insert("serialNo", task.manufactureNo); + item.insert("maker", task.manufacturer); + item.insert("custom", task.customerName); + item.insert("requireTime", task.requireOverTime); + item.insert("isUrgent", task.isUrgentName); + item.insert("orderNo", task.orderNo); + item.insert("measureStatus", task.measureStatusName); + + pageData.append(item); + } + + // 设置分页表格数据 + ui->tableTaskTBDList->setTotalCount(page.totalCount); + ui->tableTaskTBDList->setDatas(pageData); + + // 筛选 加急=是 的单元格标红提示 + QList matchedRows = ui->tableTaskTBDList->filterCells("isUrgent", "是"); + if (!matchedRows.isEmpty()) { + for (int row : matchedRows) { + ui->tableTaskTBDList->getTableInstance()->item(row, 10)->setForeground(QBrush("#FF0000")); // 多加了一列复选框 + } + } + + // 勾选上已经选中的记录 + for (int i = 0; i < taskList.size(); i++) { + ui->tableTaskTBDList->setRowSelected(i, parentForm->getSelectedTask().contains(taskList.at(i).sampleId)); + } +} + +void TaskListWidget::rowSelectedHandler(int rowIdx, bool selected) +{ + QString rowId = taskList.at(rowIdx).sampleId; + if (selected) { + parentForm->getSelectedTask().insert(rowId, taskList.at(rowIdx)); + } else { + parentForm->getSelectedTask().remove(rowId); + } +} + +void TaskListWidget::on_btnQuery_clicked() +{ + getTaskToBeDoneList(0); +} + +void TaskListWidget::on_btnResetQuery_clicked() +{ + ui->inputDevName->setText(""); + ui->inputDevModel->setText(""); + ui->inputCustomer->setText(""); + + ui->selectUrgent->setCurrentIndex(0); + + getTaskToBeDoneList(0); +} + + +void TaskListWidget::on_btnNextToConf_clicked() +{ + if (parentForm->getSelectedTask().size() == 0) { + CustomMessageBox::warning(this, "提示", "请选择被检设备!"); + } else { + // 判断多个被检设备 分类和量程是否都相同 + TaskService taskServ; + QStringList itemCats = taskServ.getVerificationItemCatsBySelectedTask(parentForm->getSelectedTask().keys()); + + if (itemCats.size() == 1) { + parentForm->setVerificationItemCatIds(itemCats); + emit taskEquipmentSelected(); + } else if (itemCats.isEmpty()) { + CustomMessageBox::warning(this, "提示", "没找到所选待检设备的检定项分类,请检查相关配置"); + } else { + qDebug() << itemCats; + CustomMessageBox::warning(this, "提示", "所选的多个待检设备检定项目不同,请重新选择"); + } + } +} diff --git a/calibration/TaskListWidget.h b/calibration/TaskListWidget.h new file mode 100644 index 0000000..5d89a72 --- /dev/null +++ b/calibration/TaskListWidget.h @@ -0,0 +1,55 @@ +#ifndef TASKLISTWIDGET_H +#define TASKLISTWIDGET_H + +#include +#include + +#include "dao/service/SysLocalService.h" +#include "dao/service/TaskService.h" +#include "frame/CustomMessageBox.h" + +class CalibrationMainForm; + +namespace Ui { +class TaskListWidget; +} + +class TaskListWidget : public QWidget +{ + Q_OBJECT + +public: + explicit TaskListWidget(QWidget *parent = nullptr); + ~TaskListWidget(); + +protected: + void showEvent(QShowEvent * event) override; + void resizeEvent(QResizeEvent * event) override; + +private: + Ui::TaskListWidget *ui; + CalibrationMainForm * parentForm; + Page page; + + // 待检设备清单 + QList taskList; + + void initForm(); + void initFormTable(); + + void initMeasureStatusSelect(); + void initUrgentSelect(); + +private slots: + void getTaskToBeDoneList(int currPage); + void rowSelectedHandler(int rowIdx, bool selected); + void on_btnQuery_clicked(); + void on_btnResetQuery_clicked(); + void on_btnNextToConf_clicked(); + +signals: + void taskEquipmentSelected(); + +}; + +#endif // TASKLISTWIDGET_H diff --git a/calibration/TaskListWidget.ui b/calibration/TaskListWidget.ui new file mode 100644 index 0000000..0dd382d --- /dev/null +++ b/calibration/TaskListWidget.ui @@ -0,0 +1,232 @@ + + + TaskListWidget + + + + 0 + 0 + 1245 + 605 + + + + Form + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 10 + + + 10 + + + 10 + + + 10 + + + 10 + + + + + + 0 + 0 + + + + + 150 + 36 + + + + + + + 受检设备名称 + + + + + + + + 0 + 0 + + + + + 150 + 36 + + + + 规格型号 + + + + + + + + 0 + 0 + + + + + 150 + 36 + + + + 委托方 + + + + + + + + 0 + 0 + + + + + 120 + 36 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 100 + 20 + + + + + + + + + 120 + 36 + + + + 查询 + + + + + + + + 120 + 36 + + + + 重置 + + + + + + + Qt::Horizontal + + + + 0 + 0 + + + + + + + + + 200 + 48 + + + + 下一步,配置 + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + + + + QPagedTable + QWidget +
QPagedTable/QPagedTable.h
+
+
+ + +
diff --git a/calibration/calibration.pri b/calibration/calibration.pri index f0e9dfb..8776fe4 100644 --- a/calibration/calibration.pri +++ b/calibration/calibration.pri @@ -1,4 +1,10 @@ HEADERS += $$PWD/CalibrationMainForm.h +HEADERS += $$PWD/TaskListWidget.h +HEADERS += $$PWD/ConfigurationWidget.h SOURCES += $$PWD/CalibrationMainForm.cpp +SOURCES += $$PWD/TaskListWidget.cpp +SOURCES += $$PWD/ConfigurationWidget.cpp FORMS += $$PWD/CalibrationMainForm.ui +FORMS += $$PWD/TaskListWidget.ui +FORMS += $$PWD/ConfigurationWidget.ui diff --git a/dao/CheckDao.cpp b/dao/CheckDao.cpp new file mode 100644 index 0000000..6fb9efe --- /dev/null +++ b/dao/CheckDao.cpp @@ -0,0 +1,141 @@ +#include "CheckDao.h" + +CheckDao::CheckDao() +{ + +} + +QStringList CheckDao::getMeasureItemCategoryByModels(QStringList modelIds) +{ + QStringList result; + + QSqlDatabase dbLocal = CDbConnectionPool::instance().openConnection("local"); + QSqlQuery query(dbLocal); + + QString sql = "SELECT bbdmii.item_category_id FROM biz_business_device_measure_item_info bbdmii " + "WHERE "; + for (int i = 0; i < modelIds.size() - 1; i++) { + sql += "bbdmii.device_model_id = ? AND "; + } + sql += "bbdmii.device_model_id = ?;"; + query.prepare(sql); + + for (int i = 0; i < modelIds.size(); i++) { + query.bindValue(i, modelIds.at(i)); + } + + bool isSuccess = query.exec(); + if (isSuccess) { + while (query.next()) { + result << query.value("item_category_id").toString(); + } + } else { + qDebug() << "Query execution failed: " << query.lastError().text(); + } + + return result; +} + +QStringList CheckDao::getSelectedTaskMeasureItemCategory(QStringList taskSampleIds) +{ + QStringList resultList; + + QSqlDatabase dbLocal = CDbConnectionPool::instance().openConnection("local"); + QSqlQuery query(dbLocal); + + QString placeholders = QString("?,").repeated(taskSampleIds.size()).chopped(1); + + QString sql = QString("SELECT bbdmii.item_category_id FROM biz_business_device_measure_item_info bbdmii " + "LEFT JOIN eqpt_equipment_model_info eemi ON eemi.id = bbdmii.device_model_id " + "LEFT JOIN eqpt_equipment_info eei ON eei.model_id = eemi.id " + "WHERE eei.id in (%1);").arg(placeholders); + + qDebug() << sql << taskSampleIds; + + query.prepare(sql); + for (QString sampleId : taskSampleIds) { + query.addBindValue(sampleId); + } + + if (query.exec()) { + while (query.next()) { + resultList << query.value(0).toString(); + } + } else { + LogUtil::PrintLog("ERROR", QString("查询所选待检设备的检定项分类失败[%1]").arg(query.lastError().text())); + } + + return resultList; +} + +DeviceMeasureCategoryDto CheckDao::getDeviceMeasureCategoryById(QString categoryId) +{ + DeviceMeasureCategoryDto result; + + QSqlDatabase dbLocal = CDbConnectionPool::instance().openConnection("local"); + QSqlQuery query(dbLocal); + + QString sql = "SELECT bbdmic.* FROM biz_business_device_measure_item_category bbdmic " + "WHERE bbdmic.id = :id"; + + query.prepare(sql); + query.bindValue(":id", categoryId); + + bool isSuccess = query.exec(); + if (isSuccess) { + if (query.first()) { + result.id = query.value("id").toString(); + result.categoryNo = query.value("category_no").toString(); + result.categoryName = query.value("category_name").toString(); + result.deviceType = query.value("device_type").toString(); + result.belongStandardEquipment = query.value("belong_standard_equipment").toString(); + result.measureCategory = query.value("measure_category").toString(); + result.technologyFile = query.value("technology_file").toString(); + } + } else { + LogUtil::PrintLog("ERROR", QString("查询标准设备的检定项分类失败[%1][%2]").arg(categoryId).arg(query.lastError().text())); + } + + qDebug() << "CheckDao::getDeviceMeasureCategoryById: " << query.lastQuery() << categoryId; + + return result; +} + +QList CheckDao::getDeviceRoleByCategory(QString categoryId) +{ + QList result; + + DeviceMeasureCategoryDto category = getDeviceMeasureCategoryById(categoryId); + + QSqlDatabase dbLocal = CDbConnectionPool::instance().openConnection("local"); + QSqlQuery query(dbLocal); + + QString sql = "SELECT * FROM zd_device_role WHERE cateory_id = :cateory or cateory_name = :categoryName;"; + query.prepare(sql); + + query.bindValue(":cateory", categoryId); + query.bindValue(":categoryName", category.categoryName); + bool isSuccess = query.exec(); + if (isSuccess) { + while (query.next()) { + ZdDeviceRoleDto role; + + role.id = query.value("id").toString(); + role.belongVername = query.value("belong_vername").toString(); + role.belongCheckname = query.value("belong_checkname").toString(); + role.categoryId = query.value("cateory_id").toString(); + role.categoryName = query.value("cateory_name").toString(); + role.deviceId = query.value("device_id").toString(); + role.deviceType = query.value("device_type").toString(); + role.role = query.value("role").toString(); + + result.append(role); + } + } else { + LogUtil::PrintLog("ERROR", QString("查询标准设备的角色分类失败[%1][%2][%3]").arg(categoryId).arg(category.categoryName).arg(query.lastError().text())); + } + + qDebug() << "CheckDao::getDeviceRoleByCategory: " << query.lastQuery() << categoryId << category.categoryName; + + return result; +} diff --git a/dao/CheckDao.h b/dao/CheckDao.h new file mode 100644 index 0000000..fd3ea01 --- /dev/null +++ b/dao/CheckDao.h @@ -0,0 +1,31 @@ +#ifndef CHECKDAO_H +#define CHECKDAO_H + +#include "BaseDao.h" + +// 检定设备角色 +class ZdDeviceRoleDto { +public: + QString id; + QString belongVername; // 检定装置名称字典 + QString belongCheckname; // 核查装置名称字典 + QString categoryId; // 检定/核查项目id + QString categoryName; // 分类名称 + QString deviceId; // 设备ID + QString deviceType; // 被检0 标准1 + QString role; // 角色 +}; + +class CheckDao : public BaseDao +{ +public: + CheckDao(); + + QStringList getMeasureItemCategoryByModels(QStringList modelIds); + QStringList getSelectedTaskMeasureItemCategory(QStringList taskSampleIds); + DeviceMeasureCategoryDto getDeviceMeasureCategoryById(QString categoryId); + + QList getDeviceRoleByCategory(QString categoryId); +}; + +#endif // CHECKDAO_H diff --git a/dao/TaskDao.cpp b/dao/TaskDao.cpp index 2c1c86e..45aac80 100644 --- a/dao/TaskDao.cpp +++ b/dao/TaskDao.cpp @@ -37,7 +37,7 @@ query.bindValue(":offset", page.currentPage * page.pageSize); query.bindValue(":limit", page.pageSize); -// qDebug() << sql; +// qDebug() << sql << request.measureStatusList.join(",") << request.deptId << page.currentPage << page.pageSize << totalCount; // 分页查询 bool isSuccess = query.exec(); @@ -86,7 +86,7 @@ query.prepare(sql); bindValueTaskListPage(query, request); -// qDebug() << sql; +// qDebug() << sql << request.measureStatusList.join(','); if (query.exec() && query.next()) { totalCount = query.value("recCount").toInt(); @@ -356,7 +356,11 @@ where = QString("%1 AND bo.is_urgent = :urgent").arg(where); } if (!request.measureStatusList.isEmpty()) { - where = QString("%1 AND blei.measure_status IN (:statusList)").arg(where); + QString tmp; + for (int i = 0; i < request.measureStatusList.size(); i++) { + tmp = QString("%1,:status%2").arg(tmp).arg(i); + } + where = QString("%1 AND blei.measure_status IN ( %2 )").arg(where).arg(tmp.mid(1)); } return where; @@ -389,6 +393,8 @@ query.bindValue(":urgent", request.isUrgent); } if (!request.measureStatusList.isEmpty()) { - query.bindValue(":statusList", request.measureStatusList.join(",")); + for (int i = 0; i < request.measureStatusList.size(); i++) { + query.bindValue(QString(":status%1").arg(i), request.measureStatusList.at(i)); + } } } diff --git a/dao/dao.pri b/dao/dao.pri index 8989888..50052cf 100644 --- a/dao/dao.pri +++ b/dao/dao.pri @@ -36,8 +36,8 @@ #HEADERS += $$PWD/ProgramDao.h #SOURCES += $$PWD/ProgramDao.cpp -#HEADERS += $$PWD/CheckDao.h -#SOURCES += $$PWD/CheckDao.cpp +HEADERS += $$PWD/CheckDao.h +SOURCES += $$PWD/CheckDao.cpp #HEADERS += $$PWD/ResSystemFileDao.h #SOURCES += $$PWD/ResSystemFileDao.cpp diff --git a/dao/service/TaskService.cpp b/dao/service/TaskService.cpp index 5af1053..d7bab02 100644 --- a/dao/service/TaskService.cpp +++ b/dao/service/TaskService.cpp @@ -30,6 +30,31 @@ return deptTaskList; } +QList TaskService::getUserTaskToBeDoneListPage(TaskRequest request, Page &page) +{ + TaskDao taskDao; + SystemDao systemDao; + + QList taskList = taskDao.getTaskListPage(request, page); + + // 获取字典值 + systemDao.getTaskMeasureStatusDict(); + + // 为其他字典值填充名称 + for (TaskDTO &task : taskList) { + wrapperTaskDTO(task); + } + + return taskList; +} + +QStringList TaskService::getVerificationItemCatsBySelectedTask(QStringList taskIds) +{ + CheckDao checkDao; + return checkDao.getSelectedTaskMeasureItemCategory(taskIds); +} + + void TaskService::wrapperTaskDTO(TaskDTO &task) { task.isUrgentName = task.isUrgent == "1" ? "是" : "否"; diff --git a/dao/service/TaskService.h b/dao/service/TaskService.h index 07290f8..701c988 100644 --- a/dao/service/TaskService.h +++ b/dao/service/TaskService.h @@ -2,6 +2,7 @@ #define TASKSERVICE_H #include "dao/TaskDao.h" +#include "dao/CheckDao.h" #include "dao/SystemDao.h" class TaskService @@ -10,6 +11,9 @@ TaskService(); QList getDeptTaskListPage(TaskRequest request, Page& page); + QList getUserTaskToBeDoneListPage(TaskRequest request, Page& page); + + QStringList getVerificationItemCatsBySelectedTask(QStringList taskIds); private: void wrapperTaskDTO(TaskDTO & task); diff --git a/infomation/InfoMainForm.cpp b/infomation/InfoMainForm.cpp index 882a5b5..a933a06 100644 --- a/infomation/InfoMainForm.cpp +++ b/infomation/InfoMainForm.cpp @@ -17,6 +17,7 @@ InfoMainForm::~InfoMainForm() { + qDebug() << "~InfoMainForm"; delete ui; } diff --git a/QPagedTable/QPagedTable.cpp b/QPagedTable/QPagedTable.cpp index 1bb4af0..1ca1322 100644 --- a/QPagedTable/QPagedTable.cpp +++ b/QPagedTable/QPagedTable.cpp @@ -181,6 +181,10 @@ { ui->wdgtPageBtn->setProperty(name, value); } +void QPagedTable::setCheckBoxClass(QString className) +{ + checkProperty.insert("class", className); +} void QPagedTable::setHeaderHeight(int height) { @@ -217,6 +221,17 @@ return filterList; } +void QPagedTable::setRowSelected(int rowIdx, bool selected) +{ + if (multiCheck != MultiCheckType::NONE) { + QCheckBox *checkBox = ui->table->cellWidget(rowIdx, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->setCheckState(selected ? Qt::CheckState::Checked : Qt::CheckState::Unchecked); + } + } +} + QWidget * QPagedTable::buildNewCheckWidget() { QWidget* activeWidget = new QWidget(ui->table); @@ -225,6 +240,7 @@ QCheckBox* check = new QCheckBox(activeWidget); check->setMinimumSize(25, 25); check->setMaximumSize(25, 25); + check->setProperty("class", checkProperty.value("class")); activelayout->addWidget(check, 0, 0); if (multiCheck == MultiCheckType::RADIO) { @@ -241,6 +257,7 @@ QRadioButton* radio = new QRadioButton(activeWidget); radio->setMinimumSize(25, 25); radio->setMaximumSize(25, 25); + radio->setProperty("class", checkProperty.value("class")); activelayout->addWidget(radio, 0, 0); group->addButton(radio); @@ -336,3 +353,18 @@ page.currentPage = page.totalPage - 1; emit reloadTablePagedData(page.currentPage); } + +void QPagedTable::on_table_cellDoubleClicked(int row, int column) +{ + if (multiCheck != MultiCheckType::NONE && doubleClickSelectRow) { + QTableWidget * tableWidget = qobject_cast(sender()); + if (tableWidget) { + QCheckBox *checkBox = tableWidget->cellWidget(row, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->toggle(); + emit tableRowSelected(row, checkBox->isChecked()); + } + } + } +} diff --git a/QPagedTable/QPagedTable.h b/QPagedTable/QPagedTable.h index e561d01..aacb4aa 100644 --- a/QPagedTable/QPagedTable.h +++ b/QPagedTable/QPagedTable.h @@ -50,6 +50,7 @@ void setTotalCount(int totalCount); void setPageButtonIcons(QStringList iconUrls); void setPageButtonProperty(const char* name, QString value); + void setCheckBoxClass(QString className); void setHeaderHeight(int height); void setDataRowHeight(int height); @@ -62,6 +63,7 @@ QTableWidget * getTableInstance(); QList filterCells(QString colName, QString value); + void setRowSelected(int rowIdx, bool selected); private: Ui::QPagedTable *ui; @@ -92,6 +94,8 @@ int frameBorderSize = 0; int multiCheck = MultiCheckType::NONE; + QMap checkProperty; + bool doubleClickSelectRow = true; QButtonGroup * group; @@ -105,9 +109,12 @@ void on_btnPre_clicked(); void on_btnNext_clicked(); void on_btnLast_clicked(); + void on_table_cellDoubleClicked(int row, int column); + signals: void reloadTablePagedData(int currPage); void contextMenuActionTrigged(int actionIdx, int rowIdx, int colIdx); + void tableRowSelected(int rowIdx, bool selected); }; #endif // QPAGEDTABLE_H diff --git a/calibration/CalibrationMainForm.cpp b/calibration/CalibrationMainForm.cpp index 9b778a5..44d203a 100644 --- a/calibration/CalibrationMainForm.cpp +++ b/calibration/CalibrationMainForm.cpp @@ -6,9 +6,72 @@ ui(new Ui::CalibrationMainForm) { ui->setupUi(this); + + initFormWidgets(); + bindSignalAndHandlers(); } CalibrationMainForm::~CalibrationMainForm() { + qDebug() << "~CalibrationMainForm"; delete ui; } + +QMap & CalibrationMainForm::getSelectedTask() +{ + return selectedTask; +} +QStringList CalibrationMainForm::getVerificationItemCatIds() +{ + return verificationItemCatIds; +} +void CalibrationMainForm::setVerificationItemCatIds(QStringList itemCatIds) +{ + verificationItemCatIds = itemCatIds; +} + +void CalibrationMainForm::showEvent(QShowEvent * event) +{ + selectedTask.clear(); + verificationItemCatIds.clear(); + + ui->wdgtCalMain->setCurrentIndex(0); +} + +void CalibrationMainForm::initFormWidgets() +{ + wdgtTask = new TaskListWidget(this); + wdgtConf = new ConfigurationWidget(this); +// wdgtStandardList = new StandardListWidget(this); +// wdgtConnectState = new ConnectStateWidget(this); + + ui->wdgtCalMain->addWidget(wdgtTask); + ui->wdgtCalMain->addWidget(wdgtConf); +// ui->wdgtContent->addWidget(wdgtStandardList); +// ui->wdgtContent->addWidget(wdgtConnectState); + + ui->wdgtCalMain->setCurrentIndex(0); +} + +void CalibrationMainForm::bindSignalAndHandlers() +{ + // 待检设备清单 下一步 切换到 配置检定项和流程 + connect(wdgtTask, &TaskListWidget::taskEquipmentSelected, this, &CalibrationMainForm::nextToConfiguration); + + // 检定程序 上一步 下一步 +// connect(wdgtCheckProgram, &CheckProgramWidget::switchToReSelectTaskEquipment, this, &CalibrationForm::forwardToReSelectTaskEquipment); +// connect(wdgtCheckProgram, &CheckProgramWidget::switchToNextWidget, this, &CalibrationForm::nextToSelectStandardEquipment); + + // 标准设备 上一步 下一步 +// connect(wdgtStandardList, &StandardListWidget::switchToReSelectCheckProgram, this, &CalibrationForm::forwardToReSelectCheckProgram); +// connect(wdgtStandardList, &StandardListWidget::switchToNextWidget, this, &CalibrationForm::nextToConnectionState); + + // 查看连接状态 +// connect(wdgtConnectState, &ConnectStateWidget::switchToReSelectStandardEqpt, this, &CalibrationForm::forwardToReSelectTaskEquipment); +// connect(wdgtConnectState, &ConnectStateWidget::startAutoCalibration, this, &CalibrationForm::nextToAutoCalibration); +} + +void CalibrationMainForm::nextToConfiguration() +{ + ui->wdgtCalMain->setCurrentWidget(wdgtConf); +} diff --git a/calibration/CalibrationMainForm.h b/calibration/CalibrationMainForm.h index 7d75014..e4bc44c 100644 --- a/calibration/CalibrationMainForm.h +++ b/calibration/CalibrationMainForm.h @@ -3,6 +3,10 @@ #include +#include "dao/service/TaskService.h" +#include "calibration/TaskListWidget.h" +#include "calibration/ConfigurationWidget.h" + namespace Ui { class CalibrationMainForm; } @@ -15,8 +19,38 @@ explicit CalibrationMainForm(QWidget *parent = nullptr); ~CalibrationMainForm(); + QMap & getSelectedTask(); + QStringList getVerificationItemCatIds(); + void setVerificationItemCatIds(QStringList itemCatIds); + + // 选定的检定程序(单选) +// CheckProgramDto selectedCheckProgram; + + // 选定的标准设备清单 +// QMap selectedStdEquipment; + +protected: + void showEvent(QShowEvent * event) override; + + private: Ui::CalibrationMainForm *ui; + + TaskListWidget * wdgtTask; + ConfigurationWidget * wdgtConf; + + // 选择的任务清单(待检设备清单) + QMap selectedTask; + + // 所选待检设备对应的检定项分类 + QStringList verificationItemCatIds; + + void initFormWidgets(); + void bindSignalAndHandlers(); + +private slots: + // 待检设备已选择完毕 + void nextToConfiguration(); }; #endif // CALIBRATIONMAINFORM_H diff --git a/calibration/CalibrationMainForm.ui b/calibration/CalibrationMainForm.ui index 9b5a9c2..5479af5 100644 --- a/calibration/CalibrationMainForm.ui +++ b/calibration/CalibrationMainForm.ui @@ -1,9 +1,7 @@ + - - - CalibrationMainForm - + 0 @@ -15,7 +13,27 @@ Form + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + - + diff --git a/calibration/ConfigurationWidget.cpp b/calibration/ConfigurationWidget.cpp new file mode 100644 index 0000000..5e47dc2 --- /dev/null +++ b/calibration/ConfigurationWidget.cpp @@ -0,0 +1,14 @@ +#include "ConfigurationWidget.h" +#include "ui_ConfigurationWidget.h" + +ConfigurationWidget::ConfigurationWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::ConfigurationWidget) +{ + ui->setupUi(this); +} + +ConfigurationWidget::~ConfigurationWidget() +{ + delete ui; +} diff --git a/calibration/ConfigurationWidget.h b/calibration/ConfigurationWidget.h new file mode 100644 index 0000000..b3321c1 --- /dev/null +++ b/calibration/ConfigurationWidget.h @@ -0,0 +1,22 @@ +#ifndef CONFIGURATIONWIDGET_H +#define CONFIGURATIONWIDGET_H + +#include + +namespace Ui { +class ConfigurationWidget; +} + +class ConfigurationWidget : public QWidget +{ + Q_OBJECT + +public: + explicit ConfigurationWidget(QWidget *parent = nullptr); + ~ConfigurationWidget(); + +private: + Ui::ConfigurationWidget *ui; +}; + +#endif // CONFIGURATIONWIDGET_H diff --git a/calibration/ConfigurationWidget.ui b/calibration/ConfigurationWidget.ui new file mode 100644 index 0000000..a567bba --- /dev/null +++ b/calibration/ConfigurationWidget.ui @@ -0,0 +1,21 @@ + + + + + ConfigurationWidget + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + diff --git a/calibration/TaskListWidget.cpp b/calibration/TaskListWidget.cpp new file mode 100644 index 0000000..31f16c7 --- /dev/null +++ b/calibration/TaskListWidget.cpp @@ -0,0 +1,202 @@ +#include "TaskListWidget.h" +#include "ui_TaskListWidget.h" + +#include "calibration/CalibrationMainForm.h" + +TaskListWidget::TaskListWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::TaskListWidget) +{ + ui->setupUi(this); + parentForm = (CalibrationMainForm *)parent; + + initForm(); + initFormTable(); + + // 绑定信号与槽 + connect(ui->tableTaskTBDList, &QPagedTable::reloadTablePagedData, this, &TaskListWidget::getTaskToBeDoneList); +} + +TaskListWidget::~TaskListWidget() +{ + qDebug() << "~TaskListWidget"; + delete ui; +} + +void TaskListWidget::showEvent(QShowEvent * event) +{ + ui->tableTaskTBDList->adjustTableWidth(); + getTaskToBeDoneList(0); +} + +void TaskListWidget::resizeEvent(QResizeEvent * event) +{ + ui->tableTaskTBDList->adjustTableWidth(); +} + +void TaskListWidget::initForm() +{ + // 加载样式表 + QString qssStyle = QssFileUtils::loadQssFileContent(":/qss/infoTable.css"); + if (qssStyle.isEmpty() == false) { + this->setStyleSheet(qssStyle); // 仅本窗口生效 + } + + // 查询条件的样式 + QList children = ui->wdgtQueryBox->findChildren(); + for (QWidget * wdgt : children) { + wdgt->setProperty("class", "queryBox"); + + if (QString(wdgt->metaObject()->className()).contains("QLineEdit")) { + // 绑定输入框回车事件 只在密码输入框执行 + connect((QLineEdit *)wdgt, &QLineEdit::returnPressed, this, [=](){ + emit ui->btnQuery->clicked(); + }); + } + } + + // 查询和重置按钮 + ui->btnQuery->setProperty("class", "btnDefault"); + ui->btnResetQuery->setProperty("class", "btnResetQuery"); + + ui->tableTaskTBDList->setTableProperty("class", "defaultTable"); + + // 分页组件 + QStringList btnPageGroupUrls; + btnPageGroupUrls << ":/image/infomation/btnPageFirst.png" << ":/image/infomation/btnPagePre.png" + << ":/image/infomation/btnPageNext.png" << ":/image/infomation/btnPageLast.png"; + ui->tableTaskTBDList->setPageButtonIcons(btnPageGroupUrls); + ui->tableTaskTBDList->setPageButtonProperty("class", "pageBtnGroup"); +} + +void TaskListWidget::initFormTable() +{ + // 初始化查询条件 + SysLocalService localServ; + QList> deptTaskColumns = localServ.getInfomationTableColumns("deptTask"); + ui->tableTaskTBDList->setColumns(deptTaskColumns); + + ui->tableTaskTBDList->setMultiCheckType(QPagedTable::MultiCheckType::MULTI); + ui->tableTaskTBDList->setCheckBoxClass("defaultSolid"); + + ui->tableTaskTBDList->setDataRowHeight(45); + + connect(ui->tableTaskTBDList, &QPagedTable::tableRowSelected, this, &TaskListWidget::rowSelectedHandler); + + initUrgentSelect(); + + ui->tableTaskTBDList->initTableWidget(); + ui->tableTaskTBDList->initTableHeader(); +} + +void TaskListWidget::initUrgentSelect() +{ + ui->selectUrgent->addItem("全部", ""); + ui->selectUrgent->addItem("不加急", "0"); + ui->selectUrgent->addItem("加急", "1"); + + ui->selectUrgent->setView(new QListView()); // 使ComboBox下拉选项 的QSS生效的关键代码 +} + +void TaskListWidget::getTaskToBeDoneList(int currPage) +{ + TaskService taskServ; + taskList.clear(); // 清除之前的结果 + + // 获取所有查询条件 + TaskRequest request; + request.userId = ProMemory::getInstance().getLoginUser().value("id").toString(); + request.sampleName = ui->inputDevName->text(); + request.sampleModel = ui->inputDevModel->text(); + request.customerName = ui->inputCustomer->text(); + request.measureStatusList << "3" << "2"; + request.isUrgent = ui->selectUrgent->currentData().toString(); + + // 查询页 + page.currentPage = currPage; + + // 查询数据库 + taskList = taskServ.getDeptTaskListPage(request, page); + QList> pageData; + for (TaskDTO task : taskList) { + QMap item; + + item.insert("id", task.id); + item.insert("name", task.sampleName); + item.insert("model", task.sampleModel); + item.insert("serialNo", task.manufactureNo); + item.insert("maker", task.manufacturer); + item.insert("custom", task.customerName); + item.insert("requireTime", task.requireOverTime); + item.insert("isUrgent", task.isUrgentName); + item.insert("orderNo", task.orderNo); + item.insert("measureStatus", task.measureStatusName); + + pageData.append(item); + } + + // 设置分页表格数据 + ui->tableTaskTBDList->setTotalCount(page.totalCount); + ui->tableTaskTBDList->setDatas(pageData); + + // 筛选 加急=是 的单元格标红提示 + QList matchedRows = ui->tableTaskTBDList->filterCells("isUrgent", "是"); + if (!matchedRows.isEmpty()) { + for (int row : matchedRows) { + ui->tableTaskTBDList->getTableInstance()->item(row, 10)->setForeground(QBrush("#FF0000")); // 多加了一列复选框 + } + } + + // 勾选上已经选中的记录 + for (int i = 0; i < taskList.size(); i++) { + ui->tableTaskTBDList->setRowSelected(i, parentForm->getSelectedTask().contains(taskList.at(i).sampleId)); + } +} + +void TaskListWidget::rowSelectedHandler(int rowIdx, bool selected) +{ + QString rowId = taskList.at(rowIdx).sampleId; + if (selected) { + parentForm->getSelectedTask().insert(rowId, taskList.at(rowIdx)); + } else { + parentForm->getSelectedTask().remove(rowId); + } +} + +void TaskListWidget::on_btnQuery_clicked() +{ + getTaskToBeDoneList(0); +} + +void TaskListWidget::on_btnResetQuery_clicked() +{ + ui->inputDevName->setText(""); + ui->inputDevModel->setText(""); + ui->inputCustomer->setText(""); + + ui->selectUrgent->setCurrentIndex(0); + + getTaskToBeDoneList(0); +} + + +void TaskListWidget::on_btnNextToConf_clicked() +{ + if (parentForm->getSelectedTask().size() == 0) { + CustomMessageBox::warning(this, "提示", "请选择被检设备!"); + } else { + // 判断多个被检设备 分类和量程是否都相同 + TaskService taskServ; + QStringList itemCats = taskServ.getVerificationItemCatsBySelectedTask(parentForm->getSelectedTask().keys()); + + if (itemCats.size() == 1) { + parentForm->setVerificationItemCatIds(itemCats); + emit taskEquipmentSelected(); + } else if (itemCats.isEmpty()) { + CustomMessageBox::warning(this, "提示", "没找到所选待检设备的检定项分类,请检查相关配置"); + } else { + qDebug() << itemCats; + CustomMessageBox::warning(this, "提示", "所选的多个待检设备检定项目不同,请重新选择"); + } + } +} diff --git a/calibration/TaskListWidget.h b/calibration/TaskListWidget.h new file mode 100644 index 0000000..5d89a72 --- /dev/null +++ b/calibration/TaskListWidget.h @@ -0,0 +1,55 @@ +#ifndef TASKLISTWIDGET_H +#define TASKLISTWIDGET_H + +#include +#include + +#include "dao/service/SysLocalService.h" +#include "dao/service/TaskService.h" +#include "frame/CustomMessageBox.h" + +class CalibrationMainForm; + +namespace Ui { +class TaskListWidget; +} + +class TaskListWidget : public QWidget +{ + Q_OBJECT + +public: + explicit TaskListWidget(QWidget *parent = nullptr); + ~TaskListWidget(); + +protected: + void showEvent(QShowEvent * event) override; + void resizeEvent(QResizeEvent * event) override; + +private: + Ui::TaskListWidget *ui; + CalibrationMainForm * parentForm; + Page page; + + // 待检设备清单 + QList taskList; + + void initForm(); + void initFormTable(); + + void initMeasureStatusSelect(); + void initUrgentSelect(); + +private slots: + void getTaskToBeDoneList(int currPage); + void rowSelectedHandler(int rowIdx, bool selected); + void on_btnQuery_clicked(); + void on_btnResetQuery_clicked(); + void on_btnNextToConf_clicked(); + +signals: + void taskEquipmentSelected(); + +}; + +#endif // TASKLISTWIDGET_H diff --git a/calibration/TaskListWidget.ui b/calibration/TaskListWidget.ui new file mode 100644 index 0000000..0dd382d --- /dev/null +++ b/calibration/TaskListWidget.ui @@ -0,0 +1,232 @@ + + + TaskListWidget + + + + 0 + 0 + 1245 + 605 + + + + Form + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 10 + + + 10 + + + 10 + + + 10 + + + 10 + + + + + + 0 + 0 + + + + + 150 + 36 + + + + + + + 受检设备名称 + + + + + + + + 0 + 0 + + + + + 150 + 36 + + + + 规格型号 + + + + + + + + 0 + 0 + + + + + 150 + 36 + + + + 委托方 + + + + + + + + 0 + 0 + + + + + 120 + 36 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 100 + 20 + + + + + + + + + 120 + 36 + + + + 查询 + + + + + + + + 120 + 36 + + + + 重置 + + + + + + + Qt::Horizontal + + + + 0 + 0 + + + + + + + + + 200 + 48 + + + + 下一步,配置 + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + + + + QPagedTable + QWidget +
QPagedTable/QPagedTable.h
+
+
+ + +
diff --git a/calibration/calibration.pri b/calibration/calibration.pri index f0e9dfb..8776fe4 100644 --- a/calibration/calibration.pri +++ b/calibration/calibration.pri @@ -1,4 +1,10 @@ HEADERS += $$PWD/CalibrationMainForm.h +HEADERS += $$PWD/TaskListWidget.h +HEADERS += $$PWD/ConfigurationWidget.h SOURCES += $$PWD/CalibrationMainForm.cpp +SOURCES += $$PWD/TaskListWidget.cpp +SOURCES += $$PWD/ConfigurationWidget.cpp FORMS += $$PWD/CalibrationMainForm.ui +FORMS += $$PWD/TaskListWidget.ui +FORMS += $$PWD/ConfigurationWidget.ui diff --git a/dao/CheckDao.cpp b/dao/CheckDao.cpp new file mode 100644 index 0000000..6fb9efe --- /dev/null +++ b/dao/CheckDao.cpp @@ -0,0 +1,141 @@ +#include "CheckDao.h" + +CheckDao::CheckDao() +{ + +} + +QStringList CheckDao::getMeasureItemCategoryByModels(QStringList modelIds) +{ + QStringList result; + + QSqlDatabase dbLocal = CDbConnectionPool::instance().openConnection("local"); + QSqlQuery query(dbLocal); + + QString sql = "SELECT bbdmii.item_category_id FROM biz_business_device_measure_item_info bbdmii " + "WHERE "; + for (int i = 0; i < modelIds.size() - 1; i++) { + sql += "bbdmii.device_model_id = ? AND "; + } + sql += "bbdmii.device_model_id = ?;"; + query.prepare(sql); + + for (int i = 0; i < modelIds.size(); i++) { + query.bindValue(i, modelIds.at(i)); + } + + bool isSuccess = query.exec(); + if (isSuccess) { + while (query.next()) { + result << query.value("item_category_id").toString(); + } + } else { + qDebug() << "Query execution failed: " << query.lastError().text(); + } + + return result; +} + +QStringList CheckDao::getSelectedTaskMeasureItemCategory(QStringList taskSampleIds) +{ + QStringList resultList; + + QSqlDatabase dbLocal = CDbConnectionPool::instance().openConnection("local"); + QSqlQuery query(dbLocal); + + QString placeholders = QString("?,").repeated(taskSampleIds.size()).chopped(1); + + QString sql = QString("SELECT bbdmii.item_category_id FROM biz_business_device_measure_item_info bbdmii " + "LEFT JOIN eqpt_equipment_model_info eemi ON eemi.id = bbdmii.device_model_id " + "LEFT JOIN eqpt_equipment_info eei ON eei.model_id = eemi.id " + "WHERE eei.id in (%1);").arg(placeholders); + + qDebug() << sql << taskSampleIds; + + query.prepare(sql); + for (QString sampleId : taskSampleIds) { + query.addBindValue(sampleId); + } + + if (query.exec()) { + while (query.next()) { + resultList << query.value(0).toString(); + } + } else { + LogUtil::PrintLog("ERROR", QString("查询所选待检设备的检定项分类失败[%1]").arg(query.lastError().text())); + } + + return resultList; +} + +DeviceMeasureCategoryDto CheckDao::getDeviceMeasureCategoryById(QString categoryId) +{ + DeviceMeasureCategoryDto result; + + QSqlDatabase dbLocal = CDbConnectionPool::instance().openConnection("local"); + QSqlQuery query(dbLocal); + + QString sql = "SELECT bbdmic.* FROM biz_business_device_measure_item_category bbdmic " + "WHERE bbdmic.id = :id"; + + query.prepare(sql); + query.bindValue(":id", categoryId); + + bool isSuccess = query.exec(); + if (isSuccess) { + if (query.first()) { + result.id = query.value("id").toString(); + result.categoryNo = query.value("category_no").toString(); + result.categoryName = query.value("category_name").toString(); + result.deviceType = query.value("device_type").toString(); + result.belongStandardEquipment = query.value("belong_standard_equipment").toString(); + result.measureCategory = query.value("measure_category").toString(); + result.technologyFile = query.value("technology_file").toString(); + } + } else { + LogUtil::PrintLog("ERROR", QString("查询标准设备的检定项分类失败[%1][%2]").arg(categoryId).arg(query.lastError().text())); + } + + qDebug() << "CheckDao::getDeviceMeasureCategoryById: " << query.lastQuery() << categoryId; + + return result; +} + +QList CheckDao::getDeviceRoleByCategory(QString categoryId) +{ + QList result; + + DeviceMeasureCategoryDto category = getDeviceMeasureCategoryById(categoryId); + + QSqlDatabase dbLocal = CDbConnectionPool::instance().openConnection("local"); + QSqlQuery query(dbLocal); + + QString sql = "SELECT * FROM zd_device_role WHERE cateory_id = :cateory or cateory_name = :categoryName;"; + query.prepare(sql); + + query.bindValue(":cateory", categoryId); + query.bindValue(":categoryName", category.categoryName); + bool isSuccess = query.exec(); + if (isSuccess) { + while (query.next()) { + ZdDeviceRoleDto role; + + role.id = query.value("id").toString(); + role.belongVername = query.value("belong_vername").toString(); + role.belongCheckname = query.value("belong_checkname").toString(); + role.categoryId = query.value("cateory_id").toString(); + role.categoryName = query.value("cateory_name").toString(); + role.deviceId = query.value("device_id").toString(); + role.deviceType = query.value("device_type").toString(); + role.role = query.value("role").toString(); + + result.append(role); + } + } else { + LogUtil::PrintLog("ERROR", QString("查询标准设备的角色分类失败[%1][%2][%3]").arg(categoryId).arg(category.categoryName).arg(query.lastError().text())); + } + + qDebug() << "CheckDao::getDeviceRoleByCategory: " << query.lastQuery() << categoryId << category.categoryName; + + return result; +} diff --git a/dao/CheckDao.h b/dao/CheckDao.h new file mode 100644 index 0000000..fd3ea01 --- /dev/null +++ b/dao/CheckDao.h @@ -0,0 +1,31 @@ +#ifndef CHECKDAO_H +#define CHECKDAO_H + +#include "BaseDao.h" + +// 检定设备角色 +class ZdDeviceRoleDto { +public: + QString id; + QString belongVername; // 检定装置名称字典 + QString belongCheckname; // 核查装置名称字典 + QString categoryId; // 检定/核查项目id + QString categoryName; // 分类名称 + QString deviceId; // 设备ID + QString deviceType; // 被检0 标准1 + QString role; // 角色 +}; + +class CheckDao : public BaseDao +{ +public: + CheckDao(); + + QStringList getMeasureItemCategoryByModels(QStringList modelIds); + QStringList getSelectedTaskMeasureItemCategory(QStringList taskSampleIds); + DeviceMeasureCategoryDto getDeviceMeasureCategoryById(QString categoryId); + + QList getDeviceRoleByCategory(QString categoryId); +}; + +#endif // CHECKDAO_H diff --git a/dao/TaskDao.cpp b/dao/TaskDao.cpp index 2c1c86e..45aac80 100644 --- a/dao/TaskDao.cpp +++ b/dao/TaskDao.cpp @@ -37,7 +37,7 @@ query.bindValue(":offset", page.currentPage * page.pageSize); query.bindValue(":limit", page.pageSize); -// qDebug() << sql; +// qDebug() << sql << request.measureStatusList.join(",") << request.deptId << page.currentPage << page.pageSize << totalCount; // 分页查询 bool isSuccess = query.exec(); @@ -86,7 +86,7 @@ query.prepare(sql); bindValueTaskListPage(query, request); -// qDebug() << sql; +// qDebug() << sql << request.measureStatusList.join(','); if (query.exec() && query.next()) { totalCount = query.value("recCount").toInt(); @@ -356,7 +356,11 @@ where = QString("%1 AND bo.is_urgent = :urgent").arg(where); } if (!request.measureStatusList.isEmpty()) { - where = QString("%1 AND blei.measure_status IN (:statusList)").arg(where); + QString tmp; + for (int i = 0; i < request.measureStatusList.size(); i++) { + tmp = QString("%1,:status%2").arg(tmp).arg(i); + } + where = QString("%1 AND blei.measure_status IN ( %2 )").arg(where).arg(tmp.mid(1)); } return where; @@ -389,6 +393,8 @@ query.bindValue(":urgent", request.isUrgent); } if (!request.measureStatusList.isEmpty()) { - query.bindValue(":statusList", request.measureStatusList.join(",")); + for (int i = 0; i < request.measureStatusList.size(); i++) { + query.bindValue(QString(":status%1").arg(i), request.measureStatusList.at(i)); + } } } diff --git a/dao/dao.pri b/dao/dao.pri index 8989888..50052cf 100644 --- a/dao/dao.pri +++ b/dao/dao.pri @@ -36,8 +36,8 @@ #HEADERS += $$PWD/ProgramDao.h #SOURCES += $$PWD/ProgramDao.cpp -#HEADERS += $$PWD/CheckDao.h -#SOURCES += $$PWD/CheckDao.cpp +HEADERS += $$PWD/CheckDao.h +SOURCES += $$PWD/CheckDao.cpp #HEADERS += $$PWD/ResSystemFileDao.h #SOURCES += $$PWD/ResSystemFileDao.cpp diff --git a/dao/service/TaskService.cpp b/dao/service/TaskService.cpp index 5af1053..d7bab02 100644 --- a/dao/service/TaskService.cpp +++ b/dao/service/TaskService.cpp @@ -30,6 +30,31 @@ return deptTaskList; } +QList TaskService::getUserTaskToBeDoneListPage(TaskRequest request, Page &page) +{ + TaskDao taskDao; + SystemDao systemDao; + + QList taskList = taskDao.getTaskListPage(request, page); + + // 获取字典值 + systemDao.getTaskMeasureStatusDict(); + + // 为其他字典值填充名称 + for (TaskDTO &task : taskList) { + wrapperTaskDTO(task); + } + + return taskList; +} + +QStringList TaskService::getVerificationItemCatsBySelectedTask(QStringList taskIds) +{ + CheckDao checkDao; + return checkDao.getSelectedTaskMeasureItemCategory(taskIds); +} + + void TaskService::wrapperTaskDTO(TaskDTO &task) { task.isUrgentName = task.isUrgent == "1" ? "是" : "否"; diff --git a/dao/service/TaskService.h b/dao/service/TaskService.h index 07290f8..701c988 100644 --- a/dao/service/TaskService.h +++ b/dao/service/TaskService.h @@ -2,6 +2,7 @@ #define TASKSERVICE_H #include "dao/TaskDao.h" +#include "dao/CheckDao.h" #include "dao/SystemDao.h" class TaskService @@ -10,6 +11,9 @@ TaskService(); QList getDeptTaskListPage(TaskRequest request, Page& page); + QList getUserTaskToBeDoneListPage(TaskRequest request, Page& page); + + QStringList getVerificationItemCatsBySelectedTask(QStringList taskIds); private: void wrapperTaskDTO(TaskDTO & task); diff --git a/infomation/InfoMainForm.cpp b/infomation/InfoMainForm.cpp index 882a5b5..a933a06 100644 --- a/infomation/InfoMainForm.cpp +++ b/infomation/InfoMainForm.cpp @@ -17,6 +17,7 @@ InfoMainForm::~InfoMainForm() { + qDebug() << "~InfoMainForm"; delete ui; } diff --git a/infomation/task/DeptTaskForm.cpp b/infomation/task/DeptTaskForm.cpp index b7d771b..2022268 100644 --- a/infomation/task/DeptTaskForm.cpp +++ b/infomation/task/DeptTaskForm.cpp @@ -16,6 +16,7 @@ DeptTaskForm::~DeptTaskForm() { + qDebug() << "~DeptTaskForm"; delete ui; } diff --git a/QPagedTable/QPagedTable.cpp b/QPagedTable/QPagedTable.cpp index 1bb4af0..1ca1322 100644 --- a/QPagedTable/QPagedTable.cpp +++ b/QPagedTable/QPagedTable.cpp @@ -181,6 +181,10 @@ { ui->wdgtPageBtn->setProperty(name, value); } +void QPagedTable::setCheckBoxClass(QString className) +{ + checkProperty.insert("class", className); +} void QPagedTable::setHeaderHeight(int height) { @@ -217,6 +221,17 @@ return filterList; } +void QPagedTable::setRowSelected(int rowIdx, bool selected) +{ + if (multiCheck != MultiCheckType::NONE) { + QCheckBox *checkBox = ui->table->cellWidget(rowIdx, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->setCheckState(selected ? Qt::CheckState::Checked : Qt::CheckState::Unchecked); + } + } +} + QWidget * QPagedTable::buildNewCheckWidget() { QWidget* activeWidget = new QWidget(ui->table); @@ -225,6 +240,7 @@ QCheckBox* check = new QCheckBox(activeWidget); check->setMinimumSize(25, 25); check->setMaximumSize(25, 25); + check->setProperty("class", checkProperty.value("class")); activelayout->addWidget(check, 0, 0); if (multiCheck == MultiCheckType::RADIO) { @@ -241,6 +257,7 @@ QRadioButton* radio = new QRadioButton(activeWidget); radio->setMinimumSize(25, 25); radio->setMaximumSize(25, 25); + radio->setProperty("class", checkProperty.value("class")); activelayout->addWidget(radio, 0, 0); group->addButton(radio); @@ -336,3 +353,18 @@ page.currentPage = page.totalPage - 1; emit reloadTablePagedData(page.currentPage); } + +void QPagedTable::on_table_cellDoubleClicked(int row, int column) +{ + if (multiCheck != MultiCheckType::NONE && doubleClickSelectRow) { + QTableWidget * tableWidget = qobject_cast(sender()); + if (tableWidget) { + QCheckBox *checkBox = tableWidget->cellWidget(row, 0)->findChild(); + if (checkBox) { + // 切换 CheckBox 的状态 + checkBox->toggle(); + emit tableRowSelected(row, checkBox->isChecked()); + } + } + } +} diff --git a/QPagedTable/QPagedTable.h b/QPagedTable/QPagedTable.h index e561d01..aacb4aa 100644 --- a/QPagedTable/QPagedTable.h +++ b/QPagedTable/QPagedTable.h @@ -50,6 +50,7 @@ void setTotalCount(int totalCount); void setPageButtonIcons(QStringList iconUrls); void setPageButtonProperty(const char* name, QString value); + void setCheckBoxClass(QString className); void setHeaderHeight(int height); void setDataRowHeight(int height); @@ -62,6 +63,7 @@ QTableWidget * getTableInstance(); QList filterCells(QString colName, QString value); + void setRowSelected(int rowIdx, bool selected); private: Ui::QPagedTable *ui; @@ -92,6 +94,8 @@ int frameBorderSize = 0; int multiCheck = MultiCheckType::NONE; + QMap checkProperty; + bool doubleClickSelectRow = true; QButtonGroup * group; @@ -105,9 +109,12 @@ void on_btnPre_clicked(); void on_btnNext_clicked(); void on_btnLast_clicked(); + void on_table_cellDoubleClicked(int row, int column); + signals: void reloadTablePagedData(int currPage); void contextMenuActionTrigged(int actionIdx, int rowIdx, int colIdx); + void tableRowSelected(int rowIdx, bool selected); }; #endif // QPAGEDTABLE_H diff --git a/calibration/CalibrationMainForm.cpp b/calibration/CalibrationMainForm.cpp index 9b778a5..44d203a 100644 --- a/calibration/CalibrationMainForm.cpp +++ b/calibration/CalibrationMainForm.cpp @@ -6,9 +6,72 @@ ui(new Ui::CalibrationMainForm) { ui->setupUi(this); + + initFormWidgets(); + bindSignalAndHandlers(); } CalibrationMainForm::~CalibrationMainForm() { + qDebug() << "~CalibrationMainForm"; delete ui; } + +QMap & CalibrationMainForm::getSelectedTask() +{ + return selectedTask; +} +QStringList CalibrationMainForm::getVerificationItemCatIds() +{ + return verificationItemCatIds; +} +void CalibrationMainForm::setVerificationItemCatIds(QStringList itemCatIds) +{ + verificationItemCatIds = itemCatIds; +} + +void CalibrationMainForm::showEvent(QShowEvent * event) +{ + selectedTask.clear(); + verificationItemCatIds.clear(); + + ui->wdgtCalMain->setCurrentIndex(0); +} + +void CalibrationMainForm::initFormWidgets() +{ + wdgtTask = new TaskListWidget(this); + wdgtConf = new ConfigurationWidget(this); +// wdgtStandardList = new StandardListWidget(this); +// wdgtConnectState = new ConnectStateWidget(this); + + ui->wdgtCalMain->addWidget(wdgtTask); + ui->wdgtCalMain->addWidget(wdgtConf); +// ui->wdgtContent->addWidget(wdgtStandardList); +// ui->wdgtContent->addWidget(wdgtConnectState); + + ui->wdgtCalMain->setCurrentIndex(0); +} + +void CalibrationMainForm::bindSignalAndHandlers() +{ + // 待检设备清单 下一步 切换到 配置检定项和流程 + connect(wdgtTask, &TaskListWidget::taskEquipmentSelected, this, &CalibrationMainForm::nextToConfiguration); + + // 检定程序 上一步 下一步 +// connect(wdgtCheckProgram, &CheckProgramWidget::switchToReSelectTaskEquipment, this, &CalibrationForm::forwardToReSelectTaskEquipment); +// connect(wdgtCheckProgram, &CheckProgramWidget::switchToNextWidget, this, &CalibrationForm::nextToSelectStandardEquipment); + + // 标准设备 上一步 下一步 +// connect(wdgtStandardList, &StandardListWidget::switchToReSelectCheckProgram, this, &CalibrationForm::forwardToReSelectCheckProgram); +// connect(wdgtStandardList, &StandardListWidget::switchToNextWidget, this, &CalibrationForm::nextToConnectionState); + + // 查看连接状态 +// connect(wdgtConnectState, &ConnectStateWidget::switchToReSelectStandardEqpt, this, &CalibrationForm::forwardToReSelectTaskEquipment); +// connect(wdgtConnectState, &ConnectStateWidget::startAutoCalibration, this, &CalibrationForm::nextToAutoCalibration); +} + +void CalibrationMainForm::nextToConfiguration() +{ + ui->wdgtCalMain->setCurrentWidget(wdgtConf); +} diff --git a/calibration/CalibrationMainForm.h b/calibration/CalibrationMainForm.h index 7d75014..e4bc44c 100644 --- a/calibration/CalibrationMainForm.h +++ b/calibration/CalibrationMainForm.h @@ -3,6 +3,10 @@ #include +#include "dao/service/TaskService.h" +#include "calibration/TaskListWidget.h" +#include "calibration/ConfigurationWidget.h" + namespace Ui { class CalibrationMainForm; } @@ -15,8 +19,38 @@ explicit CalibrationMainForm(QWidget *parent = nullptr); ~CalibrationMainForm(); + QMap & getSelectedTask(); + QStringList getVerificationItemCatIds(); + void setVerificationItemCatIds(QStringList itemCatIds); + + // 选定的检定程序(单选) +// CheckProgramDto selectedCheckProgram; + + // 选定的标准设备清单 +// QMap selectedStdEquipment; + +protected: + void showEvent(QShowEvent * event) override; + + private: Ui::CalibrationMainForm *ui; + + TaskListWidget * wdgtTask; + ConfigurationWidget * wdgtConf; + + // 选择的任务清单(待检设备清单) + QMap selectedTask; + + // 所选待检设备对应的检定项分类 + QStringList verificationItemCatIds; + + void initFormWidgets(); + void bindSignalAndHandlers(); + +private slots: + // 待检设备已选择完毕 + void nextToConfiguration(); }; #endif // CALIBRATIONMAINFORM_H diff --git a/calibration/CalibrationMainForm.ui b/calibration/CalibrationMainForm.ui index 9b5a9c2..5479af5 100644 --- a/calibration/CalibrationMainForm.ui +++ b/calibration/CalibrationMainForm.ui @@ -1,9 +1,7 @@ + - - - CalibrationMainForm - + 0 @@ -15,7 +13,27 @@ Form + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + - + diff --git a/calibration/ConfigurationWidget.cpp b/calibration/ConfigurationWidget.cpp new file mode 100644 index 0000000..5e47dc2 --- /dev/null +++ b/calibration/ConfigurationWidget.cpp @@ -0,0 +1,14 @@ +#include "ConfigurationWidget.h" +#include "ui_ConfigurationWidget.h" + +ConfigurationWidget::ConfigurationWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::ConfigurationWidget) +{ + ui->setupUi(this); +} + +ConfigurationWidget::~ConfigurationWidget() +{ + delete ui; +} diff --git a/calibration/ConfigurationWidget.h b/calibration/ConfigurationWidget.h new file mode 100644 index 0000000..b3321c1 --- /dev/null +++ b/calibration/ConfigurationWidget.h @@ -0,0 +1,22 @@ +#ifndef CONFIGURATIONWIDGET_H +#define CONFIGURATIONWIDGET_H + +#include + +namespace Ui { +class ConfigurationWidget; +} + +class ConfigurationWidget : public QWidget +{ + Q_OBJECT + +public: + explicit ConfigurationWidget(QWidget *parent = nullptr); + ~ConfigurationWidget(); + +private: + Ui::ConfigurationWidget *ui; +}; + +#endif // CONFIGURATIONWIDGET_H diff --git a/calibration/ConfigurationWidget.ui b/calibration/ConfigurationWidget.ui new file mode 100644 index 0000000..a567bba --- /dev/null +++ b/calibration/ConfigurationWidget.ui @@ -0,0 +1,21 @@ + + + + + ConfigurationWidget + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + diff --git a/calibration/TaskListWidget.cpp b/calibration/TaskListWidget.cpp new file mode 100644 index 0000000..31f16c7 --- /dev/null +++ b/calibration/TaskListWidget.cpp @@ -0,0 +1,202 @@ +#include "TaskListWidget.h" +#include "ui_TaskListWidget.h" + +#include "calibration/CalibrationMainForm.h" + +TaskListWidget::TaskListWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::TaskListWidget) +{ + ui->setupUi(this); + parentForm = (CalibrationMainForm *)parent; + + initForm(); + initFormTable(); + + // 绑定信号与槽 + connect(ui->tableTaskTBDList, &QPagedTable::reloadTablePagedData, this, &TaskListWidget::getTaskToBeDoneList); +} + +TaskListWidget::~TaskListWidget() +{ + qDebug() << "~TaskListWidget"; + delete ui; +} + +void TaskListWidget::showEvent(QShowEvent * event) +{ + ui->tableTaskTBDList->adjustTableWidth(); + getTaskToBeDoneList(0); +} + +void TaskListWidget::resizeEvent(QResizeEvent * event) +{ + ui->tableTaskTBDList->adjustTableWidth(); +} + +void TaskListWidget::initForm() +{ + // 加载样式表 + QString qssStyle = QssFileUtils::loadQssFileContent(":/qss/infoTable.css"); + if (qssStyle.isEmpty() == false) { + this->setStyleSheet(qssStyle); // 仅本窗口生效 + } + + // 查询条件的样式 + QList children = ui->wdgtQueryBox->findChildren(); + for (QWidget * wdgt : children) { + wdgt->setProperty("class", "queryBox"); + + if (QString(wdgt->metaObject()->className()).contains("QLineEdit")) { + // 绑定输入框回车事件 只在密码输入框执行 + connect((QLineEdit *)wdgt, &QLineEdit::returnPressed, this, [=](){ + emit ui->btnQuery->clicked(); + }); + } + } + + // 查询和重置按钮 + ui->btnQuery->setProperty("class", "btnDefault"); + ui->btnResetQuery->setProperty("class", "btnResetQuery"); + + ui->tableTaskTBDList->setTableProperty("class", "defaultTable"); + + // 分页组件 + QStringList btnPageGroupUrls; + btnPageGroupUrls << ":/image/infomation/btnPageFirst.png" << ":/image/infomation/btnPagePre.png" + << ":/image/infomation/btnPageNext.png" << ":/image/infomation/btnPageLast.png"; + ui->tableTaskTBDList->setPageButtonIcons(btnPageGroupUrls); + ui->tableTaskTBDList->setPageButtonProperty("class", "pageBtnGroup"); +} + +void TaskListWidget::initFormTable() +{ + // 初始化查询条件 + SysLocalService localServ; + QList> deptTaskColumns = localServ.getInfomationTableColumns("deptTask"); + ui->tableTaskTBDList->setColumns(deptTaskColumns); + + ui->tableTaskTBDList->setMultiCheckType(QPagedTable::MultiCheckType::MULTI); + ui->tableTaskTBDList->setCheckBoxClass("defaultSolid"); + + ui->tableTaskTBDList->setDataRowHeight(45); + + connect(ui->tableTaskTBDList, &QPagedTable::tableRowSelected, this, &TaskListWidget::rowSelectedHandler); + + initUrgentSelect(); + + ui->tableTaskTBDList->initTableWidget(); + ui->tableTaskTBDList->initTableHeader(); +} + +void TaskListWidget::initUrgentSelect() +{ + ui->selectUrgent->addItem("全部", ""); + ui->selectUrgent->addItem("不加急", "0"); + ui->selectUrgent->addItem("加急", "1"); + + ui->selectUrgent->setView(new QListView()); // 使ComboBox下拉选项 的QSS生效的关键代码 +} + +void TaskListWidget::getTaskToBeDoneList(int currPage) +{ + TaskService taskServ; + taskList.clear(); // 清除之前的结果 + + // 获取所有查询条件 + TaskRequest request; + request.userId = ProMemory::getInstance().getLoginUser().value("id").toString(); + request.sampleName = ui->inputDevName->text(); + request.sampleModel = ui->inputDevModel->text(); + request.customerName = ui->inputCustomer->text(); + request.measureStatusList << "3" << "2"; + request.isUrgent = ui->selectUrgent->currentData().toString(); + + // 查询页 + page.currentPage = currPage; + + // 查询数据库 + taskList = taskServ.getDeptTaskListPage(request, page); + QList> pageData; + for (TaskDTO task : taskList) { + QMap item; + + item.insert("id", task.id); + item.insert("name", task.sampleName); + item.insert("model", task.sampleModel); + item.insert("serialNo", task.manufactureNo); + item.insert("maker", task.manufacturer); + item.insert("custom", task.customerName); + item.insert("requireTime", task.requireOverTime); + item.insert("isUrgent", task.isUrgentName); + item.insert("orderNo", task.orderNo); + item.insert("measureStatus", task.measureStatusName); + + pageData.append(item); + } + + // 设置分页表格数据 + ui->tableTaskTBDList->setTotalCount(page.totalCount); + ui->tableTaskTBDList->setDatas(pageData); + + // 筛选 加急=是 的单元格标红提示 + QList matchedRows = ui->tableTaskTBDList->filterCells("isUrgent", "是"); + if (!matchedRows.isEmpty()) { + for (int row : matchedRows) { + ui->tableTaskTBDList->getTableInstance()->item(row, 10)->setForeground(QBrush("#FF0000")); // 多加了一列复选框 + } + } + + // 勾选上已经选中的记录 + for (int i = 0; i < taskList.size(); i++) { + ui->tableTaskTBDList->setRowSelected(i, parentForm->getSelectedTask().contains(taskList.at(i).sampleId)); + } +} + +void TaskListWidget::rowSelectedHandler(int rowIdx, bool selected) +{ + QString rowId = taskList.at(rowIdx).sampleId; + if (selected) { + parentForm->getSelectedTask().insert(rowId, taskList.at(rowIdx)); + } else { + parentForm->getSelectedTask().remove(rowId); + } +} + +void TaskListWidget::on_btnQuery_clicked() +{ + getTaskToBeDoneList(0); +} + +void TaskListWidget::on_btnResetQuery_clicked() +{ + ui->inputDevName->setText(""); + ui->inputDevModel->setText(""); + ui->inputCustomer->setText(""); + + ui->selectUrgent->setCurrentIndex(0); + + getTaskToBeDoneList(0); +} + + +void TaskListWidget::on_btnNextToConf_clicked() +{ + if (parentForm->getSelectedTask().size() == 0) { + CustomMessageBox::warning(this, "提示", "请选择被检设备!"); + } else { + // 判断多个被检设备 分类和量程是否都相同 + TaskService taskServ; + QStringList itemCats = taskServ.getVerificationItemCatsBySelectedTask(parentForm->getSelectedTask().keys()); + + if (itemCats.size() == 1) { + parentForm->setVerificationItemCatIds(itemCats); + emit taskEquipmentSelected(); + } else if (itemCats.isEmpty()) { + CustomMessageBox::warning(this, "提示", "没找到所选待检设备的检定项分类,请检查相关配置"); + } else { + qDebug() << itemCats; + CustomMessageBox::warning(this, "提示", "所选的多个待检设备检定项目不同,请重新选择"); + } + } +} diff --git a/calibration/TaskListWidget.h b/calibration/TaskListWidget.h new file mode 100644 index 0000000..5d89a72 --- /dev/null +++ b/calibration/TaskListWidget.h @@ -0,0 +1,55 @@ +#ifndef TASKLISTWIDGET_H +#define TASKLISTWIDGET_H + +#include +#include + +#include "dao/service/SysLocalService.h" +#include "dao/service/TaskService.h" +#include "frame/CustomMessageBox.h" + +class CalibrationMainForm; + +namespace Ui { +class TaskListWidget; +} + +class TaskListWidget : public QWidget +{ + Q_OBJECT + +public: + explicit TaskListWidget(QWidget *parent = nullptr); + ~TaskListWidget(); + +protected: + void showEvent(QShowEvent * event) override; + void resizeEvent(QResizeEvent * event) override; + +private: + Ui::TaskListWidget *ui; + CalibrationMainForm * parentForm; + Page page; + + // 待检设备清单 + QList taskList; + + void initForm(); + void initFormTable(); + + void initMeasureStatusSelect(); + void initUrgentSelect(); + +private slots: + void getTaskToBeDoneList(int currPage); + void rowSelectedHandler(int rowIdx, bool selected); + void on_btnQuery_clicked(); + void on_btnResetQuery_clicked(); + void on_btnNextToConf_clicked(); + +signals: + void taskEquipmentSelected(); + +}; + +#endif // TASKLISTWIDGET_H diff --git a/calibration/TaskListWidget.ui b/calibration/TaskListWidget.ui new file mode 100644 index 0000000..0dd382d --- /dev/null +++ b/calibration/TaskListWidget.ui @@ -0,0 +1,232 @@ + + + TaskListWidget + + + + 0 + 0 + 1245 + 605 + + + + Form + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 10 + + + 10 + + + 10 + + + 10 + + + 10 + + + + + + 0 + 0 + + + + + 150 + 36 + + + + + + + 受检设备名称 + + + + + + + + 0 + 0 + + + + + 150 + 36 + + + + 规格型号 + + + + + + + + 0 + 0 + + + + + 150 + 36 + + + + 委托方 + + + + + + + + 0 + 0 + + + + + 120 + 36 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 100 + 20 + + + + + + + + + 120 + 36 + + + + 查询 + + + + + + + + 120 + 36 + + + + 重置 + + + + + + + Qt::Horizontal + + + + 0 + 0 + + + + + + + + + 200 + 48 + + + + 下一步,配置 + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + + + + QPagedTable + QWidget +
QPagedTable/QPagedTable.h
+
+
+ + +
diff --git a/calibration/calibration.pri b/calibration/calibration.pri index f0e9dfb..8776fe4 100644 --- a/calibration/calibration.pri +++ b/calibration/calibration.pri @@ -1,4 +1,10 @@ HEADERS += $$PWD/CalibrationMainForm.h +HEADERS += $$PWD/TaskListWidget.h +HEADERS += $$PWD/ConfigurationWidget.h SOURCES += $$PWD/CalibrationMainForm.cpp +SOURCES += $$PWD/TaskListWidget.cpp +SOURCES += $$PWD/ConfigurationWidget.cpp FORMS += $$PWD/CalibrationMainForm.ui +FORMS += $$PWD/TaskListWidget.ui +FORMS += $$PWD/ConfigurationWidget.ui diff --git a/dao/CheckDao.cpp b/dao/CheckDao.cpp new file mode 100644 index 0000000..6fb9efe --- /dev/null +++ b/dao/CheckDao.cpp @@ -0,0 +1,141 @@ +#include "CheckDao.h" + +CheckDao::CheckDao() +{ + +} + +QStringList CheckDao::getMeasureItemCategoryByModels(QStringList modelIds) +{ + QStringList result; + + QSqlDatabase dbLocal = CDbConnectionPool::instance().openConnection("local"); + QSqlQuery query(dbLocal); + + QString sql = "SELECT bbdmii.item_category_id FROM biz_business_device_measure_item_info bbdmii " + "WHERE "; + for (int i = 0; i < modelIds.size() - 1; i++) { + sql += "bbdmii.device_model_id = ? AND "; + } + sql += "bbdmii.device_model_id = ?;"; + query.prepare(sql); + + for (int i = 0; i < modelIds.size(); i++) { + query.bindValue(i, modelIds.at(i)); + } + + bool isSuccess = query.exec(); + if (isSuccess) { + while (query.next()) { + result << query.value("item_category_id").toString(); + } + } else { + qDebug() << "Query execution failed: " << query.lastError().text(); + } + + return result; +} + +QStringList CheckDao::getSelectedTaskMeasureItemCategory(QStringList taskSampleIds) +{ + QStringList resultList; + + QSqlDatabase dbLocal = CDbConnectionPool::instance().openConnection("local"); + QSqlQuery query(dbLocal); + + QString placeholders = QString("?,").repeated(taskSampleIds.size()).chopped(1); + + QString sql = QString("SELECT bbdmii.item_category_id FROM biz_business_device_measure_item_info bbdmii " + "LEFT JOIN eqpt_equipment_model_info eemi ON eemi.id = bbdmii.device_model_id " + "LEFT JOIN eqpt_equipment_info eei ON eei.model_id = eemi.id " + "WHERE eei.id in (%1);").arg(placeholders); + + qDebug() << sql << taskSampleIds; + + query.prepare(sql); + for (QString sampleId : taskSampleIds) { + query.addBindValue(sampleId); + } + + if (query.exec()) { + while (query.next()) { + resultList << query.value(0).toString(); + } + } else { + LogUtil::PrintLog("ERROR", QString("查询所选待检设备的检定项分类失败[%1]").arg(query.lastError().text())); + } + + return resultList; +} + +DeviceMeasureCategoryDto CheckDao::getDeviceMeasureCategoryById(QString categoryId) +{ + DeviceMeasureCategoryDto result; + + QSqlDatabase dbLocal = CDbConnectionPool::instance().openConnection("local"); + QSqlQuery query(dbLocal); + + QString sql = "SELECT bbdmic.* FROM biz_business_device_measure_item_category bbdmic " + "WHERE bbdmic.id = :id"; + + query.prepare(sql); + query.bindValue(":id", categoryId); + + bool isSuccess = query.exec(); + if (isSuccess) { + if (query.first()) { + result.id = query.value("id").toString(); + result.categoryNo = query.value("category_no").toString(); + result.categoryName = query.value("category_name").toString(); + result.deviceType = query.value("device_type").toString(); + result.belongStandardEquipment = query.value("belong_standard_equipment").toString(); + result.measureCategory = query.value("measure_category").toString(); + result.technologyFile = query.value("technology_file").toString(); + } + } else { + LogUtil::PrintLog("ERROR", QString("查询标准设备的检定项分类失败[%1][%2]").arg(categoryId).arg(query.lastError().text())); + } + + qDebug() << "CheckDao::getDeviceMeasureCategoryById: " << query.lastQuery() << categoryId; + + return result; +} + +QList CheckDao::getDeviceRoleByCategory(QString categoryId) +{ + QList result; + + DeviceMeasureCategoryDto category = getDeviceMeasureCategoryById(categoryId); + + QSqlDatabase dbLocal = CDbConnectionPool::instance().openConnection("local"); + QSqlQuery query(dbLocal); + + QString sql = "SELECT * FROM zd_device_role WHERE cateory_id = :cateory or cateory_name = :categoryName;"; + query.prepare(sql); + + query.bindValue(":cateory", categoryId); + query.bindValue(":categoryName", category.categoryName); + bool isSuccess = query.exec(); + if (isSuccess) { + while (query.next()) { + ZdDeviceRoleDto role; + + role.id = query.value("id").toString(); + role.belongVername = query.value("belong_vername").toString(); + role.belongCheckname = query.value("belong_checkname").toString(); + role.categoryId = query.value("cateory_id").toString(); + role.categoryName = query.value("cateory_name").toString(); + role.deviceId = query.value("device_id").toString(); + role.deviceType = query.value("device_type").toString(); + role.role = query.value("role").toString(); + + result.append(role); + } + } else { + LogUtil::PrintLog("ERROR", QString("查询标准设备的角色分类失败[%1][%2][%3]").arg(categoryId).arg(category.categoryName).arg(query.lastError().text())); + } + + qDebug() << "CheckDao::getDeviceRoleByCategory: " << query.lastQuery() << categoryId << category.categoryName; + + return result; +} diff --git a/dao/CheckDao.h b/dao/CheckDao.h new file mode 100644 index 0000000..fd3ea01 --- /dev/null +++ b/dao/CheckDao.h @@ -0,0 +1,31 @@ +#ifndef CHECKDAO_H +#define CHECKDAO_H + +#include "BaseDao.h" + +// 检定设备角色 +class ZdDeviceRoleDto { +public: + QString id; + QString belongVername; // 检定装置名称字典 + QString belongCheckname; // 核查装置名称字典 + QString categoryId; // 检定/核查项目id + QString categoryName; // 分类名称 + QString deviceId; // 设备ID + QString deviceType; // 被检0 标准1 + QString role; // 角色 +}; + +class CheckDao : public BaseDao +{ +public: + CheckDao(); + + QStringList getMeasureItemCategoryByModels(QStringList modelIds); + QStringList getSelectedTaskMeasureItemCategory(QStringList taskSampleIds); + DeviceMeasureCategoryDto getDeviceMeasureCategoryById(QString categoryId); + + QList getDeviceRoleByCategory(QString categoryId); +}; + +#endif // CHECKDAO_H diff --git a/dao/TaskDao.cpp b/dao/TaskDao.cpp index 2c1c86e..45aac80 100644 --- a/dao/TaskDao.cpp +++ b/dao/TaskDao.cpp @@ -37,7 +37,7 @@ query.bindValue(":offset", page.currentPage * page.pageSize); query.bindValue(":limit", page.pageSize); -// qDebug() << sql; +// qDebug() << sql << request.measureStatusList.join(",") << request.deptId << page.currentPage << page.pageSize << totalCount; // 分页查询 bool isSuccess = query.exec(); @@ -86,7 +86,7 @@ query.prepare(sql); bindValueTaskListPage(query, request); -// qDebug() << sql; +// qDebug() << sql << request.measureStatusList.join(','); if (query.exec() && query.next()) { totalCount = query.value("recCount").toInt(); @@ -356,7 +356,11 @@ where = QString("%1 AND bo.is_urgent = :urgent").arg(where); } if (!request.measureStatusList.isEmpty()) { - where = QString("%1 AND blei.measure_status IN (:statusList)").arg(where); + QString tmp; + for (int i = 0; i < request.measureStatusList.size(); i++) { + tmp = QString("%1,:status%2").arg(tmp).arg(i); + } + where = QString("%1 AND blei.measure_status IN ( %2 )").arg(where).arg(tmp.mid(1)); } return where; @@ -389,6 +393,8 @@ query.bindValue(":urgent", request.isUrgent); } if (!request.measureStatusList.isEmpty()) { - query.bindValue(":statusList", request.measureStatusList.join(",")); + for (int i = 0; i < request.measureStatusList.size(); i++) { + query.bindValue(QString(":status%1").arg(i), request.measureStatusList.at(i)); + } } } diff --git a/dao/dao.pri b/dao/dao.pri index 8989888..50052cf 100644 --- a/dao/dao.pri +++ b/dao/dao.pri @@ -36,8 +36,8 @@ #HEADERS += $$PWD/ProgramDao.h #SOURCES += $$PWD/ProgramDao.cpp -#HEADERS += $$PWD/CheckDao.h -#SOURCES += $$PWD/CheckDao.cpp +HEADERS += $$PWD/CheckDao.h +SOURCES += $$PWD/CheckDao.cpp #HEADERS += $$PWD/ResSystemFileDao.h #SOURCES += $$PWD/ResSystemFileDao.cpp diff --git a/dao/service/TaskService.cpp b/dao/service/TaskService.cpp index 5af1053..d7bab02 100644 --- a/dao/service/TaskService.cpp +++ b/dao/service/TaskService.cpp @@ -30,6 +30,31 @@ return deptTaskList; } +QList TaskService::getUserTaskToBeDoneListPage(TaskRequest request, Page &page) +{ + TaskDao taskDao; + SystemDao systemDao; + + QList taskList = taskDao.getTaskListPage(request, page); + + // 获取字典值 + systemDao.getTaskMeasureStatusDict(); + + // 为其他字典值填充名称 + for (TaskDTO &task : taskList) { + wrapperTaskDTO(task); + } + + return taskList; +} + +QStringList TaskService::getVerificationItemCatsBySelectedTask(QStringList taskIds) +{ + CheckDao checkDao; + return checkDao.getSelectedTaskMeasureItemCategory(taskIds); +} + + void TaskService::wrapperTaskDTO(TaskDTO &task) { task.isUrgentName = task.isUrgent == "1" ? "是" : "否"; diff --git a/dao/service/TaskService.h b/dao/service/TaskService.h index 07290f8..701c988 100644 --- a/dao/service/TaskService.h +++ b/dao/service/TaskService.h @@ -2,6 +2,7 @@ #define TASKSERVICE_H #include "dao/TaskDao.h" +#include "dao/CheckDao.h" #include "dao/SystemDao.h" class TaskService @@ -10,6 +11,9 @@ TaskService(); QList getDeptTaskListPage(TaskRequest request, Page& page); + QList getUserTaskToBeDoneListPage(TaskRequest request, Page& page); + + QStringList getVerificationItemCatsBySelectedTask(QStringList taskIds); private: void wrapperTaskDTO(TaskDTO & task); diff --git a/infomation/InfoMainForm.cpp b/infomation/InfoMainForm.cpp index 882a5b5..a933a06 100644 --- a/infomation/InfoMainForm.cpp +++ b/infomation/InfoMainForm.cpp @@ -17,6 +17,7 @@ InfoMainForm::~InfoMainForm() { + qDebug() << "~InfoMainForm"; delete ui; } diff --git a/infomation/task/DeptTaskForm.cpp b/infomation/task/DeptTaskForm.cpp index b7d771b..2022268 100644 --- a/infomation/task/DeptTaskForm.cpp +++ b/infomation/task/DeptTaskForm.cpp @@ -16,6 +16,7 @@ DeptTaskForm::~DeptTaskForm() { + qDebug() << "~DeptTaskForm"; delete ui; } diff --git a/res/qss/infoTable.css b/res/qss/infoTable.css index 4b17ee3..cee5d1e 100644 --- a/res/qss/infoTable.css +++ b/res/qss/infoTable.css @@ -158,8 +158,8 @@ border: 0px; } -QTableWidget[class=defaultTable]::item::selected { - background: #FFFFFF; +QTableWidget[class=defaultTable]::item:selected { + background: #FFFFFF; color: #2F6FC6; font-weight: bold; font-size: 18px;