41 lines
16 KiB
JavaScript
41 lines
16 KiB
JavaScript
import fs from 'node:fs';
|
||
import path from 'node:path';
|
||
import { fileURLToPath } from 'node:url';
|
||
|
||
const out = path.dirname(fileURLToPath(import.meta.url));
|
||
const esc = (s) => String(s).replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>');
|
||
const modules = [
|
||
['41-crm-deal','CRM · Карточка сделки','Сделка «Поставка упаковки»','Сумма|180 000 ₽;Вероятность|40%;Этап|Квалификация;Следующее действие|Сегодня, 15:00','Контакт|Иван Петров|Директор · ООО «Ресурс»;Телефон|+7 900 123-45-67|Telegram подключён;Задачи|Подготовить предложение|Сегодня, 15:00;Документы|Коммерческое предложение|Черновик;История|Входящий запрос с сайта|18 сентября, 12:41'],
|
||
['42-crm-contacts','CRM · Контакты','Контакты','Всего|128;Активные|94;Без сделки|21;Новые за месяц|17','Иван Петров|ООО «Ресурс»|+7 900 123-45-67;Анна Белова|Сеть кофеен «Маяк»|anna@mayak.ru;Сергей Орлов|БЦ «Север»|Telegram;Мария Волкова|Отель «Гранд»|+7 913 555-22-11;Александр Ким|IT Park|alex@itpark.ru'],
|
||
['43-crm-companies','CRM · Компании','Компании','Всего|42;С активными сделками|18;Клиенты|29;Поставщики|13','ООО «Ресурс»|Поставщик|3 сделки · 1,2 млн ₽;Сеть кофеен «Маяк»|Клиент|2 сделки · 680 000 ₽;БЦ «Север»|Клиент|1 сделка · 240 000 ₽;Отель «Гранд»|Клиент|4 сделки · 2,6 млн ₽;IT Park|Партнёр|2 сделки · 920 000 ₽'],
|
||
['44-crm-leads','CRM · Лиды','Лиды','Новые|17;В работе|9;Конверсия|34%;Без ответа|3','Заявка на корпоративное питание|Сайт|Сегодня, 12:41;Кейтеринг на 120 человек|Telegram|Сегодня, 11:18;Поставка обедов в офис|Email|Вчера, 17:30;Франшиза кафе|MAX|Вчера, 15:06;Банкет на октябрь|Телефон|17 сентября'],
|
||
['50-sales','Продажи','Заказы и продажи','Выручка сегодня|184 600 ₽;Заказов|47;Средний чек|3 928 ₽;К оплате|62 400 ₽','№ 1048|Доставка · Новый|4 860 ₽;№ 1047|Зал · Готовится|2 340 ₽;№ 1046|Самовывоз · Готов|1 780 ₽;№ 1045|Доставка · В пути|6 120 ₽;№ 1044|Зал · Закрыт|3 560 ₽'],
|
||
['51-inventory','Склад','Остатки и движение','Позиций|386;Ниже минимума|12;На сумму|2,84 млн ₽;Списания сегодня|8 420 ₽','Лосось охлаждённый|4,2 кг|Ниже минимума;Сливки 33%|18 л|Достаточно;Сыр моцарелла|12,5 кг|Заказать;Бутылка 0,5 л|240 шт|Достаточно;Кофе зерно|7 кг|Резерв 2 кг'],
|
||
['52-procurement','Закупки','Заявки поставщикам','К заказу|184 300 ₽;Поставщиков|8;Не достигнут минимум|2;Ближайшая доставка|Завтра','ООО «Ресурс»|42 600 ₽|Минимум 15 000 ₽;ФудСервис|68 400 ₽|Лучшие цены: 14 позиций;Рыбный двор|12 800 ₽|До минимума 2 200 ₽;Упаковка Про|34 500 ₽|Доставка во вторник;Магазин · ежедневный закуп|26 000 ₽|18 позиций'],
|
||
['53-finance','Финансы','Деньги и платежи','Доступно|1,84 млн ₽;К поступлению|620 000 ₽;К оплате|438 000 ₽;ДДС к учёту|72 400 ₽','Поступление · ООО «Альфа»|+180 000 ₽|Сегодня, 10:21;Оплата · ФудСервис|−68 400 ₽|Сегодня, 09:40;Зарплата · аванс|−320 000 ₽|20 сентября;Аренда|−185 000 ₽|25 сентября;Поступление · БЦ «Север»|+240 000 ₽|28 сентября'],
|
||
['54-staff','Сотрудники','Команда и смены','Сотрудников|48;Сегодня в смене|31;Опаздывают|2;ФОТ месяца|2,16 млн ₽','Горский 1/1 · Зал|12 сотрудников|Смена открыта;Горский 1/1 · Кухня|9 сотрудников|1 опоздание;Доставка|7 сотрудников|Все на линии;Офис|3 сотрудника|Рабочий день;Резерв|5 сотрудников|Доступны'],
|
||
['55-projects','Проекты','Проекты','Активные|8;В срок|6;С риском|2;Бюджет|4,8 млн ₽','Открытие летней веранды|68%|До 30 сентября;Новая система лояльности|42%|До 15 октября;Переезд склада|81%|Риск срока;Меню осень 2026|93%|На согласовании;Автоматизация закупок|35%|До 1 ноября'],
|
||
['56-tasks','Задачи','Задачи команды','Сегодня|18;Просрочено|4;На проверке|7;Выполнено за неделю|96','Согласовать заявку поставщику|Высокий|Сегодня, 13:00;Проверить остатки лосося|Высокий|Сегодня, 14:00;Обновить график смен|Обычный|Сегодня, 17:00;Подготовить договор|Обычный|Завтра;Проверить рекламную кампанию|Низкий|21 сентября'],
|
||
['57-marketing','Маркетинг','Кампании и аудитории','Расход месяца|284 000 ₽;Лиды|318;Цена лида|893 ₽;ROMI|184%','Осеннее меню · VK|Активна|86 лидов · 72 000 ₽;Бизнес-ланчи · Яндекс|Активна|142 лида · 118 000 ₽;Доставка · Telegram|Пауза|38 лидов · 31 000 ₽;Банкеты · Email|Запланирована|Старт 22 сентября;Возврат гостей · SMS|Активна|52 лида · 63 000 ₽'],
|
||
['58-analytics','Аналитика','Показатели бизнеса','Выручка|4,82 млн ₽;Прибыль|1,14 млн ₽;Средний чек|3 640 ₽;Повторные гости|42%','Выручка по дням|Пн 620 · Вт 710 · Ср 680 · Чт 760|Рост 12%;Каналы продаж|Зал 48% · Доставка 37% · Самовывоз 15%|;Лучшие категории|Бизнес-ланчи · Напитки · Банкеты|;Загрузка команды|82%|Пик 13:00–15:00;Прогноз месяца|6,4 млн ₽|Выполнение 75%'],
|
||
['59-documents','Документы','Документы','На подпись|7;Черновики|14;Истекают|3;Всего|486','Договор поставки №42|На подпись|ООО «Ресурс»;Счёт №1048|Оплачен|ООО «Альфа»;Сертификат на лосось|Истекает через 8 дней|Рыбный двор;Акт сверки|Черновик|ФудСервис;Трудовой договор|Подписан|Иванов А. В.'],
|
||
['60-automation','Автоматизация','Сценарии','Активные|18;Запусков сегодня|426;Ошибки|2;Сэкономлено|37 ч','Низкий остаток → заявка|Активен|86 запусков;Новый лид → задача менеджеру|Активен|42 запуска;Заказ готов → сообщение клиенту|Активен|214 запусков;Просрочка оплаты → напоминание|Ошибка|2 запуска;Смена закрыта → отчёт|Активен|82 запуска'],
|
||
['61-sites','Сайты','Сайты и формы','Опубликовано|3;Черновики|2;Заявок за неделю|74;Конверсия|6,8%','krona.restaurant|Опубликован|Основной сайт;delivery.krona.restaurant|Опубликован|Доставка;banket.krona.restaurant|Опубликован|Банкеты;Осеннее меню|Черновик|Лендинг;Вакансии|Черновик|Форма отклика'],
|
||
['62-support','Поддержка','Обращения','Открыто|12;Критичные|2;Среднее время ответа|8 мин;Решено сегодня|34','Не проходит оплата|Критичный|Организация «Альфа»;Не загружается прайс|Высокий|ООО «Ресурс»;Добавить пользователя|Обычный|Ресторан «Маяк»;Ошибка отчёта|Высокий|Горский 1/1;Вопрос по тарифу|Низкий|Кафе «Берег»'],
|
||
['65-ai-center','ИИ-центр','ИИ-центр','Ассистенты|8;Автоматизаций|24;Диалогов сегодня|186;Экономия времени|46 ч','Помощник руководителя|Активен|Сводки и решения;Ассистент закупок|Активен|Сравнение поставщиков;Контроль качества|Активен|12 проверок сегодня;HR-помощник|Обучается|База знаний 82%;Маркетолог|Активен|4 кампании'],
|
||
['66-apps','Приложения','Приложения и интеграции','Установлено|14;Доступно|32;Требуют внимания|2;Синхронизаций сегодня|1 284','Коммуникации|Установлено|Telegram · MAX · WhatsApp;Сотрудники|Установлено|Мобильное приложение;Закупки|Установлено|8 поставщиков;Google Drive|Подключено|Последняя синхронизация 5 мин;Яндекс Диск|Требует входа|Резервные копии'],
|
||
['67-entity-builder','Конструктор сущностей','Конструктор сущностей','Сущностей|18;Пользовательских полей|74;Связей|31;Изменений сегодня|6','Клиент|12 полей|CRM · Продажи;Сырьё|18 полей|Склад · Закупки;Поставщик|14 полей|Закупки · Документы;Сотрудник|16 полей|Сотрудники · Задачи;Сертификат|8 полей|Склад · Документы'],
|
||
['63-settings','Настройки','Настройки организации','Организация|ООО «Крона»;Пользователи|48;Подключённые модули|12;Роль владельца|Полный доступ','Профиль организации|Реквизиты и бренд|Настроено;Пользователи и роли|48 пользователей|3 приглашения;Модули|12 включено|Каналы скрыты;Интеграции и VPN|6 подключений|VPN активен;Резервные копии|Ежедневно, 03:00|Последняя успешна'],
|
||
['64-home','Главная','Рабочий день','Выручка сегодня|184 600 ₽;Задачи|18;Новые сообщения|48;Требует внимания|7','Продажи|47 заказов|+12% к прошлой субботе;Закупки|2 поставщика ниже минимума|Нужно решение;Сотрудники|31 в смене|2 опоздания;Коммуникации|48 непрочитанных|12 Telegram;Финансы|438 000 ₽ к оплате|До 25 сентября']
|
||
];
|
||
|
||
const nav=['Главная','Аналитика','Маркетинг','Коммуникации','CRM','Продажи','Склад','Закупки','Финансы','Сотрудники','Проекты','Задачи','Документы','Автоматизация','Сайты','Поддержка','Настройки'];
|
||
function make([slug,module,title,statsRaw,rowsRaw]){
|
||
const stats=statsRaw.split(';').map(x=>x.split('|')), rows=rowsRaw.split(';').map(x=>x.split('|'));
|
||
const navSvg=nav.map((n,i)=>`<g transform="translate(22 ${112+i*43})"><rect x="-10" y="-25" width="194" height="36" rx="8" fill="${module.startsWith(n)||title.startsWith(n)?'#486B55':'transparent'}"/><circle cx="6" cy="-7" r="6" fill="${module.startsWith(n)||title.startsWith(n)?'#E8C47A':'#829286'}"/><text x="22" y="-2" font-size="12" fill="#F7F0DF">${esc(n)}</text></g>`).join('');
|
||
const statSvg=stats.map((s,i)=>`<g transform="translate(${258+i*300} 190)"><text y="0" font-size="11" fill="#77756C">${esc(s[0])}</text><text y="32" font-size="22" font-weight="700" fill="#23332A">${esc(s[1])}</text><line y1="50" x2="268" y2="50" stroke="#D8CDB7"/></g>`).join('');
|
||
const rowsSvg=rows.map((r,i)=>`<g transform="translate(270 ${394+i*92})"><circle cx="20" cy="22" r="18" fill="${i===0?'#DDE9DA':'#EEE6D6'}"/><text x="54" y="14" font-size="15" font-weight="700" fill="#242B27">${esc(r[0])}</text><text x="54" y="39" font-size="12" fill="#6F7069">${esc(r[1]||'')}</text><text x="1040" y="25" text-anchor="end" font-size="12" fill="${/ошиб|ниже|крит|проср|риск/i.test(r[2]||'')?'#A44E3F':'#486B55'}">${esc(r[2]||'')}</text><path d="M1070 18l8 8-8 8" fill="none" stroke="#A8752F" stroke-width="2"/><line x1="0" y1="68" x2="1100" y2="68" stroke="#E3DAC8"/></g>`).join('');
|
||
return `<svg xmlns="http://www.w3.org/2000/svg" width="1536" height="1024" viewBox="0 0 1536 1024"><rect width="1536" height="1024" fill="#F7F1E5"/><rect width="220" height="1024" fill="#20352A"/><text x="28" y="42" font-family="Georgia" font-size="25" font-weight="700" fill="#E8C47A">♛ KRONA</text><text x="29" y="62" font-family="Arial" font-size="9" fill="#DCC58F">БИЗНЕС-ПЛАТФОРМА</text>${navSvg}<rect x="220" width="1316" height="72" fill="#FCF8EF" stroke="#DED3BF"/><rect x="248" y="16" width="210" height="40" rx="10" fill="#F5EEDC" stroke="#D8CDB7"/><text x="266" y="41" font-family="Arial" font-size="12" fill="#3A443D">Ресторан: Зал + Доставка⌄</text><rect x="810" y="16" width="360" height="40" rx="10" fill="#FCF8EF" stroke="#D8CDB7"/><text x="834" y="41" font-family="Arial" font-size="12" fill="#8A887F">⌕ Поиск по платформе…</text><circle cx="1450" cy="36" r="18" fill="#DDE9DA"/><text x="1400" y="40" text-anchor="end" font-family="Arial" font-size="12" fill="#36443A">Виктор</text><text x="256" y="126" font-family="Georgia" font-size="30" font-weight="700" fill="#26382E">${esc(title)}</text><text x="256" y="153" font-family="Arial" font-size="12" fill="#77756C">${esc(module)} · рабочий экран</text><rect x="1324" y="105" width="170" height="42" rx="10" fill="#35684B"/><text x="1409" y="132" text-anchor="middle" font-family="Arial" font-size="13" font-weight="700" fill="#FFF9EC">+ Создать</text>${statSvg}<rect x="250" y="270" width="1248" height="64" rx="12" fill="#FCF8EF" stroke="#DED3BF"/><text x="278" y="309" font-family="Arial" font-size="13" fill="#8A887F">⌕ Поиск и фильтры</text><rect x="1296" y="282" width="174" height="40" rx="9" fill="#F5EEDC"/><text x="1383" y="307" text-anchor="middle" font-family="Arial" font-size="12" fill="#4D554F">Фильтры · Период</text><text x="270" y="370" font-family="Arial" font-size="11" font-weight="700" fill="#77756C">НАЗВАНИЕ</text><text x="1310" y="370" text-anchor="end" font-family="Arial" font-size="11" font-weight="700" fill="#77756C">СТАТУС / ДЕТАЛИ</text>${rowsSvg}<rect x="1188" y="890" width="282" height="80" rx="14" fill="#EEF3EA" stroke="#C9D8C9"/><text x="1210" y="919" font-family="Arial" font-size="11" fill="#6C786D">KRONA AI</text><text x="1210" y="943" font-family="Arial" font-size="13" fill="#294B38">Сводка и следующее действие →</text></svg>`;
|
||
}
|
||
for (const item of modules) fs.writeFileSync(path.join(out,`${item[0]}.svg`),make(item),'utf8');
|
||
console.log(`generated ${modules.length} screens`);
|