diff --git a/docs/mockup_manager.html b/docs/mockup_manager.html index 0cd2194..cbf2eb4 100644 --- a/docs/mockup_manager.html +++ b/docs/mockup_manager.html @@ -1844,7 +1844,8 @@ function renderScreen(id) { if (id==='manager_schedule') return screenSchedule(); if (id==='manager_calc') return screenCalc(); if (id==='manager_salary') return screenSalary(); - if (id==='manager_client') return screenClient(); + if (id==='manager_client') return screenClientsList(); + if (id==='manager_client_card') return screenClient(); if (id==='manager_own_tech') return screenOwnTech(); if (id==='manager_tech_client') return screenTechClient(); if (id==='manager_kb') return screenKB(); @@ -3633,7 +3634,118 @@ function _renderSendPreview(msg, sel){ +''; } -// ── CLIENT ──────────────────────────────────────────────────────────────────── +// ── CLIENTS LIST ───────────────────────────────────────────────────────────── +window._clientFilter = window._clientFilter || 'all'; +window._clientSearch = window._clientSearch || ''; + +function screenClientsList() { + var all = window._managerOrders || []; + var filter = window._clientFilter; + var search = (window._clientSearch || '').toLowerCase(); + + // Фильтрация + var filtered = all.filter(function(o) { + var matchFilter = + filter === 'all' ? true : + filter === 'leads' ? !!o.isLead : + filter === 'active' ? (!o.isLead && o.stage < 7) : + filter === 'done' ? (!o.isLead && o.stage >= 7) : true; + var matchSearch = !search || o.client.toLowerCase().indexOf(search) >= 0 + || (o.contract||'').toLowerCase().indexOf(search) >= 0 + || (o.label||'').toLowerCase().indexOf(search) >= 0; + return matchFilter && matchSearch; + }); + + var counts = { + all: all.length, + leads: all.filter(function(o){ return !!o.isLead; }).length, + active: all.filter(function(o){ return !o.isLead && o.stage < 7; }).length, + done: all.filter(function(o){ return !o.isLead && o.stage >= 7; }).length, + }; + + var stageLabel = ['','Замер','Проект','Техника','Технолог','Производство','Сборка','Закрыт']; + var stageColor = ['','#3B82F6','#8B5CF6','#F59E0B','#EF4444','#10B981','#0891B2','#6B7280']; + var leadStageLabel = {new:'Новый',meeting:'Замер',kp:'КП',thinking:'Думает',done:'Договор'}; + var typeIcon = {kitchen:'🍳', wardrobe:'🚪', other:'📦'}; + + // Фильтр-таб + var tabs = [ + {key:'all', label:'Все', cnt:counts.all}, + {key:'leads', label:'Лиды', cnt:counts.leads}, + {key:'active', label:'Активные', cnt:counts.active}, + {key:'done', label:'Закрытые', cnt:counts.done}, + ]; + var tabHtml = '
' + + tabs.map(function(t) { + var active = filter === t.key; + return '
'+t.label+(t.cnt > 0 ? ' '+t.cnt+'' : '')+'
'; + }).join('') + + '
'; + + // Поиск + var searchHtml = '
' + +'
' + +'' + +'' + +(window._clientSearch ? '' : '') + +'
'; + + // Список карточек + var listHtml = filtered.length === 0 + ? '
Клиентов не найдено
' + : filtered.map(function(o, i) { + var idx = all.indexOf(o); + var initials = o.client.split(' ').slice(0,2).map(function(w){ return w[0]; }).join(''); + var avatarColor = o.isLead ? '#F59E0B' : stageColor[o.stage] || '#3B82F6'; + var stageText = o.isLead + ? (leadStageLabel[o.leadStage] || 'Лид') + : (stageLabel[o.stage] || ''); + var stageCol = o.isLead ? '#F59E0B' + : (o.stage >= 7 ? '#6B7280' : stageColor[o.stage] || '#3B82F6'); + var icon = typeIcon[o.type] || '📦'; + var hasBlocker = !!o.blocker; + + return '
' + // Аватар + +'
'+initials+'
' + // Инфо + +'
' + +'
' + +'
'+o.client+'
' + +(hasBlocker ? '
' : '') + +'
' + +'
' + +icon+' '+(o.label || o.type)+(o.contract ? ' · '+o.contract : '') + +'
' + +'
' + // Статус + сумма + +'
' + +'
'+stageText+'
' + +(o.amount ? '
'+Math.round(o.amount/1000)+' тыс ₽
' : '') + +'
' + +'
'; + }).join(''); + + return '
' + +'
' + +'
Клиенты
' + +'
'+all.length+' всего · '+counts.active+' активных
' + +'
' + + tabHtml + + searchHtml + +'
' + + listHtml + +'
' + +'
'; +} + +// ── CLIENT CARD ─────────────────────────────────────────────────────────────── function screenClient() { var o=window._managerOrders[window._activeOrder]||window._managerOrders[0]; var init=o.client.split(' ').slice(0,2).map(function(w){return w[0];}).join(''); @@ -3710,7 +3822,7 @@ function screenClient() { {label:'Телефон', val: o.phone}, {label:'Источник', val: 'Зал'}, {label:'Первый контакт', val: '03.05.2025'}, - {label:'Ответственный', val: 'Анна Соколова'}, + {label:'Ответственный', val: _MGR_IDENTITY.name}, ]; var infoHtml = '
' +infoRows.map(function(r,i){ @@ -3746,7 +3858,7 @@ function screenClient() { +'
'; return '
' - +'' + +'' // Hero +'
' +'
'+init+'
' @@ -3962,7 +4074,7 @@ function _renderAIContract(r){ function navBar() { var s=window._currentScreen||'manager_home'; var isHome = s==='manager_home'||s==='manager_order'||s==='manager_tech'||s==='manager_wizard'||s==='manager_result'; - var isClients = s==='manager_client'||s==='manager_lead'; + var isClients = s==='manager_client'||s==='manager_client_card'||s==='manager_lead'; var isSched = s==='manager_schedule'; var isCalc = s==='manager_salary'||s==='manager_calc'; var isKB = s==='manager_kb';