mirror of
https://github.com/wasrusgen/wasrusgen1-crm.git
synced 2026-06-03 17:44:46 +00:00
feat: Manager подключён к data.js — _MGR_IDENTITY, KPI-полоса на главной и в зарплате
This commit is contained in:
parent
09eae60c25
commit
bbf891190e
@ -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">'
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user