mirror of
https://github.com/wasrusgen/zashita-brandbook.git
synced 2026-06-03 15:44:47 +00:00
fix: remove hardcoded demo deadlines, persist to localStorage, fix action regex
This commit is contained in:
parent
33d9ec4185
commit
cafe84c57f
39
mockup.html
39
mockup.html
@ -2744,6 +2744,8 @@ function startScan() {
|
|||||||
done: false
|
done: false
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
// Сохраняем в localStorage — переживёт перезагрузку страницы
|
||||||
|
try { localStorage.setItem('zashita_deadlines', JSON.stringify(_DEADLINES)); } catch(e){}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(function(e){ console.warn('API /deadlines:', e); });
|
.catch(function(e){ console.warn('API /deadlines:', e); });
|
||||||
@ -2819,6 +2821,7 @@ function _setSignedDate(mode) {
|
|||||||
return {id:idx+100, caseId:'case-new', caseName:(data.meta&&data.meta.type)||'Договор',
|
return {id:idx+100, caseId:'case-new', caseName:(data.meta&&data.meta.type)||'Договор',
|
||||||
title:dl.title, type:dl.type||'Другое', date:dl.date, quote:dl.quote||'', done:false};
|
title:dl.title, type:dl.type||'Другое', date:dl.date, quote:dl.quote||'', done:false};
|
||||||
});
|
});
|
||||||
|
try { localStorage.setItem('zashita_deadlines', JSON.stringify(_DEADLINES)); } catch(e){}
|
||||||
// Показываем что горит
|
// Показываем что горит
|
||||||
var hot = data.deadlines.filter(function(dl){ return dl.status === 'overdue' || dl.status === 'critical'; });
|
var hot = data.deadlines.filter(function(dl){ return dl.status === 'overdue' || dl.status === 'critical'; });
|
||||||
if (hot.length) {
|
if (hot.length) {
|
||||||
@ -3959,28 +3962,15 @@ function elenaCreate(type) {
|
|||||||
// "Извлеки все сроки из договора: даты оплат, уведомлений, пролонгации,
|
// "Извлеки все сроки из договора: даты оплат, уведомлений, пролонгации,
|
||||||
// расторжения, штрафных триггеров. Формат: [{title, type, date, quote}]"
|
// расторжения, штрафных триггеров. Формат: [{title, type, date, quote}]"
|
||||||
|
|
||||||
var _DEADLINES = [
|
// Дедлайны загружаются из localStorage (сохраняются после анализа договора).
|
||||||
{ id:1, caseId:'case-kitchen', caseName:'Кухня · Договор аренды',
|
// Демо-данные НЕ показываются реальным пользователям.
|
||||||
title:'Оплата аренды за май',
|
var _DEADLINES = (function() {
|
||||||
type:'Оплата', date:'2026-05-25',
|
try {
|
||||||
quote:'«Арендная плата вносится не позднее 25-го числа текущего месяца»',
|
var saved = localStorage.getItem('zashita_deadlines');
|
||||||
done:false },
|
if (saved) return JSON.parse(saved);
|
||||||
{ id:2, caseId:'case-kitchen', caseName:'Кухня · Договор аренды',
|
} catch(e) {}
|
||||||
title:'Уведомить арендодателя о непродлении',
|
return []; // новый пользователь — пустой список
|
||||||
type:'Уведомление', date:'2026-06-04',
|
})();
|
||||||
quote:'«Сторона обязана уведомить о намерении не продлевать договор не менее чем за 30 дней»',
|
|
||||||
done:false },
|
|
||||||
{ id:3, caseId:'case-kitchen', caseName:'Кухня · Договор аренды',
|
|
||||||
title:'Плановое продление договора',
|
|
||||||
type:'Пролонгация', date:'2026-07-01',
|
|
||||||
quote:'«Договор пролонгируется автоматически на 12 месяцев при отсутствии уведомления»',
|
|
||||||
done:false },
|
|
||||||
{ id:4, caseId:'case-kitchen', caseName:'Кухня · Договор аренды',
|
|
||||||
title:'Оплата обеспечительного депозита (возврат)',
|
|
||||||
type:'Оплата', date:'2026-07-15',
|
|
||||||
quote:'«Обеспечительный платёж возвращается в течение 45 дней после окончания аренды»',
|
|
||||||
done:false },
|
|
||||||
];
|
|
||||||
|
|
||||||
var _dlFilter = 'all';
|
var _dlFilter = 'all';
|
||||||
var _dlDone = new Set();
|
var _dlDone = new Set();
|
||||||
@ -4578,9 +4568,10 @@ function _buildElenaContext() {
|
|||||||
// Парсит [ДЕЙСТВИЯ: ...] из ответа Елены и возвращает {text, actions[]}
|
// Парсит [ДЕЙСТВИЯ: ...] из ответа Елены и возвращает {text, actions[]}
|
||||||
function _parseElenaActions(reply) {
|
function _parseElenaActions(reply) {
|
||||||
if (!reply) return { text: reply, actions: [] };
|
if (!reply) return { text: reply, actions: [] };
|
||||||
var match = reply.match(/\[ДЕЙСТВИЯ:\s*([^\]]+)\]/);
|
// Ищем [ДЕЙСТВИЯ:...] — возможно обёрнут в ** ** или другой markdown
|
||||||
|
var match = reply.match(/\*{0,2}\[ДЕЙСТВИЯ:\s*([^\]]+)\]\*{0,2}/);
|
||||||
if (!match) return { text: reply, actions: [] };
|
if (!match) return { text: reply, actions: [] };
|
||||||
var text = reply.replace(match[0], '').trim();
|
var text = reply.replace(match[0], '').replace(/\n{3,}/g, '\n\n').trim();
|
||||||
var actions = match[1].split('·').map(function(a){ return a.trim(); }).filter(Boolean);
|
var actions = match[1].split('·').map(function(a){ return a.trim(); }).filter(Boolean);
|
||||||
return { text: text, actions: actions };
|
return { text: text, actions: actions };
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user