rename users
This commit is contained in:
131
web/views/content_users/profile_page.py
Normal file
131
web/views/content_users/profile_page.py
Normal file
@@ -0,0 +1,131 @@
|
||||
import asyncio
|
||||
import flet as ft
|
||||
import designer as ds
|
||||
import api_client
|
||||
|
||||
|
||||
class ProfilePage(ft.Column):
|
||||
def __init__(self, page: ft.Page):
|
||||
self._page = page
|
||||
self._orgs: list = []
|
||||
|
||||
self._first_name = ds.CastomTextField_input(
|
||||
label="Имя",
|
||||
hint_text="Введите имя...",
|
||||
prefix_icon=ft.Icons.PERSON,
|
||||
)
|
||||
self._last_name = ds.CastomTextField_input(
|
||||
label="Фамилия",
|
||||
hint_text="Введите фамилию...",
|
||||
prefix_icon=ft.Icons.PERSON_OUTLINE,
|
||||
)
|
||||
|
||||
self._org_dropdown = ds.CastomDropdown(
|
||||
label="Организация",
|
||||
hint_text="Загрузка...",
|
||||
)
|
||||
self._org_dropdown.on_select = self._on_org_change
|
||||
|
||||
self._group_dropdown = ds.CastomDropdown(
|
||||
label="Группа",
|
||||
hint_text="Загрузка...",
|
||||
)
|
||||
|
||||
self._loading = ft.ProgressRing(visible=False, width=24, height=24)
|
||||
self._status = ft.Text(value="", size=14)
|
||||
|
||||
super().__init__(
|
||||
spacing=16,
|
||||
controls=[
|
||||
ds.CastomText(
|
||||
text="Редактировать профиль",
|
||||
size=18,
|
||||
weight=ft.FontWeight.BOLD,
|
||||
),
|
||||
self._first_name,
|
||||
self._last_name,
|
||||
self._org_dropdown,
|
||||
self._group_dropdown,
|
||||
ft.Row(
|
||||
spacing=12,
|
||||
controls=[
|
||||
ds.CastomButton(text="Сохранить", on_click=self._save),
|
||||
self._loading,
|
||||
],
|
||||
),
|
||||
self._status,
|
||||
],
|
||||
)
|
||||
|
||||
async def load(self):
|
||||
token = self._page.session.store.get("auth_token") or ""
|
||||
me, orgs, groups = await asyncio.gather(
|
||||
api_client.get_me(token),
|
||||
api_client.get_organizations(),
|
||||
api_client.get_groups(),
|
||||
)
|
||||
self._orgs = orgs or []
|
||||
|
||||
_opt_style = ft.ButtonStyle(color=ds.clolors.ferst)
|
||||
|
||||
self._org_dropdown.options = [
|
||||
ft.DropdownOption(key=o["id"], text=o["name_organization"], style=_opt_style)
|
||||
for o in self._orgs
|
||||
]
|
||||
self._org_dropdown.hint_text = "Выберите организацию..."
|
||||
|
||||
self._group_dropdown.options = [
|
||||
ft.DropdownOption(key=g["id"], text=g["name_group"], style=_opt_style)
|
||||
for g in (groups or [])
|
||||
]
|
||||
self._group_dropdown.hint_text = "Выберите группу..."
|
||||
|
||||
if me:
|
||||
self._first_name.value = me.get("first_name", "")
|
||||
self._last_name.value = me.get("last_name", "")
|
||||
self._org_dropdown.value = me.get("organization_id")
|
||||
self._group_dropdown.value = me.get("group_id")
|
||||
|
||||
self.update()
|
||||
|
||||
def _on_org_change(self, e):
|
||||
selected_id = e.control.value
|
||||
for o in self._orgs:
|
||||
if o["id"] == selected_id:
|
||||
self._group_dropdown.value = o.get("group_id")
|
||||
break
|
||||
self.update()
|
||||
|
||||
async def _save(self, e):
|
||||
self._loading.visible = True
|
||||
self._status.value = ""
|
||||
self.update()
|
||||
|
||||
token = self._page.session.store.get("auth_token") or ""
|
||||
user_id = self._page.session.store.get("user_id") or ""
|
||||
|
||||
fn = self._first_name.value.strip() if self._first_name.value else None
|
||||
ln = self._last_name.value.strip() if self._last_name.value else None
|
||||
|
||||
data, err = await api_client.update_user(
|
||||
user_id=user_id,
|
||||
token=token,
|
||||
first_name=fn,
|
||||
last_name=ln,
|
||||
group_id=self._group_dropdown.value,
|
||||
organization_id=self._org_dropdown.value,
|
||||
)
|
||||
|
||||
self._loading.visible = False
|
||||
if err:
|
||||
self._status.value = err
|
||||
self._status.color = "red"
|
||||
else:
|
||||
self._status.value = "Данные успешно сохранены!"
|
||||
self._status.color = ds.clolors.ferst
|
||||
# Обновляем сессию для корректного сохранения при прохождении тестов
|
||||
if data:
|
||||
self._page.session.store.set("group_id", data.get("group_id") or "")
|
||||
self._page.session.store.set("org_id", data.get("organization_id") or "")
|
||||
self.update()
|
||||
|
||||
Reference in New Issue
Block a user