import flet as ft import designer as ds from info import AuthService class LoginView(ft.View): def __init__(self, page: ft.Page): self._auth = AuthService(page) self.pageS = page self._username = ds.CastomTextField_input( label="Логин", hint_text="Введите логин...", prefix_icon=ft.Icons.PERSON, ) self._password = ds.CastomTextField_input( label="Пароль", hint_text="Введите пароль...", prefix_icon=ft.Icons.LOCK, password=True, can_reveal_password=True, ) self._error = ft.Text("", color=ft.Colors.RED_400, size=ds.s(14), visible=False) self._btn = ds.CastomButton( text="Войти", on_click=lambda e: page.run_task(self._do_login), ) self._reg_link = ft.TextButton( content=ft.Text("Нет аккаунта? Зарегистрироваться", color=ds.clolors.ferst, size=ds.s(14)), on_click=self.open_dialog, ) super().__init__( route="/login", bgcolor=ds.clolors.background, horizontal_alignment=ft.CrossAxisAlignment.STRETCH, vertical_alignment=ft.MainAxisAlignment.CENTER, padding=ft.padding.symmetric(horizontal=ds.s(16), vertical=ds.s(24)), scroll=ft.ScrollMode.AUTO, ) self.controls = [ ft.Text("ЦОПП", color=ds.clolors.ferst, size=ds.s(30), weight=ft.FontWeight.BOLD, text_align=ft.TextAlign.CENTER), ft.Container(height=ds.s(8)), ft.Text("Это проект цопп по проведению иследовательских тестирований", color=ds.clolors.ferst, size=ds.s(16), text_align=ft.TextAlign.CENTER), ft.Container(height=ds.s(24)), ft.Container( padding=ft.padding.all(ds.s(24)), bgcolor=ds.clolors.laer3, border_radius=ds.s(16), alignment=ft.Alignment.CENTER, content=ft.Column( spacing=ds.s(16), controls=[ self._username, self._password, self._error, self._btn, self._reg_link, ], ), ), ] def open_dialog(self, e): self.dialog = ds.AlterDiaalogApproval( on_accept=lambda: self.pageS.run_task(self.pageS.push_route, "/reg") ) self.dialog.open = True self.pageS.overlay.append(self.dialog) self.pageS.update() async def _do_login(self): username = self._username.value.strip() password = self._password.value if not username or not password: self._show_error("Заполните логин и пароль") return self._btn.disabled = True self._error.visible = False self.update() error = await self._auth.login(username, password) if error: self._btn.disabled = False self._show_error(error) else: # Успешный вход — переходим на страницу пользователя url_key = self.page.session.store.get("url_key") await self.page.push_route(f"/user/{url_key}") def _show_error(self, message: str): self._error.value = message self._error.visible = True self.update()