Browse Source

修改登录流程;
懒加载;

chengxr 1 year ago
parent
commit
24281d896f

+ 2 - 0
QFD/QFD.pro

@@ -60,6 +60,7 @@ INCLUDEPATH += $$PWD/widgets
 INCLUDEPATH += $$PWD/common
 
 SOURCES += \
+    common/QFDAlert.cpp \
     common/QFDConfig.cpp \
     common/QFDIcon.cpp \
     main.cpp \
@@ -89,6 +90,7 @@ SOURCES += \
     widgets/SchemeWidget.cpp
 
 HEADERS += \
+    common/QFDAlert.h \
     common/QFDConfig.h \
     common/QFDIcon.h \
     view/AboutView.h \

+ 34 - 0
QFD/common/QFDAlert.cpp

@@ -0,0 +1,34 @@
+#include "QFDAlert.h"
+
+#include <dbService/ClassSet.h>
+
+#include <Widgets/InfoBar.h>
+
+void QFDAlert::showAlertWithCode(int code, QWidget *w)
+{
+    if (code == QF_CODE_SUCCEEDED) {
+        return;
+    }
+
+    QString msg;
+
+    if (code == QF_CODE_EMPTY_ACCOUNT) {
+        msg = "账号不能为空";
+    } else if (code == QF_CODE_EMPTY_PASSWORD) {
+        msg = "密码不能为空";
+    } else if (code == QF_CODE_USER_NOT_EXISTS) {
+        msg = "用户不存在";
+    } else if (code == QF_CODE_WRONG_PASSWORD) {
+        msg = "密码错误";
+    } else if (code == QF_CODE_PASSWORD_NOT_SAME) {
+        msg = "两次输入密码不一致,请修改后重试";
+    } else if (code == QF_CODE_PASSWORD_UNCHANGED) {
+        msg = "不能与旧密码相同,请修改后重试";
+    } else if (code == QF_CODE_DATA_ERROR) {
+        msg = "数据错误";
+    }
+
+    if (!msg.isEmpty()) {
+        InfoBar::warning("提示", msg, Qt::Horizontal, false, 2000, InfoBarPosition::TOP_RIGHT, w);
+    }
+}

+ 14 - 0
QFD/common/QFDAlert.h

@@ -0,0 +1,14 @@
+#ifndef QFDALERT_H
+#define QFDALERT_H
+
+#include <QObject>
+
+class QFDAlert : public QObject
+{
+    Q_OBJECT
+
+public:
+    static void showAlertWithCode(int code, QWidget *w);
+};
+
+#endif  // QFDALERT_H

+ 19 - 5
QFD/view/EvaluateView.cpp

@@ -14,11 +14,25 @@
 #include <QTableWidget>
 #include <QDebug>
 
-EvaluateView::EvaluateView(QWidget *parent) : QWidget(parent)
+EvaluateView::EvaluateView(QWidget *parent) : QWidget(parent) { }
+
+void EvaluateView::showEvent(QShowEvent *event)
+{
+    qDebug() << __FUNCTION__ << __LINE__;
+
+    if (m_initilized == false) {
+        initialize();
+        initLayout();
+        connectSigalsAndSlots();
+        m_initilized = true;
+    }
+
+    QWidget::showEvent(event);
+}
+
+void EvaluateView::hideEvent(QHideEvent *event)
 {
-    initialize();
-    initLayout();
-    connectSiganlsAndSlots();
+    QWidget::hideEvent(event);
 }
 
 void EvaluateView::initialize()
@@ -123,7 +137,7 @@ void EvaluateView::initLayout()
     m_schemeButton->setStyleSheet(s);
 }
 
-void EvaluateView::connectSiganlsAndSlots()
+void EvaluateView::connectSigalsAndSlots()
 {
     connect(m_schemeButton, &PushButton::clicked, this, &EvaluateView::slotSchemeClicked);
 }

+ 6 - 1
QFD/view/EvaluateView.h

