bystro-pomoschnika-kolleg-do/index.html

287 lines
14 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="ru" data-theme="light">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Помощник по договорам</title>
<link rel="stylesheet" href="design-system/kt-ai-fonts.css">
<link rel="stylesheet" href="design-system/kt-ai-tokens.css">
<link rel="stylesheet" href="design-system/kt-ai-components.css">
<link rel="stylesheet" href="design-system/kt-ai-page.css">
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>📄</text></svg>">
<style>
a.kt-ai-btn { text-decoration: none; }
.chat-container { max-width: 720px; margin: 0 auto; }
.chat-messages { min-height: 280px; max-height: 420px; overflow-y: auto; padding: var(--kt-ai-space-6); border: 1px solid var(--kt-ai-border); border-radius: var(--kt-ai-radius-xl); background: var(--kt-ai-bg-soft); margin-bottom: var(--kt-ai-space-6); }
.chat-message { margin-bottom: var(--kt-ai-space-4); padding: var(--kt-ai-space-4); border-radius: var(--kt-ai-radius-lg); }
.chat-message.user { background: var(--kt-ai-primary); color: var(--kt-ai-fg); margin-left: 20%; }
.chat-message.bot { background: var(--kt-ai-card-bg); border: 1px solid var(--kt-ai-border); margin-right: 20%; }
.chat-message .link { color: var(--kt-ai-link); text-decoration: underline; }
.faq-item { cursor: pointer; transition: all 0.2s; }
.faq-item:hover { background: var(--kt-ai-bg-soft); }
.faq-answer { display: none; padding: var(--kt-ai-space-4); background: var(--kt-ai-bg-soft); border-radius: var(--kt-ai-radius-lg); margin-top: var(--kt-ai-space-2); }
.faq-item.active .faq-answer { display: block; }
.faq-item.active .faq-question { color: var(--kt-ai-primary); }
.empty-state { text-align: center; padding: var(--kt-ai-space-10); color: var(--kt-ai-fg-muted); }
</style>
</head>
<body class="kt-ai-app" data-kt-data-mode="demo">
<header class="kt-ai-pagehead">
<div class="kt-ai-wrap kt-ai-pagehead-in">
<div style="display:flex;align-items:center;gap:var(--kt-ai-space-3)">
<img src="https://code.vibe42.kz/tore/aitu/kt-logo.svg" alt="Казахтелеком" height="28">
<strong>Помощник по договорам</strong>
</div>
<span class="kt-ai-spacer"></span>
<span class="kt-ai-chip" data-tone="orange">Демо-данные</span>
</div>
</header>
<section class="kt-ai-hero" data-align="center">
<div class="kt-ai-wrap">
<h1>Помощь по договорному порталу</h1>
<p class="kt-ai-hero-sub">Задайте вопрос о создании договора, маршруте согласования или получите ссылку на инструкцию</p>
</div>
</section>
<section class="kt-ai-section" data-divider="true">
<div class="kt-ai-wrap">
<div class="kt-ai-section-head">
<h2>Чат с помощником</h2>
<p>Введите вопрос — получите короткий ответ со ссылкой на инструкцию</p>
</div>
<div class="chat-container">
<div class="chat-messages" id="chatMessages">
<div class="empty-state" id="emptyState">
<p>Здесь появятся ваши вопросы и ответы</p>
</div>
</div>
<form id="chatForm" style="display:flex;gap:var(--kt-ai-space-3);align-items:flex-end">
<div class="kt-ai-field" style="flex:1;margin:0">
<label for="questionInput">Ваш вопрос</label>
<input type="text" id="questionInput" class="kt-ai-input" placeholder="Как создать договор? Где маршрут согласования?" required>
</div>
<button type="submit" class="kt-ai-btn" data-variant="primary" data-size="lg">Получить ответ</button>
</form>
</div>
</div>
</section>
<section class="kt-ai-section" data-divider="true">
<div class="kt-ai-wrap">
<div class="kt-ai-section-head">
<h2>Популярные вопросы</h2>
<p>Нажмите на вопрос, чтобы увидеть ответ</p>
</div>
<div id="faqList" style="max-width:720px;margin:0 auto">
<!-- FAQ items rendered by JS -->
</div>
</div>
</section>
<section class="kt-ai-section" data-divider="true">
<div class="kt-ai-wrap">
<div class="kt-ai-section-head">
<h2>О системе</h2>
<p>Помощник работает по инструкциям договорного портала</p>
</div>
<div class="kt-ai-grid" style="margin-top:var(--kt-ai-space-9)">
<article class="kt-ai-tile">
<div class="kt-ai-tile-icon">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path>
<polyline points="14 2 14 8 20 8"></polyline>
</svg>
</div>
<h3>Создание договора</h3>
<p>Пошаговые инструкции по созданию всех типов договоров в системе</p>
</article>
<article class="kt-ai-tile">
<div class="kt-ai-tile-icon">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"></path>
</svg>
</div>
<h3>Маршруты согласования</h3>
<p>Информация о том, кто и в каком порядке согласует договоры</p>
</article>
<article class="kt-ai-tile">
<div class="kt-ai-tile-icon">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path>
<polyline points="22 4 12 14.01 9 11.01"></polyline>
</svg>
</svg>
</div>
<h3>Правила и требования</h3>
<p>Ответы только по инструкциям — никаких домыслов</p>
</article>
</div>
</div>
</section>
<footer class="kt-ai-wrap kt-ai-pagefoot">
<span>© 2026 Казахтелеком</span>
<span class="kt-ai-spacer"></span>
<span>Помощник по договорам</span>
</footer>
<script>
// Демо-данные: популярные вопросы и ответы
const FAQ_DATA = [
{
id: 1,
question: "Как создать договор?",
answer: "Перейдите в раздел «Договоры» → «Создать договор». Выберите тип договора, заполните обязательные поля (контрагент, сумма, срок). Система автоматически сформирует карточку договора. <a class=\"link\" href=\"#\" onclick=\"alert('Откроется инструкция: Создание договора')\">📖 Открыть полную инструкцию</a>"
},
{
id: 2,
question: "Где посмотреть маршрут согласования?",
answer: "В карточке договора нажмите вкладку «Маршрут согласования». Там отображаются все этапы, текущий согласующий и статус каждого этапа. <a class=\"link\" href=\"#\" onclick=\"alert('Откроется инструкция: Маршрут согласования')\">📖 Открыть полную инструкцию</a>"
},
{
id: 3,
question: "Кто согласует договор?",
answer: "Список согласующих зависит от типа и суммы договора. Обычно это: руководитель подразделения, юрист, финансовый директор. Полный список см. в карточке договора. <a class=\"link\" href=\"#\" onclick=\"alert('Откроется инструкция: Согласующие лица')\">📖 Открыть полную инструкцию</a>"
},
{
id: 4,
question: "Как изменить статус договора?",
answer: "Статус договора меняется автоматически при прохождении этапов согласования. Вручную изменить статус могут только пользователи с соответствующими правами. <a class=\"link\" href=\"#\" onclick=\"alert('Откроется инструкция: Статусы договоров')\">📖 Открыть полную инструкцию</a>"
},
{
id: 5,
question: "Где найти шаблон договора?",
answer: "Шаблоны договоров находятся в разделе «Справочники» → «Шаблоны документов». Выберите тип договора и скачайте актуальный шаблон. <a class=\"link\" href=\"#\" onclick=\"alert('Откроется инструкция: Шаблоны договоров')\">📖 Открыть полную инструкцию</a>"
},
{
id: 6,
question: "Как отозвать договор на согласовании?",
answer: "Открыть договор → кнопка «Отозвать на согласовании» → указать причину отзыва. Договор вернётся в статус «Черновик». <a class=\"link\" href=\"#\" onclick=\"alert('Откроется инструкция: Отзыв договора')\">📖 Открыть полную инструкцию</a>"
}
];
// История чата в localStorage
let chatHistory = JSON.parse(localStorage.getItem('chatHistory') || '[]');
// Инициализация
document.addEventListener('DOMContentLoaded', function() {
renderFAQ();
renderChatHistory();
// Обработчик формы чата
document.getElementById('chatForm').addEventListener('submit', function(e) {
e.preventDefault();
const input = document.getElementById('questionInput');
const question = input.value.trim();
if (question) {
addMessage(question, 'user');
const answer = findAnswer(question);
setTimeout(() => {
addMessage(answer, 'bot');
}, 400);
input.value = '';
}
});
});
// Рендер FAQ
function renderFAQ() {
const container = document.getElementById('faqList');
container.innerHTML = FAQ_DATA.map(function(item) {
return '<div class="kt-ai-card faq-item" data-id="' + item.id + '">' +
'<div class="faq-question" style="padding:var(--kt-ai-space-4);font-weight:var(--kt-ai-weight-medium)">' +
item.question +
'</div>' +
'<div class="faq-answer">' + item.answer + '</div>' +
'</div>';
}).join('');
// Клик по вопросам
container.querySelectorAll('.faq-item').forEach(function(el) {
el.addEventListener('click', function() {
this.classList.toggle('active');
});
});
}
// Поиск ответа по ключевым словам
function findAnswer(question) {
const q = question.toLowerCase();
if (q.includes('создать') || q.includes('новый договор')) {
return FAQ_DATA[0].answer;
}
if (q.includes('маршрут') || q.includes('согласование')) {
return FAQ_DATA[1].answer;
}
if (q.includes('кто соглас') || q.includes('согласующ')) {
return FAQ_DATA[2].answer;
}
if (q.includes('статус') || q.includes('изменить')) {
return FAQ_DATA[3].answer;
}
if (q.includes('шаблон') || q.includes('форма')) {
return FAQ_DATA[4].answer;
}
if (q.includes('отозвать') || q.includes('вернуть')) {
return FAQ_DATA[5].answer;
}
return "Я не нашёл точного ответа на ваш вопрос. Попробуйте переформулировать или выберите вопрос из списка популярных. <a class=\"link\" href=\"#\" onclick=\"alert('Откроется поиск по инструкциям')\">🔍 Поиск по инструкциям</a>";
}
// Добавление сообщения в чат
function addMessage(text, type) {
const container = document.getElementById('chatMessages');
const emptyState = document.getElementById('emptyState');
if (emptyState) {
emptyState.style.display = 'none';
}
const messageDiv = document.createElement('div');
messageDiv.className = 'chat-message ' + type;
messageDiv.innerHTML = text;
container.appendChild(messageDiv);
container.scrollTop = container.scrollHeight;
// Сохранение в localStorage
if (type === 'user') {
chatHistory.push({ text: text, type: type, timestamp: Date.now() });
} else {
chatHistory.push({ text: text, type: type, timestamp: Date.now() });
}
localStorage.setItem('chatHistory', JSON.stringify(chatHistory));
}
// Рендер истории чата
function renderChatHistory() {
if (chatHistory.length === 0) return;
const container = document.getElementById('chatMessages');
const emptyState = document.getElementById('emptyState');
if (emptyState) {
emptyState.style.display = 'none';
}
chatHistory.forEach(function(msg) {
const messageDiv = document.createElement('div');
messageDiv.className = 'chat-message ' + msg.type;
messageDiv.innerHTML = msg.text;
container.appendChild(messageDiv);
});
container.scrollTop = container.scrollHeight;
}
</script>
</body>
</html>