ДИЗАЙН-СИСТЕМА в app.css: - --primary #FF6B35, --success #3dd68c, --danger #ff5c5c - --bg #0f0f12, --bg-elev #1a1a22, --bg-input #121218 - Компоненты: .card-b, .row-b, .field-b, .btn-b, .switch-b, .chip, .avatar-b, .bubble-b, .composer-b, .toast-b, .stars-b, .pulse-b, .empty-b ПЕРЕПИСАНЫ на единый стиль: Settings: - Карточка с аватаром пользователя - Card-row для юр.документов (📄 / 🔒 / ⚠️) - 'Выйти' — danger btn-b с state machine (idle→load→ok) Profile: - Карточка аватара + кнопка 'Загрузить фото' через multipart /api/v1/me/photo - Поля: field-b (ctrl + hint) - Чипы в chip-list, новый стиль с .on - Счётчик bio символов - 'Сохранить' со state machine + toast Review (создание): - Звёзды в stars-b с center hint - textarea с counter - switch-b 'Анонимно' (вместо checkbox) - Submit со state machine + toast 'Спасибо за отзыв!' UserReviews: - Средний рейтинг + звёзды - Список карточек с отзывами Chats: - Список с avatar-b + last message + время + badge непрочитанных - Пустое состояние с эмодзи - formatChatTime() — 'сейчас' / '5м' / '3ч' / '2д' Chat (один): - Header с аватаром и кнопками 👤 ⭐ - composer-b: 📎 + input + ➤ (sticky bottom) - bubble-b .in / .out с .ticks.read - Send со state + toast - sendPhoto() для фоток в чате App.js _toast(msg, kind): - Единый toast-b с классами ok / err Всё в одном стиле. CSS variables, padding 16, radius 14, no disabled кнопок.
68 lines
3.0 KiB
JavaScript
68 lines
3.0 KiB
JavaScript
// Settings view — единый стиль BuhApp
|
||
const SettingsView = {
|
||
async render(root) {
|
||
const u = API.Store.user;
|
||
root.innerHTML = `
|
||
<div class="view">
|
||
<h1 style="margin:0 0 14px;font-size:22px;">⚙️ Настройки</h1>
|
||
|
||
<!-- Юзер -->
|
||
<div class="card-b">
|
||
<div style="display:flex;align-items:center;gap:14px;">
|
||
<div class="avatar-b">${escapeHtml(((u?.name || u?.email || '?')[0] || '?').toUpperCase())}</div>
|
||
<div style="flex:1;min-width:0;">
|
||
<div style="font-weight:600;font-size:16px;">${escapeHtml(u?.name || 'Без имени')}</div>
|
||
${u?.email ? `<div style="font-size:13px;color:var(--text-dim);margin-top:2px;">${escapeHtml(u.email)}</div>` : ''}
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Юридические документы -->
|
||
<div class="row-list" style="margin-top:14px;">
|
||
<div class="card-b" style="padding:0;">
|
||
<a href="/legal/TERMS.html" target="_blank" style="text-decoration:none;color:inherit;">
|
||
<div class="row-b" style="border:0;background:transparent;">
|
||
<div class="title">📄 Пользовательское соглашение</div>
|
||
<div class="chev">›</div>
|
||
</div>
|
||
</a>
|
||
<a href="/legal/PRIVACY.html" target="_blank" style="text-decoration:none;color:inherit;">
|
||
<div class="row-b" style="border:0;background:transparent;border-top:1px solid var(--border);">
|
||
<div class="title">🔒 Политика конфиденциальности</div>
|
||
<div class="chev">›</div>
|
||
</div>
|
||
</a>
|
||
<a href="/legal/DISCLAIMER.html" target="_blank" style="text-decoration:none;color:inherit;">
|
||
<div class="row-b" style="border:0;background:transparent;border-top:1px solid var(--border);">
|
||
<div class="title">⚠️ Отказ от ответственности</div>
|
||
<div class="chev">›</div>
|
||
</div>
|
||
</a>
|
||
</div>
|
||
</div>
|
||
|
||
<div style="text-align:center;color:var(--text-mute);font-size:11px;margin:20px 0 8px;">v 0.7.0 · BuhApp</div>
|
||
|
||
<!-- Выйти — danger -->
|
||
<button class="btn-b danger" id="logout" style="margin-top:8px;">Выйти</button>
|
||
</div>
|
||
`;
|
||
|
||
document.getElementById('logout').onclick = async () => {
|
||
const ok = await TG_APP.showConfirm('Выйти из BuhApp?');
|
||
if (!ok) return;
|
||
const btn = document.getElementById('logout');
|
||
const orig = btn.textContent;
|
||
btn.className = 'btn-b danger load';
|
||
btn.textContent = '⏳ Выходим…';
|
||
try {
|
||
await fetch('https://buhapp.mygoodservice.ru/api/v1/auth/logout', { method: 'POST', credentials: 'include' });
|
||
} catch {}
|
||
btn.className = 'btn-b ok';
|
||
btn.textContent = '✓ Готово!';
|
||
App.onLogout();
|
||
setTimeout(() => location.reload(), 500);
|
||
};
|
||
},
|
||
};
|