Browse Source

登录、保存登录设置

chengxr 1 year ago
parent
commit
1ecf72e179

+ 83 - 2
QFD/common/QFDConfig.cpp

@@ -1,6 +1,87 @@
-#include "QFDConfig.h"
+#include "QFDConfig.h"
 
-QFDConfig::QFDConfig(QObject *parent) : QObject(parent)
+#include <QSettings>
+
+QSettings *QFDConfig::defaultConfig()
+{
+    static QSettings *config = nullptr;
+    if (config == nullptr) {
+        config = new QSettings("config.ini", QSettings::IniFormat);
+        config->setIniCodec("UTF-8");
+    }
+    return config;
+}
+
+const QString QFDConfig::username()
+{
+    return defaultConfig()->value("USERCONFIG/UserName", "").toString();
+}
+
+void QFDConfig::setUsername(const QString username)
+{
+    defaultConfig()->setValue("USERCONFIG/UserName", username);
+}
+
+const QString QFDConfig::password()
+{
+    return defaultConfig()->value("USERCONFIG/Password", "").toString();
+}
+
+void QFDConfig::setPassword(const QString password)
+{
+    defaultConfig()->setValue("USERCONFIG/Password", password);
+}
+
+bool QFDConfig::rememberPassword()
+{
+    return defaultConfig()->value("USERCONFIG/RememberPassword", false).toBool();
+}
+
+void QFDConfig::setRememberPassword(bool rememberPassword)
+{
+    defaultConfig()->setValue("USERCONFIG/RememberPassword", rememberPassword);
+    if (rememberPassword == false) {
+        setUsername("");
+        setPassword("");
+    }
+}
+
+int QFDConfig::roleType()
+{
+    return defaultConfig()->value("USERCONFIG/RoleType", "").toInt();
+}
+
+void QFDConfig::setRoleType(int roleType)
 {
+    defaultConfig()->setValue("USERCONFIG/RoleType", roleType);
+}
+
+const QString QFDConfig::techMessaureConfig()
+{
+    return defaultConfig()->value("USERCONFIG/TechMessaureConfig", "").toString();
+}
+
+void QFDConfig::setTechMessaureConfig(const QString techMessaureConfig)
+{
+    defaultConfig()->setValue("USERCONFIG/TechMessaureConfig", techMessaureConfig);
+}
 
+const QString QFDConfig::dbPath()
+{
+    return defaultConfig()->value("USERCONFIG/DbPath", "").toString();
+}
+
+void QFDConfig::setDbPath(const QString dbPath)
+{
+    defaultConfig()->setValue("USERCONFIG/DbPath", dbPath);
+}
+
+const QString QFDConfig::project()
+{
+    return defaultConfig()->value("USERCONFIG/Project", "").toString();
+}
+
+void QFDConfig::setProject(const QString project)
+{
+    defaultConfig()->setValue("USERCONFIG/Project", project);
 }

+ 7 - 5
QFD/common/QFDConfig.h

@@ -3,11 +3,13 @@
 
 #include <QObject>
 
+class QSettings;
+
 class QFDConfig : public QObject
 {
     Q_OBJECT
 public:
-    explicit QFDConfig(QObject *parent = nullptr);
+    static QSettings *defaultConfig();
 
     static const QString username();
     static void setUsername(QString const username);
@@ -15,11 +17,11 @@ public:
     static const QString password();
     static void setPassword(QString const password);
 
-    static const QString rememberPassword();
-    static void setRememberPassword(QString const rememberPassword);
+    static bool rememberPassword();
+    static void setRememberPassword(bool rememberPassword);
 
-    static const QString roleType();
-    static void setRoleType(QString const roleType);
+    static int roleType();
+    static void setRoleType(int roleType);
 
     static const QString techMessaureConfig();
     static void setTechMessaureConfig(QString const techMessaureConfig);

+ 8 - 0
QFD/dbService/ClassSet.cpp

@@ -140,6 +140,14 @@ int QFUser::login()
         return QF_CODE_ALREADY_LOGIN;
     }
 
+    if (userNo.isEmpty()) {
+        return QF_CODE_EMPTY_USERNAME;
+    }
+
+    if (rawPassword.isEmpty()) {
+        return QF_CODE_EMPTY_PASSWORD;
+    }
+
     if (!DBServiceSet().QueryUserByNo(this, userNo)) {
         return QF_CODE_USER_NOT_EXISTS;
     }

+ 5 - 3
QFD/dbService/ClassSet.h

@@ -9,9 +9,11 @@ const int QF_CODE_COMPLETED     = 1000;
 const int QF_CODE_ALREADY_LOGIN = 1001;
 
 const int QF_CODE_FAILED          = 2000;
