Files
crm.clientright.ru/test_ai_drawer_ui_improvements.html

311 lines
18 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">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>AI Drawer - Улучшения интерфейса</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 20px;
background: #f5f5f5;
}
.demo-container {
max-width: 800px;
margin: 0 auto;
background: white;
padding: 30px;
border-radius: 10px;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
}
h1 {
color: #333;
text-align: center;
margin-bottom: 30px;
}
.feature-list {
list-style: none;
padding: 0;
}
.feature-list li {
padding: 15px;
margin: 10px 0;
background: #f8f9fa;
border-left: 4px solid #007bff;
border-radius: 5px;
}
.feature-list li.completed {
border-left-color: #28a745;
background: #d4edda;
}
.demo-buttons {
text-align: center;
margin: 30px 0;
}
.demo-btn {
padding: 12px 24px;
margin: 10px;
background: #007bff;
color: white;
border: none;
border-radius: 5px;
cursor: pointer;
font-size: 16px;
}
.demo-btn:hover {
background: #0056b3;
}
.demo-btn.secondary {
background: #6c757d;
}
.demo-btn.secondary:hover {
background: #545b62;
}
.instructions {
background: #e3f2fd;
padding: 20px;
border-radius: 5px;
margin: 20px 0;
}
.instructions h3 {
margin-top: 0;
color: #1976d2;
}
</style>
</head>
<body>
<div class="demo-container">
<h1>🤖 AI Drawer - Улучшения интерфейса</h1>
<div class="instructions">
<h3>📋 Что было улучшено:</h3>
<ul class="feature-list">
<li class="completed"><strong>Управление размером шрифта</strong> - добавлена панель с кнопками для изменения размера текста (мелкий, обычный, крупный, очень крупный)</li>
<li class="completed"><strong>Аватарки для ассистента</strong> - добавлены дружелюбные аватарки с анимацией (🤖😊💡🧠) и возможность их смены</li>
<li class="completed"><strong>Убрано излишнее затемнение</strong> - изменен фон с темного на светлый (#f8f9fa) с темным текстом (#212529) для максимальной читаемости</li>
<li class="completed"><strong>Плавающий индикатор загрузки</strong> - уведомления о обработке запроса теперь появляются в центре экрана и не мешают диалогу</li>
<li class="completed"><strong>Улучшенный скролл</strong> - добавлены стилизованные полосы прокрутки и автоматическая прокрутка к новым сообщениям</li>
<li class="completed"><strong>Поле ввода сообщений</strong> - добавлено удобное поле для ввода с кнопкой отправки и поддержкой Enter</li>
<li class="completed"><strong>Интеграция с n8n</strong> - восстановлена связка с n8n через n8n_proxy.php для обработки запросов</li>
<li class="completed"><strong>Автоматическая инициализация</strong> - при открытии drawer автоматически отправляется контекст CRM в n8n</li>
<li class="completed"><strong>Скрытие кнопки AI</strong> - кнопка AI скрывается когда drawer открыт</li>
<li class="completed"><strong>Стриминг сообщений</strong> - ответы ассистента появляются постепенно с эффектом печатания</li>
<li class="completed"><strong>Индикатор печатания</strong> - красивая анимация "печатает..." с точками</li>
</ul>
</div>
<div class="demo-buttons">
<button class="demo-btn" onclick="openAIDrawer()">🚀 Открыть AI Drawer</button>
<button class="demo-btn secondary" onclick="testFontSizes()">🔤 Тест размеров шрифта</button>
<button class="demo-btn secondary" onclick="testAvatars()">😊 Тест аватарок</button>
<button class="demo-btn secondary" onclick="testFloatingLoading()">⏳ Тест плавающей загрузки</button>
<button class="demo-btn secondary" onclick="testScroll()">📜 Тест скролла</button>
<button class="demo-btn secondary" onclick="testChatInput()">💬 Тест поля ввода</button>
<button class="demo-btn secondary" onclick="testN8N()">🔗 Тест n8n</button>
<button class="demo-btn secondary" onclick="testStreaming()">⌨️ Тест стриминга</button>
<button class="demo-btn secondary" onclick="testTypingIndicator()">💬 Тест печатания</button>
</div>
<div class="instructions">
<h3>🎯 Как использовать:</h3>
<ol>
<li><strong>Нажмите "Открыть AI Drawer"</strong> - откроется панель справа</li>
<li><strong>Используйте кнопки размера шрифта</strong> - в верхней части панели есть кнопки для изменения размера текста</li>
<li><strong>Выберите аватарку ассистента</strong> - кнопки с эмодзи для смены внешнего вида ассистента (🤖😊💡🧠)</li>
<li><strong>Настройки сохраняются</strong> - выбранный размер шрифта и аватарка запоминаются в браузере</li>
<li><strong>Плавающие уведомления</strong> - при обработке запросов появляется красивое уведомление в центре экрана</li>
<li><strong>Автоматический скролл</strong> - новые сообщения автоматически прокручиваются в поле зрения</li>
<li><strong>Поле ввода сообщений</strong> - внизу панели есть поле для ввода с кнопкой "Отправить" и поддержкой клавиши Enter</li>
<li><strong>Интеграция с n8n</strong> - все сообщения отправляются в n8n через n8n_proxy.php для обработки</li>
<li><strong>Автоматическая инициализация</strong> - при открытии drawer ассистент сразу получает контекст CRM</li>
<li><strong>Умное скрытие кнопки</strong> - кнопка AI автоматически скрывается когда drawer открыт</li>
<li><strong>Стриминг сообщений</strong> - ответы ассистента появляются постепенно с эффектом печатания</li>
<li><strong>Индикатор печатания</strong> - красивая анимация "печатает..." с точками во время обработки</li>
</ol>
</div>
<div class="instructions">
<h3>💡 Дополнительные возможности:</h3>
<ul>
<li>💾 <strong>Сохранение настроек</strong> - размер шрифта и аватарка сохраняются в localStorage</li>
<li>🎨 <strong>Улучшенный дизайн</strong> - светлая тема с высоким контрастом для комфортной работы</li>
<li>👁️ <strong>Максимальная читаемость</strong> - темный текст (#212529) на светлом фоне (#f8f9fa)</li>
<li>🎯 <strong>Цветовое разделение</strong> - сообщения пользователя (синие) и ассистента (с синей полоской)</li>
<li>😊 <strong>Дружелюбные аватарки</strong> - анимированные аватарки с разными характерами (робот, дружелюбный, помощник, умный)</li>
<li>📱 <strong>Адаптивность</strong> - работает на мобильных устройствах</li>
<li><strong>Плавные анимации</strong> - все переходы и изменения происходят плавно</li>
</ul>
</div>
</div>
<!-- Подключаем стили AI Drawer -->
<link rel="stylesheet" href="layouts/v7/resources/css/ai-drawer.css">
<!-- Подключаем JavaScript -->
<script src="layouts/v7/resources/js/ai-drawer.js"></script>
<script src="ai_drawer_improvements.js"></script>
<script>
let aiDrawerInstance = null;
// Инициализируем AI Drawer при загрузке страницы
document.addEventListener('DOMContentLoaded', function() {
aiDrawerInstance = new AIDrawer();
window.aiDrawerInstance = aiDrawerInstance; // Делаем доступным глобально
console.log('AI Drawer инициализирован');
});
function openAIDrawer() {
if (aiDrawerInstance) {
aiDrawerInstance.open();
}
}
function testFontSizes() {
if (aiDrawerInstance) {
aiDrawerInstance.open();
// Добавляем сообщение для демонстрации
setTimeout(() => {
aiDrawerInstance.addMessage('Это тестовое сообщение для демонстрации разных размеров шрифта. Попробуйте изменить размер с помощью кнопок выше!', false);
}, 500);
}
}
function testAvatars() {
if (aiDrawerInstance) {
aiDrawerInstance.open();
// Добавляем сообщения с разными аватарками
setTimeout(() => {
aiDrawerInstance.addMessage('Привет! Я робот-ассистент 🤖', false);
setTimeout(() => {
aiDrawerInstance.setAvatarType('friendly');
aiDrawerInstance.addMessage('Теперь я дружелюбный ассистент 😊', false);
setTimeout(() => {
aiDrawerInstance.setAvatarType('helpful');
aiDrawerInstance.addMessage('А теперь я помощник с идеями 💡', false);
setTimeout(() => {
aiDrawerInstance.setAvatarType('smart');
aiDrawerInstance.addMessage('И наконец - умный ассистент 🧠', false);
}, 2000);
}, 2000);
}, 2000);
}, 500);
}
}
function testFloatingLoading() {
if (aiDrawerInstance) {
aiDrawerInstance.open();
setTimeout(() => {
aiDrawerInstance.addMessage('Тестирую плавающий индикатор загрузки...', true);
setTimeout(() => {
aiDrawerInstance.showLoading('🤖 Обрабатываю ваш запрос...');
setTimeout(() => {
aiDrawerInstance.hideLoading();
aiDrawerInstance.addMessage('Запрос успешно обработан! Плавающий индикатор работает корректно.', false);
}, 3000);
}, 1000);
}, 500);
}
}
function testScroll() {
if (aiDrawerInstance) {
aiDrawerInstance.open();
// Добавляем много сообщений для демонстрации скролла
setTimeout(() => {
for (let i = 1; i <= 10; i++) {
setTimeout(() => {
aiDrawerInstance.addMessage(`Тестовое сообщение номер ${i}. Это сообщение добавлено для демонстрации работы скролла в AI Drawer.`, i % 2 === 0);
}, i * 200);
}
}, 500);
}
}
function testChatInput() {
if (aiDrawerInstance) {
aiDrawerInstance.open();
setTimeout(() => {
aiDrawerInstance.addMessage('Теперь вы можете использовать поле ввода внизу! Попробуйте написать сообщение и нажать Enter или кнопку "Отправить".', false);
}, 500);
}
}
function testN8N() {
if (aiDrawerInstance) {
aiDrawerInstance.open();
setTimeout(() => {
aiDrawerInstance.addMessage('Тестирую интеграцию с n8n...', true);
setTimeout(() => {
// Симулируем отправку сообщения в n8n
aiDrawerInstance.sendToN8N('Привет! Это тестовое сообщение для проверки интеграции с n8n.');
}, 1000);
}, 500);
}
}
function testStreaming() {
if (aiDrawerInstance) {
aiDrawerInstance.open();
setTimeout(() => {
aiDrawerInstance.addMessage('Тестирую стриминг сообщений...', true);
setTimeout(() => {
const longText = "Это демонстрация стриминга сообщений! Текст появляется постепенно, символ за символом, создавая эффект печатания. Это делает интерфейс более живым и интересным. Пользователь видит, как ассистент 'печатает' ответ в реальном времени. Стриминг создает ощущение живого общения и делает интерфейс более интерактивным.";
aiDrawerInstance.addStreamingMessage(longText, false, 20);
}, 1000);
}, 500);
}
}
function testTypingIndicator() {
if (aiDrawerInstance) {
aiDrawerInstance.open();
setTimeout(() => {
aiDrawerInstance.addMessage('Тестирую индикатор печатания...', true);
setTimeout(() => {
// Показываем индикатор печатания
aiDrawerInstance.showTypingIndicator();
// Через 3 секунды скрываем и показываем сообщение
setTimeout(() => {
aiDrawerInstance.hideTypingIndicator();
aiDrawerInstance.addStreamingMessage("Вот и готов ответ! Индикатор печатания исчез, и появился текст со стримингом.", false, 25);
}, 3000);
}, 1000);
}, 500);
}
}
</script>
</body>
</html>