new intarfece
This commit is contained in:
@@ -4,8 +4,8 @@ import designer as ds
|
||||
class MainPageUser(ft.Column):
|
||||
def __init__(self, page: ft.Page):
|
||||
self._page = page
|
||||
self.spacing_groop = 6
|
||||
self.border_radius = 15
|
||||
self.spacing_groop = ds.s(6)
|
||||
self.border_radius = ds.s(15)
|
||||
|
||||
super().__init__(
|
||||
alignment=ft.MainAxisAlignment.CENTER,
|
||||
@@ -20,8 +20,8 @@ class MainPageUser(ft.Column):
|
||||
controls=[
|
||||
ft.Container(
|
||||
border_radius=self.border_radius,
|
||||
height=160,
|
||||
width=160,
|
||||
height=ds.s(160),
|
||||
width=ds.s(160),
|
||||
alignment=ft.Alignment(0.0, 0.0),
|
||||
content=ft.Column(
|
||||
alignment=ft.MainAxisAlignment.CENTER,
|
||||
@@ -31,8 +31,8 @@ class MainPageUser(ft.Column):
|
||||
controls=[
|
||||
ft.Image(
|
||||
src="icons/clipboard-question_16542596.svg",
|
||||
width=100,
|
||||
height=100,
|
||||
width=ds.s(100),
|
||||
height=ds.s(100),
|
||||
)
|
||||
]
|
||||
),
|
||||
@@ -50,8 +50,8 @@ class MainPageUser(ft.Column):
|
||||
),
|
||||
ft.Container(
|
||||
border_radius=self.border_radius,
|
||||
height=160,
|
||||
width=160,
|
||||
height=ds.s(160),
|
||||
width=ds.s(160),
|
||||
alignment=ft.Alignment(0.0, 0.0),
|
||||
content=ft.Column(
|
||||
alignment=ft.MainAxisAlignment.CENTER,
|
||||
@@ -61,8 +61,8 @@ class MainPageUser(ft.Column):
|
||||
controls=[
|
||||
ft.Image(
|
||||
src="icons/leaderboard-trophy_14227576.svg",
|
||||
width=100,
|
||||
height=100,
|
||||
width=ds.s(100),
|
||||
height=ds.s(100),
|
||||
)
|
||||
]
|
||||
),
|
||||
|
||||
@@ -7,12 +7,12 @@ import api_client
|
||||
class MyTestsPage(ft.Column):
|
||||
def __init__(self, page: ft.Page):
|
||||
self._page = page
|
||||
self._loading = ft.ProgressRing(width=40, height=40, color=ds.clolors.laer1)
|
||||
self._loading = ft.ProgressRing(width=ds.s(40), height=ds.s(40), color=ds.clolors.laer1)
|
||||
|
||||
super().__init__(
|
||||
alignment=ft.MainAxisAlignment.START,
|
||||
horizontal_alignment=ft.CrossAxisAlignment.STRETCH,
|
||||
spacing=8,
|
||||
spacing=ds.s(8),
|
||||
controls=[
|
||||
ft.Row(
|
||||
alignment=ft.MainAxisAlignment.CENTER,
|
||||
@@ -56,14 +56,14 @@ class MyTestsPage(ft.Column):
|
||||
|
||||
cards.append(
|
||||
ft.Container(
|
||||
border_radius=12,
|
||||
padding=16,
|
||||
border_radius=ds.s(12),
|
||||
padding=ds.s(16),
|
||||
bgcolor=ds.clolors.laer2,
|
||||
content=ft.Row(
|
||||
alignment=ft.MainAxisAlignment.SPACE_BETWEEN,
|
||||
controls=[
|
||||
ft.Column(
|
||||
spacing=4,
|
||||
spacing=ds.s(4),
|
||||
expand=True,
|
||||
controls=[
|
||||
ds.CastomText(
|
||||
|
||||
@@ -20,7 +20,7 @@ class PollPage(ft.Column):
|
||||
controls=[
|
||||
ft.Row(
|
||||
alignment=ft.MainAxisAlignment.CENTER,
|
||||
controls=[ft.ProgressRing(width=40, height=40, color=ds.clolors.laer1)],
|
||||
controls=[ft.ProgressRing(width=ds.s(40), height=ds.s(40), color=ds.clolors.laer1)],
|
||||
)
|
||||
],
|
||||
)
|
||||
@@ -57,8 +57,8 @@ class PollPage(ft.Column):
|
||||
tight=True,
|
||||
spacing=6,
|
||||
controls=[
|
||||
ft.Icon(ft.Icons.STOP_CIRCLE_OUTLINED, color=ds.clolors.ferst, size=16),
|
||||
ft.Text("Прервать тест", color=ds.clolors.ferst, size=13),
|
||||
ft.Icon(ft.Icons.STOP_CIRCLE_OUTLINED, color=ds.clolors.ferst, size=ds.s(16)),
|
||||
ft.Text("Прервать тест", color=ds.clolors.ferst, size=ds.s(13)),
|
||||
],
|
||||
),
|
||||
style=ft.ButtonStyle(
|
||||
@@ -70,12 +70,12 @@ class PollPage(ft.Column):
|
||||
|
||||
counter_badge = ft.Container(
|
||||
bgcolor=ds.clolors.laer2,
|
||||
border_radius=10,
|
||||
padding=ft.padding.symmetric(horizontal=20, vertical=10),
|
||||
border_radius=ds.s(10),
|
||||
padding=ft.padding.symmetric(horizontal=ds.s(20), vertical=ds.s(10)),
|
||||
content=ft.Text(
|
||||
f"Вопрос {idx + 1} из {total}",
|
||||
color=ds.clolors.ferst,
|
||||
size=14,
|
||||
size=ds.s(14),
|
||||
weight=ft.FontWeight.BOLD,
|
||||
text_align=ft.TextAlign.CENTER,
|
||||
),
|
||||
@@ -90,14 +90,14 @@ class PollPage(ft.Column):
|
||||
# --- Блок вопроса (alignment на Container, не вложенный Column) ---
|
||||
question_box = ft.Container(
|
||||
expand=True,
|
||||
border_radius=14,
|
||||
padding=24,
|
||||
border_radius=ds.s(14),
|
||||
padding=ds.s(24),
|
||||
bgcolor=ds.clolors.laer2,
|
||||
alignment=ft.Alignment(0.0, 0.0),
|
||||
content=ft.Text(
|
||||
value=q.get("text", ""),
|
||||
color=ds.clolors.ferst,
|
||||
size=16,
|
||||
size=ds.s(16),
|
||||
weight=ft.FontWeight.BOLD,
|
||||
text_align=ft.TextAlign.CENTER,
|
||||
no_wrap=False,
|
||||
@@ -113,22 +113,22 @@ class PollPage(ft.Column):
|
||||
cid = c["id"]
|
||||
is_selected = cid == selected_choice
|
||||
return ft.Container(
|
||||
border_radius=8,
|
||||
padding=ft.padding.symmetric(horizontal=12, vertical=10),
|
||||
border_radius=ds.s(8),
|
||||
padding=ft.padding.symmetric(horizontal=ds.s(12), vertical=ds.s(10)),
|
||||
bgcolor=ds.clolors.laer1 if is_selected else ds.clolors.laer3,
|
||||
content=ft.Row(
|
||||
spacing=10,
|
||||
spacing=ds.s(10),
|
||||
vertical_alignment=ft.CrossAxisAlignment.CENTER,
|
||||
controls=[
|
||||
ft.Icon(
|
||||
ft.Icons.CHECK_CIRCLE if is_selected else ft.Icons.RADIO_BUTTON_UNCHECKED,
|
||||
color=ds.clolors.ferst,
|
||||
size=20,
|
||||
size=ds.s(20),
|
||||
),
|
||||
ft.Text(
|
||||
value=c["text"],
|
||||
color=ds.clolors.ferst,
|
||||
size=14,
|
||||
size=ds.s(14),
|
||||
expand=True,
|
||||
no_wrap=False,
|
||||
),
|
||||
@@ -143,12 +143,12 @@ class PollPage(ft.Column):
|
||||
tile.on_click = lambda e, _qid=q["id"]: self._select_answer(_qid, e.control.data)
|
||||
choice_tiles.append(tile)
|
||||
|
||||
choices_col = ft.Column(controls=choice_tiles, spacing=6)
|
||||
choices_col = ft.Column(controls=choice_tiles, spacing=ds.s(6))
|
||||
|
||||
self.controls = [
|
||||
ft.Column(
|
||||
expand=True,
|
||||
spacing=12,
|
||||
spacing=ds.s(12),
|
||||
controls=[
|
||||
nav_row,
|
||||
question_box,
|
||||
@@ -179,7 +179,7 @@ class PollPage(ft.Column):
|
||||
content=ft.Text(
|
||||
"Завершить тест →",
|
||||
color=ds.clolors.ferst,
|
||||
size=16,
|
||||
size=ds.s(16),
|
||||
weight=ft.FontWeight.BOLD,
|
||||
),
|
||||
data="__finish__",
|
||||
@@ -250,7 +250,7 @@ class PollPage(ft.Column):
|
||||
self.controls = [
|
||||
ft.Row(
|
||||
alignment=ft.MainAxisAlignment.CENTER,
|
||||
controls=[ft.ProgressRing(width=48, height=48, color=ds.clolors.laer1)],
|
||||
controls=[ft.ProgressRing(width=ds.s(48), height=ds.s(48), color=ds.clolors.laer1)],
|
||||
)
|
||||
]
|
||||
self.update()
|
||||
@@ -272,7 +272,7 @@ class PollPage(ft.Column):
|
||||
alignment=ft.MainAxisAlignment.CENTER,
|
||||
horizontal_alignment=ft.CrossAxisAlignment.CENTER,
|
||||
controls=[
|
||||
ft.Icon(ft.Icons.ERROR_OUTLINE, size=48, color=ds.clolors.laer1),
|
||||
ft.Icon(ft.Icons.ERROR_OUTLINE, size=ds.s(48), color=ds.clolors.laer1),
|
||||
ds.CastomText(text=error, size=14),
|
||||
ds.CastomButton(
|
||||
text="Попробовать снова",
|
||||
@@ -292,7 +292,7 @@ class PollPage(ft.Column):
|
||||
)
|
||||
|
||||
success_controls: list[ft.Control] = [
|
||||
ft.Icon(ft.Icons.CHECK_CIRCLE_OUTLINE, size=48, color=ds.clolors.laer1),
|
||||
ft.Icon(ft.Icons.CHECK_CIRCLE_OUTLINE, size=ds.s(48), color=ds.clolors.laer1),
|
||||
ds.CastomText(text="Тест пройден!", size=20, weight=ft.FontWeight.BOLD),
|
||||
]
|
||||
|
||||
@@ -307,7 +307,7 @@ class PollPage(ft.Column):
|
||||
content=ft.Image(
|
||||
src=data_uri,
|
||||
expand=True,
|
||||
height=380,
|
||||
height=ds.s(380),
|
||||
fit=ft.BoxFit.CONTAIN,
|
||||
),
|
||||
)
|
||||
@@ -338,14 +338,14 @@ class PollPage(ft.Column):
|
||||
|
||||
self.controls = [
|
||||
ft.Container(
|
||||
padding=20,
|
||||
padding=ds.s(20),
|
||||
bgcolor=ds.clolors.laer3,
|
||||
border_radius=16,
|
||||
border_radius=ds.s(16),
|
||||
expand=True,
|
||||
content=ft.Column(
|
||||
alignment=ft.MainAxisAlignment.CENTER,
|
||||
horizontal_alignment=ft.CrossAxisAlignment.CENTER,
|
||||
spacing=16,
|
||||
spacing=ds.s(16),
|
||||
controls=success_controls,
|
||||
),
|
||||
)
|
||||
|
||||
@@ -31,11 +31,11 @@ class ProfilePage(ft.Column):
|
||||
hint_text="Загрузка...",
|
||||
)
|
||||
|
||||
self._loading = ft.ProgressRing(visible=False, width=24, height=24)
|
||||
self._status = ft.Text(value="", size=14)
|
||||
self._loading = ft.ProgressRing(visible=False, width=ds.s(24), height=ds.s(24))
|
||||
self._status = ft.Text(value="", size=ds.s(14))
|
||||
|
||||
super().__init__(
|
||||
spacing=16,
|
||||
spacing=ds.s(16),
|
||||
controls=[
|
||||
ds.CastomText(
|
||||
text="Редактировать профиль",
|
||||
@@ -47,7 +47,7 @@ class ProfilePage(ft.Column):
|
||||
self._org_dropdown,
|
||||
self._group_dropdown,
|
||||
ft.Row(
|
||||
spacing=12,
|
||||
spacing=ds.s(12),
|
||||
controls=[
|
||||
ds.CastomButton(text="Сохранить", on_click=self._save),
|
||||
self._loading,
|
||||
|
||||
@@ -8,12 +8,12 @@ class ResponsePage(ft.Column):
|
||||
def __init__(self, page: ft.Page, response_id: str):
|
||||
self._page = page
|
||||
self._response_id = response_id
|
||||
self._loading = ft.ProgressRing(width=40, height=40, color=ds.clolors.laer1)
|
||||
self._loading = ft.ProgressRing(width=ds.s(40), height=ds.s(40), color=ds.clolors.laer1)
|
||||
|
||||
super().__init__(
|
||||
alignment=ft.MainAxisAlignment.START,
|
||||
horizontal_alignment=ft.CrossAxisAlignment.STRETCH,
|
||||
spacing=8,
|
||||
spacing=ds.s(8),
|
||||
controls=[
|
||||
ft.Row(alignment=ft.MainAxisAlignment.CENTER, controls=[self._loading])
|
||||
],
|
||||
@@ -43,8 +43,8 @@ class ResponsePage(ft.Column):
|
||||
|
||||
controls: list[ft.Control] = [
|
||||
ft.Container(
|
||||
padding=ft.padding.only(bottom=8),
|
||||
content=ft.Column(spacing=4, controls=[
|
||||
padding=ft.padding.only(bottom=ds.s(8)),
|
||||
content=ft.Column(spacing=ds.s(4), controls=[
|
||||
ds.CastomText(text=poll.get("title", ""), size=20, weight=ft.FontWeight.BOLD),
|
||||
ds.CastomText(text=f"Пройден: {submitted_at}", size=12),
|
||||
]),
|
||||
@@ -61,12 +61,12 @@ class ResponsePage(ft.Column):
|
||||
await self._page.launch_url(_url)
|
||||
|
||||
controls.append(ft.Container(
|
||||
border_radius=16,
|
||||
padding=12,
|
||||
border_radius=ds.s(16),
|
||||
padding=ds.s(12),
|
||||
bgcolor=ds.clolors.laer3,
|
||||
content=ft.Column(
|
||||
horizontal_alignment=ft.CrossAxisAlignment.CENTER,
|
||||
spacing=10,
|
||||
spacing=ds.s(10),
|
||||
controls=[
|
||||
ds.CastomText(text="Результат", size=16, weight=ft.FontWeight.BOLD),
|
||||
ft.Container(
|
||||
@@ -74,7 +74,7 @@ class ResponsePage(ft.Column):
|
||||
content=ft.Image(
|
||||
src=data_uri,
|
||||
expand=True,
|
||||
height=380,
|
||||
height=ds.s(380),
|
||||
fit=ft.BoxFit.CONTAIN,
|
||||
),
|
||||
),
|
||||
@@ -103,23 +103,23 @@ class ResponsePage(ft.Column):
|
||||
for c in q.get("choices", []):
|
||||
is_selected = c["id"] == answer.get("choice_id")
|
||||
choice_rows.append(ft.Container(
|
||||
border_radius=8,
|
||||
padding=ft.padding.symmetric(horizontal=12, vertical=6),
|
||||
border_radius=ds.s(8),
|
||||
padding=ft.padding.symmetric(horizontal=ds.s(12), vertical=ds.s(6)),
|
||||
bgcolor=ds.clolors.laer1 if is_selected else ds.clolors.laer3,
|
||||
content=ft.Row(spacing=8, controls=[
|
||||
content=ft.Row(spacing=ds.s(8), controls=[
|
||||
ft.Icon(
|
||||
ft.Icons.CHECK_CIRCLE if is_selected else ft.Icons.RADIO_BUTTON_UNCHECKED,
|
||||
color=ds.clolors.ferst, size=16,
|
||||
color=ds.clolors.ferst, size=ds.s(16),
|
||||
),
|
||||
ft.Container(expand=True, content=ds.CastomText(text=c["text"], size=13)),
|
||||
]),
|
||||
))
|
||||
|
||||
answer_cards.append(ft.Container(
|
||||
border_radius=12,
|
||||
padding=16,
|
||||
border_radius=ds.s(12),
|
||||
padding=ds.s(16),
|
||||
bgcolor=ds.clolors.laer2,
|
||||
content=ft.Column(spacing=8, controls=[
|
||||
content=ft.Column(spacing=ds.s(8), controls=[
|
||||
ds.CastomText(text=q.get("text", ""), size=14, weight=ft.FontWeight.BOLD),
|
||||
*choice_rows,
|
||||
]),
|
||||
|
||||
@@ -6,7 +6,7 @@ import api_client
|
||||
class TakeTestPage(ft.Column):
|
||||
def __init__(self, page: ft.Page):
|
||||
self._page = page
|
||||
self._loading = ft.ProgressRing(width=40, height=40, color=ds.clolors.laer1)
|
||||
self._loading = ft.ProgressRing(width=ds.s(40), height=ds.s(40), color=ds.clolors.laer1)
|
||||
super().__init__(
|
||||
alignment=ft.MainAxisAlignment.CENTER,
|
||||
horizontal_alignment=ft.CrossAxisAlignment.CENTER,
|
||||
@@ -27,11 +27,11 @@ class TakeTestPage(ft.Column):
|
||||
def _render_polls(self, polls: list):
|
||||
self.controls = [
|
||||
ft.Container(
|
||||
border_radius=12,
|
||||
padding=16,
|
||||
border_radius=ds.s(12),
|
||||
padding=ds.s(16),
|
||||
bgcolor=ds.clolors.laer2,
|
||||
content=ft.Column(
|
||||
spacing=6,
|
||||
spacing=ds.s(6),
|
||||
controls=[
|
||||
ds.CastomText(
|
||||
text=poll.get("title", "—"),
|
||||
|
||||
Reference in New Issue
Block a user