fix install diogram

This commit is contained in:
2026-04-02 12:00:11 +05:00
parent 22bbc3a0a6
commit 8a189e310b
23 changed files with 1212 additions and 189 deletions

View File

@@ -1,8 +1,7 @@
import base64
import flet as ft
import base64
import designer as ds
import api_client
from radar_chart import RadarChart
class ResponsePage(ft.Column):
@@ -34,10 +33,11 @@ class ResponsePage(ft.Column):
return
radar = await api_client.get_radar_result(self._response_id)
self._render(response, poll, radar)
svg_bytes = await api_client.get_radar_svg_bytes(self._response_id) if radar and radar.get("image_url") else None
self._render(response, poll, radar, svg_bytes)
self.update()
def _render(self, response: dict, poll: dict, radar: dict | None):
def _render(self, response: dict, poll: dict, radar: dict | None, svg_bytes: bytes | None = None):
questions_map = {q["id"]: q for q in poll.get("questions", [])}
submitted_at = response["submitted_at"][:19].replace("T", " ")
@@ -52,20 +52,13 @@ class ResponsePage(ft.Column):
]
# ── Паутинная диаграмма ──────────────────────────────────────────────
if radar and radar.get("items"):
items = sorted(
radar["items"],
key=lambda x: (x.get("dimension_position") is None, x.get("dimension_position", 0)),
)
actual_max = max((it["value"] for it in items), default=1.0)
max_val = max(actual_max, 14.0)
if svg_bytes and radar and radar.get("image_url"):
b64 = base64.b64encode(svg_bytes).decode()
data_uri = f"data:image/svg+xml;base64,{b64}"
download_url = api_client.build_radar_download_url(self._page.url, self._response_id)
async def _download(_evt, _rid=self._response_id):
svg_bytes = await api_client.get_radar_svg_bytes(_rid)
if svg_bytes:
b64 = base64.b64encode(svg_bytes).decode()
uri = f"data:image/svg+xml;base64,{b64}"
self._page.launch_url(uri, web_window_name="_blank")
async def _download(_evt, _url=download_url):
await self._page.launch_url(_url)
controls.append(ft.Container(
border_radius=16,
@@ -76,21 +69,22 @@ class ResponsePage(ft.Column):
spacing=10,
controls=[
ds.CastomText(text="Результат", size=16, weight=ft.FontWeight.BOLD),
ft.Row(
alignment=ft.MainAxisAlignment.CENTER,
controls=[RadarChart(items, max_val)],
ft.Container(
expand=True,
content=ft.Image(
src=data_uri,
expand=True,
height=380,
fit=ft.BoxFit.CONTAIN,
),
),
ft.Row(
alignment=ft.MainAxisAlignment.CENTER,
controls=[
ft.ElevatedButton(
ds.CastomIconButton(
text="Сохранить диаграмму",
icon=ft.Icons.DOWNLOAD,
on_click=_download,
style=ft.ButtonStyle(
color=ds.clolors.ferst,
bgcolor=ds.clolors.laer2,
),
)
],
),
@@ -117,7 +111,7 @@ class ResponsePage(ft.Column):
ft.Icons.CHECK_CIRCLE if is_selected else ft.Icons.RADIO_BUTTON_UNCHECKED,
color=ds.clolors.ferst, size=16,
),
ds.CastomText(text=c["text"], size=13),
ft.Container(expand=True, content=ds.CastomText(text=c["text"], size=13)),
]),
))