next_main

This commit is contained in:
jze9
2025-04-08 22:22:30 +05:00
parent a7e85b949c
commit 788bb5b92c
13 changed files with 994 additions and 41 deletions

View File

@@ -1,6 +1,15 @@
def main():
print("Hello from app!")
import flet as ft
import src.view as view
def main(page: ft.Page):
page.title = "COPP"
def Pageloading(route):
print(page.route)
page.views.clear()
page.views.append(view.ViewsHendler(page=page)[page.route])
page.update()
page.on_route_change = Pageloading
page.go("/")
if __name__ == "__main__":
main()
ft.app(main)

View File

@@ -0,0 +1,14 @@
import flet as ft
from src.base_models.colour import color
from flet.core.types import OptionalControlEventCallable
class Button(ft.ElevatedButton):
def __init__(self, width:int=150, height:int=40, text:str="",color:str=color[3], on_click: OptionalControlEventCallable = None,):
super().__init__(
width=width,
height=height,
text=text,
#color=color,
bgcolor=color,
on_click=on_click,
)

View File

@@ -0,0 +1,7 @@
color = [
"#f0ece2",
"#dfd3c3",
"#c7b198",
"#596e79",
"#7E93A0FF"
]

View File

@@ -0,0 +1,13 @@
import flet as ft
from src.base_models.colour import color
class TextField(ft.TextField):
def __init__(self, width:int=250,height:int=40,password:bool=False,bgcolor:str=color[3]):
super().__init__(
width=width,
height=height,
password=password
)

View File

@@ -1,26 +0,0 @@
import flet as ft
def main(page: ft.Page):
counter = ft.Text("0", size=50, data=0)
def increment_click(e):
counter.data += 1
counter.value = str(counter.data)
counter.update()
page.floating_action_button = ft.FloatingActionButton(
icon=ft.Icons.ADD, on_click=increment_click
)
page.add(
ft.SafeArea(
ft.Container(
counter,
alignment=ft.alignment.center,
),
expand=True,
)
)
ft.app(main)

70
app/src/pages/login.py Normal file
View File

@@ -0,0 +1,70 @@
import flet as ft
from src.base_models.text_fuild import TextField
from src.base_models.colour import color
from src.base_models.button import Button
from src.storage.user_data import user_login
import requests
from requests.exceptions import RequestException
class LoginPage(ft.View):
def __init__(self,page:ft.Page,route:str,bgcolor:str):
self.page = page
self.login = TextField()
self.password = TextField(password=True)
next_button = Button(text="next",on_click=self.button_login,)
super().__init__(
route=route,
bgcolor=bgcolor,
vertical_alignment=ft.MainAxisAlignment.CENTER,
horizontal_alignment=ft.CrossAxisAlignment.CENTER,
controls=[
ft.Row(height=5),
ft.Row(
height=30,
controls=[ft.Text(size=25,value="COPP",color=color[3])],
alignment=ft.MainAxisAlignment.CENTER
),
ft.Row(controls=[self.login],alignment=ft.MainAxisAlignment.CENTER),
ft.Row(controls=[self.password],alignment=ft.MainAxisAlignment.CENTER),
ft.Row(controls=[next_button],alignment=ft.MainAxisAlignment.CENTER),
]
)
def button_login(self,e):
login_return = self.login_user(login=self.login.value,password=self.password.value)
if login_return["id"] == 0:
self.page.open(ft.SnackBar(ft.Text(f"Неверный логин или пароль")))
self.page.update
else:
user_login.load_user(
id=login_return["id"],
name_poo=login_return["name_poo"],
inn=login_return["inn"],
mail=login_return["mail"]
)
self.page.go("/main")
def login_user(self,login:str,password:str) -> dict:
url = "http://localhost:8001/api-data-base/login"
headers = {
"accept": "application/json",
"Content-Type": "application/json"
}
payload = {
"login": login,
"password": password
}
try:
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status() # Вызовет исключение при ошибке HTTP
return response.json()
except RequestException as e:
print(f"Ошибка запроса: {e}")
return {"error": str(e)}
except ValueError as e:
print(f"Ошибка парсинга JSON: {e}")
return {"error": "Invalid JSON response"}

26
app/src/pages/main.py Normal file
View File

@@ -0,0 +1,26 @@
import flet as ft
from src.base_models.text_fuild import TextField
from src.base_models.colour import color
from src.base_models.button import Button
import requests
from requests.exceptions import RequestException
class MainPage(ft.View):
def __init__(self,page:ft.Page,route:str,bgcolor:str):
self.page = page
super().__init__(
route=route,
bgcolor=bgcolor,
vertical_alignment=ft.MainAxisAlignment.CENTER,
horizontal_alignment=ft.CrossAxisAlignment.CENTER,
controls=[
]
)

10
app/src/view.py Normal file
View File

@@ -0,0 +1,10 @@
import flet as ft
from src.pages.login import LoginPage
from src.pages.main import MainPage
from src.base_models.colour import color
def ViewsHendler(page:ft.Page):
return {
"/":LoginPage(page=page,route='/',bgcolor=color[2]),
"/main":MainPage(page=page,route='/main',bgcolor=color[2]),
}