chengxr 1 year ago
parent
commit
4b55a4f8fd

+ 19 - 3
QFD/common/ProjectManager.cpp

@@ -116,11 +116,27 @@ int ProjectManager::insertProject(ProjectInfo &proj)
 {
     int code = verifyProjectInfo(proj);
     if (code == QF_CODE_SUCCEEDED) {
-        int index = ProjectService().AddProjectInfo(proj);
-        qDebug() << __FUNCTION__ << __LINE__ << "id:" << index;
-        if (index == -1) {
+        int id = ProjectService().AddProjectInfo(proj);
+        qDebug() << __FUNCTION__ << __LINE__ << "id:" << id;
+        if (id == -1) {
             code = QF_CODE_PROJ_CREATE_FALIED;
         }
     }
     return code;
 }
+
+int ProjectManager::updateProject(ProjectInfo &proj)
+{
+    if (proj.estimateType.isEmpty()) {
+        return QF_CODE_PROJ_NOT_EDITABLE;
+    }
+    int code = verifyProjectInfo(proj);
+    if (code == QF_CODE_SUCCEEDED) {
+        bool ret = ProjectService().UpdateProjectInfo(proj);
+        qDebug() << __FUNCTION__ << __LINE__ << "ret:" << ret;
+        if (ret == false) {
+            code = QF_CODE_PROJ_UPDATE_FALIED;
+        }
+    }
+    return code;
+}

+ 3 - 0
QFD/common/ProjectManager.h

@@ -10,6 +10,7 @@ class ProjectManager : QObject
     Q_OBJECT
 public:
     /// 指标体系类型
+    /// @attention 枚举值与本地数据库关联,可以新增,但如无必要禁止修改,除非你知道自己在干什么
     enum IndexType
     {
         Capability    = 0b1,       // 能力重要度评估指标体系
@@ -20,6 +21,7 @@ public:
     static QString nameOFIndexType(IndexType t);
 
     /// 评估方案类型
+    /// @attention 枚举值与本地数据库关联,可以新增,但如无必要禁止修改,除非你知道自己在干什么
     enum EvalType
     {
         None       = 0,
@@ -52,6 +54,7 @@ public:
     static int verifyProjectInfo(ProjectInfo proj);
 
     static int insertProject(ProjectInfo &proj);
+    static int updateProject(ProjectInfo &proj);
 };
 
 #endif  // PROJECTMANAGER_H

+ 4 - 0
QFD/common/QFDAlert.cpp

@@ -44,6 +44,10 @@ void QFDAlert::showAlertWithCode(int code, QWidget *w)
         msg = "请选额评估类型";
     } else if (code == QF_CODE_PROJ_CREATE_FALIED) {
         msg = "创建失败,数据库异常";
+    } else if (code == QF_CODE_PROJ_NOT_EDITABLE) {
+        msg = "该项目类型不支持修改";
+    } else if (code == QF_CODE_PROJ_UPDATE_FALIED) {
+        msg = "更新失败,数据库异常";
     }
 
     if (!msg.isEmpty()) {

+ 2 - 0
QFD/dbService/ClassSet.h

@@ -27,6 +27,8 @@ const int QF_CODE_NEED_PROJ_SUMMARY  = 2020;
 const int QF_CODE_NEED_PROJ_NAME     = 2021;
 const int QF_CODE_NEED_PROJ_TYPE     = 2022;
 const int QF_CODE_PROJ_CREATE_FALIED = 2023;
+const int QF_CODE_PROJ_NOT_EDITABLE  = 2024;
+const int QF_CODE_PROJ_UPDATE_FALIED = 2025;
 
 /**
  * @projectName   QFD

+ 16 - 3
QFD/view/HomeView.cpp

@@ -90,6 +90,7 @@ void HomeView::connectSignalsAndSlots()
     connect(m_createProjWidget, &CreateProjWidget::signalCreate, this, &HomeView::slotConfirmCreate);
     connect(m_projListWidget, &ProjectListWidget::sigOpen, this, &HomeView::slotOpenProject);
     connect(m_projListWidget, &ProjectListWidget::sigEdit, this, &HomeView::slotEditProject);
+    connect(m_projListWidget, &ProjectListWidget::sigInfo, this, &HomeView::slotProjectInfo);
 }
 
 void HomeView::loadProjects()
@@ -133,8 +134,18 @@ void HomeView::slotSearchTextChanged()
 
 void HomeView::slotConfirmCreate()
 {
-    ProjectInfo info = m_createProjWidget->projectInfo();
-    int code         = ProjectManager::insertProject(info);
+    int code         = -1;
+    ProjectInfo info = m_createProjWidget->editedProjInfo();
+
+    if (m_createProjWidget->mode() == CreateProjWidget::Create) {
+        code = ProjectManager::insertProject(info);
+    } else if (m_createProjWidget->mode() == CreateProjWidget::Update) {
+        info.id = m_createProjWidget->projInfo()->id;
+        code    = ProjectManager::updateProject(info);
+    } else {
+        return;
+    }
+
     QFDAlert::showAlertWithCode(code, m_createProjWidget);
     if (code == QF_CODE_SUCCEEDED) {
         m_createProjWidget->close();
@@ -143,7 +154,7 @@ void HomeView::slotConfirmCreate()
     }
 }
 
-void HomeView::slotOpenProject(ProjectInfo *proj)
+void HomeView::slotProjectInfo(ProjectInfo *proj)
 {
     if (m_createProjWidget->isVisible() == false) {
         m_createProjWidget->setMode(CreateProjWidget::Info);
@@ -152,6 +163,8 @@ void HomeView::slotOpenProject(ProjectInfo *proj)
     }
 }
 
+void HomeView::slotOpenProject(ProjectInfo *proj) { }
+
 void HomeView::slotEditProject(ProjectInfo *proj)
 {
     if (m_createProjWidget->isVisible() == false) {

+ 1 - 0
QFD/view/HomeView.h

@@ -40,6 +40,7 @@ private slots:
     void slotCreateProjClicked();
     void slotSearchTextChanged();
     void slotConfirmCreate();
+    void slotProjectInfo(ProjectInfo *proj);
     void slotOpenProject(ProjectInfo *proj);
     void slotEditProject(ProjectInfo *proj);
 

+ 8 - 2
QFD/widgets/CreateProjWidget.cpp

@@ -83,7 +83,12 @@ void CreateProjWidget::resetInputs()
     m_type3->setChecked(false);
 }
 
-ProjectInfo CreateProjWidget::projectInfo() const
+ProjectInfo *CreateProjWidget::projInfo() const
+{
+    return m_projInfo;
+}
+
+ProjectInfo CreateProjWidget::editedProjInfo() const
 {
     ProjectInfo proj;
     proj.taskName          = m_taskName->text();
@@ -109,6 +114,7 @@ ProjectInfo CreateProjWidget::projectInfo() const
 
 void CreateProjWidget::setProjectInfo(ProjectInfo *info)
 {
+    m_projInfo = info;
     m_taskName->setText(info->taskName);
     QDateTime time = QDateTime::fromTime_t(info->estimateTime.toUInt());
     m_evalTime->setDateTime(time);
@@ -248,7 +254,7 @@ void CreateProjWidget::slotCheckBoxChanged() { }
 
 void CreateProjWidget::slotCreateClicked()
 {
-    ProjectInfo p = projectInfo();
+    ProjectInfo p = editedProjInfo();
     qDebug() << __FUNCTION__ << p.taskName << p.estimateTime << p.estimateObjective << p.estimateDept
              << p.estimatePerson << p.positionalTitles << p.remark << p.projectName << p.estimateType;
 

+ 4 - 1
QFD/widgets/CreateProjWidget.h

@@ -35,7 +35,8 @@ public:
 
     void resetInputs();
 
-    ProjectInfo projectInfo() const;
+    ProjectInfo *projInfo() const;
+    ProjectInfo editedProjInfo() const;
     void setProjectInfo(ProjectInfo *info);
 
 signals:
@@ -57,6 +58,8 @@ private slots:
 private:
     Mode m_mode = Create;
 
+    ProjectInfo *m_projInfo = nullptr;
+
     // 项目概要
     QLabel *m_summary        = nullptr;  // 项目概要
     LineEdit *m_taskName     = nullptr;  // 任务名称

+ 20 - 7
QFD/widgets/ProjectListWidget.cpp

@@ -38,9 +38,11 @@ void ProjectListItemWidget::initWidgets()
     m_typeLabel->setText("评估类型:");
     m_type = new QLabel(this);
     m_type->setObjectName("type");
+    m_info = new PushButton("详情", NEWFLICON(FluentIcon, INFO), this);
+    m_info->setObjectName("info");
     m_open = new PushButton("打开", NEWFLICON(QFDIcon, Open), this);
     m_open->setObjectName("open");
-    m_edit = new PushButton("编辑", NEWFLICON(FluentIcon, EDIT), this);
+    m_edit = new PushButton("修改", NEWFLICON(FluentIcon, EDIT), this);
     m_edit->setObjectName("edit");
 
     setStyleSheet("#name {color:#1196db; font-size:15px; font:bold}"
@@ -91,19 +93,21 @@ void ProjectListItemWidget::initLayout()
 
     // 按钮
     m_buttonLayout->addStretch();
-    m_buttonLayout->addWidget(m_open);
+    m_buttonLayout->addWidget(m_info);
     m_buttonLayout->addWidget(m_edit);
+    m_buttonLayout->addWidget(m_open);
 }
 
 void ProjectListItemWidget::connectSignalsAndSlots()
 {
+    connect(m_info, &PushButton::clicked, this, &ProjectListItemWidget::sigInfo);
     connect(m_open, &PushButton::clicked, this, &ProjectListItemWidget::sigOpen);
     connect(m_edit, &PushButton::clicked, this, &ProjectListItemWidget::sigEdit);
 }
 
 void ProjectListItemWidget::setInfo(ProjectInfo *info)
 {
-    m_info = info;
+    m_proj = info;
     if (info == nullptr) {
         return;
     }
@@ -131,9 +135,9 @@ int ProjectListItemWidget::index() const
     return m_index;
 }
 
-ProjectInfo *ProjectListItemWidget::info() const
+ProjectInfo *ProjectListItemWidget::proj() const
 {
-    return m_info;
+    return m_proj;
 }
 
 ProjectListWidget::ProjectListWidget(QWidget *parent) : QWidget(parent)
@@ -150,6 +154,7 @@ void ProjectListWidget::showProjects(QList<ProjectInfo *> list)
     for (int i = 0; i < list.count(); i++) {
         ProjectListItemWidget *w = new ProjectListItemWidget(i, m_listWidget);
         w->setInfo(list[i]);
+        connect(w, &ProjectListItemWidget::sigInfo, this, &ProjectListWidget::slotInfo);
         connect(w, &ProjectListItemWidget::sigOpen, this, &ProjectListWidget::slotOpen);
         connect(w, &ProjectListItemWidget::sigEdit, this, &ProjectListWidget::slotEdit);
 
@@ -199,6 +204,8 @@ void ProjectListWidget::connectSiganlsAndSlots()
 void ProjectListWidget::slotItemDoubleClicked(QListWidgetItem *item)
 {
     qDebug() << __FUNCTION__ << __LINE__;
+    ProjectListItemWidget *w = dynamic_cast<ProjectListItemWidget *>(m_listWidget->itemWidget(item));
+    emit sigInfo(w->proj());
 }
 
 void ProjectListWidget::slotItemClicked(QListWidgetItem *item)
@@ -221,14 +228,20 @@ void ProjectListWidget::slotItemSelectionChanged()
     qDebug() << __FUNCTION__ << __LINE__;
 }
 
+void ProjectListWidget::slotInfo()
+{
+    ProjectListItemWidget *w = dynamic_cast<ProjectListItemWidget *>(sender());
+    emit sigInfo(w->proj());
+}
+
 void ProjectListWidget::slotOpen()
 {
     ProjectListItemWidget *w = dynamic_cast<ProjectListItemWidget *>(sender());
-    emit sigOpen(w->info());
+    emit sigOpen(w->proj());
 }
 
 void ProjectListWidget::slotEdit()
 {
     ProjectListItemWidget *w = dynamic_cast<ProjectListItemWidget *>(sender());
-    emit sigEdit(w->info());
+    emit sigEdit(w->proj());
 }

+ 6 - 2
QFD/widgets/ProjectListWidget.h

@@ -26,9 +26,10 @@ public:
     void setInfo(ProjectInfo *info);
 
     int index() const;
-    ProjectInfo *info() const;
+    ProjectInfo *proj() const;
 
 signals:
+    void sigInfo();
     void sigOpen();
     void sigEdit();
 
@@ -39,7 +40,7 @@ private:
 
 private:
     int m_index         = 0;
-    ProjectInfo *m_info = nullptr;
+    ProjectInfo *m_proj = nullptr;
 
     QLabel *m_name      = nullptr;
     QLabel *m_time      = nullptr;
@@ -48,6 +49,7 @@ private:
     QLabel *m_typeLabel = nullptr;
     QLabel *m_type      = nullptr;
 
+    PushButton *m_info = nullptr;
     PushButton *m_edit = nullptr;
     PushButton *m_open = nullptr;
 
@@ -70,6 +72,7 @@ public:
     ProjectListItemWidget *itemWidget(QListWidgetItem *item) const;
 
 signals:
+    void sigInfo(ProjectInfo *project);
     void sigOpen(ProjectInfo *project);
     void sigEdit(ProjectInfo *project);
 
@@ -86,6 +89,7 @@ private slots:
     void slotCurrentRowChanged(int currentRow);
     void slotItemSelectionChanged();
 
+    void slotInfo();
     void slotOpen();
     void slotEdit();