@@ -25,17 +25,22 @@ class EvaluateView : public QWidget
 public:
     explicit EvaluateView(QWidget *parent = nullptr);
 
+    void showEvent(QShowEvent *event) override;
+    void hideEvent(QHideEvent *event) override;
+
 signals:
 
 private:
     void initialize();
     void initLayout();
-    void connectSiganlsAndSlots();
+    void connectSigalsAndSlots();
 
 private slots:
     void slotSchemeClicked();
 
 private:
+    bool m_initilized = false;
+
     QHBoxLayout *m_hBoxLayout = nullptr;
 
     QWidget *m_listWidget               = nullptr;

+ 18 - 4
QFD/view/ExpertManageView.cpp

@@ -15,11 +15,25 @@
 
 #include <QDebug>
 
-ExpertManageView::ExpertManageView(QWidget *parent) : QWidget(parent)
+ExpertManageView::ExpertManageView(QWidget *parent) : QWidget(parent) { }
+
+void ExpertManageView::showEvent(QShowEvent *event)
+{
+    qDebug() << __FUNCTION__ << __LINE__;
+
+    if (m_initilized == false) {
+        initialize();
+        initLayout();
+        connectSignalsAndSlots();
+        m_initilized = true;
+    }
+
+    QWidget::showEvent(event);
+}
+
+void ExpertManageView::hideEvent(QHideEvent *event)
 {
-    initialize();
-    initLayout();
-    connectSignalsAndSlots();
+    QWidget::hideEvent(event);
 }
 
 void ExpertManageView::initialize()

+ 5 - 0
QFD/view/ExpertManageView.h

@@ -23,6 +23,9 @@ class ExpertManageView : public QWidget
 public:
     explicit ExpertManageView(QWidget *parent = nullptr);
 
+    void showEvent(QShowEvent *event) override;
+    void hideEvent(QHideEvent *event) override;
+
 signals:
 
 private:
@@ -42,6 +45,8 @@ private slots:
     void slotListItemDoubleClicked();
 
 private:
+    bool m_initilized = false;
+
     QVBoxLayout *m_vBoxLayout        = nullptr;
     QLabel *m_titleLabel             = nullptr;
     QHBoxLayout *m_hBoxLayout        = nullptr;

+ 19 - 4
QFD/view/HomeView.cpp

@@ -11,11 +11,26 @@
 
 #include <QDebug>
 
-HomeView::HomeView(QWidget *parent) : QWidget(parent)
+HomeView::HomeView(QWidget *parent) : QWidget(parent) { }
+
+void HomeView::showEvent(QShowEvent *event)
+{
+    qDebug() << __FUNCTION__ << __LINE__;
+
+    if (m_initilized == false) {
+        initialize();
+        initLayout();
+        connectSignalsAndSlots();
+        m_initilized = true;
+    }
+
+    QWidget::showEvent(event);
+}
+
+void HomeView::hideEvent(QHideEvent *event)
 {
-    initialize();
-    initLayout();
-    connectSignalsAndSlots();
+    qDebug() << __FUNCTION__ << __LINE__;
+    QWidget::hideEvent(event);
 }
 
 void HomeView::initialize()

+ 5 - 0
QFD/view/HomeView.h

@@ -22,6 +22,9 @@ class HomeView : public QWidget
 public:
     explicit HomeView(QWidget *parent = nullptr);
 
+    void showEvent(QShowEvent *event) override;
+    void hideEvent(QHideEvent *event) override;
+
 private:
     void initialize();
     void initLayout();
@@ -31,6 +34,8 @@ private slots:
     void slotCreateProjClicked();
 
 private:
+    bool m_initilized = false;
+
     QVBoxLayout *m_vBoxLayout          = nullptr;
     QLabel *m_titleLabel               = nullptr;
     QHBoxLayout *m_hBoxLayout          = nullptr;

+ 11 - 32
QFD/view/LoginView.cpp

@@ -3,6 +3,7 @@
 #include "LoginWidget.h"
 #include "RegisterWidget.h"
 #include "QFDConfig.h"
