feat: Manager подключён к data.js — _MGR_IDENTITY, KPI-полоса на главной и в зарплате

This commit is contained in:
wasrusgen 2026-05-28 22:48:04 +03:00
parent 09eae60c25
commit bbf891190e

View File

@ -238,6 +238,23 @@ body[data-theme="dark"]{--accent:#4338CA;--accent2:#6366F1;--bg:#111827;--card:#
<script src="data.js"></script> <script src="data.js"></script>
<script> <script>
// ── ИДЕНТИЧНОСТЬ КАБИНЕТА (из data.js._HIERARCHY) ────────────────────────────
// Этот кабинет принадлежит менеджеру Анна К. (ak) · Салон Ленина
var _MGR_ID = 'ak';
var _MGR_IDENTITY = (function(){
var mgr = _getMgr(_MGR_ID);
var salon = _getSalon(mgr ? mgr.salon : 'lenina');
return {
mgrId: _MGR_ID,
name: mgr ? mgr.name : 'Анна К.',
short: mgr ? mgr.short : 'АК',
color: mgr ? mgr.color : '#7C3AED',
salon: salon ? salon.salon : 'Салон Ленина',
salonId: salon ? salon.salonId : 'lenina',
admin: salon ? salon.admin.name : 'Анна М.',
};
})();
// ── State ──────────────────────────────────────────────────────────────────── // ── State ────────────────────────────────────────────────────────────────────
window._managerOrders = window._managerOrders || [ window._managerOrders = window._managerOrders || [
{ id:1,client:'Иванова А.С.',phone:'+7 912 345-67-89', { id:1,client:'Иванова А.С.',phone:'+7 912 345-67-89',
@ -1599,11 +1616,26 @@ function screenSalary() {
+'</div>'; +'</div>';
}).join(''); }).join('');
var kpi = _getMgrStats(_MGR_ID, 'Май');
return '<div class="page">' return '<div class="page">'
+'<div class="page-header"><h2>💵 Зарплата</h2>' +'<div class="page-header"><h2>💵 Зарплата</h2>'
+'<span style="font-size:12px;color:var(--muted);font-weight:500">'+month+'</span></div>' +'<span style="font-size:12px;color:var(--muted);font-weight:500">'+month+'</span></div>'
+'<div style="padding:16px">' +'<div style="padding:16px">'
// KPI-контекст из data.js
+(kpi.revenue ? '<div style="display:flex;gap:8px;margin-bottom:14px">'
+'<div style="flex:1;background:#F0FDF4;border-radius:12px;padding:10px 12px;text-align:center">'
+'<div style="font-size:15px;font-weight:800;color:var(--success)">'+Math.round(kpi.revenue/1000)+' тыс ₽</div>'
+'<div style="font-size:9px;color:var(--muted);font-weight:600;margin-top:1px">моя выручка</div></div>'
+'<div style="flex:1;background:#EEF2FF;border-radius:12px;padding:10px 12px;text-align:center">'
+'<div style="font-size:15px;font-weight:800;color:#4338CA">'+kpi.deals+' сд.</div>'
+'<div style="font-size:9px;color:var(--muted);font-weight:600;margin-top:1px">сделок</div></div>'
+'<div style="flex:1;background:#FFFBEB;border-radius:12px;padding:10px 12px;text-align:center">'
+'<div style="font-size:15px;font-weight:800;color:var(--warn)">★ '+kpi.rating+'</div>'
+'<div style="font-size:9px;color:var(--muted);font-weight:600;margin-top:1px">рейтинг</div></div>'
+'</div>' : '')
// Итого карточка // Итого карточка
+'<div style="background:linear-gradient(135deg,var(--accent) 0%,#1a5db0 100%);border-radius:18px;padding:20px;color:#fff;margin-bottom:16px">' +'<div style="background:linear-gradient(135deg,var(--accent) 0%,#1a5db0 100%);border-radius:18px;padding:20px;color:#fff;margin-bottom:16px">'
+'<div style="font-size:12px;font-weight:600;opacity:.75;margin-bottom:4px">Итого за месяц</div>' +'<div style="font-size:12px;font-weight:600;opacity:.75;margin-bottom:4px">Итого за месяц</div>'
@ -1856,11 +1888,39 @@ function screenHome() {
]; ];
var _todaySlogan = _SLOGANS[new Date().getDate() % _SLOGANS.length]; var _todaySlogan = _SLOGANS[new Date().getDate() % _SLOGANS.length];
var nextAppt = todayAppts[0]; var nextAppt = todayAppts[0];
var kpi = _getMgrStats(_MGR_ID, 'Май');
var heroHtml = var heroHtml =
'<div style="background:var(--card);padding:16px 16px 14px;border-bottom:1px solid rgba(0,0,0,.06)">' '<div style="background:var(--card);padding:16px 16px 14px;border-bottom:1px solid rgba(0,0,0,.06)">'
+'<div style="font-size:12px;color:var(--muted);margin-bottom:2px">Чт, 22 мая 2026</div>' +'<div style="display:flex;align-items:center;gap:8px;margin-bottom:6px">'
+'<div style="font-size:20px;font-weight:800;color:var(--ink);margin-bottom:5px">Добрый день, Анна 👋</div>' +'<div style="width:32px;height:32px;border-radius:50%;background:'+_MGR_IDENTITY.color+';display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:800;color:#fff;flex-shrink:0">'+_MGR_IDENTITY.short+'</div>'
+'<div style="font-size:12px;color:var(--muted);font-style:italic;margin-bottom:13px;line-height:1.4">'+_todaySlogan+'</div>' +'<div>'
+'<div style="font-size:11px;color:var(--muted);font-weight:600">'+_MGR_IDENTITY.salon+' · Администратор: '+_MGR_IDENTITY.admin+'</div>'
+'<div style="font-size:10px;color:var(--muted)">Менеджер · Май 2026</div>'
+'</div></div>'
+'<div style="font-size:20px;font-weight:800;color:var(--ink);margin-bottom:4px">Добрый день, '+_MGR_IDENTITY.name.split(' ')[0]+' 👋</div>'
+'<div style="font-size:12px;color:var(--muted);font-style:italic;margin-bottom:10px;line-height:1.4">'+_todaySlogan+'</div>'
// KPI-полоса месяца
+(kpi.visits ? '<div style="display:flex;gap:6px;margin-bottom:13px;padding:10px 12px;background:var(--bg);border-radius:12px">'
+'<div style="flex:1;text-align:center">'
+'<div style="font-size:16px;font-weight:800;color:var(--ink)">'+kpi.visits+'</div>'
+'<div style="font-size:9px;color:var(--muted);font-weight:600">встреч</div></div>'
+'<div style="width:1px;background:rgba(0,0,0,.08)"></div>'
+'<div style="flex:1;text-align:center">'
+'<div style="font-size:16px;font-weight:800;color:var(--success)">'+kpi.deals+'</div>'
+'<div style="font-size:9px;color:var(--muted);font-weight:600">сделок</div></div>'
+'<div style="width:1px;background:rgba(0,0,0,.08)"></div>'
+'<div style="flex:1;text-align:center">'
+'<div style="font-size:16px;font-weight:800;color:'+(kpi.conversion>=30?'var(--success)':'var(--warn)')+'">'+kpi.conversion+'%</div>'
+'<div style="font-size:9px;color:var(--muted);font-weight:600">конверсия</div></div>'
+'<div style="width:1px;background:rgba(0,0,0,.08)"></div>'
+'<div style="flex:1;text-align:center">'
+'<div style="font-size:14px;font-weight:800;color:var(--accent)">'+Math.round((kpi.revenue||0)/1000)+'</div>'
+'<div style="font-size:9px;color:var(--muted);font-weight:600">тыс ₽</div></div>'
+'<div style="width:1px;background:rgba(0,0,0,.08)"></div>'
+'<div style="flex:1;text-align:center">'
+'<div style="font-size:16px;font-weight:800;color:var(--warn)">★ '+(kpi.rating||'—')+'</div>'
+'<div style="font-size:9px;color:var(--muted);font-weight:600">рейтинг</div></div>'
+'</div>' : '')
// Три плитки-счётчика // Три плитки-счётчика
+'<div style="display:flex;gap:8px;margin-bottom:'+(nextAppt?'12px':'0')+'">' +'<div style="display:flex;gap:8px;margin-bottom:'+(nextAppt?'12px':'0')+'">'
+'<div onclick="_nav(\'manager_schedule\')" style="flex:1;background:#EEF2FF;border-radius:13px;padding:10px 12px;cursor:pointer;text-align:center">' +'<div onclick="_nav(\'manager_schedule\')" style="flex:1;background:#EEF2FF;border-radius:13px;padding:10px 12px;cursor:pointer;text-align:center">'