next_main
This commit is contained in:
17
app/main.py
17
app/main.py
@@ -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)
|
||||
14
app/src/base_models/button.py
Normal file
14
app/src/base_models/button.py
Normal 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,
|
||||
)
|
||||
7
app/src/base_models/colour.py
Normal file
7
app/src/base_models/colour.py
Normal file
@@ -0,0 +1,7 @@
|
||||
color = [
|
||||
"#f0ece2",
|
||||
"#dfd3c3",
|
||||
"#c7b198",
|
||||
"#596e79",
|
||||
"#7E93A0FF"
|
||||
]
|
||||
13
app/src/base_models/text_fuild.py
Normal file
13
app/src/base_models/text_fuild.py
Normal 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
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -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
70
app/src/pages/login.py
Normal 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
26
app/src/pages/main.py
Normal 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
10
app/src/view.py
Normal 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]),
|
||||
}
|
||||
Reference in New Issue
Block a user