+#include "QFDAlert.h"
 
 #include <dbService/ClassSet.h>
 
@@ -62,36 +63,6 @@ void LoginView::connectSignalsAndSlots()
     connect(m_stackedWidget, &QStackedWidget::currentChanged, this, &LoginView::slotStackIndexChanged);
 }
 
-/// 提示登录错误信息
-void LoginView::showAlertWithCode(int code) const
-{
-    if (code == QF_CODE_SUCCEEDED) {
-        return;
-    }
-
-    QString msg;
-
-    if (code == QF_CODE_EMPTY_ACCOUNT) {
-        msg = "账号不能为空";
-    } else if (code == QF_CODE_EMPTY_PASSWORD) {
-        msg = "密码不能为空";
-    } else if (code == QF_CODE_USER_NOT_EXISTS) {
-        msg = "用户不存在";
-    } else if (code == QF_CODE_WRONG_PASSWORD) {
-        msg = "密码错误";
-    } else if (code == QF_CODE_PASSWORD_NOT_SAME) {
-        msg = "两次输入密码不一致,请修改后重试";
-    } else if (code == QF_CODE_PASSWORD_UNCHANGED) {
-        msg = "不能与旧密码相同,请修改后重试";
-    } else if (code == QF_CODE_DATA_ERROR) {
-        msg = "数据错误";
-    }
-
-    if (!msg.isEmpty()) {
-        InfoBar::warning("提示", msg, Qt::Horizontal, false, 2000, InfoBarPosition::TOP_RIGHT, topLevelWidget());
-    }
-}
-
 // admin "21232f297a57a5a743894a0e4a801fc3"
 void LoginView::slotLogin()
 {
@@ -107,13 +78,14 @@ void LoginView::slotLogin()
 
         if (QFDConfig::roleType() == QFUser::SuperAdmin) {
             if (account == "admin" && password == "admin") {
+                m_registerWidget->clearInputs();
                 setStackIndex(m_stackedWidget->currentIndex() + 1);
             } else {
                 emit signalLogin();
             }
         }
     } else {
-        showAlertWithCode(code);
+        QFDAlert::showAlertWithCode(code, this);
     }
 }
 
@@ -131,7 +103,14 @@ void LoginView::slotConfirmAccount()
 
     int code = user->resetAdmin(account, password, repeatPassword);
     qDebug() << __FUNCTION__ << __LINE__ << "reset code:" << code;
-    showAlertWithCode(code);
+
+    if (code == QF_CODE_SUCCEEDED) {
+        emit signalLogin();
+        QFDConfig::setPasswordModified(true);
+        setStackIndex(m_stackedWidget->currentIndex() + 1);
+    } else {
+        QFDAlert::showAlertWithCode(code, this);
+    }
 }
 
 void LoginView::slotCancelAccount()

+ 0 - 2
QFD/view/LoginView.h

@@ -31,8 +31,6 @@ private:
     void initLayout();
     void connectSignalsAndSlots();
 
-    void showAlertWithCode(int code) const;
-
 private slots:
     void slotLogin();
     void slotCancelLogin();

+ 75 - 6
QFD/view/MainWindow.cpp

@@ -67,15 +67,80 @@ PopUpAniStackedWidget *StackedWidget::view() const
 
 MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
 {
-    initialize();
-    initWindow();
-    initLayout();
-    initNavigation();
-    connectSignalsAndSlots();
+    //    initialize();
+    //    initWindow();
+    //    initLayout();
+    //    initNavigation();
+
+    initLoginPage();
+
+    //    connectSignalsAndSlots();
 }
 
 MainWindow::~MainWindow() { }
 
