Browse Source

update

Signed-off-by: codeClown <zhaomengshou@126.com>
codeClown 1 year ago
parent
commit
57eb46133f

+ 8 - 6
QFD/widgets/DataCollectionWidget.cpp

@@ -99,7 +99,9 @@ void DataCollectionWidget::setupTabWidget()
         for (SchemePlanManager::SchemeProcessInfo process : processList) {
             // 综合效能评估 - 灰色聚类法: 效能等级配置页面, 导入评估数据页面
             if (process.algorithm == SchemePlanManager::GCE && process.indexType == ProjectManager::EfficiencyIndex) {
-                GreyClusteringConfigWidget *gc = new GreyClusteringConfigWidget(process.efficiencyGrades);
+                CMind *mind = new CMind(this);
+                mind->setNodeList(nodeListMap[i]);
+                GreyClusteringConfigWidget *gc = new GreyClusteringConfigWidget(mind, process.efficiencyGrades);
                 m_tab->addTab(gc, indexName + " - " + "灰色聚类法效能等级配置");
 
                 QVector<GreyClusteringItem> items;
@@ -110,7 +112,7 @@ void DataCollectionWidget::setupTabWidget()
             // 综合效能评估 - 物元分析法: 效能等级配置页面, 导入评估数据页面
             if (process.algorithm == SchemePlanManager::MEA && process.indexType == ProjectManager::EfficiencyIndex) {
                 QList<MEConfigItem> items;
-                CMind *mind = new CMind();
+                CMind *mind = new CMind(this);
                 mind->setNodeList(nodeListMap[i]);
                 MatterElementConfigWidget *mec = new MatterElementConfigWidget(mind, process.efficiencyGrades);
                 m_tab->addTab(mec, indexName + "-" + "物元分析法效能等级配置");
@@ -195,7 +197,7 @@ void DataCollectionWidget::slotImportData(UserConfig *config)
         fileValid = false;
         return;
     }
-    //校验提醒
+    // 校验提醒
     QStringList strList = fileName.split("/");
     QStringList names   = strList.at(strList.size() - 1).split("-");
     if (names.at(0) != config->userName) {
@@ -217,7 +219,7 @@ void DataCollectionWidget::slotImportData(UserConfig *config)
         return;
     }
 
-    //读取文件内容
+    // 读取文件内容
     QXlsx::Document xlsxR(fileName);
     QStringList str = xlsxR.sheetNames();
     qDebug() << __FUNCTION__ << __LINE__ << fileValid << str << endl;
@@ -230,7 +232,7 @@ void DataCollectionWidget::slotImportData(UserConfig *config)
     } else {
         size = str.size();
     }
-    //遍历sheet页
+    // 遍历sheet页
     QList<NodeMatrixInfo *> nodeMatrxInfoList;
     for (int i = 0; i < size; i++) {
         QString mark = "1";
@@ -293,7 +295,7 @@ void DataCollectionWidget::slotImportData(UserConfig *config)
         qDebug() << __FUNCTION__ << __LINE__ << "import data add" << endl;
     }
 
-    //如果有专家信息更新用户
+    // 如果有专家信息更新用户
     if (userinfo) {
         xlsxR.selectSheet(str[size]);
         QFUser user;

+ 84 - 8
QFD/widgets/GreyClusteringConfigWidget.cpp

@@ -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);
 }

+ 3 - 1
QFD/widgets/GreyClusteringConfigWidget.h

@@ -4,6 +4,7 @@
 #include <QStandardItemModel>
 #include <QWidget>
 
+class CMind;
 namespace Ui {
 class GreyClusteringConfigWidget;
 }
@@ -13,7 +14,7 @@ class GreyClusteringConfigWidget : public QWidget
     Q_OBJECT
 
 public:
-    explicit GreyClusteringConfigWidget(int grayNumber, QWidget *parent = nullptr);
+    explicit GreyClusteringConfigWidget(CMind *mind, int grayNumber, QWidget *parent = nullptr);
     ~GreyClusteringConfigWidget();
 
 private:
@@ -26,6 +27,7 @@ private slots:
 private:
     Ui::GreyClusteringConfigWidget *ui;
 
+    CMind *m_mind;
     int m_grayNumber;
     QStringList m_grayNames;
     QStandardItemModel *m_model;

+ 58 - 9
QFD/widgets/GreyClusteringConfigWidget.ui

@@ -17,7 +17,7 @@
    <item row="0" column="1">
     <widget class="QStackedWidget" name="stackedWidget">
      <property name="currentIndex">
-      <number>0</number>
+      <number>1</number>
      </property>
      <widget class="QWidget" name="categoryPage">
       <layout class="QGridLayout" name="gridLayout">
@@ -111,7 +111,19 @@
           </spacer>
          </item>
          <item>
-          <widget class="QPushButton" name="confirmBtn">
+          <widget class="QToolButton" name="graySaveBtn">
+           <property name="sizePolicy">
+            <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+             <horstretch>0</horstretch>
+             <verstretch>0</verstretch>
+            </sizepolicy>
+           </property>
+           <property name="minimumSize">
+            <size>
+             <width>0</width>
+             <height>30</height>
+            </size>
+           </property>
            <property name="maximumSize">
             <size>
              <width>50</width>
