krona-front/dist/assets/MarketingModule-CNswhgMV.js

1 line
No EOL
15 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"./play-eIPXoy-j.js";import{C as c,c as l,i as u,o as d,p as f,r as p,t as m,v as h}from"./index-CyHCRa3Z.js";import{t as g}from"./formatters-WvGQLZg0.js";var _={name:`tag`,size:24,node:[[`path`,{d:`M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z`,key:`vktsd0`}],[`circle`,{cx:`7.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`kqv944`}]]};_.node;var v=r(_),y=t(e(),1),b=a(),x=[{id:`camp-1`,title:`Осенний промокод AUTUMN20 (-20% на роллы)`,type:`promo`,segment:`Все зарегистрированные гости`,channel:`Telegram`,status:`active`,sentCount:640,openRate:68.4,revenue:98e3,promoCode:`AUTUMN20`,discountPercent:20},{id:`camp-2`,title:`Реактивация «Мы соскучились!» (+ ролл в подарок)`,type:`reactivation`,segment:`Без заказов более 30 дней`,channel:`WhatsApp`,status:`active`,sentCount:185,openRate:74.2,revenue:48200,promoCode:`COMEBACK`,discountPercent:15},{id:`camp-3`,title:`Приглашение на дегустацию вин и сетов шефа`,type:`broadcast`,segment:`VIP гости с чеком от 5 000 ₽`,channel:`Telegram`,status:`completed`,sentCount:94,openRate:89.1,revenue:142e3}],S=()=>{let{showToast:e}=o(),[t,r]=(0,y.useState)(x),[a,_]=(0,y.useState)(`campaigns`),[S,C]=(0,y.useState)(!1),[w,T]=(0,y.useState)(0),[E,D]=(0,y.useState)(null),[O,k]=(0,y.useState)(!1),[A,j]=(0,y.useState)(``),[M,N]=(0,y.useState)(`Без заказов более 30 дней`),[P,F]=(0,y.useState)(`Telegram`),[I,L]=(0,y.useState)(`SALE15`),[R,z]=(0,y.useState)(3e3),[B,V]=(0,y.useState)(30),[H,U]=(0,y.useState)(248);return(0,b.jsxs)(`div`,{className:`space-y-4 animate-fade-in`,children:[(0,b.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,b.jsxs)(`div`,{children:[(0,b.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,b.jsx)(`h2`,{className:`text-sm font-bold text-krona-primary`,children:`Маркетинг, промо-акции и удержание гостей`}),(0,b.jsx)(m,{level:`target`,size:`sm`})]}),(0,b.jsx)(`p`,{className:`text-xs text-krona-secondary mt-0.5`,children:`Управление промокодами, триггерными рассылками, сегментацией гостей и расчет LTV`})]}),(0,b.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,b.jsxs)(`div`,{className:`flex items-center bg-krona-workspace p-1 rounded-lg border border-krona-border text-xs`,children:[(0,b.jsxs)(`button`,{onClick:()=>_(`campaigns`),className:`px-3 py-1 rounded font-medium transition-colors ${a===`campaigns`?`bg-[#2F684C] text-white shadow-sm`:`text-krona-secondary`}`,children:[`Кампании (`,t.length,`)`]}),(0,b.jsx)(`button`,{onClick:()=>_(`segments`),className:`px-3 py-1 rounded font-medium transition-colors ${a===`segments`?`bg-[#2F684C] text-white shadow-sm`:`text-krona-secondary`}`,children:`Конструктор сегментов`})]}),(0,b.jsxs)(n,{variant:`primary`,size:`sm`,onClick:()=>k(!0),children:[(0,b.jsx)(c,{className:`w-3.5 h-3.5 mr-1`}),`Создать кампанию`]})]})]}),(0,b.jsxs)(`div`,{className:`grid grid-cols-1 sm:grid-cols-3 gap-3.5`,children:[(0,b.jsx)(u,{title:`Выручка по промокодам`,value:g(288200),change:{value:`+24%`,trend:`up`},subtitle:`Сентябрьская кампания`,icon:(0,b.jsx)(v,{className:`w-4 h-4 text-krona-gold`})}),(0,b.jsx)(u,{title:`Конверсия из рассылки в заказ`,value:`19.4%`,change:{value:`+3.1%`,trend:`up`},subtitle:`Telegram & WhatsApp`,icon:(0,b.jsx)(l,{className:`w-4 h-4 text-krona-green`})}),(0,b.jsx)(u,{title:`Возвращено 'спящих' клиентов`,value:`48 гостей`,subtitle:`После авто-триггера 'Мы соскучились'`,icon:(0,b.jsx)(d,{className:`w-4 h-4 text-krona-info`})})]}),a===`campaigns`&&(0,b.jsxs)(`div`,{className:`space-y-4`,children:[(0,b.jsxs)(`div`,{className:`p-4 rounded-xl border border-krona-gold/40 bg-krona-gold/5 space-y-3`,children:[(0,b.jsxs)(`div`,{className:`flex flex-col sm:flex-row sm:items-center justify-between gap-3`,children:[(0,b.jsxs)(`div`,{children:[(0,b.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,b.jsx)(f,{className:`w-4 h-4 text-krona-gold`}),(0,b.jsx)(`h4`,{className:`font-bold text-xs text-krona-primary`,children:`Интерактивная симуляция запуска триггерной рассылки`})]}),(0,b.jsx)(`p`,{className:`text-[11px] text-krona-secondary mt-0.5`,children:`Протестируйте отправку рассылки с промокодом по сегменту «Спящие клиенты» (340 получателей в базе)`})]}),(0,b.jsxs)(n,{variant:`gold`,size:`sm`,disabled:S,onClick:()=>{C(!0),T(10),D({sent:50,delivered:48,opened:32,clicked:12,orders:4,revenue:8400}),setTimeout(()=>{T(50),D({sent:180,delivered:176,opened:130,clicked:54,orders:18,revenue:38200})},600),setTimeout(()=>{T(100),C(!1),D({sent:340,delivered:334,opened:254,clicked:98,orders:34,revenue:74800}),e({title:`Рассылка успешно завершена!`,message:`340 сообщений отправлено в Telegram-бот. Оформлено 34 новых заказа.`,type:`success`})},1200)},className:`shrink-0`,children:[(0,b.jsx)(s,{className:`w-3.5 h-3.5 mr-1`}),S?`Отправка (${w}%)...`:`Запустить симуляцию`]})]}),S&&(0,b.jsxs)(`div`,{className:`space-y-1`,children:[(0,b.jsx)(`div`,{className:`w-full bg-krona-workspace rounded-full h-2 overflow-hidden border border-krona-border`,children:(0,b.jsx)(`div`,{className:`bg-krona-gold h-2 transition-all duration-300 rounded-full`,style:{width:`${w}%`}})}),(0,b.jsxs)(`div`,{className:`flex justify-between text-[10px] text-krona-secondary`,children:[(0,b.jsx)(`span`,{children:`Отправка через шлюз Telegram Bot API...`}),(0,b.jsxs)(`span`,{className:`font-mono font-bold`,children:[w,`%`]})]})]}),E&&(0,b.jsxs)(`div`,{className:`pt-2 border-t border-krona-border/60 grid grid-cols-2 sm:grid-cols-6 gap-2 text-xs`,children:[(0,b.jsxs)(`div`,{className:`p-2 bg-krona-surface rounded-lg border border-krona-border`,children:[(0,b.jsx)(`span`,{className:`text-[10px] text-krona-secondary block`,children:`Отправлено:`}),(0,b.jsx)(`span`,{className:`font-bold font-mono text-krona-primary`,children:E.sent})]}),(0,b.jsxs)(`div`,{className:`p-2 bg-krona-surface rounded-lg border border-krona-border`,children:[(0,b.jsx)(`span`,{className:`text-[10px] text-krona-secondary block`,children:`Доставлено:`}),(0,b.jsx)(`span`,{className:`font-bold font-mono text-emerald-600`,children:E.delivered})]}),(0,b.jsxs)(`div`,{className:`p-2 bg-krona-surface rounded-lg border border-krona-border`,children:[(0,b.jsx)(`span`,{className:`text-[10px] text-krona-secondary block`,children:`Открыто:`}),(0,b.jsx)(`span`,{className:`font-bold font-mono text-sky-600`,children:E.opened})]}),(0,b.jsxs)(`div`,{className:`p-2 bg-krona-surface rounded-lg border border-krona-border`,children:[(0,b.jsx)(`span`,{className:`text-[10px] text-krona-secondary block`,children:`Кликов:`}),(0,b.jsx)(`span`,{className:`font-bold font-mono text-amber-600`,children:E.clicked})]}),(0,b.jsxs)(`div`,{className:`p-2 bg-krona-surface rounded-lg border border-krona-border`,children:[(0,b.jsx)(`span`,{className:`text-[10px] text-krona-secondary block`,children:`Заказов:`}),(0,b.jsx)(`span`,{className:`font-bold font-mono text-emerald-700`,children:E.orders})]}),(0,b.jsxs)(`div`,{className:`p-2 bg-krona-surface rounded-lg border border-krona-border`,children:[(0,b.jsx)(`span`,{className:`text-[10px] text-krona-secondary block`,children:`Выручка:`}),(0,b.jsx)(`span`,{className:`font-bold font-mono text-krona-green`,children:g(E.revenue)})]})]})]}),(0,b.jsxs)(`div`,{className:`bg-krona-surface border border-krona-border rounded-xl shadow-krona-soft p-4 space-y-3`,children:[(0,b.jsx)(`h4`,{className:`text-xs font-bold text-krona-primary uppercase tracking-wider`,children:`Список рекламных кампаний и промо-акций`}),(0,b.jsx)(`div`,{className:`space-y-2 text-xs`,children:t.map(e=>(0,b.jsxs)(`div`,{className:`p-3.5 rounded-xl border border-krona-border bg-krona-workspace flex flex-col sm:flex-row sm:items-center justify-between gap-3 hover:border-krona-border-strong transition-all`,children:[(0,b.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,b.jsx)(`div`,{className:`p-2.5 rounded-xl bg-krona-gold/10 text-krona-gold shrink-0`,children:e.type===`promo`?(0,b.jsx)(v,{className:`w-5 h-5`}):(0,b.jsx)(h,{className:`w-5 h-5`})}),(0,b.jsxs)(`div`,{children:[(0,b.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,b.jsx)(`h5`,{className:`font-bold text-xs text-krona-primary`,children:e.title}),e.promoCode&&(0,b.jsx)(`span`,{className:`px-1.5 py-0.5 rounded bg-krona-surface border border-krona-border font-mono font-bold text-[10px]`,children:e.promoCode})]}),(0,b.jsxs)(`div`,{className:`text-[11px] text-krona-secondary mt-0.5`,children:[`Канал: `,(0,b.jsx)(`strong`,{children:e.channel}),` • Сегмент: `,e.segment]})]})]}),(0,b.jsxs)(`div`,{className:`flex items-center justify-between sm:justify-end gap-4 shrink-0 pt-2 sm:pt-0 border-t sm:border-t-0 border-krona-border/50`,children:[(0,b.jsxs)(`div`,{className:`text-right`,children:[(0,b.jsx)(`div`,{className:`font-mono font-bold text-krona-primary`,children:g(e.revenue)}),(0,b.jsxs)(`div`,{className:`text-[10px] text-krona-secondary`,children:[e.sentCount,` получ. • Open `,e.openRate,`%`]})]}),(0,b.jsx)(i,{variant:e.status===`active`?`green`:`neutral`,size:`sm`,children:e.status===`active`?`Активна`:`Завершена`})]})]},e.id))})]})]}),a===`segments`&&(0,b.jsxs)(`div`,{className:`bg-krona-surface border border-krona-border rounded-xl p-4 shadow-krona-soft space-y-4 text-xs`,children:[(0,b.jsxs)(`div`,{className:`pb-2 border-b border-krona-border`,children:[(0,b.jsx)(`h4`,{className:`font-bold text-sm text-krona-primary`,children:`Конструктор аудиторных сегментов`}),(0,b.jsx)(`p`,{className:`text-[11px] text-krona-secondary`,children:`Настройте правила фильтрации клиентской базы для автоматического таргетинга акций`})]}),(0,b.jsxs)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 gap-4`,children:[(0,b.jsxs)(`div`,{className:`space-y-3 p-3.5 bg-krona-workspace rounded-xl border border-krona-border`,children:[(0,b.jsx)(`span`,{className:`font-bold text-krona-primary block`,children:`Параметры фильтрации:`}),(0,b.jsxs)(`div`,{className:`space-y-1`,children:[(0,b.jsxs)(`label`,{className:`text-krona-secondary flex justify-between`,children:[(0,b.jsx)(`span`,{children:`Минимальная сумма покупок (LTV):`}),(0,b.jsx)(`span`,{className:`font-mono font-bold text-krona-primary`,children:g(R)})]}),(0,b.jsx)(`input`,{type:`range`,min:1e3,max:2e4,step:500,value:R,onChange:e=>{let t=Number(e.target.value);z(t),U(Math.max(20,Math.floor(500-t/50)))},className:`w-full accent-krona-green`})]}),(0,b.jsxs)(`div`,{className:`space-y-1`,children:[(0,b.jsxs)(`label`,{className:`text-krona-secondary flex justify-between`,children:[(0,b.jsx)(`span`,{children:`Не заказывали более:`}),(0,b.jsxs)(`span`,{className:`font-mono font-bold text-krona-primary`,children:[B,` дней`]})]}),(0,b.jsx)(`input`,{type:`range`,min:7,max:90,step:1,value:B,onChange:e=>{let t=Number(e.target.value);V(t),U(Math.max(15,Math.floor(H+t/3)))},className:`w-full accent-krona-green`})]})]}),(0,b.jsxs)(`div`,{className:`p-4 bg-krona-surface rounded-xl border border-krona-border flex flex-col justify-between space-y-3`,children:[(0,b.jsxs)(`div`,{children:[(0,b.jsx)(`span`,{className:`text-[10px] uppercase font-bold text-krona-secondary block`,children:`Размер сегмента по фильтрам:`}),(0,b.jsxs)(`div`,{className:`text-2xl font-bold font-mono text-krona-green mt-1`,children:[H,` гостей`]}),(0,b.jsx)(`p`,{className:`text-[11px] text-krona-secondary mt-1`,children:`~14.2% от общей базы активных контактов CRM`})]}),(0,b.jsx)(`div`,{className:`pt-2 border-t border-krona-border flex gap-2`,children:(0,b.jsx)(n,{variant:`primary`,size:`sm`,onClick:()=>{k(!0),N(`Чек от ${g(R)}, без визитов > ${B}дн`)},className:`w-full`,children:`Создать рассылку для этого сегмента`})})]})]})]}),O&&(0,b.jsx)(p,{isOpen:O,onClose:()=>k(!1),title:`Новая промо-кампания`,subtitle:`Настройка параметров рассылки и промокода`,maxWidth:`sm`,footer:(0,b.jsxs)(`div`,{className:`flex gap-2 w-full justify-end`,children:[(0,b.jsx)(n,{variant:`secondary`,onClick:()=>k(!1),children:`Отмена`}),(0,b.jsx)(n,{variant:`primary`,onClick:t=>{if(t.preventDefault(),!A.trim())return;let n={id:`camp-${Date.now()}`,title:A.trim(),type:`promo`,segment:M,channel:P,status:`active`,sentCount:H,openRate:0,revenue:0,promoCode:I.toUpperCase(),discountPercent:15};r(e=>[n,...e]),k(!1),j(``),e({title:`Кампания создана`,message:`Кампания «${n.title}» добавлена в очередь отправки`,type:`success`})},children:`Запустить кампанию`})]}),children:(0,b.jsxs)(`div`,{className:`space-y-3 text-xs`,children:[(0,b.jsxs)(`div`,{className:`space-y-1`,children:[(0,b.jsx)(`label`,{className:`font-semibold text-krona-primary`,children:`Название акции:`}),(0,b.jsx)(`input`,{type:`text`,value:A,onChange:e=>j(e.target.value),placeholder:`Например: Скидка 15% на роллы в будни`,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,b.jsxs)(`div`,{className:`space-y-1`,children:[(0,b.jsx)(`label`,{className:`font-semibold text-krona-primary`,children:`Целевой сегмент:`}),(0,b.jsx)(`input`,{type:`text`,value:M,onChange:e=>N(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`})]}),(0,b.jsxs)(`div`,{className:`grid grid-cols-2 gap-3`,children:[(0,b.jsxs)(`div`,{className:`space-y-1`,children:[(0,b.jsx)(`label`,{className:`font-semibold text-krona-primary`,children:`Канал отправки:`}),(0,b.jsxs)(`select`,{value:P,onChange:e=>F(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,b.jsx)(`option`,{value:`Telegram`,children:`Telegram`}),(0,b.jsx)(`option`,{value:`WhatsApp`,children:`WhatsApp`}),(0,b.jsx)(`option`,{value:`Push & SMS`,children:`Push & SMS`})]})]}),(0,b.jsxs)(`div`,{className:`space-y-1`,children:[(0,b.jsx)(`label`,{className:`font-semibold text-krona-primary`,children:`Промокод:`}),(0,b.jsx)(`input`,{type:`text`,value:I,onChange:e=>L(e.target.value),className:`w-full p-2 bg-krona-workspace border border-krona-border rounded-lg font-mono font-bold text-krona-primary focus:outline-none focus:border-krona-green uppercase`})]})]})]})})]})};export{S as MarketingModule};