+void MainWindow::initLoginPage()
+{
+    setMinimumSize(QSize(1200, 800));
+
+    m_titleBar               = new CustomTitleBar(this);
+    QFramelessHelper *helper = new QFramelessHelper(this);
+    helper->setTitleBar(m_titleBar);
+
+    setWindowTitle("专家评定数据分析软件");
+
+    QIcon icon = QIcon(":/resource/logo.png");
+    qApp->setWindowIcon(icon);
+
+    m_titleBar->setGeometry(QRect(titleBarIndent(), 0, width() - titleBarIndent(), m_titleBar->height()));
+    m_titleBar->setIcon(icon);
+    m_titleBar->setHidden(true);
+
+    m_mainStackedWidget = new QStackedWidget(this);
+    setCentralWidget(m_mainStackedWidget);
+    m_loginView = new LoginView(this);
+    m_mainStackedWidget->addWidget(m_loginView);
+
+    connect(m_loginView, &LoginView::signalLogin, this, &MainWindow::slotLogin);
+    connect(m_loginView, &LoginView::signalCancelLogin, this, &MainWindow::slotCancelLogin);
+}
+
+void MainWindow::initMainPage()
+{
+    m_mainWidget = new QWidget(this);
+    m_hBoxLayout = new QHBoxLayout(m_mainWidget);
+
+    m_widgetLayout  = new QHBoxLayout();
+    m_stackWidget   = new StackedWidget(m_mainWidget);
+    m_naviInterface = new NavigationInterface(true, true, m_mainWidget);
+    m_naviInterface->panel->setExpandWidth(200);
+
+    m_homeView = new HomeView(m_mainWidget);
+
+    m_projectView      = new ProjectView(m_mainWidget);
+    m_evaluateView     = new EvaluateView(m_mainWidget);
+    m_expertManageView = new ExpertManageView(m_mainWidget);
+    m_aboutView        = new AboutView(m_mainWidget);
+    m_settingView      = new SettingView(m_mainWidget);
+    m_userView         = new UserView(m_mainWidget);
+
+    m_mainStackedWidget->addWidget(m_mainWidget);
+
+    m_hBoxLayout->setSpacing(0);
+    m_hBoxLayout->setContentsMargins(0, 0, 0, 0);
+    m_hBoxLayout->addWidget(m_naviInterface);
+    m_hBoxLayout->addLayout(m_widgetLayout);
+    m_hBoxLayout->setStretchFactor(m_widgetLayout, 1);
+
+    m_widgetLayout->addWidget(m_stackWidget);
+    m_widgetLayout->setContentsMargins(0, 32, 0, 0);
+
+    initNavigation();
+
+    connect(m_naviInterface, &NavigationInterface::displayModeChanged, m_titleBar, &StandardTitleBar::raise);
+    connect(m_userView, &UserView::signalLogout, this, &MainWindow::slotLogout);
+}
+
 void MainWindow::initialize()
 {
     m_titleBar = new CustomTitleBar(this);
@@ -198,7 +263,7 @@ void MainWindow::setNaviInterfaceHidden(bool hidden)
 
 int MainWindow::titleBarIndent() const
 {
-    return m_naviInterface->isHidden() ? 0 : 46;
+    return (m_naviInterface && m_naviInterface->isHidden()) ? 0 : 46;
 }
 
 void MainWindow::resizeEvent(QResizeEvent *event)
@@ -217,6 +282,7 @@ void MainWindow::switchTo(QWidget *widget, bool triggerByUser)
 
 void MainWindow::slotLogin()
 {
+    initMainPage();
     m_mainStackedWidget->setCurrentWidget(m_mainWidget);
     m_titleBar->setHidden(false);
 }
@@ -224,7 +290,10 @@ void MainWindow::slotLogin()
 void MainWindow::slotLogout()
 {
     m_mainStackedWidget->setCurrentWidget(m_loginView);
+    m_mainStackedWidget->removeWidget(m_mainWidget);
     m_titleBar->setHidden(true);
+    delete m_mainWidget;
+    m_mainWidget = nullptr;
 }
 
 void MainWindow::slotCancelLogin()

+ 3 - 0
QFD/view/MainWindow.h

@@ -51,6 +51,9 @@ public:
     ~MainWindow();
 
 private:
+    void initLoginPage();
+    void initMainPage();
+
     void initialize();
     void initWindow();
     void initLayout();

+ 21 - 5
QFD/view/ProjectView.cpp

@@ -10,11 +10,27 @@
 #include <QBoxLayout>
 #include <QLabel>
 
-ProjectView::ProjectView(QWidget *parent) : QWidget(parent)
+#include <QDebug>
+
+ProjectView::ProjectView(QWidget *parent) : QWidget(parent) { }
+
+void ProjectView::showEvent(QShowEvent *event)
+{
+    qDebug() << __FUNCTION__ << __LINE__;
+
+    if (m_initilized == false) {
+        initialize();
+        initLayout();
+        connectSigalsAndSlots();
+        m_initilized = true;
+    }
+
+    QWidget::showEvent(event);
+}
+
+void ProjectView::hideEvent(QHideEvent *event)
 {
-    initialize();
-    initLayout();
-    connectSiganlsAndSlots();
+    QWidget::hideEvent(event);
 }
 
 void ProjectView::initialize()
@@ -87,7 +103,7 @@ void ProjectView::initLayout()
     setStyleSheet("#projNameLabel {font-size:20px;font:bold;color:#333333}");
 }
 
