1 line
No EOL
12 KiB
JavaScript
1 line
No EOL
12 KiB
JavaScript
import{f as e,h as t,i as n,l as r,r as i,s as a,t as o}from"./useToast-CS8pZhce.js";import{t as s}from"./arrow-down-CWbiHuZO.js";import{t as c}from"./terminal-CcncyL3J.js";import{B as l,R as u,T as d,W as f,r as p,t as m,w as h}from"./index-CNnq9VO5.js";var g={name:`power`,size:24,node:[[`path`,{d:`M12 2v10`,key:`mnfbl`}],[`path`,{d:`M18.4 6.6a9 9 0 1 1-12.77.04`,key:`obofu9`}]]};g.node;var _=r(g),v=t(e(),1),y=a(),b=[{id:`n1`,type:`trigger`,title:`Триггер: Новое входящее сообщение в Telegram`,description:`Срабатывает мгновенно при обращении гостя в бота заведения`,badge:`Событие`,badgeVariant:`gold`,latencyMs:14},{id:`n2`,type:`condition`,title:`Условие: Поиск клиента в базе CRM платформы`,description:`Проверка номера телефона и истории заказов: клиент найден в базе`,badge:`CRM Match`,badgeVariant:`neutral`,latencyMs:42},{id:`n3`,type:`ai`,title:`✦ Krona AI: Определение намерения гостя (Intent Analysis)`,description:`Классификация сообщения: запрос бронирования столика (уверенность 98%)`,badge:`ИИ-анализ`,badgeVariant:`gold`,latencyMs:175},{id:`n4`,type:`action`,title:`Действие: Создание сделки и назначение менеджера`,description:`Открытие карточки сделки в воронке со статусом «Бронирование стола»`,badge:`CRM Сделка`,badgeVariant:`green`,latencyMs:65},{id:`n5`,type:`action`,title:`Действие: Отправка подтверждения гостю в чат`,description:`Формирование персонализированного ответа с подтверждением даты и времени`,badge:`Telegram Reply`,badgeVariant:`info`,latencyMs:88}],x=()=>{let{showToast:e}=o(),[t,r]=(0,v.useState)(b),[a,g]=(0,v.useState)(!0),[x,S]=(0,v.useState)(!1),[C,w]=(0,v.useState)([]),[T,E]=(0,v.useState)(!1),[D,O]=(0,v.useState)(!1),[k,A]=(0,v.useState)(`action`),[j,M]=(0,v.useState)(``),[N,P]=(0,v.useState)(``),F=()=>{S(!0),E(!1),w([]);let n=[{stepNumber:1,nodeTitle:t[0].title,status:`running`,output:`Получен вебхук Telegram: "Добрый вечер, хотим столик на четверых на 19:30"`,latencyMs:14}];w([...n]),setTimeout(()=>{n[0].status=`success`,n.push({stepNumber:2,nodeTitle:t[1]?.title||`Поиск клиента`,status:`running`,output:`Поиск по номеру +7 (913) 482-19-02: Найден контакт «Анна Воронина» (VIP, 14 заказов)`,latencyMs:42}),w([...n])},400),setTimeout(()=>{n[1].status=`success`,n.push({stepNumber:3,nodeTitle:t[2]?.title||`AI Анализ`,status:`running`,output:`Модель Krona NLP v1.8: Класс = table_booking, Персоны = 4, Время = 19:30, Confidence = 98.4%`,latencyMs:175}),w([...n])},900),setTimeout(()=>{n[2].status=`success`,n.push({stepNumber:4,nodeTitle:t[3]?.title||`Создание сделки`,status:`running`,output:`Сделка #DL-9428 создана в воронке «Бронирование». Назначен менеджер: Алина Соколова`,latencyMs:65}),w([...n])},1400),setTimeout(()=>{n[3].status=`success`,n.push({stepNumber:5,nodeTitle:t[4]?.title||`Отправка ответа`,status:`success`,output:`Сообщение доставлено пользователю: "Анна, здравствуйте! Забронировали Стол 5 на 19:30."`,latencyMs:88}),w([...n]),S(!1),E(!0),e({title:`Тестовый запуск успешен!`,message:`Все 5 узлов цепочки выполнены без ошибок за 384 ms`,type:`success`})},1900)},I=t=>{if(t.preventDefault(),!j.trim())return;let n={id:`n-${Date.now()}`,type:k,title:j.trim(),description:N.trim()||`Пользовательский шаг автоматизации`,badge:k.toUpperCase(),badgeVariant:{trigger:`gold`,condition:`neutral`,ai:`gold`,action:`green`}[k],latencyMs:Math.floor(20+Math.random()*80)};r(e=>[...e,n]),O(!1),M(``),P(``),e({title:`Узел добавлен в цепочку`,message:`Блок «${n.title}» готов к выполнению`,type:`success`})},L=t.reduce((e,t)=>e+t.latencyMs,0);return(0,y.jsxs)(`div`,{className:`space-y-4 animate-fade-in`,children:[(0,y.jsxs)(`div`,{className:`flex flex-col sm:flex-row sm:items-center justify-between gap-3 bg-krona-surface p-3.5 rounded-xl border border-krona-border shadow-krona-soft`,children:[(0,y.jsxs)(`div`,{children:[(0,y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,y.jsx)(`h2`,{className:`text-sm font-bold text-krona-primary`,children:`Автоматизация & Visual Workflow Engine`}),(0,y.jsx)(m,{level:`target`,size:`sm`})]}),(0,y.jsx)(`p`,{className:`text-xs text-krona-secondary mt-0.5`,children:`Визуальный конструктор бизнес-процессов: триггеры, условия, AI-агенты и автоматические действия`})]}),(0,y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,y.jsxs)(n,{variant:a?`secondary`:`outline`,size:`sm`,onClick:()=>{g(!a),e({title:a?`Сценарий деактивирован`:`Сценарий активирован`,message:a?`Цепочка приостановлена`:`Сценарий слушает входящие события`,type:`info`})},children:[(0,y.jsx)(_,{className:`w-3.5 h-3.5 mr-1`}),a?`Активен (Вкл)`:`Отключен (Пауза)`]}),(0,y.jsxs)(n,{variant:`primary`,size:`sm`,onClick:()=>O(!0),children:[(0,y.jsx)(h,{className:`w-3.5 h-3.5 mr-1`}),`Добавить узел`]})]})]}),(0,y.jsxs)(`div`,{className:`grid grid-cols-1 lg:grid-cols-12 gap-4`,children:[(0,y.jsxs)(`div`,{className:`lg:col-span-7 bg-krona-surface border border-krona-border rounded-xl p-5 shadow-krona-soft space-y-4`,children:[(0,y.jsxs)(`div`,{className:`flex items-center justify-between pb-3 border-b border-krona-border`,children:[(0,y.jsxs)(`div`,{children:[(0,y.jsx)(`h4`,{className:`text-xs font-bold text-krona-primary`,children:`Сценарий: «Автоматическая обработка брони стола из Telegram»`}),(0,y.jsxs)(`span`,{className:`text-[11px] text-krona-secondary`,children:[`Всего шагов: `,t.length,` • Среднее время сквозного выполнения: ~`,L,` ms`]})]}),(0,y.jsx)(i,{variant:a?`green`:`neutral`,size:`sm`,children:a?`Работает в фоне`:`На паузе`})]}),(0,y.jsx)(`div`,{className:`max-w-xl mx-auto py-2 flex flex-col items-center space-y-2`,children:t.map((e,n)=>(0,y.jsxs)(v.Fragment,{children:[(0,y.jsxs)(`div`,{className:`w-full p-3.5 rounded-xl border border-krona-border bg-krona-workspace shadow-krona-soft flex items-start justify-between gap-3 hover:border-krona-border-strong transition-all`,children:[(0,y.jsxs)(`div`,{children:[(0,y.jsx)(`div`,{className:`flex items-center gap-2 mb-1`,children:(0,y.jsx)(`span`,{className:`text-xs font-bold text-krona-primary`,children:e.title})}),(0,y.jsx)(`p`,{className:`text-[11px] text-krona-secondary leading-snug`,children:e.description}),(0,y.jsxs)(`span`,{className:`text-[10px] text-krona-secondary font-mono mt-1 block`,children:[`Ожидаемая задержка: ~`,e.latencyMs,` ms`]})]}),(0,y.jsx)(i,{variant:e.badgeVariant,size:`sm`,children:e.badge})]}),n<t.length-1&&(0,y.jsx)(`div`,{className:`flex flex-col items-center my-0.5 text-krona-gold`,children:(0,y.jsx)(s,{className:`w-4 h-4`})})]},e.id))})]}),(0,y.jsxs)(`div`,{className:`lg:col-span-5 bg-krona-surface border border-krona-border rounded-xl p-4 shadow-krona-soft flex flex-col justify-between space-y-3 text-xs`,children:[(0,y.jsxs)(`div`,{children:[(0,y.jsxs)(`div`,{className:`flex items-center justify-between pb-2 border-b border-krona-border`,children:[(0,y.jsxs)(`div`,{className:`flex items-center gap-1.5 font-bold text-krona-primary`,children:[(0,y.jsx)(c,{className:`w-4 h-4 text-krona-gold`}),(0,y.jsx)(`span`,{children:`Консоль тестового прогона (Test Run)`})]}),(0,y.jsxs)(n,{variant:`gold`,size:`sm`,disabled:x,onClick:F,className:`text-xs`,children:[(0,y.jsx)(d,{className:`w-3.5 h-3.5 mr-1`}),x?`Выполнение...`:`Тестовый запуск`]})]}),(0,y.jsx)(`p`,{className:`text-[11px] text-krona-secondary pt-2`,children:`Симуляция сквозного прохождения входящего события по всем шагам сценария с замером задержки каждого узла:`}),(0,y.jsxs)(`div`,{className:`mt-3 bg-zinc-950 text-zinc-200 font-mono text-[11px] p-3 rounded-xl min-h-[320px] max-h-[460px] overflow-y-auto space-y-2.5 border border-zinc-800`,children:[C.length===0?(0,y.jsx)(`div`,{className:`text-zinc-500 text-center py-20`,children:`Нажмите «Тестовый запуск» для симуляции выполнения сценария`}):C.map(e=>(0,y.jsxs)(`div`,{className:`space-y-0.5 animate-fade-in`,children:[(0,y.jsxs)(`div`,{className:`flex items-center justify-between text-[10px]`,children:[(0,y.jsxs)(`span`,{className:`text-krona-gold font-bold`,children:[`[ШАГ `,e.stepNumber,`] `,e.nodeTitle]}),(0,y.jsxs)(`span`,{className:`text-zinc-400`,children:[e.latencyMs,` ms`]})]}),(0,y.jsx)(`div`,{className:`text-zinc-300 pl-2 border-l border-zinc-700`,children:e.output}),(0,y.jsxs)(`div`,{className:`text-[10px] pl-2 font-bold`,children:[e.status===`success`&&(0,y.jsxs)(`span`,{className:`text-emerald-400 flex items-center gap-1`,children:[(0,y.jsx)(f,{className:`w-3 h-3`}),` УСПЕШНО`]}),e.status===`running`&&(0,y.jsxs)(`span`,{className:`text-amber-400 flex items-center gap-1`,children:[(0,y.jsx)(u,{className:`w-3 h-3 animate-spin`}),` ВЫПОЛНЕНИЕ...`]})]})]},e.stepNumber)),T&&(0,y.jsx)(`div`,{className:`pt-2 border-t border-zinc-800 text-emerald-400 font-bold text-center`,children:`✓ ВСЕ ШАГИ ВЫПОЛНЕНЫ УСПЕШНО (ИТОГО: 384 ms)`})]})]}),(0,y.jsxs)(`div`,{className:`p-2.5 bg-krona-workspace rounded-lg border border-krona-border text-[11px] text-krona-secondary flex items-center gap-2`,children:[(0,y.jsx)(l,{className:`w-4 h-4 text-krona-green shrink-0`}),(0,y.jsx)(`span`,{children:`Логи тестового запуска записываются в журнал аудита безопасности.`})]})]})]}),D&&(0,y.jsx)(p,{isOpen:D,onClose:()=>O(!1),title:`Добавить узел автоматизации`,subtitle:`Выбор типа операции в цепочке`,maxWidth:`sm`,footer:(0,y.jsxs)(`div`,{className:`flex gap-2 w-full justify-end`,children:[(0,y.jsx)(n,{variant:`secondary`,onClick:()=>O(!1),children:`Отмена`}),(0,y.jsx)(n,{variant:`primary`,onClick:I,children:`Добавить в сценарий`})]}),children:(0,y.jsxs)(`div`,{className:`space-y-3 text-xs`,children:[(0,y.jsxs)(`div`,{className:`space-y-1`,children:[(0,y.jsx)(`label`,{className:`font-semibold text-krona-primary`,children:`Тип узла:`}),(0,y.jsxs)(`select`,{value:k,onChange:e=>A(e.target.value),className:`w-full p-2 bg-krona-workspace border border-krona-border rounded-lg text-krona-primary focus:outline-none focus:border-krona-green`,children:[(0,y.jsx)(`option`,{value:`action`,children:`Действие (Action)`}),(0,y.jsx)(`option`,{value:`condition`,children:`Условие (Condition)`}),(0,y.jsx)(`option`,{value:`ai`,children:`ИИ-агент (Krona AI)`}),(0,y.jsx)(`option`,{value:`trigger`,children:`Триггер (Trigger)`})]})]}),(0,y.jsxs)(`div`,{className:`space-y-1`,children:[(0,y.jsx)(`label`,{className:`font-semibold text-krona-primary`,children:`Название шага:`}),(0,y.jsx)(`input`,{type:`text`,value:j,onChange:e=>M(e.target.value),placeholder:`Например: Отправить уведомление в Telegram администратору`,className:`w-full p-2 bg-krona-workspace border border-krona-border rounded-lg text-krona-primary focus:outline-none focus:border-krona-green`})]}),(0,y.jsxs)(`div`,{className:`space-y-1`,children:[(0,y.jsx)(`label`,{className:`font-semibold text-krona-primary`,children:`Описание / Логика:`}),(0,y.jsx)(`textarea`,{rows:2,value:N,onChange:e=>P(e.target.value),placeholder:`Укажите условия или параметры вызова...`,className:`w-full p-2 bg-krona-workspace border border-krona-border rounded-lg text-krona-primary focus:outline-none focus:border-krona-green resize-none`})]})]})})]})};export{x as AutomationModule}; |