|
@@ -2,24 +2,28 @@
|
|
|
#include "GreyClusteringItemDelegate.h"
|
|
|
#include "MultiLevelHeaderView.h"
|
|
|
#include "ui_GreyClusteringConfigWidget.h"
|
|
|
+#include "dbService/GradeInfoService.h"
|
|
|
+#include "CMind.h"
|
|
|
|
|
|
#include <QLineEdit>
|
|
|
#include <QDebug>
|
|
|
#include <QMessageBox>
|
|
|
|
|
|
-GreyClusteringConfigWidget::GreyClusteringConfigWidget(int grayNumber, QWidget *parent)
|
|
|
- : QWidget(parent), ui(new Ui::GreyClusteringConfigWidget), m_grayNumber(grayNumber)
|
|
|
+GreyClusteringConfigWidget::GreyClusteringConfigWidget(CMind *mind, int grayNumber, QWidget *parent)
|
|
|
+ : QWidget(parent), ui(new Ui::GreyClusteringConfigWidget), m_mind(mind), m_grayNumber(grayNumber)
|
|
|
{
|
|
|
ui->setupUi(this);
|
|
|
|
|
|
ui->grayConfigTableView->setAlternatingRowColors(false);
|
|
|
- ui->grayConfigTableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
|
|
|
+ ui->grayConfigTableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
|
|
|
ui->grayConfigTableView->horizontalHeader()->setStyleSheet(
|
|
|
"QHeaderView::section{background:rgb(244,244,244);color: black;}");
|
|
|
ui->grayConfigTableView->verticalHeader()->setStyleSheet(
|
|
|
"QHeaderView::section{background:rgb(244,244,244);color: black;}");
|
|
|
ui->grayConfigTableView->verticalHeader()->setDefaultAlignment(Qt::AlignCenter);
|
|
|
ui->grayConfigTableView->setSelectionMode(QAbstractItemView::SingleSelection);
|
|
|
+ // ui->grayConfigTableView->verticalHeader()->setDefaultSectionSize(20);
|
|
|
+ ui->grayConfigTableView->horizontalHeader()->hide();
|
|
|
|
|
|
m_model = new QStandardItemModel();
|
|
|
ui->grayConfigTableView->setModel(m_model);
|
|
@@ -41,17 +45,65 @@ GreyClusteringConfigWidget::~GreyClusteringConfigWidget()
|
|
|
|
|
|
void GreyClusteringConfigWidget::initFormLayout()
|
|
|
{
|
|
|
- for (int i = 0; i < m_grayNumber; ++i) {
|
|
|
+ QList<GradeInfo *> gradeInfoList;
|
|
|
+ QMap<QString, QString> grayLevelMaps;
|
|
|
+ int projectId = m_mind->root().projectId;
|
|
|
+ if (!GradeInfoService().QueryGradeByProjectIdAndType(&gradeInfoList, projectId, 1)) {
|
|
|
+ QMessageBox::warning(this, "警告", "数据库访问失败");
|
|
|
+ } else {
|
|
|
+ if (gradeInfoList.size() == 0) {
|
|
|
+ for (int lvl = 0; lvl < m_grayNumber; ++lvl) {
|
|
|
+ grayLevelMaps.insert(QString("级别 %1:").arg(lvl + 1), QString("E%1").arg(lvl + 1));
|
|
|
+ GradeInfo ginfo;
|
|
|
+ ginfo.projectId = projectId;
|
|
|
+ ginfo.gradeName = QString("级别 %1").arg(lvl + 1);
|
|
|
+ ginfo.gradeValue = QString("灰类%1级").arg(lvl + 1);
|
|
|
+ ginfo.type = 1;
|
|
|
+ if (!GradeInfoService().AddGradeInfo(ginfo)) {
|
|
|
+ QMessageBox::warning(this, "警告", "数据库访问失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ for (const auto &gi : gradeInfoList) {
|
|
|
+ grayLevelMaps.insert(gi->gradeName, gi->gradeValue);
|
|
|
+ if (grayLevelMaps.size() >= m_grayNumber) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 缺少再补
|
|
|
+ for (int lvl = grayLevelMaps.size(); lvl < m_grayNumber; ++lvl) {
|
|
|
+ grayLevelMaps.insert(QString("级别 %1:").arg(lvl + 1), QString("E%1").arg(lvl + 1));
|
|
|
+ GradeInfo ginfo;
|
|
|
+ ginfo.projectId = projectId;
|
|
|
+ ginfo.gradeName = QString("级别 %1").arg(lvl + 1);
|
|
|
+ ginfo.gradeValue = QString("灰类%1级").arg(lvl + 1);
|
|
|
+ ginfo.type = 0;
|
|
|
+ if (!GradeInfoService().AddGradeInfo(ginfo)) {
|
|
|
+ QMessageBox::warning(this, "警告", "数据库访问失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ m_grayNames = grayLevelMaps.values();
|
|
|
+ ui->stackedWidget->setCurrentIndex(1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ qDeleteAll(gradeInfoList);
|
|
|
+
|
|
|
+ QMapIterator<QString, QString> iter(grayLevelMaps);
|
|
|
+ while (iter.hasNext()) {
|
|
|
+ iter.next();
|
|
|
auto le = new QLineEdit;
|
|
|
le->setPlaceholderText("请输入类别");
|
|
|
+ le->setText(iter.value());
|
|
|
le->setMinimumHeight(28);
|
|
|
le->setMinimumWidth(200);
|
|
|
- ui->grayFormLayout->addRow(QString(tr("级别 %1:")).arg(i), le);
|
|
|
+ ui->grayFormLayout->addRow(iter.key() + ":", le);
|
|
|
}
|
|
|
|
|
|
qDebug() << ui->grayFormLayout->rowCount();
|
|
|
|
|
|
- connect(ui->confirmBtn, &QPushButton::clicked, this, &GreyClusteringConfigWidget::onConfirmClick);
|
|
|
+ connect(ui->graySaveBtn, &QToolButton::clicked, this, &GreyClusteringConfigWidget::onConfirmClick);
|
|
|
+ connect(ui->editGrayBtn, &QToolButton::clicked, [=]() { ui->stackedWidget->setCurrentIndex(0); });
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -103,13 +155,14 @@ void GreyClusteringConfigWidget::refreshTableView()
|
|
|
{
|
|
|
const int nodeDepth = 3; // 节点深度
|
|
|
|
|
|
- m_grayNames = QStringList { "较差类", "一般类", "较好类" };
|
|
|
QTableView *t = ui->grayConfigTableView;
|
|
|
m_model->clear();
|
|
|
|
|
|
// 设置表头
|
|
|
{
|
|
|
auto hHeader = new MultiLevelHeaderView(Qt::Horizontal, 2, nodeDepth + 3 + m_grayNames.size(), t);
|
|
|
+ hHeader->setSectionResizeMode(QHeaderView::Stretch);
|
|
|
+
|
|
|
hHeader->setCellSpan(0, 0, 2, nodeDepth); // 指标占位
|
|
|
for (int n = 0; n < 1 + m_grayNames.size(); ++n) { // 单位+灰度级占位
|
|
|
hHeader->setCellSpan(0, nodeDepth + n, 2, 1);
|
|
@@ -185,7 +238,7 @@ void GreyClusteringConfigWidget::onConfirmClick()
|
|
|
QLineEdit *le = qobject_cast<QLineEdit *>(item->widget());
|
|
|
if (le) {
|
|
|
if (le->text().trimmed().isEmpty()) {
|
|
|
- QMessageBox::warning(this, tr("警告"), tr("类别%1不能为空!").arg(i));
|
|
|
+ QMessageBox::warning(this, tr("警告"), tr("级别%1不能为空!").arg(i + 1));
|
|
|
return;
|
|
|
}
|
|
|
names << le->text().trimmed();
|
|
@@ -198,6 +251,29 @@ void GreyClusteringConfigWidget::onConfirmClick()
|
|
|
}
|
|
|
m_grayNames = names;
|
|
|
|
|
|
+ // 更新数据库等级值
|
|
|
+ QList<GradeInfo *> gradeInfoList;
|
|
|
+ if (!GradeInfoService().QueryGradeByProjectIdAndType(&gradeInfoList, m_mind->root().projectId, 1)) {
|
|
|
+ QMessageBox::warning(this, "警告", "数据库访问失败");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ for (auto gi : gradeInfoList) {
|
|
|
+ int num = gi->gradeName.mid(3, gi->gradeName.size() - 3).toInt();
|
|
|
+ if (num < names.size() + 1) {
|
|
|
+ if (gi->gradeValue != names.at(num - 1)) {
|
|
|
+ gi->gradeValue = names.at(num - 1);
|
|
|
+ if (!GradeInfoService().UpdateGradeInfo(*gi)) {
|
|
|
+ QMessageBox::warning(this, "警告", "数据库访问失败");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ qDeleteAll(gradeInfoList);
|
|
|
+
|
|
|
+ // 刷新表格
|
|
|
refreshTableView();
|
|
|
ui->stackedWidget->setCurrentIndex(1);
|
|
|
}
|