334b2f51df
- Журнальная главная: hero, CategoryRow, PopularBlock, RecentBlock (Сегодня/Вчера/Неделя) - ArticleCard: 3 размера (hero/regular/compact), цветной badge без дублей тегов - ArticleCoverSVG: 6 брендовых палитр, аватар Зеро в углу вместо #ZEROPOST - /about/zero: страница персонажа с галереей 8 поз - Footer: TG-баннер с аватаром Зеро на каждой странице - Конец статьи: блок «Понравилась? → Подписаться на канал» - ChannelEditor: 4 вкладки (Настройки/Расписание/Авто-публикация/Ручная) - AutoPublishTab: toggle, категории, delay, template, live preview - ArticlePicker: typeahead с was_sent_to_channel / next_scheduled_at флагами - /admin/channels/[id]/stats: график роста подписчиков (recharts) - Dashboard: блок TG-статистики (подписчики, delta 24h/7d, постов) - Header: упрощён до 2 пунктов desktop + расширенное мобильное меню - AutogenPanel: корректные time-picker'ы, calcNextRun с учётом last_run_at
25 lines
894 B
JavaScript
25 lines
894 B
JavaScript
import { requireAdminAuth } from '@/lib/adminAuth';
|
|
import { adminListSettings } from '@/lib/engine';
|
|
import SettingsForm from './SettingsForm';
|
|
|
|
export const dynamic = 'force-dynamic';
|
|
export const metadata = { title: 'Настройки' };
|
|
|
|
export default async function AdminSettingsPage() {
|
|
await requireAdminAuth();
|
|
let settings = [];
|
|
try { settings = await adminListSettings(); } catch {}
|
|
return (
|
|
<div className="space-y-6">
|
|
<div>
|
|
<h1 className="text-2xl font-bold text-neutral-900 dark:text-neutral-100">Настройки</h1>
|
|
<p className="text-sm text-neutral-500 mt-0.5">
|
|
Конфигурация engine — Telegram-прокси, ключи внешних API. Изменения применяются сразу,
|
|
без рестарта.
|
|
</p>
|
|
</div>
|
|
<SettingsForm initial={settings} />
|
|
</div>
|
|
);
|
|
}
|