mirror of
https://github.com/wasrusgen/wasrusgen1-crm.git
synced 2026-06-03 17:44:46 +00:00
feat(manager): typed blockers — client/tech/spec with icons and colors
This commit is contained in:
parent
fefa5f07f9
commit
e86efb2727
@ -1900,24 +1900,26 @@ function screenHome() {
|
|||||||
var idx = all.indexOf(o);
|
var idx = all.indexOf(o);
|
||||||
if (!o.isLead) {
|
if (!o.isLead) {
|
||||||
// Блокер в заказе
|
// Блокер в заказе
|
||||||
var hiTask = (_TASKS[3]||[]).filter(function(t){return !t.done && t.order===o.contract && t.hi;});
|
var bi = _blockerInfo(o);
|
||||||
var taskLabel = hiTask.length ? hiTask[0].text : o.blocker;
|
|
||||||
urgentHtml +=
|
urgentHtml +=
|
||||||
'<div style="margin:0 16px 10px;background:var(--card);border-radius:16px;overflow:hidden;box-shadow:0 3px 14px rgba(0,0,0,.09)">'
|
'<div style="margin:0 16px 10px;background:var(--card);border-radius:16px;overflow:hidden;box-shadow:0 3px 14px rgba(0,0,0,.09)">'
|
||||||
+'<div style="height:3px;background:var(--warn)"></div>'
|
+'<div style="height:3px;background:'+bi.bar+'"></div>'
|
||||||
+'<div style="padding:13px 14px 10px">'
|
+'<div style="padding:13px 14px 10px">'
|
||||||
+'<div style="display:flex;align-items:center;gap:8px;margin-bottom:5px">'
|
+'<div style="display:flex;align-items:center;gap:8px;margin-bottom:6px">'
|
||||||
+'<span style="font-size:15px;font-weight:700;color:var(--ink)">'+o.client+'</span>'
|
+'<span style="font-size:15px;font-weight:700;color:var(--ink)">'+o.client+'</span>'
|
||||||
+'<span style="font-size:10px;background:#F1F5F9;color:#64748B;padding:2px 8px;border-radius:20px;font-weight:700">'+stN[o.stage||1]+'</span>'
|
+'<span style="font-size:10px;background:#F1F5F9;color:#64748B;padding:2px 8px;border-radius:20px;font-weight:700">'+stN[o.stage||1]+'</span>'
|
||||||
+'</div>'
|
+'</div>'
|
||||||
+'<div style="font-size:13px;font-weight:600;color:#92400E;margin-bottom:'+(o.techNote?'3px':'0')+'">⚠️ '+o.blocker+'</div>'
|
+'<div style="display:inline-flex;align-items:center;gap:5px;background:'+bi.bg+';border-radius:8px;padding:5px 10px">'
|
||||||
+(o.techNote?'<div style="font-size:12px;color:var(--muted)">'+o.techNote+'</div>':'')
|
+'<span style="font-size:14px">'+bi.icon+'</span>'
|
||||||
|
+'<span style="font-size:12px;font-weight:700;color:'+bi.color+'">'+bi.label+'</span>'
|
||||||
|
+'</div>'
|
||||||
|
+(o.techNote?'<div style="font-size:12px;color:var(--muted);margin-top:5px">'+o.techNote+'</div>':'')
|
||||||
+'</div>'
|
+'</div>'
|
||||||
+'<div style="padding:0 14px 13px;display:flex;gap:8px">'
|
+'<div style="padding:0 14px 13px;display:flex;gap:8px">'
|
||||||
+'<a href="tel:'+o.phone+'" onclick="event.stopPropagation()" style="flex:0 0 44px;height:40px;background:#EEF2FF;border-radius:10px;display:flex;align-items:center;justify-content:center;text-decoration:none">'
|
+'<a href="tel:'+o.phone+'" onclick="event.stopPropagation()" style="flex:0 0 44px;height:40px;background:#EEF2FF;border-radius:10px;display:flex;align-items:center;justify-content:center;text-decoration:none">'
|
||||||
+'<svg width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="#4338CA" stroke-width="2.5"><path d="M22 16.92v3a2 2 0 01-2.18 2 19.79 19.79 0 01-8.63-3.07A19.5 19.5 0 013.07 9.81a19.79 19.79 0 01-3.07-8.67A2 2 0 012 1h3a2 2 0 012 1.72c.127.96.361 1.903.7 2.81a2 2 0 01-.45 2.11L6.09 8.91a16 16 0 006 6l1.27-1.27a2 2 0 012.11-.45c.907.339 1.85.573 2.81.7A2 2 0 0122 16.92z"/></svg>'
|
+'<svg width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="#4338CA" stroke-width="2.5"><path d="M22 16.92v3a2 2 0 01-2.18 2 19.79 19.79 0 01-8.63-3.07A19.5 19.5 0 013.07 9.81a19.79 19.79 0 01-3.07-8.67A2 2 0 012 1h3a2 2 0 012 1.72c.127.96.361 1.903.7 2.81a2 2 0 01-.45 2.11L6.09 8.91a16 16 0 006 6l1.27-1.27a2 2 0 012.11-.45c.907.339 1.85.573 2.81.7A2 2 0 0122 16.92z"/></svg>'
|
||||||
+'</a>'
|
+'</a>'
|
||||||
+'<button onclick="_openOrder('+idx+')" style="flex:1;height:40px;background:var(--warn);border:none;border-radius:10px;font-size:13px;font-weight:700;color:#fff;cursor:pointer">Разобрать блокер →</button>'
|
+'<button onclick="_openOrder('+idx+')" style="flex:1;height:40px;background:'+bi.bar+';border:none;border-radius:10px;font-size:13px;font-weight:700;color:#fff;cursor:pointer">'+bi.cta+' →</button>'
|
||||||
+'</div>'
|
+'</div>'
|
||||||
+'</div>';
|
+'</div>';
|
||||||
} else {
|
} else {
|
||||||
@ -2157,7 +2159,8 @@ function screenHome() {
|
|||||||
+'<span style="font-size:11px;font-weight:700;background:'+ldC2[o.leadStage]+';color:'+ldT2[o.leadStage]+';padding:3px 9px;border-radius:20px;flex-shrink:0">'+ldN2[o.leadStage]+'</span>'
|
+'<span style="font-size:11px;font-weight:700;background:'+ldC2[o.leadStage]+';color:'+ldT2[o.leadStage]+';padding:3px 9px;border-radius:20px;flex-shrink:0">'+ldN2[o.leadStage]+'</span>'
|
||||||
+'</div>';
|
+'</div>';
|
||||||
} else {
|
} else {
|
||||||
var hasB2 = !!o.blocker;
|
var hasB2 = !!o.blocker || (o.tech && o.tech.some(function(t){return t.status==='waiting_client'||t.status==='client_chosen';}));
|
||||||
|
var bi2 = hasB2 ? _blockerInfo(o) : null;
|
||||||
allHtml += '<div onclick="_openOrder('+idx+')" style="display:flex;align-items:center;gap:11px;padding:11px 14px;'+(isLast?'':'border-bottom:1px solid rgba(0,0,0,.05)')+';cursor:pointer">'
|
allHtml += '<div onclick="_openOrder('+idx+')" style="display:flex;align-items:center;gap:11px;padding:11px 14px;'+(isLast?'':'border-bottom:1px solid rgba(0,0,0,.05)')+';cursor:pointer">'
|
||||||
+'<div style="width:36px;height:36px;border-radius:10px;background:var(--bg);display:flex;align-items:center;justify-content:center;font-size:18px;flex-shrink:0">'+stIc[o.stage||1]+'</div>'
|
+'<div style="width:36px;height:36px;border-radius:10px;background:var(--bg);display:flex;align-items:center;justify-content:center;font-size:18px;flex-shrink:0">'+stIc[o.stage||1]+'</div>'
|
||||||
+'<div style="flex:1;min-width:0">'
|
+'<div style="flex:1;min-width:0">'
|
||||||
@ -2165,7 +2168,7 @@ function screenHome() {
|
|||||||
+'<div style="font-size:11px;color:var(--muted)">'+o.contract+' · '+o.amount.toLocaleString('ru')+' ₽</div>'
|
+'<div style="font-size:11px;color:var(--muted)">'+o.contract+' · '+o.amount.toLocaleString('ru')+' ₽</div>'
|
||||||
+'</div>'
|
+'</div>'
|
||||||
+(hasB2
|
+(hasB2
|
||||||
? '<span style="font-size:10px;font-weight:700;background:#FFFBEB;color:#92400E;padding:3px 9px;border-radius:20px;flex-shrink:0">⚠ блокер</span>'
|
? '<span style="font-size:10px;font-weight:700;background:'+bi2.bg+';color:'+bi2.color+';padding:3px 9px;border-radius:20px;flex-shrink:0;white-space:nowrap">'+bi2.icon+' '+bi2.label+'</span>'
|
||||||
: '<span style="font-size:11px;font-weight:700;background:#EEF2FF;color:#4338CA;padding:3px 9px;border-radius:20px;flex-shrink:0">'+stN[o.stage||1]+'</span>')
|
: '<span style="font-size:11px;font-weight:700;background:#EEF2FF;color:#4338CA;padding:3px 9px;border-radius:20px;flex-shrink:0">'+stN[o.stage||1]+'</span>')
|
||||||
+'</div>';
|
+'</div>';
|
||||||
}
|
}
|
||||||
@ -2188,6 +2191,28 @@ function _homeToggleSched(){
|
|||||||
document.getElementById('screen').innerHTML = renderScreen('manager_home');
|
document.getElementById('screen').innerHTML = renderScreen('manager_home');
|
||||||
document.getElementById('nav').innerHTML = navBar();
|
document.getElementById('nav').innerHTML = navBar();
|
||||||
}
|
}
|
||||||
|
// ── Blocker classifier ────────────────────────────────────────────────────────
|
||||||
|
function _blockerInfo(o){
|
||||||
|
// Приоритет: реальное состояние техники > текст blocker
|
||||||
|
if(o.tech && o.tech.length){
|
||||||
|
var wc=o.tech.filter(function(t){return t.status==='waiting_client';}).length;
|
||||||
|
var cc=o.tech.filter(function(t){return t.status==='client_chosen';}).length;
|
||||||
|
if(cc>0) return {icon:'👆',color:'#059669',bg:'#ECFDF5',bar:'#059669',
|
||||||
|
label:'Клиент выбрал · подтвердить '+cc+' поз.',
|
||||||
|
cta:'Принять выбор'};
|
||||||
|
if(wc>0) return {icon:'⏳',color:'#D97706',bg:'#FEF3C7',bar:'#D97706',
|
||||||
|
label:'Ждём клиента · '+wc+' поз.',
|
||||||
|
cta:'Напомнить клиенту'};
|
||||||
|
}
|
||||||
|
var txt=(o.blocker||'').toLowerCase();
|
||||||
|
if(txt.indexOf('технолог')>=0) return {icon:'🔧',color:'#2563EB',bg:'#EFF6FF',bar:'#3B82F6',
|
||||||
|
label:o.blocker, cta:'Открыть заказ'};
|
||||||
|
if(txt.indexOf('техника')>=0) return {icon:'⚙️',color:'#D97706',bg:'#FFFBEB',bar:'#F59E0B',
|
||||||
|
label:o.blocker, cta:'Разобрать блокер'};
|
||||||
|
return {icon:'⚠️',color:'#92400E',bg:'#FFFBEB',bar:'var(--warn)',
|
||||||
|
label:o.blocker||'Блокер', cta:'Разобрать блокер'};
|
||||||
|
}
|
||||||
|
|
||||||
function _openOrder(i){
|
function _openOrder(i){
|
||||||
window._activeOrder=i;
|
window._activeOrder=i;
|
||||||
var o=window._managerOrders[i];
|
var o=window._managerOrders[i];
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user