ya-aliya-soprovozhdayu-dogov/index.html

253 lines
14 KiB
HTML
Raw 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">
<style>
a.kt-ai-btn { text-decoration: none; }
.search-box { position: relative; max-width: 720px; margin: 0 auto; }
.search-input { width: 100%; padding: var(--kt-ai-space-4) var(--kt-ai-space-5); font-size: var(--kt-ai-text-lg); border: 2px solid var(--kt-ai-border); border-radius: var(--kt-ai-radius-2xl); background: var(--kt-ai-bg); color: var(--kt-ai-fg); }
.search-input:focus { outline: none; border-color: var(--kt-ai-primary); }
.search-icon { position: absolute; right: var(--kt-ai-space-4); top: 50%; transform: translateY(-50%); color: var(--kt-ai-fg-muted); }
.qa-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(340px, 1fr)); gap: var(--kt-ai-space-5); margin-top: var(--kt-ai-space-8); }
.qa-card { cursor: pointer; transition: transform 0.2s, box-shadow 0.2s; }
.qa-card:hover { transform: translateY(-2px); box-shadow: 0 8px 24px rgba(0,0,0,0.12); }
.qa-card[data-expanded="true"] { grid-column: 1 / -1; }
.qa-answer { display: none; margin-top: var(--kt-ai-space-4); padding-top: var(--kt-ai-space-4); border-top: 1px solid var(--kt-ai-border); }
.qa-card[data-expanded="true"] .qa-answer { display: block; }
.step-list { counter-reset: step; list-style: none; padding: 0; }
.step-list li { position: relative; padding-left: var(--kt-ai-space-10); margin-bottom: var(--kt-ai-space-3); }
.step-list li::before { counter-increment: step; content: counter(step); position: absolute; left: 0; top: 0; width: 28px; height: 28px; background: var(--kt-ai-primary); color: var(--kt-ai-bg); border-radius: var(--kt-ai-radius-full); text-align: center; line-height: 28px; font-size: var(--kt-ai-text-sm); font-weight: var(--kt-ai-weight-semibold); }
.link-hint { color: var(--kt-ai-link); font-size: var(--kt-ai-text-sm); }
.no-source { color: var(--kt-ai-fg-muted); font-style: italic; }
.category-filter { display: flex; flex-wrap: wrap; gap: var(--kt-ai-space-2); justify-content: center; margin-top: var(--kt-ai-space-6); }
.filter-chip { cursor: pointer; }
</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>
<main class="kt-ai-wrap" style="padding-top:var(--kt-ai-space-10);padding-bottom:var(--kt-ai-space-12)">
<section class="kt-ai-hero" data-align="center" style="padding:0;margin-bottom:var(--kt-ai-space-8)">
<h1>Помощник по сопровождению договоров</h1>
<p class="kt-ai-hero-sub" style="max-width:600px;margin:0 auto">
Задайте вопрос о создании заявок, согласовании договоров или поиске решений — получите понятные шаги с инструкциями
</p>
<div class="search-box" style="margin-top:var(--kt-ai-space-6)">
<input type="text" class="search-input" id="searchInput" placeholder="Например: как создать заявку в портале?">
<span class="search-icon">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<circle cx="11" cy="11" r="8"></circle>
<path d="m21 21-4.35-4.35"></path>
</svg>
</span>
</div>
</section>
<div class="category-filter" id="categoryFilter">
<span class="kt-ai-chip filter-chip" data-category="all" data-active="true">Все вопросы</span>
<span class="kt-ai-chip filter-chip" data-category="create">Создание заявки</span>
<span class="kt-ai-chip filter-chip" data-category="approve">Согласование</span>
<span class="kt-ai-chip filter-chip" data-category="find">Поиск решений</span>
<span class="kt-ai-chip filter-chip" data-category="other">Другое</span>
</div>
<div id="emptyState" class="kt-ai-empty" style="display:none;text-align:center;padding:var(--kt-ai-space-12) var(--kt-ai-space-6)">
<svg width="64" height="64" viewBox="0 0 24 24" fill="none" stroke="var(--kt-ai-fg-faint)" stroke-width="1.5" style="margin-bottom:var(--kt-ai-space-4)">
<circle cx="11" cy="11" r="8"></circle>
<path d="m21 21-4.35-4.35"></path>
</svg>
<h3 style="color:var(--kt-ai-fg);margin-bottom:var(--kt-ai-space-2)">Ничего не найдено</h3>
<p style="color:var(--kt-ai-fg-muted)">Попробуйте изменить поисковый запрос или категорию</p>
</div>
<div class="qa-grid" id="qaGrid"></div>
</main>
<footer class="kt-ai-wrap kt-ai-pagefoot">
<span>© 2026 Казахтелеком — Помощник по договорам</span>
<span class="kt-ai-spacer"></span>
<span style="color:var(--kt-ai-fg-muted)">База знаний для сотрудников</span>
</footer>
<script>
// === Демо-данные: база знаний ===
const DEMO_DATA = [
{
id: 1,
category: 'create',
question: 'Как создать заявку в портале?',
answer: '<ol class="step-list"><li>Войдите в портал по ссылке <a href="#" class="link-hint">portal.kazakhtelecom.kz</a></li><li>Нажмите кнопку «Создать заявку» в верхнем меню</li><li>Заполните обязательные поля: тип договора, контрагент, сумма</li><li>Прикрепите скан-копии документов</li><li>Нажмите «Отправить на согласование»</li></ol>',
link: null
},
{
id: 2,
category: 'create',
question: 'Какие документы нужны для создания заявки?',
answer: '<ol class="step-list"><li>Устав контрагента (действующая редакция)</li><li>Свидетельство о регистрации (ОГРН)</li><li>Приказ о назначении руководителя</li><li>Доверенность (если подписывает не руководитель)</li><li>Коммерческое предложение или счёт</li></ol>',
link: null
},
{
id: 3,
category: 'approve',
question: 'Кого добавить в согласование?',
answer: '<ol class="step-list"><li>Руководитель вашего департамента (обязательно)</li><li>Юридический департамент — для договоров свыше 1 млн ₸</li><li>Финансовый департамент — если есть оплата</li><li>Департамент безопасности — для доступа к инфраструктуре</li></ol><p style="margin-top:var(--kt-ai-space-3);color:var(--kt-ai-fg-muted)">Маршрут согласования формируется автоматически по сумме и типу договора.</p>',
link: null
},
{
id: 4,
category: 'approve',
question: 'Сколько времени занимает согласование?',
answer: '<p>Нормативные сроки:</p><ul class="step-list"><li>До 500 тыс. ₸ — 3 рабочих дня</li><li>От 500 тыс. до 5 млн ₸ — 5 рабочих дней</li><li>Свыше 5 млн ₸ — 10 рабочих дней</li></ul>',
link: null
},
{
id: 5,
category: 'find',
question: 'Где найти решение по договору?',
answer: '<ol class="step-list"><li>Откройте портал в разделе «Мои заявки»</li><li>Найдите нужный договор по номеру или названию</li><li>Кликните на строку заявки</li><li>Перейдите на вкладку «Решения»</li><li>Скачайте файл с подписью и печатью</li></ol>',
link: null
},
{
id: 6,
category: 'find',
question: 'Как посмотреть историю изменений договора?',
answer: '<ol class="step-list"><li>Откройте карточку договора</li><li>Нажмите вкладку «История» вверху</li><li>Увидите все изменения с датами и авторами</li><li>Можно скачать любую версию документа</li></ol>',
link: null
},
{
id: 7,
category: 'other',
question: 'Что делать, если заявка возвращена на доработку?',
answer: '<ol class="step-list"><li>Откройте уведомление о возврате</li><li>Прочитайте комментарий согласующего</li><li>Исправьте замечания в заявке</li><li>Нажмите «Отправить повторно»</li></ol><p style="margin-top:var(--kt-ai-space-3);color:var(--kt-ai-fg-muted)">Заявка останется в том же маршруте согласования, срок обнулится.</p>',
link: null
},
{
id: 8,
category: 'other',
question: 'Как отозвать заявку на согласовании?',
answer: '<ol class="step-list"><li>Найдите заявку в разделе «Мои заявки»</li><li>Убедитесь, что статус «На согласовании»</li><li>Нажмите кнопку «Отозвать»</li><li>Укажите причину отзыва (обязательно)</li><li>Подтвердите отзыв</li></ol><p style="margin-top:var(--kt-ai-space-3);color:var(--kt-ai-fg-muted)">После отзыва заявка перейдёт в статус «Черновик».</p>',
link: null
}
];
// === Состояние приложения ===
const FILTERS = [
{ id: 'category', label: 'Категория', affects: ['table'] }
];
let state = {
currentCategory: 'all',
searchQuery: ''
};
// === Инициализация ===
document.addEventListener('DOMContentLoaded', () => {
renderQA();
setupEventListeners();
});
// === Рендеринг карточек ===
function renderQA() {
const grid = document.getElementById('qaGrid');
const emptyState = document.getElementById('emptyState');
let data = DEMO_DATA;
// Фильтр по категории
if (state.currentCategory !== 'all') {
data = data.filter(q => q.category === state.currentCategory);
}
// Поиск
if (state.searchQuery) {
const query = state.searchQuery.toLowerCase();
data = data.filter(q =>
q.question.toLowerCase().includes(query) ||
q.answer.toLowerCase().includes(query)
);
}
if (data.length === 0) {
grid.innerHTML = '';
emptyState.style.display = 'block';
return;
}
emptyState.style.display = 'none';
grid.innerHTML = data.map(q => {
const linkHtml = q.link
? `<p class="link-hint" style="margin-top:var(--kt-ai-space-3)">📄 <a href="${q.link}" target="_blank" rel="noopener">Полная инструкция</a></p>`
: `<p class="no-source" style="margin-top:var(--kt-ai-space-3);font-size:var(--kt-ai-text-sm)">Источника пока нет</p>`;
return `
<div class="kt-ai-card qa-card" data-id="${q.id}" data-expanded="false" onclick="toggleCard(${q.id})">
<div style="display:flex;justify-content:space-between;align-items:flex-start;gap:var(--kt-ai-space-3)">
<h3 style="margin:0;color:var(--kt-ai-fg)">${q.question}</h3>
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="var(--kt-ai-fg-muted)" stroke-width="2" style="flex-shrink:0;transition:transform 0.3s" class="chevron">
<path d="m6 9 6 6 6-6"></path>
</svg>
</div>
<div class="qa-answer">
${q.answer}
${linkHtml}
</div>
</div>
`}).join('');
}
// === Переключение карточки ===
function toggleCard(id) {
const cards = document.querySelectorAll('.qa-card');
cards.forEach(card => {
if (parseInt(card.dataset.id) !== id) {
card.dataset.expanded = 'false';
} else {
card.dataset.expanded = card.dataset.expanded === 'true' ? 'false' : 'true';
}
});
}
// === Обработчики событий ===
function setupEventListeners() {
// Поиск
document.getElementById('searchInput').addEventListener('input', (e) => {
state.searchQuery = e.target.value;
renderQA();
});
// Фильтры категорий
document.querySelectorAll('.filter-chip').forEach(chip => {
chip.addEventListener('click', () => {
document.querySelectorAll('.filter-chip').forEach(c => c.dataset.active = 'false');
chip.dataset.active = 'true';
state.currentCategory = chip.dataset.category;
renderQA();
});
});
}
// Сделать функцию доступной глобально
window.toggleCard = toggleCard;
</script>
</body>
</html>