template creation
This commit is contained in:
parent
3c2137da2b
commit
c0727d7b59
6 changed files with 464 additions and 293 deletions
65
composer.py
65
composer.py
|
|
@ -1,12 +1,15 @@
|
|||
from src.windows import LoginWindow, AdminWindow, ClientWindow
|
||||
from src.windows import LoginWindow, AdminWindow, ClientWindow, ManagerWindow
|
||||
from src.objects import User, Rights
|
||||
from src.db import DB_AUTH_HARDCODED as config
|
||||
from src.db import DB_CONFIG
|
||||
|
||||
from PyQt6.QtWidgets import QApplication
|
||||
from PyQt6.QtCore import QObject, pyqtSlot, pyqtSignal
|
||||
from PyQt6.QtSql import QSqlDatabase
|
||||
|
||||
|
||||
class Composer(QObject):
|
||||
"""Управляет навигацией между окнами приложения"""
|
||||
|
||||
render_request = pyqtSignal(User)
|
||||
|
||||
def __init__(self):
|
||||
|
|
@ -17,56 +20,64 @@ class Composer(QObject):
|
|||
self.render_request.connect(self._render)
|
||||
|
||||
def _init_db(self):
|
||||
"""Инициализация подключения к базе данных"""
|
||||
self._db = QSqlDatabase("QPSQL")
|
||||
self._db.setDatabaseName(config['dbname'])
|
||||
self._db.setPort(config['port'])
|
||||
self._db.setHostName(config['host'])
|
||||
self._db.setUserName(config['user'])
|
||||
self._db.setPassword(config['password'])
|
||||
self._db.open()
|
||||
self._db.setDatabaseName(DB_CONFIG['dbname'])
|
||||
self._db.setPort(DB_CONFIG['port'])
|
||||
self._db.setHostName(DB_CONFIG['host'])
|
||||
self._db.setUserName(DB_CONFIG['user'])
|
||||
self._db.setPassword(DB_CONFIG['password'])
|
||||
|
||||
if not self._db.open():
|
||||
raise Exception(f"Не получилось подключиться к базе данных: {self._db.lastError().text()}")
|
||||
|
||||
@pyqtSlot(User)
|
||||
def _render(self, user: User):
|
||||
"""Маршрутизация пользователя на основе его роли"""
|
||||
match user.rights:
|
||||
case Rights.ADMIN:
|
||||
self._admin_fabric()
|
||||
case Rights.MANAGER:
|
||||
pass
|
||||
self._manager_fabric()
|
||||
case Rights.CLIENT:
|
||||
self._client_fabric(user)
|
||||
case Rights.GUEST:
|
||||
self._guest_fabric()
|
||||
|
||||
def _login_fabric(self):
|
||||
"""Создание и отображение окна входа"""
|
||||
self.wlogin = LoginWindow(self, self._db)
|
||||
|
||||
if self._current:
|
||||
self._current.close()
|
||||
|
||||
self.wlogin.show()
|
||||
|
||||
self._current = self.wlogin
|
||||
self._switch_window(self.wlogin)
|
||||
|
||||
def _admin_fabric(self):
|
||||
"""Создание и отображение панели администратора"""
|
||||
self.wadmin = AdminWindow(self, self._db)
|
||||
self._switch_window(self.wadmin)
|
||||
|
||||
if self._current:
|
||||
self._current.close()
|
||||
|
||||
self.wadmin.show()
|
||||
|
||||
self._current = self.wadmin
|
||||
def _manager_fabric(self):
|
||||
"""Создание и отображение панели менеджера"""
|
||||
self.wmanager = ManagerWindow(self, self._db)
|
||||
self._switch_window(self.wmanager)
|
||||
|
||||
def _client_fabric(self, user: User):
|
||||
"""Создание и отображение панели клиента"""
|
||||
self.wclient = ClientWindow(self, self._db, user)
|
||||
self._switch_window(self.wclient)
|
||||
|
||||
def _guest_fabric(self):
|
||||
"""Создание и отображение панели гостя"""
|
||||
# TODO: Реализовать GuestWindow если нужен режим гостя
|
||||
pass
|
||||
|
||||
def _switch_window(self, new_window):
|
||||
"""Переключение между окнами"""
|
||||
if self._current:
|
||||
self._current.close()
|
||||
|
||||
self.wclient.show()
|
||||
|
||||
self._current = self.wclient
|
||||
new_window.show()
|
||||
self._current = new_window
|
||||
|
||||
def run(self):
|
||||
"""Запуск приложения"""
|
||||
import sys
|
||||
self._login_fabric()
|
||||
self._current.show()
|
||||
sys.exit(self._app.exec())
|
||||
Loading…
Add table
Add a link
Reference in a new issue