- tweak: code management
This commit is contained in:
108
src/userinterfaces/windows/loginwindow.cpp
Normal file
108
src/userinterfaces/windows/loginwindow.cpp
Normal file
@@ -0,0 +1,108 @@
|
||||
#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;");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user