Files
crm.clientright.ru/test_ai_drawer_ui_improvements.html

311 lines
18 KiB
HTML
Raw Normal View History

<!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>