@@ -119,7 +131,14 @@
             </size>
            </property>
            <property name="text">
-            <string>确认</string>
+            <string>保存</string>
+           </property>
+           <property name="icon">
+            <iconset resource="../../QFluentWidgets/qfluentwidgets.qrc">
+             <normaloff>:/qfluentwidgets/images/icons/Save_black.svg</normaloff>:/qfluentwidgets/images/icons/Save_black.svg</iconset>
+           </property>
+           <property name="toolButtonStyle">
+            <enum>Qt::ToolButtonTextBesideIcon</enum>
            </property>
           </widget>
          </item>
@@ -142,6 +161,20 @@
      </widget>
      <widget class="QWidget" name="configPage">
       <layout class="QGridLayout" name="gridLayout_3">
+       <item row="1" column="2">
+        <widget class="QToolButton" name="clearBtn">
+         <property name="text">
+          <string>清除</string>
+         </property>
+         <property name="icon">
+          <iconset resource="../../QFluentWidgets/qfluentwidgets.qrc">
+           <normaloff>:/qfluentwidgets/images/color_dialog/Clear_black.svg</normaloff>:/qfluentwidgets/images/color_dialog/Clear_black.svg</iconset>
+         </property>
+         <property name="toolButtonStyle">
+          <enum>Qt::ToolButtonTextBesideIcon</enum>
+         </property>
+        </widget>
+       </item>
        <item row="1" column="0">
         <spacer name="horizontalSpacer_3">
          <property name="orientation">
@@ -155,20 +188,34 @@
          </property>
         </spacer>
        </item>
-       <item row="0" column="0" colspan="3">
+       <item row="0" column="0" colspan="4">
         <widget class="QTableView" name="grayConfigTableView"/>
        </item>
-       <item row="1" column="2">
-        <widget class="QPushButton" name="saveBtn">
+       <item row="1" column="3">
+        <widget class="QToolButton" name="configSaveBtn">
          <property name="text">
           <string>保存</string>
          </property>
+         <property name="icon">
+          <iconset resource="../../QFluentWidgets/qfluentwidgets.qrc">
+           <normaloff>:/qfluentwidgets/images/icons/Save_black.svg</normaloff>:/qfluentwidgets/images/icons/Save_black.svg</iconset>
+         </property>
+         <property name="toolButtonStyle">
+          <enum>Qt::ToolButtonTextBesideIcon</enum>
+         </property>
         </widget>
        </item>
        <item row="1" column="1">
-        <widget class="QPushButton" name="clearBtn">
+        <widget class="QToolButton" name="editGrayBtn">
          <property name="text">
-          <string>清除</string>
+          <string>灰类编辑</string>
+         </property>
+         <property name="icon">
+          <iconset resource="../../QFluentWidgets/qfluentwidgets.qrc">
+           <normaloff>:/qfluentwidgets/images/icons/Edit_black.svg</normaloff>:/qfluentwidgets/images/icons/Edit_black.svg</iconset>
+         </property>
+         <property name="toolButtonStyle">
+          <enum>Qt::ToolButtonTextBesideIcon</enum>
          </property>
         </widget>
        </item>
@@ -178,6 +225,8 @@
    </item>
   </layout>
  </widget>
- <resources/>
+ <resources>
+  <include location="../../QFluentWidgets/qfluentwidgets.qrc"/>
+ </resources>
  <connections/>
 </ui>

+ 22 - 5
QFD/widgets/MatterElementConfigWidget.cpp

@@ -137,6 +137,21 @@ void MatterElementConfigWidget::initDomainLevelLayout()
         } else {
             for (const auto &gi : gradeInfoList) {
                 levelMaps.insert(gi->gradeName, gi->gradeValue);
+                if (levelMaps.size() >= m_domainLevel) {
+                    break;
+                }
+            }
+
+            for (int lvl = gradeInfoList.size(); lvl < m_domainLevel; ++lvl) {
+                levelMaps.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("E%1").arg(lvl + 1);
+                ginfo.type       = 0;
+                if (!GradeInfoService().AddGradeInfo(ginfo)) {
+                    QMessageBox::warning(this, "警告", "数据库访问失败");
+                }
             }
         }
     }
@@ -397,11 +412,13 @@ void MatterElementConfigWidget::onLevelSaveBtnClick()
 
     for (auto gi : gradeInfoList) {
         int num = gi->gradeName.mid(0, gi->gradeName.size() - 1).toInt();
-        if (gi->gradeValue != domainLevels.at(num - 1)) {
-            gi->gradeValue = domainLevels.at(num - 1);
-            if (!GradeInfoService().UpdateGradeInfo(*gi)) {
-                QMessageBox::warning(this, "警告", "数据库访问失败");
-                return;
+        if (num < domainLevels.size() + 1) {
+            if (gi->gradeValue != domainLevels.at(num - 1)) {
+                gi->gradeValue = domainLevels.at(num - 1);
+                if (!GradeInfoService().UpdateGradeInfo(*gi)) {
+                    QMessageBox::warning(this, "警告", "数据库访问失败");
+                    return;
+                }
             }
         }
     }