krona-front/dist/assets/AutomationModule-CWTQE3B1.js

1 line
No EOL
12 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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};