// ─── K&N Elite — Cabinet (vertical sidebar layout) ─── const { useState } = React; function CabinetShell({ section, onSection, onNav, children }) { const { t } = useI18n(); const items = [ { k: "valuations", l: "Мои оценки", n: "01" }, { k: "deal", l: "Статус сделки", n: "02" }, { k: "docs", l: "Документы", n: "03" }, { k: "messages", l: "Сообщения", n: "04" }, { k: "settings", l: "Настройки", n: "05" }, ]; return (
{children}
); } function CabinetValuations({ onOpen, onNav }) { const items = [ { id: 1, addr: "Calle Serrano 42, Чамбери, Мадрид", area: 112, rooms: 3, photo: "https://images.unsplash.com/photo-1600607687939-ce8a6c25118c?w=1200&q=80&auto=format&fit=crop", status: "ready", date: "24 апреля 2026", range: "325 000 – 340 000 €", }, { id: 2, addr: "Paseo de Gracia 89, Барселона", area: 145, rooms: 4, photo: "https://images.unsplash.com/photo-1560448204-e02f11c3d0e2?w=1200&q=80&auto=format&fit=crop", status: "processing", date: "23 апреля 2026", }, { id: 3, addr: "Calle Velázquez 80, Мадрид", area: 98, rooms: 3, photo: "https://images.unsplash.com/photo-1600585154526-990dced4db0d?w=1200&q=80&auto=format&fit=crop", status: "needs_info", date: "22 апреля 2026", }, ]; const tone = { ready: "var(--ok)", processing: "var(--warn)", needs_info: "var(--err)" }; const lbl = { ready: "Готово", processing: "В работе", needs_info: "Нужна информация" }; return (
Раздел 01

Мои оценки

История всех оценок. Откройте любую, чтобы увидеть детальный отчёт с аналогами и рекомендациями.

{items.map(it => (
{lbl[it.status]} {it.date}

{it.addr}

{it.area} м² · {it.rooms} комн.
{it.range &&
{it.range}
}
))}
); } function CabinetDeal() { const stages = [ { n: "01", t: "Подписание договора", done: true, date: "18 апр" }, { n: "02", t: "Фотосъёмка и стейджинг", done: true, date: "21 апр" }, { n: "03", t: "Публикация в базах", active: true, date: "с 24 апр" }, { n: "04", t: "Показы и офферы", date: "—" }, { n: "05", t: "Нотариус и передача ключей", date: "—" }, ]; return (
Раздел 02

Статус сделки

Продажа Calle Serrano 42. Отслеживайте каждый этап в реальном времени.

В продаже · с 21 апреля

Calle Serrano 42, Чамбери

112 м² · 3 комнаты · выставлено за 335 000 €
Показов
12
Офферов
3
Лучший оффер
328 000 €

Этапы сделки

{stages.map((s, i) => (
{s.n}
{s.t}
{s.date}
{s.done && } {s.active && }
))}
); } function CabinetDocs() { const docs = [ { n: "Договор-поручение на продажу.pdf", size: "284 КБ", date: "18 апр" }, { n: "Nota simple — Calle Serrano 42.pdf", size: "156 КБ", date: "21 апр" }, { n: "Фотосессия — 48 фото.zip", size: "68 МБ", date: "21 апр" }, { n: "Отчёт об оценке.pdf", size: "1,2 МБ", date: "20 апр" }, ]; return (
Раздел 03

Документы

Все документы по вашим сделкам и оценкам

{docs.map((d, i) => (
PDF
{d.n}
{d.size} · {d.date}
))}
); } function CabinetMessages() { const msgs = [ { from: "Carlos Tenorio", role: "Персональный менеджер", t: "Иван, завтра в 11:00 два показа подряд. Успеем?", time: "10 мин назад", unread: true }, { from: "María González", role: "Фотограф", t: "Готовы материалы со съёмки. Прислать на почту?", time: "2 часа", unread: false }, { from: "Офис K&N Elite", role: "", t: "Документы на подпись готовы. Ждём в офисе.", time: "вчера", unread: false }, ]; return (
Раздел 04

Сообщения

{msgs.map((m, i) => (
{m.from[0]}
{m.from} {m.role && {m.role}}
{m.t}
{m.time}
))}
); } function CabinetSettings() { const [saved, setSaved] = useState(false); return (
Раздел 05

Настройки

Личные данные

Имя
Фамилия
Email
Телефон / WhatsApp

Приватность

); } Object.assign(window, { CabinetShell, CabinetValuations, CabinetDeal, CabinetDocs, CabinetMessages, CabinetSettings, });