Кабинет
Шаблоны

Готовые документы — заполню под ваш случай. Составлять с нуля не нужно 💛
📝
Протокол разногласий
убрать невыгодные пункты
@@ -2136,6 +2171,41 @@ window.addEventListener('DOMContentLoaded', function() {
}
});
+/* ── CRM CABINET ── */
+function ctSearchFilter(q) {
+ q = q.toLowerCase();
+ var rows = document.querySelectorAll('#ct-tbody tr');
+ rows.forEach(function(r){ r.style.display = q && !r.textContent.toLowerCase().includes(q) ? 'none' : ''; });
+}
+
+function updateKPI() {
+ if (!window.CT_DATA) return;
+ var total = CT_DATA.length;
+ var work = CT_DATA.filter(function(r){ return r.status==='work'; }).length;
+ var urg = CT_DATA.filter(function(r){ return r.risk==='high' && r.open; }).length;
+ var done = CT_DATA.filter(function(r){ return r.status==='done'; }).length;
+ var set = function(id,v){ var el=document.getElementById(id); if(el) el.textContent=v; };
+ set('kpi-total', total); set('kpi-work', work); set('kpi-urg', urg); set('kpi-done', done);
+ var b = document.getElementById('side-badge-cases');
+ if(b) b.textContent = CT_DATA.filter(function(r){ return r.open; }).length;
+}
+
+var TAB_TITLES = { cases:'Мои дела', case:'Текущее дело', sroki:'Сроки', shab:'Шаблоны' };
+var _origTabCRM = window.tab;
+window.tab = function(id) {
+ if (_origTabCRM) _origTabCRM(id);
+ var t = document.getElementById('main-hdr-title');
+ if (t) t.textContent = TAB_TITLES[id] || 'Кабинет';
+ // Показать/скрыть пункт "Текущее дело" в сайдбаре
+ var caseLink = document.getElementById('t-case');
+ if (caseLink) caseLink.style.display = id === 'case' ? 'flex' : 'none';
+ if (id === 'cases') setTimeout(updateKPI, 60);
+};
+
+window.addEventListener('DOMContentLoaded', function(){
+ setTimeout(updateKPI, 100);
+});
+
/* ── СТАТУС ЗАКАЗА ── */
const OS_DEADLINES = {
protocol: { 1:'до 12 часов', 2:'до 24 часов', 3:'до 48 часов', sub:'после получения файла договора' },