new web ract

This commit is contained in:
jze9
2026-05-15 03:31:28 +05:00
parent de78624495
commit 2335497226
58 changed files with 7397 additions and 406 deletions

View File

@@ -42,15 +42,18 @@ class DashboardView:
)
async def load(self):
import asyncio
token = self.page.session.get("token")
data = await api.admin_list_articles(token, limit=100)
if not data:
return
published_data, draft_data, recent_data = await asyncio.gather(
api.admin_list_articles(token, limit=1, status="published"),
api.admin_list_articles(token, limit=1, status="draft"),
api.admin_list_articles(token, limit=10),
)
items = data.get("items", [])
total = data.get("total", 0)
published = sum(1 for a in items if a.get("status") == "published")
drafts = total - published
published = (published_data or {}).get("total", 0)
drafts = (draft_data or {}).get("total", 0)
total = published + drafts
items = (recent_data or {}).get("items", [])
self._stats_row.controls = [
d.stat_card("Всего статей", str(total), ft.icons.ARTICLE, d.PRIMARY),
@@ -58,7 +61,7 @@ class DashboardView:
d.stat_card("Черновики", str(drafts), ft.icons.EDIT_NOTE, d.WARNING),
]
self._recent.controls = [_recent_item(a, self.page) for a in items[:10]]
self._recent.controls = [_recent_item(a, self.page) for a in items]
self.page.update()
@@ -118,6 +121,7 @@ def _sidebar(page: ft.Page, active: str = "") -> ft.Container:
(ft.icons.ARTICLE, "Статьи", "/admin/articles"),
(ft.icons.CATEGORY, "Категории", "/admin/categories"),
(ft.icons.PERM_MEDIA, "Медиа", "/admin/media"),
(ft.icons.RSS_FEED, "ВКонтакте", "/admin/vk"),
]
def nav_item(icon, label, route):