-const int QF_CODE_USER_NOT_EXISTS = 2001;
-const int QF_CODE_WRONG_PASSWORD  = 2002;
-const int QF_CODE_NOT_LOGIN       = 2003;
+const int QF_CODE_EMPTY_USERNAME  = 2001;
+const int QF_CODE_EMPTY_PASSWORD  = 2002;
+const int QF_CODE_USER_NOT_EXISTS = 2003;
+const int QF_CODE_WRONG_PASSWORD  = 2004;
+const int QF_CODE_NOT_LOGIN       = 2005;
 
 /**
  * @projectName   QFD

+ 25 - 18
QFD/view/LoginView.cpp

@@ -62,41 +62,48 @@ void LoginView::connectSignalsAndSlots()
     connect(m_stackedWidget, &QStackedWidget::currentChanged, this, &LoginView::slotStackIndexChanged);
 }
 
-bool LoginView::verifyLoginInfo() const
+/// 提示登录错误信息
+void LoginView::showLoginAlert(int code) const
 {
-    bool valid = true;
+    if (code == QF_CODE_COMPLETED) {
+        return;
+    }
+
     QString msg;
 
-    if (m_loginWidget->account().isEmpty()) {
-        valid = false;
-        msg   = "账号不能为空";
-    } else if (m_loginWidget->password().isEmpty()) {
-        valid = false;
-        msg   = "密码不能为空";
+    if (code == QF_CODE_EMPTY_USERNAME) {
+        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 = "密码错误";
     }
 
-    if (!valid && !msg.isEmpty()) {
+    if (!msg.isEmpty()) {
         InfoBar::warning("提示", msg, Qt::Horizontal, false, 2000, InfoBarPosition::TOP_RIGHT, topLevelWidget());
     }
-
-    return valid;
 }
 
 void LoginView::slotLogin()
 {
-    if (verifyLoginInfo()) {
+    QFUser user(m_loginWidget->account(), m_loginWidget->password());
+    int code = user.login();
 
-        QFUser user(m_loginWidget->account(), m_loginWidget->password());
-        int code = user.login();
-        qDebug() << __FUNCTION__ << __LINE__ << code;
+    qDebug() << __FUNCTION__ << __LINE__ << "login code:" << code;
 
+    if (code == QF_CODE_COMPLETED || code == QF_CODE_ALREADY_LOGIN) {
+        m_loginWidget->saveAccountConfig();  // 登录成功后存储登录设置
         if (QFUser::currentUser() != nullptr) {
             qDebug() << __FUNCTION__ << __LINE__ << QFUser::currentUser()->userName;
         }
-
-        //        setStackIndex(m_stackedWidget->currentIndex() + 1);
-        //        emit signalLogin();
+    } else {
+        showLoginAlert(code);
     }
+
+    //        setStackIndex(m_stackedWidget->currentIndex() + 1);
+    //        emit signalLogin();
 }
 
 void LoginView::slotCancelLogin()

+ 1 - 1
QFD/view/LoginView.h

@@ -31,7 +31,7 @@ private:
     void initLayout();
     void connectSignalsAndSlots();
 
-    bool verifyLoginInfo() const;
+    void showLoginAlert(int code) const;
 
 private slots:
     void slotLogin();

+ 28 - 0
QFD/widgets/LoginWidget.cpp

@@ -1,5 +1,7 @@
 #include "LoginWidget.h"
 
+#include "QFDConfig.h"
+
 #include <Widgets/LineEdit.h>
 #include <Widgets/CheckBox.h>
 #include <Widgets/Button.h>
@@ -12,6 +14,7 @@ LoginWidget::LoginWidget(QWidget *parent) : QWidget(parent)
     initialize();
     initLayout();
     connectSignalsAndSlots();
+    loadAccount();
 }
 
 void LoginWidget::setTitle(const QString title)
@@ -29,6 +32,21 @@ const QString LoginWidget::password() const
     return m_pwLineEdit->text();
 }
 
+bool LoginWidget::rememberPassword() const
+{
+    return m_remCheckBox->isChecked();
+}
+
+void LoginWidget::saveAccountConfig() const
+{
+    bool rem = m_remCheckBox->isChecked();
+    QFDConfig::setRememberPassword(rem);
+    if (rem) {
+        QFDConfig::setUsername(m_accLineEdit->text());
+        QFDConfig::setPassword(m_pwLineEdit->text());
+    }
+}
+
 void LoginWidget::initialize()
 {
     m_vBoxLayout = new QVBoxLayout(this);
@@ -89,3 +107,13 @@ void LoginWidget::connectSignalsAndSlots()
     connect(m_loginButton, &PushButton::clicked, this, &LoginWidget::signalLogin);
     connect(m_cancelButton, &PushButton::clicked, this, &LoginWidget::signalCancel);
 }
+
+void LoginWidget::loadAccount()
+{
+    bool rem = QFDConfig::rememberPassword();
+    m_remCheckBox->setChecked(rem);
+    if (rem) {
+        m_accLineEdit->setText(QFDConfig::username());
+        m_pwLineEdit->setText(QFDConfig::password());
+    }
+}

+ 5 - 0
QFD/widgets/LoginWidget.h

@@ -22,12 +22,17 @@ public:
 
     const QString account() const;
     const QString password() const;
+    bool rememberPassword() const;
+
+    void saveAccountConfig() const;
 
 private:
     void initialize();
     void initLayout();
     void connectSignalsAndSlots();
 
+    void loadAccount();
+
 signals:
     void signalLogin();
     void signalCancel();