From 017d179746a377be8f6971327fa8a0276871a73f Mon Sep 17 00:00:00 2001 From: wasrusgen Date: Sat, 9 May 2026 12:59:41 +0300 Subject: [PATCH] =?UTF-8?q?feat(miniapp):=20manager=20home=20v2=20?= =?UTF-8?q?=E2=80=94=20greeting=20+=20hero=20today-task=20+=202x2=20quick?= =?UTF-8?q?=20actions=20+=20active=20projects=20+=20bottom=20nav?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- design-drafts/A_v2_desktop.html | 608 ++++++++++++++++++++++++++++++++ miniapp/assets/app.js | 201 ++++++++--- miniapp/assets/icons.js | 18 + miniapp/assets/styles.css | 404 +++++++++++++++++++++ miniapp/index.html | 6 +- 5 files changed, 1189 insertions(+), 48 deletions(-) create mode 100644 design-drafts/A_v2_desktop.html diff --git a/design-drafts/A_v2_desktop.html b/design-drafts/A_v2_desktop.html new file mode 100644 index 0000000..307fe7a --- /dev/null +++ b/design-drafts/A_v2_desktop.html @@ -0,0 +1,608 @@ +A _ Editorial Calm _ _ _ _ _
9:41
Проект
№ K-2025-0184

И. Тимирясов

пос. Барвиха, дом 8
Текущий этап
95% · до 11 мая

Монтаж

Замер
Проект
Согласование
Производство
Доставка
Монтаж
Этапы
ЗамерГотово
Замерил Артём О. · 02 мая
ПроектГотово
Проект v3 · Е. Маркина
СогласованиеГотово
Ожидает подписи клиента
ПроизводствоГотово
Цех №2 · Партия 18
ДоставкаГотово
Курьер выезжает
06
МонтажСейчас
Бригада 4
Действия
\ No newline at end of file diff --git a/miniapp/assets/app.js b/miniapp/assets/app.js index 83daa2c..cdfe284 100644 --- a/miniapp/assets/app.js +++ b/miniapp/assets/app.js @@ -85,66 +85,174 @@ function getInitial(name) { /* ----------------- Renders ----------------- */ function renderManager(me) { - const status = me.status || "active"; - const statusUntil = me.status_until ? `до ${me.status_until}` : ""; - const initial = me.user?.avatar_initial || getInitial(me.user?.full_name); - const tgId = me.user?.tg_id ? `ID ${me.user.tg_id}` : ""; + // Новый главный экран — «утро менеджера» + return renderManagerHome(me); +} +function timeOfDay(date = new Date()) { + const h = date.getHours(); + if (h >= 5 && h < 12) return "Доброе утро"; + if (h >= 12 && h < 18) return "Добрый день"; + if (h >= 18 && h < 23) return "Добрый вечер"; + return "Доброй ночи"; +} + +function pluralRu(n, forms) { + // forms = ["замер", "замера", "замеров"] + const mod10 = n % 10, mod100 = n % 100; + if (mod100 >= 11 && mod100 <= 14) return forms[2]; + if (mod10 === 1) return forms[0]; + if (mod10 >= 2 && mod10 <= 4) return forms[1]; + return forms[2]; +} + +function renderManagerHome(me) { + // === MOCK DATA (Этап 1 — визуал, без реального backend) === + const firstName = (me.user?.full_name || "").split(/\s+/)[0] || "Артём"; + const todayTask = { + time: "15:30", + tag: "ЗАМЕР", + client: "А. Пестова", + address: "ЖК Сады Пекина, корп. 3", + phone: "+7 999 000-00-00", + }; + const projects = [ + { name: "Семья Иваниковых", address: "ул. Орджоникидзе, 14 — 47", stage: "Согласование", date: "14 мая", progress: 0.40, statusLabel: "Ожидает клиента", statusKind: "waiting" }, + { name: "Кабанова И. С.", address: "Никольская набережная, 20", stage: "Производство", date: "21 мая", progress: 0.60, statusLabel: "В работе", statusKind: "active" }, + { name: "Карелин А.", address: "посёлок Сосновый, дом 4", stage: "Замер", date: "сегодня", progress: 0.10, statusLabel: "Срочно", statusKind: "urgent" }, + { name: "Петросян Г.", address: "ул. Лесная, 18 — 12", stage: "Доставка", date: "16 мая", progress: 0.85, statusLabel: "В работе", statusKind: "active" }, + { name: "Тимирясов И.", address: "пос. Барвиха, дом 8", stage: "Монтаж", date: "11 мая", progress: 0.95, statusLabel: "Завершается", statusKind: "active" }, + ]; + const unreadChats = 2; + const tasksTodayCount = todayTask ? 1 : 0; + const taskWord = pluralRu(tasksTodayCount, ["замер", "замера", "замеров"]); + const phraseTail = tasksTodayCount === 0 ? "ничего на сегодня" : `${tasksTodayCount === 1 ? "один" : tasksTodayCount} ${taskWord} сегодня`; + + // === RENDER === app.innerHTML = ""; + document.body.classList.add("has-bottom-nav"); + // Greeting app.appendChild(el(` -
-
Менеджер
-
-
-
${me.user?.full_name || ""}
-
${me.user?.salon || ""}
+
+
+
${timeOfDay()}
+
${firstName},
+ ${phraseTail}
-
${initial}
-
-
- - - ${statusLabel(status)} - - ${statusUntil ? `·${statusUntil}` : ""} - ${tgId ? `·${tgId}` : ""}
+
`)); - const sections = [ - { - label: "Работа с клиентами", - items: [ - { icon: "wrench", color: "green", label: "Подбор техники для клиента", href: "#/m/podbor" }, - { icon: "ruler", color: "blue", label: "Замеры", href: "#/m/measurements" }, - { icon: "clipboard", color: "gold", label: "Заявки клиентов", soon: true }, - { icon: "briefcase", color: "gray", label: "Сделки", soon: true }, - ], - }, - { - label: "Аккаунт", - items: [ - { icon: "wallet", color: "gold", label: "Мой статус и доступ", href: "#/m/status" }, - { icon: "help", color: "blue", label: "Связь с куратором", href: "#/m/help" }, - ], - }, + // Hero task + if (todayTask) { + app.appendChild(el(` +
+
+ + На сегодня${todayTask.time} + + ${todayTask.tag} +
+
${todayTask.client}
+
${todayTask.address}
+
+ + ${ICONS.phone} +
+
+ `)); + } + + // Quick actions + const quickActions = [ + { icon: "camera", title: "Новый замер", subtitle: "С фото" }, + { icon: "cube", title: "3D просмотр", subtitle: "Проекты" }, + { icon: "bolt", title: "Коммуникации", subtitle: "Чек-лист" }, + { icon: "package", title: "Каталог техники", subtitle: "Встройка" }, ]; - - sections.forEach(section => { - app.appendChild(el(``)); - app.appendChild(buildMenu(section.items)); + app.appendChild(el(`
Быстрые действия
`)); + const grid = el(`
`); + quickActions.forEach(qa => { + const card = el(` + + `); + card.addEventListener("click", () => { haptic("impact"); tg?.showAlert?.(`«${qa.title}» — скоро`); }); + grid.appendChild(card); }); + app.appendChild(grid); + // Active projects app.appendChild(el(` - - - + +