Помощник по скидкам: обучение, ошибки, AI, тесты
This commit is contained in:
parent
d1d30fcb7d
commit
02cf5cab43
1097
discount-helper/app.js
Normal file
1097
discount-helper/app.js
Normal file
File diff suppressed because it is too large
Load Diff
798
discount-helper/data.js
Normal file
798
discount-helper/data.js
Normal file
@ -0,0 +1,798 @@
|
|||||||
|
// === БАЗА ЗНАНИЙ ===
|
||||||
|
// Центральный источник данных для всего приложения
|
||||||
|
|
||||||
|
const KB = {
|
||||||
|
// Ошибки
|
||||||
|
errors: [
|
||||||
|
{
|
||||||
|
id: 'err_001',
|
||||||
|
code: '403',
|
||||||
|
title: 'Нет прав на создание скидки',
|
||||||
|
meaning: 'У пользователя недостаточно прав для выполнения операции',
|
||||||
|
causes: [
|
||||||
|
'Отсутствует роль "Менеджер по скидкам"',
|
||||||
|
'Истек срок действия полномочий',
|
||||||
|
'Попытка создать скидку выше лимита'
|
||||||
|
],
|
||||||
|
solution: [
|
||||||
|
'Проверьте свою роль в системе (Раздел "Профиль")',
|
||||||
|
'Убедитесь, что размер скидки входит в ваш лимит',
|
||||||
|
'При необходимости запросите согласование у руководителя',
|
||||||
|
'Обратитесь к администратору для расширения прав'
|
||||||
|
],
|
||||||
|
contact: 'helpdesk@kazakhtelecom.kz, внутренний номер: 1111'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'err_002',
|
||||||
|
code: 'TARIFF_NOT_FOUND',
|
||||||
|
title: 'Тариф не найден',
|
||||||
|
meaning: 'Выбранный тариф недоступен для применения скидки',
|
||||||
|
causes: [
|
||||||
|
'Тариф архивный или выведен из эксплуатации',
|
||||||
|
'На тариф действуют ограничения по скидкам',
|
||||||
|
'Неверно выбран код тарифа в системе'
|
||||||
|
],
|
||||||
|
solution: [
|
||||||
|
'Проверьте актуальность тарифа в справочнике',
|
||||||
|
'Убедитесь, что тариф поддерживает скидки',
|
||||||
|
'Сверьте код тарифа с официальным каталогом',
|
||||||
|
'Выберите альтернативный тариф из доступных'
|
||||||
|
],
|
||||||
|
contact: 'Отдел продуктового маркетинга, номер: 2222'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'err_003',
|
||||||
|
code: 'DISCOUNT_LIMIT',
|
||||||
|
title: 'Превышен лимит скидки',
|
||||||
|
meaning: 'Запрошенный размер скидки превышает максимально допустимый',
|
||||||
|
causes: [
|
||||||
|
'Размер скидки выше полномочий менеджера',
|
||||||
|
'Превышен совокупный лимит на клиента',
|
||||||
|
'Для тарифа установлен максимальный порог'
|
||||||
|
],
|
||||||
|
solution: [
|
||||||
|
'Проверьте максимально допустимый размер скидки для тарифа',
|
||||||
|
'Сверьте свои полномочия (см. таблицу лимитов)',
|
||||||
|
'Запросите согласование у руководителя при необходимости',
|
||||||
|
'Предложите клиенту альтернативный вариант скидки'
|
||||||
|
],
|
||||||
|
contact: 'Руководитель отдела продаж'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'err_004',
|
||||||
|
code: 'INVALID_PERIOD',
|
||||||
|
title: 'Недопустимый период',
|
||||||
|
meaning: 'Указанный срок действия скидки не соответствует правилам',
|
||||||
|
causes: [
|
||||||
|
'Срок меньше минимального (3 месяца)',
|
||||||
|
'Срок превышает максимальный (24 месяца)',
|
||||||
|
'Дата окончания раньше даты начала'
|
||||||
|
],
|
||||||
|
solution: [
|
||||||
|
'Минимальный срок действия скидки — 3 месяца',
|
||||||
|
'Максимальный срок — 24 месяца',
|
||||||
|
'Проверьте, что дата окончания позже даты начала',
|
||||||
|
'Используйте стандартные периоды: 3, 6, 12, 24 месяца'
|
||||||
|
],
|
||||||
|
contact: null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'err_005',
|
||||||
|
code: 'CLIENT_NOT_FOUND',
|
||||||
|
title: 'Клиент не найден',
|
||||||
|
meaning: 'Не удалось найти клиента в базе данных',
|
||||||
|
causes: [
|
||||||
|
'Неверно введен ИИН/БИН',
|
||||||
|
'Клиент отсутствует в базе',
|
||||||
|
'Техническая ошибка поиска'
|
||||||
|
],
|
||||||
|
solution: [
|
||||||
|
'Проверьте правильность ввода ИИН/БИН (12/9 цифр)',
|
||||||
|
'Попробуйте найти клиента по номеру договора',
|
||||||
|
'Убедитесь, что клиент активен в системе',
|
||||||
|
'При технической ошибке повторите попытку через 5 минут'
|
||||||
|
],
|
||||||
|
contact: 'Техподдержка: 1111'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'err_006',
|
||||||
|
code: 'DUPLICATE_DISCOUNT',
|
||||||
|
title: 'Дублирующая скидка',
|
||||||
|
meaning: 'На данный тариф уже оформлена активная скидка',
|
||||||
|
causes: [
|
||||||
|
'Скидка уже действует на этом тарифе',
|
||||||
|
'Есть_pending заявка на скидку',
|
||||||
|
'Попытка продления без закрытия предыдущей'
|
||||||
|
],
|
||||||
|
solution: [
|
||||||
|
'Проверьте активные скидки клиента',
|
||||||
|
'Убедитесь, что текущая скидка завершена',
|
||||||
|
'При необходимости оформите продление',
|
||||||
|
'Закройте pending-заявку перед созданием новой'
|
||||||
|
],
|
||||||
|
contact: null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'err_007',
|
||||||
|
code: 'MISSING_FIELD',
|
||||||
|
title: 'Не заполнено обязательное поле',
|
||||||
|
meaning: 'Отсутствуют данные в обязательных полях формы',
|
||||||
|
causes: [
|
||||||
|
'Не выбрано основание для скидки',
|
||||||
|
'Не указан размер скидки',
|
||||||
|
'Не выбран тариф или срок действия'
|
||||||
|
],
|
||||||
|
solution: [
|
||||||
|
'Проверьте все поля, отмеченные звёздочкой (*)',
|
||||||
|
'Обязательно выберите основание скидки',
|
||||||
|
'Укажите размер скидки в процентах или тенге',
|
||||||
|
'Выберите тариф и срок действия'
|
||||||
|
],
|
||||||
|
contact: null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'err_008',
|
||||||
|
code: 'SYSTEM_ERROR',
|
||||||
|
title: 'Системная ошибка',
|
||||||
|
meaning: 'Внутренняя ошибка системы обработки данных',
|
||||||
|
causes: [
|
||||||
|
'Временный сбой сервера',
|
||||||
|
'Превышено время ожидания ответа',
|
||||||
|
'Ошибка базы данных'
|
||||||
|
],
|
||||||
|
solution: [
|
||||||
|
'Повторите операцию через 1-2 минуты',
|
||||||
|
'Очистите кэш браузера (Ctrl+Shift+Delete)',
|
||||||
|
'Попробуйте в другом браузере',
|
||||||
|
'При повторении ошибки обратитесь в техподдержку'
|
||||||
|
],
|
||||||
|
contact: 'helpdesk@kazakhtelecom.kz, 1111'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
|
||||||
|
// Уроки
|
||||||
|
lessons: [
|
||||||
|
{
|
||||||
|
id: 'lesson_01',
|
||||||
|
icon: '💡',
|
||||||
|
title: 'Что такое скидка',
|
||||||
|
description: 'Основы работы со скидками: виды, условия, ограничения',
|
||||||
|
duration: '10 мин',
|
||||||
|
content: `
|
||||||
|
<h2>Что такое скидка?</h2>
|
||||||
|
<p><strong>Скидка</strong> — это уменьшение абонентской платы или стоимости услуги для клиента на определённый период.</p>
|
||||||
|
|
||||||
|
<h3>Зачем используются скидки?</h3>
|
||||||
|
<ul>
|
||||||
|
<li>Удержание существующих клиентов</li>
|
||||||
|
<li>Привлечение новых абонентов</li>
|
||||||
|
<li>Поощрение лояльности</li>
|
||||||
|
<li>Компенсация при жалобах</li>
|
||||||
|
<li>Продвижение новых тарифов</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h3>Когда можно применять скидку?</h3>
|
||||||
|
<div class="info-box success">
|
||||||
|
<strong>✅ Можно:</strong>
|
||||||
|
<ul>
|
||||||
|
<li>Клиент хочет уйти к конкуренту</li>
|
||||||
|
<li>Клиент длительное время пользуется услугами</li>
|
||||||
|
<li>Проводится акция по тарифу</li>
|
||||||
|
<li>Клиент пожаловался на качество</li>
|
||||||
|
<li>Клиент подключает несколько услуг</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="info-box danger">
|
||||||
|
<strong>❌ Нельзя:</strong>
|
||||||
|
<ul>
|
||||||
|
<li>Без согласования превышать лимит</li>
|
||||||
|
<li>Применять к архивным тарифам</li>
|
||||||
|
<li>Создавать скидку без основания</li>
|
||||||
|
<li>Обещать клиенту невыполнимые условия</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3>Виды скидок</h3>
|
||||||
|
<table class="info-table">
|
||||||
|
<tr>
|
||||||
|
<th>Тип</th>
|
||||||
|
<th>Описание</th>
|
||||||
|
<th>Пример</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><strong>Процентная</strong></td>
|
||||||
|
<td>Снижение на X%</td>
|
||||||
|
<td>30% от абонентской платы</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><strong>Фиксированная</strong></td>
|
||||||
|
<td>Снижение на X тенге</td>
|
||||||
|
<td>5 000 ₸ ежемесячно</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><strong>Разовая</strong></td>
|
||||||
|
<td>Единовременное начисление</td>
|
||||||
|
<td>Бонус за подключение</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h3>Кто имеет право создавать скидку?</h3>
|
||||||
|
<ul>
|
||||||
|
<li><strong>Менеджер Call-центра:</strong> до 20%</li>
|
||||||
|
<li><strong>Старший менеджер:</strong> до 40%</li>
|
||||||
|
<li><strong>Руководитель отдела:</strong> до 60%</li>
|
||||||
|
<li><strong>Директор:</strong> без ограничений</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div class="quiz-mini">
|
||||||
|
<h4>📝 Мини-тест</h4>
|
||||||
|
<p><strong>Вопрос:</strong> Какой максимальный размер скидки может предложить менеджер Call-центра?</p>
|
||||||
|
<p><em>Ответ: 20% (смотрите таблицу полномочий выше)</em></p>
|
||||||
|
</div>
|
||||||
|
`
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'lesson_02',
|
||||||
|
icon: '📝',
|
||||||
|
title: 'Как создать скидку',
|
||||||
|
description: 'Пошаговая инструкция по оформлению скидки',
|
||||||
|
duration: '15 мин',
|
||||||
|
content: `
|
||||||
|
<h2>Пошаговая инструкция: Создание скидки</h2>
|
||||||
|
|
||||||
|
<div class="step">
|
||||||
|
<div class="step-number">1</div>
|
||||||
|
<h3>Найдите клиента в системе</h3>
|
||||||
|
<p>Введите ИИН/БИН или номер договора в поиске.</p>
|
||||||
|
<div class="tip">💡 Убедитесь, что клиент активен и не имеет блокировок</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="step">
|
||||||
|
<div class="step-number">2</div>
|
||||||
|
<h3>Выберите тариф для скидки</h3>
|
||||||
|
<p>Перейдите в раздел "Тарифы клиента" и выберите активный тариф.</p>
|
||||||
|
<div class="tip">💡 Скидка применяется только к действующим тарифам</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="step">
|
||||||
|
<div class="step-number">3</div>
|
||||||
|
<h3>Нажмите "Добавить скидку"</h3>
|
||||||
|
<p>Откроется форма создания скидки.</p>
|
||||||
|
<div class="tip">💡 Кнопка находится в карточке тарифа</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="step">
|
||||||
|
<div class="step-number">4</div>
|
||||||
|
<h3>Заполните поля формы</h3>
|
||||||
|
<ul>
|
||||||
|
<li><strong>Тип скидки:</strong> процентная или фиксированная</li>
|
||||||
|
<li><strong>Размер:</strong> числовое значение</li>
|
||||||
|
<li><strong>Срок действия:</strong> от 3 до 24 месяцев</li>
|
||||||
|
<li><strong>Основание:</strong> выберите из списка</li>
|
||||||
|
</ul>
|
||||||
|
<div class="tip">💡 Все поля обязательны для заполнения</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="step">
|
||||||
|
<div class="step-number">5</div>
|
||||||
|
<h3>Проверьте данные</h3>
|
||||||
|
<p>Перед сохранением убедитесь:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Размер скидки в пределах вашего лимита</li>
|
||||||
|
<li>Тариф поддерживает скидки</li>
|
||||||
|
<li>Срок действия корректен</li>
|
||||||
|
<li>Основание выбрано</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="step">
|
||||||
|
<div class="step-number">6</div>
|
||||||
|
<h3>Сохраните скидку</h3>
|
||||||
|
<p>Нажмите "Создать скидку". Система проверит данные и применит скидку.</p>
|
||||||
|
<div class="tip">💡 После сохранения скидка отображается в карточке клиента</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3>Типичные ошибки при создании</h3>
|
||||||
|
<ul>
|
||||||
|
<li>❌ Не выбрано основание — система не сохранит</li>
|
||||||
|
<li>❌ Превышен лимит — требуется согласование</li>
|
||||||
|
<li>❌ Неверный срок — используйте стандартные периоды</li>
|
||||||
|
<li>❌ Дублирование — проверьте активные скидки</li>
|
||||||
|
</ul>
|
||||||
|
`
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'lesson_03',
|
||||||
|
icon: '⚠️',
|
||||||
|
title: 'Типичные ошибки',
|
||||||
|
description: 'Разбор частых ошибок и способы их устранения',
|
||||||
|
duration: '12 мин',
|
||||||
|
content: `
|
||||||
|
<h2>Типичные ошибки и их решения</h2>
|
||||||
|
|
||||||
|
<div class="error-example">
|
||||||
|
<h3>Ошибка 1: "Нет прав на создание скидки"</h3>
|
||||||
|
<p><strong>Причина:</strong> Вы пытаетесь создать скидку выше своего лимита.</p>
|
||||||
|
<p><strong>Решение:</strong></p>
|
||||||
|
<ol>
|
||||||
|
<li>Проверьте свой лимит полномочий</li>
|
||||||
|
<li>Запросите согласование у руководителя</li>
|
||||||
|
<li>Или уменьшите размер скидки</li>
|
||||||
|
</ol>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="error-example">
|
||||||
|
<h3>Ошибка 2: "Тариф не найден"</h3>
|
||||||
|
<p><strong>Причина:</strong> Тариф архивный или недоступен для скидок.</p>
|
||||||
|
<p><strong>Решение:</strong></p>
|
||||||
|
<ol>
|
||||||
|
<li>Проверьте статус тарифа в справочнике</li>
|
||||||
|
<li>Предложите клиенту актуальный тариф</li>
|
||||||
|
<li>Переведите клиента на новый тариф, затем примените скидку</li>
|
||||||
|
</ol>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="error-example">
|
||||||
|
<h3>Ошибка 3: "Дублирующая скидка"</h3>
|
||||||
|
<p><strong>Причина:</strong> На тарифе уже есть активная скидка.</p>
|
||||||
|
<p><strong>Решение:</strong></p>
|
||||||
|
<ol>
|
||||||
|
<li>Проверьте раздел "Активные скидки"</li>
|
||||||
|
<li>Дождитесь окончания текущей скидки</li>
|
||||||
|
<li>Или оформите продление вместо новой</li>
|
||||||
|
</ol>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="error-example">
|
||||||
|
<h3>Ошибка 4: "Недопустимый период"</h3>
|
||||||
|
<p><strong>Причина:</strong> Срок вне допустимого диапазона.</p>
|
||||||
|
<p><strong>Решение:</strong></p>
|
||||||
|
<ol>
|
||||||
|
<li>Минимальный срок: 3 месяца</li>
|
||||||
|
<li>Максимальный срок: 24 месяца</li>
|
||||||
|
<li>Используйте стандартные значения: 3, 6, 12, 24</li>
|
||||||
|
</ol>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3>Таблица: Коды ошибок</h3>
|
||||||
|
<table class="info-table">
|
||||||
|
<tr>
|
||||||
|
<th>Код</th>
|
||||||
|
<th>Описание</th>
|
||||||
|
<th>Действие</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>403</td>
|
||||||
|
<td>Нет прав</td>
|
||||||
|
<td>Согласование</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>TARIFF_NOT_FOUND</td>
|
||||||
|
<td>Тариф не найден</td>
|
||||||
|
<td>Проверить тариф</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>DISCOUNT_LIMIT</td>
|
||||||
|
<td>Превышен лимит</td>
|
||||||
|
<td>Уменьшить / согласовать</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>INVALID_PERIOD</td>
|
||||||
|
<td>Неверный период</td>
|
||||||
|
<td>Исправить срок</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
`
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'lesson_04',
|
||||||
|
icon: '🎯',
|
||||||
|
title: 'Основания для скидки',
|
||||||
|
description: 'Какие основания указывать и когда',
|
||||||
|
duration: '8 мин',
|
||||||
|
content: `
|
||||||
|
<h2>Основания для предоставления скидки</h2>
|
||||||
|
|
||||||
|
<p>Правильный выбор основания важен для отчётности и анализа эффективности скидок.</p>
|
||||||
|
|
||||||
|
<h3>1. Лояльность клиента</h3>
|
||||||
|
<p><strong>Когда использовать:</strong></p>
|
||||||
|
<ul>
|
||||||
|
<li>Клиент пользуется услугами более 1 года</li>
|
||||||
|
<li>Нет жалоб и просрочек</li>
|
||||||
|
<li>Клиент подключает дополнительные услуги</li>
|
||||||
|
</ul>
|
||||||
|
<p><strong>Максимальный размер:</strong> до 25%</p>
|
||||||
|
|
||||||
|
<h3>2. Акция / Продвижение</h3>
|
||||||
|
<p><strong>Когда использовать:</strong></p>
|
||||||
|
<ul>
|
||||||
|
<li>Официальная маркетинговая акция</li>
|
||||||
|
<li>Запуск нового тарифа</li>
|
||||||
|
<li>Сезонное предложение</li>
|
||||||
|
</ul>
|
||||||
|
<p><strong>Максимальный размер:</strong> до 40% (по условиям акции)</p>
|
||||||
|
|
||||||
|
<h3>3. Жалоба клиента</h3>
|
||||||
|
<p><strong>Когда использовать:</strong></p>
|
||||||
|
<ul>
|
||||||
|
<li>Клиент пожаловался на качество</li>
|
||||||
|
<li>Были технические сбои</li>
|
||||||
|
<li>Недовольство обслуживанием</li>
|
||||||
|
</ul>
|
||||||
|
<p><strong>Максимальный размер:</strong> до 50% (компенсация)</p>
|
||||||
|
<div class="tip">💡 Требуется указание номера жалобы</div>
|
||||||
|
|
||||||
|
<h3>4. Удержание клиента</h3>
|
||||||
|
<p><strong>Когда использовать:</strong></p>
|
||||||
|
<ul>
|
||||||
|
<li>Клиент заявил об уходе</li>
|
||||||
|
<li>Получено заявление на расторжение</li>
|
||||||
|
<li>Клиент сравнивает с конкурентами</li>
|
||||||
|
</ul>
|
||||||
|
<p><strong>Максимальный размер:</strong> до 60%</p>
|
||||||
|
<div class="tip">💡 Требуется согласование руководителя</div>
|
||||||
|
|
||||||
|
<h3>5. Мультиуслуга</h3>
|
||||||
|
<p><strong>Когда использовать:</strong></p>
|
||||||
|
<ul>
|
||||||
|
<li>Подключение 2+ услуг одновременно</li>
|
||||||
|
<li>Переход на конвергентный тариф</li>
|
||||||
|
</ul>
|
||||||
|
<p><strong>Максимальный размер:</strong> до 30%</p>
|
||||||
|
|
||||||
|
<div class="quiz-mini">
|
||||||
|
<h4>📝 Проверка знаний</h4>
|
||||||
|
<p><strong>Ситуация:</strong> Клиент хочет уйти к конкуренту из-за высокой цены. Какое основание выбрать?</p>
|
||||||
|
<p><em>Ответ: "Удержание клиента" — это максимальная скидка до 60%</em></p>
|
||||||
|
</div>
|
||||||
|
`
|
||||||
|
}
|
||||||
|
],
|
||||||
|
|
||||||
|
// Инструкции
|
||||||
|
instructions: [
|
||||||
|
{
|
||||||
|
id: 'inst_01',
|
||||||
|
icon: '📋',
|
||||||
|
title: 'Создание процентной скидки',
|
||||||
|
category: 'Базовые операции',
|
||||||
|
steps: [
|
||||||
|
'Откройте карточку клиента',
|
||||||
|
'Перейдите на вкладку "Тарифы"',
|
||||||
|
'Выберите активный тариф',
|
||||||
|
'Нажмите кнопку "Добавить скидку"',
|
||||||
|
'Выберите тип "Процентная"',
|
||||||
|
'Укажите размер в процентах (например, 30)',
|
||||||
|
'Выберите срок действия (3/6/12/24 месяца)',
|
||||||
|
'Выберите основание из списка',
|
||||||
|
'Нажмите "Проверить" — система покажет итоговую сумму',
|
||||||
|
'Нажмите "Создать скидку"'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'inst_02',
|
||||||
|
icon: '💰',
|
||||||
|
title: 'Создание фиксированной скидки',
|
||||||
|
category: 'Базовые операции',
|
||||||
|
steps: [
|
||||||
|
'Откройте карточку клиента',
|
||||||
|
'Перейдите на вкладку "Тарифы"',
|
||||||
|
'Выберите активный тариф',
|
||||||
|
'Нажмите кнопку "Добавить скидку"',
|
||||||
|
'Выберите тип "Фиксированная"',
|
||||||
|
'Укажите сумму в тенге (например, 5000)',
|
||||||
|
'Выберите срок действия',
|
||||||
|
'Выберите основание',
|
||||||
|
'Проверьте, что сумма не превышает абонентскую плату',
|
||||||
|
'Нажмите "Создать скидку"'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'inst_03',
|
||||||
|
icon: '🔄',
|
||||||
|
title: 'Продление существующей скидки',
|
||||||
|
category: 'Работа с активными скидками',
|
||||||
|
steps: [
|
||||||
|
'Найдите клиента в системе',
|
||||||
|
'Откройте раздел "Активные скидки"',
|
||||||
|
'Найдите скидку для продления',
|
||||||
|
'Нажмите кнопку "Продлить"',
|
||||||
|
'Выберите новый срок действия',
|
||||||
|
'Проверьте, что основание актуально',
|
||||||
|
'Нажмите "Подтвердить продление"',
|
||||||
|
'Система создаст новую скидку со старой даты окончания'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'inst_04',
|
||||||
|
icon: '❌',
|
||||||
|
title: 'Отмена / удаление скидки',
|
||||||
|
category: 'Работа с активными скидками',
|
||||||
|
steps: [
|
||||||
|
'Найдите клиента',
|
||||||
|
'Откройте "Активные скидки"',
|
||||||
|
'Выберите скидку для отмены',
|
||||||
|
'Нажмите "Отменить скидку"',
|
||||||
|
'Укажите причину отмены',
|
||||||
|
'Подтвердите операцию',
|
||||||
|
'Скидка будет отменена с текущей даты',
|
||||||
|
'Перерасчёт выполнится автоматически'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'inst_05',
|
||||||
|
icon: '📊',
|
||||||
|
title: 'Проверка лимитов скидки',
|
||||||
|
category: 'Контроль',
|
||||||
|
steps: [
|
||||||
|
'Откройте свой профиль пользователя',
|
||||||
|
'Перейдите в раздел "Полномочия"',
|
||||||
|
'Найдите таблицу "Лимиты на скидки"',
|
||||||
|
'Определите свой максимальный процент',
|
||||||
|
'При создании скидки система автоматически проверит лимит',
|
||||||
|
'При превышении потребуется согласование'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'inst_06',
|
||||||
|
icon: '📄',
|
||||||
|
title: 'Запрос согласования скидки',
|
||||||
|
category: 'Согласования',
|
||||||
|
steps: [
|
||||||
|
'При создании скидки с превышением лимита система предложит "Запросить согласование"',
|
||||||
|
'Нажмите эту кнопку',
|
||||||
|
'Заполните обоснование (почему нужна такая скидка)',
|
||||||
|
'Прикрепите документы при необходимости',
|
||||||
|
'Выберите руководителя для согласования',
|
||||||
|
'Отправьте запрос',
|
||||||
|
'Отслеживайте статус в разделе "Мои согласования"',
|
||||||
|
'После согласования скидка будет доступна для создания'
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
|
||||||
|
// FAQ
|
||||||
|
faq: [
|
||||||
|
{
|
||||||
|
id: 'faq_01',
|
||||||
|
question: 'Как создать скидку?',
|
||||||
|
answer: 'Откройте карточку клиента → Выберите тариф → Нажмите "Добавить скидку" → Заполните форму (тип, размер, срок, основание) → Проверьте данные → Нажмите "Создать". Подробная инструкция в разделе "Обучение" → "Как создать скидку".'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'faq_02',
|
||||||
|
question: 'Почему скидка не применяется?',
|
||||||
|
answer: 'Возможные причины: 1) Превышен ваш лимит — запросите согласование; 2) Тариф не поддерживает скидки — выберите другой; 3) Уже есть активная скидка — дождитесь окончания или продлите; 4) Не заполнены обязательные поля — проверьте форму.'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'faq_03',
|
||||||
|
question: 'Почему не отображается тариф?',
|
||||||
|
answer: 'Тариф может быть: 1) Архивным (выведен из эксплуатации); 2) Неактивным (истёк срок); 3) Недоступным для вашего региона. Проверьте статус тарифа в справочнике или предложите клиенту актуальные тарифы.'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'faq_04',
|
||||||
|
question: 'Как изменить размер скидки?',
|
||||||
|
answer: 'Изменить активную скидку нельзя. Нужно: 1) Отменить текущую скидку; 2) Создать новую с нужным размером. Убедитесь, что новый размер в пределах вашего лимита.'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'faq_05',
|
||||||
|
question: 'Какие поля обязательны?',
|
||||||
|
answer: 'Все поля формы обязательны: тип скидки, размер, срок действия, основание. Без заполнения любого из них система не сохранит скидку.'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'faq_06',
|
||||||
|
question: 'Что делать, если появилась ошибка?',
|
||||||
|
answer: '1) Запишите код ошибки; 2) Откройте раздел "Ошибки" и найдите код; 3) Следуйте пошаговому решению; 4) Если не помогло — обратитесь в техподдержку (контакты указаны в карточке ошибки).'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'faq_07',
|
||||||
|
question: 'Куда обращаться при технической ошибке?',
|
||||||
|
answer: 'При системных ошибках (код SYSTEM_ERROR, таймауты, сбои): 1) Повторите через 5 минут; 2) Очистите кэш браузера; 3) Если не помогло — helpdesk@kazakhtelecom.kz, внутренний номер 1111.'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'faq_08',
|
||||||
|
question: 'Какой максимальный размер скидки я могу предложить?',
|
||||||
|
answer: 'Зависит от вашей роли: Менеджер Call-центра — до 20%; Старший менеджер — до 40%; Руководитель отдела — до 60%; Директор — без ограничений. Проверьте свои полномочия в профиле.'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'faq_09',
|
||||||
|
question: 'Можно ли применить скидку к архивному тарифу?',
|
||||||
|
answer: 'Нет, к архивным тарифам скидки не применяются. Предложите клиенту перейти на актуальный тариф, затем примените скидку.'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'faq_10',
|
||||||
|
question: 'Как проверить, какие скидки активны у клиента?',
|
||||||
|
answer: 'В карточке клиента откройте вкладку "Активные скидки". Там отображаются все действующие скидки с датами начала и окончания, размером и основанием.'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
|
||||||
|
// Тесты
|
||||||
|
tests: [
|
||||||
|
{
|
||||||
|
id: 'test_main',
|
||||||
|
title: 'Готов к работе со скидками',
|
||||||
|
description: 'Итоговый тест по работе со скидками',
|
||||||
|
questions: [
|
||||||
|
{
|
||||||
|
question: 'Какое действие необходимо выполнить первым при создании скидки?',
|
||||||
|
answers: [
|
||||||
|
'Выбрать размер скидки',
|
||||||
|
'Найти клиента в системе',
|
||||||
|
'Сохранить заявку',
|
||||||
|
'Отправить клиенту'
|
||||||
|
],
|
||||||
|
correct: 1,
|
||||||
|
explanation: 'Первым шагом нужно найти клиента в системе по ИИН/БИН или номеру договора.'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
question: 'Максимальный размер скидки для менеджера Call-центра:',
|
||||||
|
answers: ['10%', '20%', '30%', '40%'],
|
||||||
|
correct: 1,
|
||||||
|
explanation: 'Менеджер Call-центра может самостоятельно предлагать скидку до 20%.'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
question: 'Минимальный срок действия скидки:',
|
||||||
|
answers: ['1 месяц', '3 месяца', '6 месяцев', '12 месяцев'],
|
||||||
|
correct: 1,
|
||||||
|
explanation: 'Минимальный срок действия скидки — 3 месяца.'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
question: 'Что делать, если система выдаёт ошибку "Нет прав на создание скидки"?',
|
||||||
|
answers: [
|
||||||
|
'Повторить попытку',
|
||||||
|
'Запросить согласование у руководителя',
|
||||||
|
'Обратиться в техподдержку',
|
||||||
|
'Уменьшить размер скидки или запросить согласование'
|
||||||
|
],
|
||||||
|
correct: 3,
|
||||||
|
explanation: 'Нужно либо уменьшить размер скидки до своего лимита, либо запросить согласование.'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
question: 'Какое основание выбрать, если клиент хочет уйти к конкуренту?',
|
||||||
|
answers: ['Лояльность', 'Акция', 'Удержание клиента', 'Жалоба'],
|
||||||
|
correct: 2,
|
||||||
|
explanation: '"Удержание клиента" — специальное основание для таких ситуаций, максимальная скидка до 60%.'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
question: 'Можно ли изменить активную скидку?',
|
||||||
|
answers: ['Да, в любой момент', 'Нет, нужно отменить и создать новую', 'Только размер', 'Только срок'],
|
||||||
|
correct: 1,
|
||||||
|
explanation: 'Изменить активную скидку нельзя. Нужно отменить текущую и создать новую.'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
question: 'Что означает ошибка TARIFF_NOT_FOUND?',
|
||||||
|
answers: [
|
||||||
|
'Неверный пароль',
|
||||||
|
'Тариф архивный или недоступен',
|
||||||
|
'Клиент не найден',
|
||||||
|
'Системный сбой'
|
||||||
|
],
|
||||||
|
correct: 1,
|
||||||
|
explanation: 'Эта ошибка означает, что выбранный тариф архивный или недоступен для скидок.'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
question: 'Какое поле НЕ является обязательным при создании скидки?',
|
||||||
|
answers: ['Тип скидки', 'Размер', 'Основание', 'Все поля обязательны'],
|
||||||
|
correct: 3,
|
||||||
|
explanation: 'Все поля формы обязательны для заполнения.'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
question: 'Максимальный срок действия скидки:',
|
||||||
|
answers: ['6 месяцев', '12 месяцев', '18 месяцев', '24 месяца'],
|
||||||
|
correct: 3,
|
||||||
|
explanation: 'Максимальный срок действия скидки — 24 месяца.'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
question: 'Что делать при ошибке "Дублирующая скидка"?',
|
||||||
|
answers: [
|
||||||
|
'Создать новую скидку',
|
||||||
|
'Проверить активные скидки и дождаться окончания',
|
||||||
|
'Обратиться в техподдержку',
|
||||||
|
'Удалить клиента'
|
||||||
|
],
|
||||||
|
correct: 1,
|
||||||
|
explanation: 'Нужно проверить активные скидки клиента и дождаться окончания текущей или оформить продление.'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
question: 'Какое основание даёт максимальный размер скидки?',
|
||||||
|
answers: ['Лояльность', 'Акция', 'Удержание клиента', 'Жалоба'],
|
||||||
|
correct: 2,
|
||||||
|
explanation: '"Удержание клиента" позволяет предложить скидку до 60%.'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
question: 'Куда обращаться при системной ошибке SYSTEM_ERROR?',
|
||||||
|
answers: [
|
||||||
|
'Руководителю',
|
||||||
|
'В техподдержку (helpdesk@kazakhtelecom.kz, 1111)',
|
||||||
|
'Клиенту',
|
||||||
|
'В отдел кадров'
|
||||||
|
],
|
||||||
|
correct: 1,
|
||||||
|
explanation: 'При системных ошибках нужно обратиться в техподдержку.'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
|
||||||
|
// Тарифы для калькулятора
|
||||||
|
tariffs: [
|
||||||
|
{ id: 't1', name: 'Интернет ЕШДИ 100', price: 5990 },
|
||||||
|
{ id: 't2', name: 'Интернет ЕШДИ 200', price: 7990 },
|
||||||
|
{ id: 't3', name: 'Интернет ЕШДИ 500', price: 10990 },
|
||||||
|
{ id: 't4', name: 'Домашний телефон + Интернет', price: 4990 },
|
||||||
|
{ id: 't5', name: 'Триколор (ТВ + Интернет + Телефон)', price: 8990 }
|
||||||
|
],
|
||||||
|
|
||||||
|
// Быстрые решения
|
||||||
|
quickSolutions: {
|
||||||
|
'not-created': {
|
||||||
|
title: 'Не создается скидка',
|
||||||
|
steps: [
|
||||||
|
'Проверьте, все ли обязательные поля заполнены (тип, размер, срок, основание)',
|
||||||
|
'Убедитесь, что размер скидки не превышает ваш лимит',
|
||||||
|
'Проверьте, что тариф активен и поддерживает скидки',
|
||||||
|
'Убедитесь, что нет активной скидки на этом тарифе',
|
||||||
|
'Проверьте срок действия (от 3 до 24 месяцев)'
|
||||||
|
],
|
||||||
|
contact: 'Если проблема не решена — раздел "Ошибки" или техподдержка 1111'
|
||||||
|
},
|
||||||
|
'error': {
|
||||||
|
title: 'Появилась ошибка',
|
||||||
|
steps: [
|
||||||
|
'Запишите код ошибки (например, 403, TARIFF_NOT_FOUND)',
|
||||||
|
'Откройте раздел "Ошибки" и найдите код',
|
||||||
|
'Следуйте пошаговому решению из карточки ошибки',
|
||||||
|
'Если ошибки нет в справочнике — используйте AI-помощника',
|
||||||
|
'При технической ошибке повторите через 5 минут'
|
||||||
|
],
|
||||||
|
contact: 'helpdesk@kazakhtelecom.kz'
|
||||||
|
},
|
||||||
|
'no-tariff': {
|
||||||
|
title: 'Не вижу нужный тариф',
|
||||||
|
steps: [
|
||||||
|
'Проверьте, активен ли тариф у клиента',
|
||||||
|
'Убедитесь, что тариф не архивный',
|
||||||
|
'Сверьте код тарифа с официальным каталогом',
|
||||||
|
'Проверьте доступность тарифа в вашем регионе',
|
||||||
|
'Предложите клиенту актуальные тарифы из каталога'
|
||||||
|
],
|
||||||
|
contact: 'Отдел продуктового маркетинга: 2222'
|
||||||
|
},
|
||||||
|
'cant-change': {
|
||||||
|
title: 'Не могу изменить скидку',
|
||||||
|
steps: [
|
||||||
|
'Активную скидку изменить нельзя',
|
||||||
|
'Отмените текущую скидку (раздел "Активные скидки")',
|
||||||
|
'Создайте новую скидку с нужными параметрами',
|
||||||
|
'Убедитесь, что новый размер в пределах лимита',
|
||||||
|
'Перерасчёт выполнится автоматически'
|
||||||
|
],
|
||||||
|
contact: null
|
||||||
|
},
|
||||||
|
'which-choose': {
|
||||||
|
title: 'Какую скидку выбрать',
|
||||||
|
steps: [
|
||||||
|
'Определите цель: удержание, лояльность, жалоба, акция',
|
||||||
|
'Проверьте свой лимит полномочий',
|
||||||
|
'Для удержания — до 60% (требует согласования)',
|
||||||
|
'Для лояльности — до 25%',
|
||||||
|
'При жалобе — до 50% (компенсация)',
|
||||||
|
'По акции — до 40% (по условиям акции)'
|
||||||
|
],
|
||||||
|
contact: null
|
||||||
|
},
|
||||||
|
'check-conditions': {
|
||||||
|
title: 'Проверить условия',
|
||||||
|
steps: [
|
||||||
|
'Откройте карточку клиента',
|
||||||
|
'Проверьте активные тарифы',
|
||||||
|
'Откройте "Активные скидки"',
|
||||||
|
'Убедитесь, что нет дублирующих скидок',
|
||||||
|
'Проверьте срок действия текущих скидок',
|
||||||
|
'Сверьте лимиты в своём профиле'
|
||||||
|
],
|
||||||
|
contact: null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
355
discount-helper/index.html
Normal file
355
discount-helper/index.html
Normal file
@ -0,0 +1,355 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="ru">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>Помощник по скидкам</title>
|
||||||
|
<link rel="stylesheet" href="style.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="app">
|
||||||
|
<!-- Sidebar -->
|
||||||
|
<aside class="sidebar" id="sidebar">
|
||||||
|
<div class="sidebar-header">
|
||||||
|
<div class="logo">
|
||||||
|
<span class="logo-icon">🎯</span>
|
||||||
|
<span class="logo-text">Помощник по скидкам</span>
|
||||||
|
</div>
|
||||||
|
<button class="btn-icon close-sidebar" id="closeSidebar">×</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<nav class="nav">
|
||||||
|
<a href="#" class="nav-item active" data-page="home">
|
||||||
|
<span class="nav-icon">🏠</span>
|
||||||
|
<span class="nav-text">Главная</span>
|
||||||
|
</a>
|
||||||
|
<a href="#" class="nav-item" data-page="search">
|
||||||
|
<span class="nav-icon">🔎</span>
|
||||||
|
<span class="nav-text">Найти ответ</span>
|
||||||
|
</a>
|
||||||
|
<a href="#" class="nav-item" data-page="learning">
|
||||||
|
<span class="nav-icon">📚</span>
|
||||||
|
<span class="nav-text">Обучение</span>
|
||||||
|
</a>
|
||||||
|
<a href="#" class="nav-item" data-page="errors">
|
||||||
|
<span class="nav-icon">⚠️</span>
|
||||||
|
<span class="nav-text">Ошибки</span>
|
||||||
|
</a>
|
||||||
|
<a href="#" class="nav-item" data-page="calculator">
|
||||||
|
<span class="nav-icon">🧮</span>
|
||||||
|
<span class="nav-text">Расчет скидки</span>
|
||||||
|
</a>
|
||||||
|
<a href="#" class="nav-item" data-page="instructions">
|
||||||
|
<span class="nav-icon">📖</span>
|
||||||
|
<span class="nav-text">Инструкции</span>
|
||||||
|
</a>
|
||||||
|
<a href="#" class="nav-item" data-page="assistant">
|
||||||
|
<span class="nav-icon">🤖</span>
|
||||||
|
<span class="nav-text">Помощник</span>
|
||||||
|
</a>
|
||||||
|
<a href="#" class="nav-item" data-page="faq">
|
||||||
|
<span class="nav-icon">❓</span>
|
||||||
|
<span class="nav-text">FAQ</span>
|
||||||
|
</a>
|
||||||
|
<a href="#" class="nav-item" data-page="tests">
|
||||||
|
<span class="nav-icon">📝</span>
|
||||||
|
<span class="nav-text">Тесты</span>
|
||||||
|
</a>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<div class="sidebar-footer">
|
||||||
|
<a href="#" class="nav-item" data-page="admin">
|
||||||
|
<span class="nav-icon">⚙️</span>
|
||||||
|
<span class="nav-text">Админ-панель</span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
<!-- Main Content -->
|
||||||
|
<main class="main-content">
|
||||||
|
<!-- Mobile Header -->
|
||||||
|
<header class="mobile-header">
|
||||||
|
<button class="btn-icon" id="openSidebar">☰</button>
|
||||||
|
<span class="mobile-title">Помощник по скидкам</span>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<!-- Page: Home -->
|
||||||
|
<section class="page active" id="page-home">
|
||||||
|
<div class="hero">
|
||||||
|
<h1 class="hero-title">Чем могу помочь?</h1>
|
||||||
|
<div class="search-box">
|
||||||
|
<input type="text" class="search-input" id="homeSearchInput" placeholder="Введите вопрос… Например: Как создать скидку на тариф?">
|
||||||
|
<button class="btn btn-primary" id="homeSearchBtn">Найти ответ</button>
|
||||||
|
</div>
|
||||||
|
<div class="quick-questions">
|
||||||
|
<span class="qq-label">Популярные вопросы:</span>
|
||||||
|
<button class="qq-btn" data-q="Как создать скидку?">Как создать скидку?</button>
|
||||||
|
<button class="qq-btn" data-q="Почему не проходит скидка?">Почему не проходит скидка?</button>
|
||||||
|
<button class="qq-btn" data-q="Что означает ошибка?">Что означает ошибка?</button>
|
||||||
|
<button class="qq-btn" data-q="Какие условия заполнить?">Какие условия заполнить?</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="upload-section">
|
||||||
|
<div class="upload-card" id="uploadDropzone">
|
||||||
|
<div class="upload-icon">📎</div>
|
||||||
|
<h3>Загрузить скриншот ошибки</h3>
|
||||||
|
<p>Перетащите изображение сюда или нажмите для загрузки</p>
|
||||||
|
<input type="file" id="uploadInput" accept="image/*" style="display: none;">
|
||||||
|
<button class="btn btn-secondary" id="uploadBtn">Загрузить изображение</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="quick-solutions">
|
||||||
|
<h2 class="section-title">Быстрые решения</h2>
|
||||||
|
<div class="solutions-grid">
|
||||||
|
<div class="solution-card solution-red" data-solution="not-created">
|
||||||
|
<div class="solution-icon">🔴</div>
|
||||||
|
<h3>Не создается скидка</h3>
|
||||||
|
</div>
|
||||||
|
<div class="solution-card solution-orange" data-solution="error">
|
||||||
|
<div class="solution-icon">🟠</div>
|
||||||
|
<h3>Появилась ошибка</h3>
|
||||||
|
</div>
|
||||||
|
<div class="solution-card solution-yellow" data-solution="no-tariff">
|
||||||
|
<div class="solution-icon">🟡</div>
|
||||||
|
<h3>Не вижу тариф</h3>
|
||||||
|
</div>
|
||||||
|
<div class="solution-card solution-blue" data-solution="cant-change">
|
||||||
|
<div class="solution-icon">🔵</div>
|
||||||
|
<h3>Не могу изменить</h3>
|
||||||
|
</div>
|
||||||
|
<div class="solution-card solution-purple" data-solution="which-choose">
|
||||||
|
<div class="solution-icon">🟣</div>
|
||||||
|
<h3>Какую скидку выбрать</h3>
|
||||||
|
</div>
|
||||||
|
<div class="solution-card solution-green" data-solution="check-conditions">
|
||||||
|
<div class="solution-icon">🟢</div>
|
||||||
|
<h3>Проверить условия</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="features-grid">
|
||||||
|
<div class="feature-card" data-page="learning">
|
||||||
|
<div class="feature-icon">📚</div>
|
||||||
|
<h3>Обучение</h3>
|
||||||
|
<p>Пошаговые уроки по работе со скидками</p>
|
||||||
|
</div>
|
||||||
|
<div class="feature-card" data-page="errors">
|
||||||
|
<div class="feature-icon">⚠️</div>
|
||||||
|
<h3>Ошибки</h3>
|
||||||
|
<p>Справочник ошибок и решений</p>
|
||||||
|
</div>
|
||||||
|
<div class="feature-card" data-page="instructions">
|
||||||
|
<div class="feature-icon">📖</div>
|
||||||
|
<h3>Инструкции</h3>
|
||||||
|
<p>Пошаговые руководства</p>
|
||||||
|
</div>
|
||||||
|
<div class="feature-card" data-page="assistant">
|
||||||
|
<div class="feature-icon">🤖</div>
|
||||||
|
<h3>AI-помощник</h3>
|
||||||
|
<p>Ответы на любые вопросы</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Page: Search -->
|
||||||
|
<section class="page" id="page-search">
|
||||||
|
<h1 class="page-title">Поиск по базе знаний</h1>
|
||||||
|
<div class="search-section">
|
||||||
|
<input type="text" class="search-input large" id="searchInput" placeholder="Введите запрос… Например: скидка не создается">
|
||||||
|
<button class="btn btn-primary btn-large" id="searchBtn">Найти</button>
|
||||||
|
</div>
|
||||||
|
<div class="search-results" id="searchResults"></div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Page: Learning -->
|
||||||
|
<section class="page" id="page-learning">
|
||||||
|
<h1 class="page-title">Обучение</h1>
|
||||||
|
<div class="lessons-list" id="lessonsList"></div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Page: Errors -->
|
||||||
|
<section class="page" id="page-errors">
|
||||||
|
<h1 class="page-title">Справочник ошибок</h1>
|
||||||
|
<div class="search-section">
|
||||||
|
<input type="text" class="search-input" id="errorSearchInput" placeholder="Введите код или текст ошибки…">
|
||||||
|
</div>
|
||||||
|
<div class="errors-grid" id="errorsGrid"></div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Page: Calculator -->
|
||||||
|
<section class="page" id="page-calculator">
|
||||||
|
<h1 class="page-title">Расчет скидки</h1>
|
||||||
|
<div class="calculator-card">
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Тариф</label>
|
||||||
|
<select class="input-select" id="calcTariff"></select>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Тип скидки</label>
|
||||||
|
<select class="input-select" id="calcType">
|
||||||
|
<option value="percent">Процентная</option>
|
||||||
|
<option value="fixed">Фиксированная</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Размер скидки</label>
|
||||||
|
<input type="number" class="input" id="calcAmount" placeholder="30" min="0" max="100">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Срок действия</label>
|
||||||
|
<select class="input-select" id="calcPeriod">
|
||||||
|
<option value="3">3 месяца</option>
|
||||||
|
<option value="6">6 месяцев</option>
|
||||||
|
<option value="12" selected>12 месяцев</option>
|
||||||
|
<option value="24">24 месяца</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Основание</label>
|
||||||
|
<select class="input-select" id="calcReason">
|
||||||
|
<option value="">Выберите основание</option>
|
||||||
|
<option value="loyalty">Лояльность клиента</option>
|
||||||
|
<option value="promotion">Акция</option>
|
||||||
|
<option value="complaint">Жалоба клиента</option>
|
||||||
|
<option value="retention">Удержание клиента</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<button class="btn btn-primary btn-large" id="calcBtn">Рассчитать</button>
|
||||||
|
<div class="calc-result" id="calcResult" style="display: none;"></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Page: Instructions -->
|
||||||
|
<section class="page" id="page-instructions">
|
||||||
|
<h1 class="page-title">Инструкции</h1>
|
||||||
|
<div class="instructions-list" id="instructionsList"></div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Page: Assistant -->
|
||||||
|
<section class="page" id="page-assistant">
|
||||||
|
<h1 class="page-title">🤖 Помощник по скидкам</h1>
|
||||||
|
<div class="assistant-container">
|
||||||
|
<div class="chat-messages" id="chatMessages">
|
||||||
|
<div class="message bot">
|
||||||
|
<div class="message-content">
|
||||||
|
<p>Здравствуйте! Я ваш помощник по скидкам.</p>
|
||||||
|
<p>Задайте мне любой вопрос, например:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Как создать скидку на тариф?</li>
|
||||||
|
<li>Почему не проходит скидка 30%?</li>
|
||||||
|
<li>Что означает ошибка 403?</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="chat-input">
|
||||||
|
<input type="text" class="search-input" id="chatInput" placeholder="Введите ваш вопрос…">
|
||||||
|
<button class="btn btn-primary" id="chatSendBtn">➤</button>
|
||||||
|
</div>
|
||||||
|
<div class="feedback-block" id="feedbackBlock" style="display: none;">
|
||||||
|
<span>Ответ помог?</span>
|
||||||
|
<button class="btn-icon feedback-btn" id="feedbackYes">👍</button>
|
||||||
|
<button class="btn-icon feedback-btn" id="feedbackNo">👎</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Page: FAQ -->
|
||||||
|
<section class="page" id="page-faq">
|
||||||
|
<h1 class="page-title">Частые вопросы</h1>
|
||||||
|
<div class="faq-list" id="faqList"></div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Page: Tests -->
|
||||||
|
<section class="page" id="page-tests">
|
||||||
|
<h1 class="page-title">Проверка знаний</h1>
|
||||||
|
<div class="tests-intro" id="testsIntro">
|
||||||
|
<p>Пройдите тест, чтобы проверить свои знания по работе со скидками.</p>
|
||||||
|
<button class="btn btn-primary btn-large" id="startTestBtn">Начать тест</button>
|
||||||
|
</div>
|
||||||
|
<div class="test-container" id="testContainer" style="display: none;">
|
||||||
|
<div class="test-progress">
|
||||||
|
<div class="progress-bar">
|
||||||
|
<div class="progress-fill" id="testProgress"></div>
|
||||||
|
</div>
|
||||||
|
<span class="test-counter" id="testCounter">1/10</span>
|
||||||
|
</div>
|
||||||
|
<div class="test-question" id="testQuestion"></div>
|
||||||
|
<div class="test-answers" id="testAnswers"></div>
|
||||||
|
<div class="test-feedback" id="testFeedback"></div>
|
||||||
|
<button class="btn btn-primary" id="nextQuestionBtn" style="display: none;">Следующий вопрос</button>
|
||||||
|
</div>
|
||||||
|
<div class="test-result" id="testResult" style="display: none;">
|
||||||
|
<h2>Результат</h2>
|
||||||
|
<div class="result-score" id="resultScore"></div>
|
||||||
|
<p class="result-message" id="resultMessage"></p>
|
||||||
|
<button class="btn btn-primary" id="restartTestBtn">Пройти заново</button>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Page: Admin -->
|
||||||
|
<section class="page" id="page-admin">
|
||||||
|
<h1 class="page-title">Админ-панель</h1>
|
||||||
|
<div class="admin-tabs">
|
||||||
|
<button class="admin-tab active" data-tab="errors">Ошибки</button>
|
||||||
|
<button class="admin-tab" data-tab="faq">FAQ</button>
|
||||||
|
<button class="admin-tab" data-tab="lessons">Уроки</button>
|
||||||
|
<button class="admin-tab" data-tab="instructions">Инструкции</button>
|
||||||
|
<button class="admin-tab" data-tab="tests">Тесты</button>
|
||||||
|
</div>
|
||||||
|
<div class="admin-content">
|
||||||
|
<div class="admin-panel active" id="admin-errors"></div>
|
||||||
|
<div class="admin-panel" id="admin-faq"></div>
|
||||||
|
<div class="admin-panel" id="admin-lessons"></div>
|
||||||
|
<div class="admin-panel" id="admin-instructions"></div>
|
||||||
|
<div class="admin-panel" id="admin-tests"></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Modal: Error Details -->
|
||||||
|
<div class="modal-overlay" id="errorModal" style="display: none;">
|
||||||
|
<div class="modal modal-large">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h2 id="errorModalTitle">Ошибка</h2>
|
||||||
|
<button class="btn-close" id="closeErrorModal">×</button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body" id="errorModalBody"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Modal: Upload Result -->
|
||||||
|
<div class="modal-overlay" id="uploadModal" style="display: none;">
|
||||||
|
<div class="modal modal-large">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h2>Результат анализа</h2>
|
||||||
|
<button class="btn-close" id="closeUploadModal">×</button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body" id="uploadModalBody">
|
||||||
|
<div class="upload-loading">
|
||||||
|
<div class="spinner"></div>
|
||||||
|
<p>Анализирую изображение…</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Modal: Lesson -->
|
||||||
|
<div class="modal-overlay" id="lessonModal" style="display: none;">
|
||||||
|
<div class="modal modal-xlarge">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h2 id="lessonModalTitle">Урок</h2>
|
||||||
|
<button class="btn-close" id="closeLessonModal">×</button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body" id="lessonModalBody"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script src="data.js"></script>
|
||||||
|
<script src="app.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
1183
discount-helper/style.css
Normal file
1183
discount-helper/style.css
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user