-void ProjectView::connectSiganlsAndSlots()
+void ProjectView::connectSigalsAndSlots()
 {
     connect(m_renameButton, &ToolButton::clicked, this, &ProjectView::showRenameWidget);
 }

+ 6 - 1
QFD/view/ProjectView.h

@@ -23,15 +23,20 @@ class ProjectView : public QWidget
 public:
     explicit ProjectView(QWidget *parent = nullptr);
 
+    void showEvent(QShowEvent *event) override;
+    void hideEvent(QHideEvent *event) override;
+
 signals:
 
 private:
     void initialize();
     void initLayout();
-    void connectSiganlsAndSlots();
+    void connectSigalsAndSlots();
     void showRenameWidget();
 
 private:
+    bool m_initilized = false;
+
     QHBoxLayout *m_hBoxLayout = nullptr;
 
     QWidget *m_listWidget               = nullptr;

+ 11 - 2
QFD/view/UserView.cpp

@@ -1,7 +1,11 @@
 #include "UserView.h"
 
+#include "QFDIcon.h"
+#include "QFDAlert.h"
+
+#include <dbService/ClassSet.h>
+
 #include <Widgets/Button.h>
-#include <QFDIcon.h>
 
 #include <QBoxLayout>
 #include <QGridLayout>
@@ -97,5 +101,10 @@ void UserView::refresh()
 
 void UserView::slotLogout()
 {
-    emit signalLogout();
+    int code = QFUser::logout();
+    if (code == QF_CODE_SUCCEEDED) {
+        emit signalLogout();
+    } else {
+        QFDAlert::showAlertWithCode(code, this);
+    }
 }

+ 7 - 0
QFD/widgets/RegisterWidget.cpp

@@ -28,6 +28,13 @@ const QString RegisterWidget::repeatPassword() const
     return m_pw2LineEdit->text();
 }
 
+void RegisterWidget::clearInputs()
+{
+    m_accLineEdit->clear();
+    m_pwLineEdit->clear();
+    m_pw2LineEdit->clear();
+}
+
 void RegisterWidget::initialize()
 {
     m_vBoxLayout = new QVBoxLayout(this);

+ 2 - 0
QFD/widgets/RegisterWidget.h

@@ -21,6 +21,8 @@ public:
     const QString password() const;
     const QString repeatPassword() const;
 
+    void clearInputs();
+
 private:
     void initialize();
     void initLayout();

+ 3 - 3
bin/config.ini

@@ -1,9 +1,9 @@
 [USERCONFIG]
-UserName=admin
-Password=admin
+UserName=123
+Password=123456
 RememberPassword=true
 Project=无人平台能力层次分析法统计
 RoleType=0
 DbPath=/data
 TechMessaureConfig=9, 5, 4, 3, 1
-PasswordModified=
+PasswordModified=true

BIN
bin/data/qfd.db