114 lines
4.0 KiB
C++
114 lines
4.0 KiB
C++
#include "loginwindow.h"
|
|
#include "../../services/database.h"
|
|
#include <QMessageBox>
|
|
#include <QPushButton>
|
|
|
|
LoginWindow::LoginWindow(QWidget* parent)
|
|
: QDialog(parent)
|
|
{
|
|
setWindowTitle("Авторизация - Система вокзала");
|
|
setFixedSize(700, 500);
|
|
setModal(true);
|
|
|
|
QHBoxLayout* mainLayout = new QHBoxLayout(this);
|
|
mainLayout->setSpacing(0);
|
|
mainLayout->setContentsMargins(0, 0, 0, 0);
|
|
|
|
m_bannerFrame = new QFrame(this);
|
|
m_bannerFrame->setObjectName("bannerFrame");
|
|
m_bannerFrame->setFixedWidth(280);
|
|
QVBoxLayout* bannerLayout = new QVBoxLayout(m_bannerFrame);
|
|
bannerLayout->setContentsMargins(20, 40, 20, 40);
|
|
bannerLayout->setAlignment(Qt::AlignCenter);
|
|
|
|
QLabel* logoIcon = new QLabel("🚂", m_bannerFrame);
|
|
logoIcon->setObjectName("bannerLogo");
|
|
logoIcon->setAlignment(Qt::AlignCenter);
|
|
bannerLayout->addWidget(logoIcon);
|
|
|
|
QLabel* titleBanner = new QLabel("Система учета\nжелезнодорожного\nвокзала", m_bannerFrame);
|
|
titleBanner->setObjectName("bannerTitle");
|
|
titleBanner->setAlignment(Qt::AlignCenter);
|
|
bannerLayout->addWidget(titleBanner);
|
|
|
|
bannerLayout->addSpacing(20);
|
|
|
|
bannerLayout->addStretch();
|
|
|
|
QLabel* versionLabel = new QLabel("Версия 0.1", m_bannerFrame);
|
|
versionLabel->setObjectName("bannerVersion");
|
|
versionLabel->setAlignment(Qt::AlignCenter);
|
|
bannerLayout->addWidget(versionLabel);
|
|
|
|
mainLayout->addWidget(m_bannerFrame);
|
|
|
|
QFrame* formFrame = new QFrame(this);
|
|
formFrame->setObjectName("formFrame");
|
|
QVBoxLayout* formLayout = new QVBoxLayout(formFrame);
|
|
formLayout->setContentsMargins(50, 50, 50, 50);
|
|
formLayout->setAlignment(Qt::AlignCenter);
|
|
|
|
QLabel* formTitle = new QLabel("Вход в систему", formFrame);
|
|
formTitle->setObjectName("formTitle");
|
|
formTitle->setAlignment(Qt::AlignCenter);
|
|
formLayout->addWidget(formTitle);
|
|
|
|
QLabel* userLabel = new QLabel("Логин", formFrame);
|
|
userLabel->setObjectName("userLabel");
|
|
userLabel->setProperty("class", "formLabel");
|
|
formLayout->addWidget(userLabel);
|
|
|
|
m_usernameEdit = new QLineEdit(formFrame);
|
|
m_usernameEdit->setObjectName("usernameEdit");
|
|
m_usernameEdit->setProperty("class", "formInput");
|
|
m_usernameEdit->setPlaceholderText("Введите логин");
|
|
formLayout->addWidget(m_usernameEdit);
|
|
formLayout->addSpacing(15);
|
|
|
|
QLabel* passLabel = new QLabel("Пароль", formFrame);
|
|
passLabel->setObjectName("passLabel");
|
|
passLabel->setProperty("class", "formLabel");
|
|
formLayout->addWidget(passLabel);
|
|
|
|
m_passwordEdit = new QLineEdit(formFrame);
|
|
m_passwordEdit->setObjectName("passwordEdit");
|
|
m_passwordEdit->setProperty("class", "formInput");
|
|
m_passwordEdit->setPlaceholderText("Введите пароль");
|
|
m_passwordEdit->setEchoMode(QLineEdit::Password);
|
|
formLayout->addWidget(m_passwordEdit);
|
|
formLayout->addSpacing(15);
|
|
|
|
m_messageLabel = new QLabel(formFrame);
|
|
m_messageLabel->setObjectName("messageLabel");
|
|
m_messageLabel->setAlignment(Qt::AlignCenter);
|
|
formLayout->addWidget(m_messageLabel);
|
|
|
|
m_loginBtn = new QPushButton("Войти", formFrame);
|
|
m_loginBtn->setObjectName("loginBtn");
|
|
formLayout->addWidget(m_loginBtn);
|
|
|
|
mainLayout->addWidget(formFrame);
|
|
|
|
connect(m_loginBtn, &QPushButton::clicked, this, &LoginWindow::onLoginClicked);
|
|
}
|
|
|
|
void LoginWindow::onLoginClicked() {
|
|
QString username = m_usernameEdit->text().trimmed();
|
|
QString password = m_passwordEdit->text();
|
|
|
|
if (username.isEmpty() || password.isEmpty()) {
|
|
m_messageLabel->setText("Заполните все поля!");
|
|
return;
|
|
}
|
|
|
|
if (Database::instance().authenticate(username, password)) {
|
|
User user = Database::instance().getUser(username);
|
|
m_username = user.username;
|
|
m_role = user.role;
|
|
accept();
|
|
} else {
|
|
m_messageLabel->setText("Неверный логин или пароль!");
|
|
m_passwordEdit->clear();
|
|
}
|
|
}
|