109 lines
4.1 KiB
C++
109 lines
4.1 KiB
C++
#include "loginwindow.h"
|
|
#include "../../services/database.h"
|
|
#include <QMessageBox>
|
|
#include <QPushButton>
|
|
|
|
LoginWindow::LoginWindow(QWidget* parent)
|
|
: QDialog(parent), isRegistering(false)
|
|
{
|
|
setWindowTitle("Авторизация - Система вокзала");
|
|
setFixedSize(400, 280);
|
|
setModal(true);
|
|
|
|
QVBoxLayout* mainLayout = new QVBoxLayout(this);
|
|
mainLayout->setSpacing(15);
|
|
mainLayout->setContentsMargins(30, 30, 30, 30);
|
|
|
|
QLabel* titleLabel = new QLabel("Система учета вокзала", this);
|
|
titleLabel->setAlignment(Qt::AlignCenter);
|
|
titleLabel->setStyleSheet("font-size: 18px; font-weight: bold;");
|
|
mainLayout->addWidget(titleLabel);
|
|
|
|
QLabel* userLabel = new QLabel("Логин:", this);
|
|
m_usernameEdit = new QLineEdit(this);
|
|
m_usernameEdit->setPlaceholderText("Введите логин");
|
|
mainLayout->addWidget(userLabel);
|
|
mainLayout->addWidget(m_usernameEdit);
|
|
|
|
QLabel* passLabel = new QLabel("Пароль:", this);
|
|
m_passwordEdit = new QLineEdit(this);
|
|
m_passwordEdit->setPlaceholderText("Введите пароль");
|
|
m_passwordEdit->setEchoMode(QLineEdit::Password);
|
|
mainLayout->addWidget(passLabel);
|
|
mainLayout->addWidget(m_passwordEdit);
|
|
|
|
m_messageLabel = new QLabel(this);
|
|
m_messageLabel->setAlignment(Qt::AlignCenter);
|
|
m_messageLabel->setStyleSheet("color: red;");
|
|
mainLayout->addWidget(m_messageLabel);
|
|
|
|
QHBoxLayout* btnLayout = new QHBoxLayout();
|
|
m_loginBtn = new QPushButton("Войти", this);
|
|
m_registerBtn = new QPushButton("Регистрация", this);
|
|
btnLayout->addWidget(m_loginBtn);
|
|
btnLayout->addWidget(m_registerBtn);
|
|
mainLayout->addLayout(btnLayout);
|
|
|
|
connect(m_loginBtn, &QPushButton::clicked, this, &LoginWindow::onLoginClicked);
|
|
connect(m_registerBtn, &QPushButton::clicked, this, &LoginWindow::onRegisterClicked);
|
|
}
|
|
|
|
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();
|
|
}
|
|
}
|
|
|
|
void LoginWindow::onRegisterClicked() {
|
|
if (!isRegistering) {
|
|
isRegistering = true;
|
|
m_loginBtn->setText("Зарегистрироваться");
|
|
m_registerBtn->setText("Отмена");
|
|
m_messageLabel->setText("Регистрация нового пользователя");
|
|
m_messageLabel->setStyleSheet("color: green;");
|
|
} else {
|
|
QString username = m_usernameEdit->text().trimmed();
|
|
QString password = m_passwordEdit->text();
|
|
|
|
if (username.isEmpty() || password.isEmpty()) {
|
|
m_messageLabel->setText("Заполните все поля!");
|
|
m_messageLabel->setStyleSheet("color: red;");
|
|
return;
|
|
}
|
|
|
|
if (password.length() < 4) {
|
|
m_messageLabel->setText("Пароль должен быть >= 4 символов!");
|
|
m_messageLabel->setStyleSheet("color: red;");
|
|
return;
|
|
}
|
|
|
|
if (Database::instance().addUser(username, password, "cashier")) {
|
|
QMessageBox::information(this, "Успех", "Пользователь зарегистрирован!");
|
|
isRegistering = false;
|
|
m_loginBtn->setText("Войти");
|
|
m_registerBtn->setText("Регистрация");
|
|
m_messageLabel->setText("");
|
|
m_messageLabel->setStyleSheet("color: red;");
|
|
m_usernameEdit->clear();
|
|
m_passwordEdit->clear();
|
|
} else {
|
|
m_messageLabel->setText("Ошибка: пользователь уже существует!");
|
|
m_messageLabel->setStyleSheet("color: red;");
|
|
}
|
|
}
|
|
}
|