mirror of
https://github.com/wasrusgen/wasrusgen1-crm.git
synced 2026-06-03 21:24:46 +00:00
Compare commits
No commits in common. "6e0e85db869b56d3e093c6e63d3e74418a8d1a17" and "5ded2c73128a6bb5d53d8ef848484407ca747660" have entirely different histories.
6e0e85db86
...
5ded2c7312
@ -280,10 +280,11 @@ body{font-family:'Inter',sans-serif;background:var(--bg);color:var(--text);displ
|
|||||||
<div class="si" id="si0" onclick="go(0)" style="margin-bottom:4px"><div class="si-num" style="background:rgba(255,255,255,.1);color:rgba(255,255,255,.7)">👤</div><div class="si-body"><div class="si-name">Профиль компании</div><div class="si-sub">О вашей деятельности</div></div></div>
|
<div class="si" id="si0" onclick="go(0)" style="margin-bottom:4px"><div class="si-num" style="background:rgba(255,255,255,.1);color:rgba(255,255,255,.7)">👤</div><div class="si-body"><div class="si-name">Профиль компании</div><div class="si-sub">О вашей деятельности</div></div></div>
|
||||||
<div style="height:1px;background:rgba(255,255,255,.06);margin:4px 18px 8px"></div>
|
<div style="height:1px;background:rgba(255,255,255,.06);margin:4px 18px 8px"></div>
|
||||||
<div class="sb-cap">Путь к результату</div>
|
<div class="sb-cap">Путь к результату</div>
|
||||||
<div class="si active" id="si1" onclick="go(1)"><div class="si-num">1</div><div class="si-body"><div class="si-lbl">Этап 1</div><div class="si-name">Разговор с Еленой</div><div class="si-sub">Знакомство и диагностика</div></div></div>
|
<div class="si active" id="si1" onclick="go(1)"><div class="si-num">1</div><div class="si-body"><div class="si-lbl">Этап 1</div><div class="si-name">Знакомство</div><div class="si-sub">Интервью с Еленой</div></div></div>
|
||||||
<div class="si" id="si3" onclick="go(3)"><div class="si-num">2</div><div class="si-body"><div class="si-lbl">Этап 2</div><div class="si-name">Документы</div><div class="si-sub">Материалы</div></div></div>
|
<div class="si" id="si2" onclick="go(2)"><div class="si-num">2</div><div class="si-body"><div class="si-lbl">Этап 2</div><div class="si-name">Диагностика</div><div class="si-sub">Углубление</div></div></div>
|
||||||
<div class="si" id="si4" onclick="go(4)"><div class="si-num">3</div><div class="si-body"><div class="si-lbl">Этап 3</div><div class="si-name">Анализ</div><div class="si-sub">Модель бизнеса</div></div></div>
|
<div class="si" id="si3" onclick="go(3)"><div class="si-num">3</div><div class="si-body"><div class="si-lbl">Этап 3</div><div class="si-name">Документы</div><div class="si-sub">Материалы</div></div></div>
|
||||||
<div class="si" id="si5" onclick="go(5)"><div class="si-num">4</div><div class="si-body"><div class="si-lbl">Этап 4</div><div class="si-name">План</div><div class="si-sub">ТЗ на программу</div></div></div>
|
<div class="si" id="si4" onclick="go(4)"><div class="si-num">4</div><div class="si-body"><div class="si-lbl">Этап 4</div><div class="si-name">Анализ</div><div class="si-sub">Модель бизнеса</div></div></div>
|
||||||
|
<div class="si" id="si5" onclick="go(5)"><div class="si-num">5</div><div class="si-body"><div class="si-lbl">Этап 5</div><div class="si-name">План</div><div class="si-sub">ТЗ на программу</div></div></div>
|
||||||
<div style="height:1px;background:rgba(255,255,255,.06);margin:8px 18px"></div>
|
<div style="height:1px;background:rgba(255,255,255,.06);margin:8px 18px"></div>
|
||||||
<div class="si" id="si6" onclick="go(6)"><div class="si-num" style="background:rgba(4,120,87,.25);color:#10B981">💬</div><div class="si-body"><div class="si-name">Консультант</div><div class="si-sub">Связаться с Русланом</div></div></div>
|
<div class="si" id="si6" onclick="go(6)"><div class="si-num" style="background:rgba(4,120,87,.25);color:#10B981">💬</div><div class="si-body"><div class="si-name">Консультант</div><div class="si-sub">Связаться с Русланом</div></div></div>
|
||||||
</div>
|
</div>
|
||||||
@ -304,9 +305,9 @@ body{font-family:'Inter',sans-serif;background:var(--bg);color:var(--text);displ
|
|||||||
</div></div>
|
</div></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Этап 1 — Разговор с Еленой (знакомство + диагностика) -->
|
<!-- Этап 1 — Знакомство (живой чат) -->
|
||||||
<div class="sv active" id="sv1">
|
<div class="sv active" id="sv1">
|
||||||
<div class="hero"><div class="hero-ic">💬</div><div><div class="hero-tag">Этап 1 из 4 · В процессе</div><div class="hero-h">Разговор с Еленой</div><div class="hero-d">Расскажите о бизнесе — Елена знакомится и сразу углубляется в детали. Текстом или голосом.</div></div></div>
|
<div class="hero"><div class="hero-ic">💬</div><div><div class="hero-tag">Этап 1 из 5 · В процессе</div><div class="hero-h">Знакомство</div><div class="hero-d">Расскажите Елене о вашем бизнесе — текстом или голосом</div></div></div>
|
||||||
<div class="scroll"><div class="chat" id="chat"></div></div>
|
<div class="scroll"><div class="chat" id="chat"></div></div>
|
||||||
<div class="inbar">
|
<div class="inbar">
|
||||||
<textarea class="inp" id="inp" rows="1" placeholder="Напишите или скажите Елене..." onkeydown="if(event.key==='Enter'&&!event.shiftKey){event.preventDefault();sendMsg()}"></textarea>
|
<textarea class="inp" id="inp" rows="1" placeholder="Напишите или скажите Елене..." onkeydown="if(event.key==='Enter'&&!event.shiftKey){event.preventDefault();sendMsg()}"></textarea>
|
||||||
@ -315,9 +316,15 @@ body{font-family:'Inter',sans-serif;background:var(--bg);color:var(--text);displ
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- Этап 2 — Диагностика -->
|
||||||
|
<div class="sv" id="sv2">
|
||||||
|
<div class="hero"><div class="hero-ic">🔍</div><div><div class="hero-tag">Этап 2 из 5</div><div class="hero-h">Диагностика</div><div class="hero-d">Елена уточняет детали — продолжайте разговор</div></div></div>
|
||||||
|
<div class="scroll"><div class="pad"><div class="run-card"><div class="run-ic">🔍</div><div class="run-t">Диагностика идёт в чате</div><div class="run-d">Елена задаёт уточняющие вопросы прямо в интервью (Этап 1). Когда данных достаточно — переходите к Анализу.</div><button class="btn btn-p" onclick="go(1)">← Вернуться к интервью</button></div></div></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- Этап 3 — Документы -->
|
<!-- Этап 3 — Документы -->
|
||||||
<div class="sv" id="sv3">
|
<div class="sv" id="sv3">
|
||||||
<div class="hero"><div class="hero-ic">📁</div><div><div class="hero-tag">Этап 2 из 4</div><div class="hero-h">Документы</div><div class="hero-d">Загрузите материалы — Елена учтёт их в анализе</div></div></div>
|
<div class="hero"><div class="hero-ic">📁</div><div><div class="hero-tag">Этап 3 из 5</div><div class="hero-h">Документы</div><div class="hero-d">Загрузите материалы — Елена учтёт их в анализе</div></div></div>
|
||||||
<div class="scroll"><div class="pad">
|
<div class="scroll"><div class="pad">
|
||||||
<div class="drop" id="dropZone" onclick="document.getElementById('fileInp').click()">
|
<div class="drop" id="dropZone" onclick="document.getElementById('fileInp').click()">
|
||||||
<div class="drop-ic">📎</div>
|
<div class="drop-ic">📎</div>
|
||||||
@ -331,13 +338,13 @@ body{font-family:'Inter',sans-serif;background:var(--bg);color:var(--text);displ
|
|||||||
|
|
||||||
<!-- Этап 4 — Анализ -->
|
<!-- Этап 4 — Анализ -->
|
||||||
<div class="sv" id="sv4">
|
<div class="sv" id="sv4">
|
||||||
<div class="hero"><div class="hero-ic">🧠</div><div><div class="hero-tag">Этап 3 из 4</div><div class="hero-h">Анализ бизнеса</div><div class="hero-d">Елена строит модель вашего бизнеса</div></div></div>
|
<div class="hero"><div class="hero-ic">🧠</div><div><div class="hero-tag">Этап 4 из 5</div><div class="hero-h">Анализ бизнеса</div><div class="hero-d">Елена строит модель вашего бизнеса</div></div></div>
|
||||||
<div class="scroll"><div class="pad" id="anPad"></div></div>
|
<div class="scroll"><div class="pad" id="anPad"></div></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Этап 5 — План -->
|
<!-- Этап 5 — План -->
|
||||||
<div class="sv" id="sv5">
|
<div class="sv" id="sv5">
|
||||||
<div class="hero"><div class="hero-ic">🚀</div><div><div class="hero-tag">Этап 4 из 4</div><div class="hero-h">План — ТЗ на программу</div><div class="hero-d">Проект системы для вашего бизнеса</div></div></div>
|
<div class="hero"><div class="hero-ic">🚀</div><div><div class="hero-tag">Этап 5 из 5</div><div class="hero-h">План — ТЗ на программу</div><div class="hero-d">Проект системы для вашего бизнеса</div></div></div>
|
||||||
<div class="scroll"><div class="pad" id="specPad"></div></div>
|
<div class="scroll"><div class="pad" id="specPad"></div></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -377,7 +384,7 @@ const urlToken=new URLSearchParams(location.search).get("t");
|
|||||||
if(urlToken)localStorage.setItem("cab_token",urlToken);
|
if(urlToken)localStorage.setItem("cab_token",urlToken);
|
||||||
let token=urlToken||localStorage.getItem("cab_token"), state=null, cur=1;
|
let token=urlToken||localStorage.getItem("cab_token"), state=null, cur=1;
|
||||||
const chat=document.getElementById("chat"), inp=document.getElementById("inp");
|
const chat=document.getElementById("chat"), inp=document.getElementById("inp");
|
||||||
const PCTS={1:25,3:50,4:75,5:100}; // 4 шага для клиента (Этап 1 объединён)
|
const PCTS={1:20,2:40,3:60,4:80,5:100};
|
||||||
function esc(s){return (s||"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}
|
function esc(s){return (s||"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}
|
||||||
function fmt(s){return esc(s).replace(/\*\*(.+?)\*\*/g,"<strong>$1</strong>")}
|
function fmt(s){return esc(s).replace(/\*\*(.+?)\*\*/g,"<strong>$1</strong>")}
|
||||||
|
|
||||||
@ -398,7 +405,7 @@ function go(n){
|
|||||||
document.querySelectorAll('.si').forEach(s=>s.classList.remove('active'));
|
document.querySelectorAll('.si').forEach(s=>s.classList.remove('active'));
|
||||||
document.getElementById('si'+n).classList.add('active');
|
document.getElementById('si'+n).classList.add('active');
|
||||||
if(PCTS[n]!=null){document.getElementById('pbPct').textContent=PCTS[n]+'%';document.getElementById('pbFill').style.width=PCTS[n]+'%';}
|
if(PCTS[n]!=null){document.getElementById('pbPct').textContent=PCTS[n]+'%';document.getElementById('pbFill').style.width=PCTS[n]+'%';}
|
||||||
if(n===1){renderChat1();requestAnimationFrame(scrollChatBottom);} // ре-рендер из общей беседы
|
if(n===1)requestAnimationFrame(scrollChatBottom); // sv1 уже видим — высота посчитана, прыгаем вниз без «пролёта»
|
||||||
if(n===6){renderOpChat();startOpPoll();}else{stopOpPoll();}
|
if(n===6){renderOpChat();startOpPoll();}else{stopOpPoll();}
|
||||||
if(n===3)renderDocs();
|
if(n===3)renderDocs();
|
||||||
if(n===4)renderAnalysis();
|
if(n===4)renderAnalysis();
|
||||||
@ -575,11 +582,11 @@ async function handleFiles(files){
|
|||||||
}
|
}
|
||||||
function renderAll(){
|
function renderAll(){
|
||||||
if(state.client_name)document.getElementById("hdrClient").textContent="· "+state.client_name;
|
if(state.client_name)document.getElementById("hdrClient").textContent="· "+state.client_name;
|
||||||
renderChat1();
|
chat.innerHTML="";
|
||||||
|
state.messages.forEach(m=>addMsg(m.role==="user"?"user":"elena",m.content));
|
||||||
unlockStages();
|
unlockStages();
|
||||||
checkPayment();
|
checkPayment();
|
||||||
}
|
}
|
||||||
function renderChat1(){const c=document.getElementById("chat");if(!c)return;c.innerHTML="";(state.messages||[]).forEach(m=>addMsg(m.role==="user"?"user":"elena",m.content));}
|
|
||||||
function money(n){return (n||0).toLocaleString("ru-RU")+" ₽"}
|
function money(n){return (n||0).toLocaleString("ru-RU")+" ₽"}
|
||||||
function checkPayment(){
|
function checkPayment(){
|
||||||
const crm=state.crm||{};const deal=crm.deal_amount||0;
|
const crm=state.crm||{};const deal=crm.deal_amount||0;
|
||||||
@ -646,7 +653,7 @@ async function payVia(method){
|
|||||||
function unlockStages(){
|
function unlockStages(){
|
||||||
// Этап 4 доступен если есть достаточно сообщений
|
// Этап 4 доступен если есть достаточно сообщений
|
||||||
const enough=state.messages.length>=3;
|
const enough=state.messages.length>=3;
|
||||||
[3,4,5].forEach(n=>{const si=document.getElementById('si'+n);if(si&&(enough||n===3))si.classList.remove('locked');});
|
[2,3,4,5].forEach(n=>{const si=document.getElementById('si'+n);if(enough||n<=3)si.classList.remove('locked');});
|
||||||
}
|
}
|
||||||
|
|
||||||
async function sendMsg(){
|
async function sendMsg(){
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user