Files
StationManager/loginwindow.cpp
2026-04-05 16:14:54 +03:00

108 lines
4.1 KiB
C++

#include "loginwindow.h"
#include "database.h"
#include <QMessageBox>
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;");
}
}
}