ваше сообщение коммита

This commit is contained in:
2025-05-22 12:12:24 +03:00
parent 7ccd08b172
commit a91658eb31
10 changed files with 700 additions and 232 deletions

View File

@@ -1,116 +1,26 @@
<template>
<div class="ai-settings settings-panel">
<h2>Настройки ИИ</h2>
<!-- Панель Промт -->
<div class="sub-settings-panel">
<h3>Настройки промптов</h3>
<div class="setting-form">
<p>Здесь будут настройки для конфигурации промптов</p>
<textarea v-model="settings.prompt" placeholder="Базовый промпт для ИИ..." rows="5" class="form-control"></textarea>
<h2>Интеграции</h2>
<div class="integration-blocks">
<div class="integration-block">
<h3>Telegram</h3>
<p>Интеграция с Telegram-ботом для уведомлений и авторизации.</p>
<button class="details-btn" @click="goToTelegram">Подробнее</button>
</div>
</div>
<!-- Панель RAG -->
<div class="sub-settings-panel">
<h3>Настройки RAG (Retrieval Augmented Generation)</h3>
<div class="setting-form">
<p>Конфигурация системы поиска и генерации ответов</p>
<div class="form-group">
<label class="form-label">
<input type="checkbox" v-model="settings.ragEnabled">
Включить RAG
</label>
</div>
</div>
</div>
<!-- Панель Каналы -->
<div class="sub-settings-panel">
<h3>Настройки каналов для ИИ</h3>
<div class="setting-form">
<p>Управление каналами связи для ИИ</p>
<div class="form-group">
<label class="form-label">
<input type="checkbox" v-model="settings.channels.telegram">
Telegram
</label>
</div>
<div class="form-group">
<label class="form-label">
<input type="checkbox" v-model="settings.channels.email">
Email
</label>
</div>
</div>
</div>
<!-- Панель Модели -->
<div class="sub-settings-panel">
<h3>Настройки моделей ИИ</h3>
<div class="setting-form">
<p>Выбор и конфигурация моделей ИИ</p>
<div class="form-group">
<label class="form-label">Модель по умолчанию:</label>
<select v-model="settings.defaultModel" class="form-control">
<option value="claude-3-haiku">Claude 3 Haiku</option>
<option value="claude-3-sonnet">Claude 3 Sonnet</option>
<option value="claude-3-opus">Claude 3 Opus</option>
<option value="gpt-4o">GPT-4o</option>
</select>
</div>
<div class="integration-block">
<h3>Email</h3>
<p>Интеграция с Email для отправки писем и уведомлений.</p>
<button class="details-btn" @click="goToEmail">Подробнее</button>
</div>
</div>
</div>
</template>
<script setup>
// Логика из AISettings.vue
import { reactive, onMounted } from 'vue';
// TODO: Импортировать API для загрузки/сохранения
// Локальное состояние настроек
const settings = reactive({
prompt: '',
ragEnabled: false,
channels: {
telegram: false,
email: false
},
defaultModel: 'claude-3-sonnet'
});
// Загрузка настроек при монтировании
onMounted(() => {
loadAiSettings();
});
const loadAiSettings = async () => {
console.log('[AiSettingsView] Загрузка настроек ИИ...');
// TODO: Заменить на реальный вызов API
// Пример:
// try {
// const response = await api.get('/api/settings/ai');
// Object.assign(settings, response.data);
// } catch (error) {
// console.error('Ошибка загрузки настроек ИИ:', error);
// }
};
// Сохранение настроек
const saveSettings = async (section) => {
console.log(`[AiSettingsView] Сохранение настроек раздела: ${section}`);
// TODO: Заменить на реальный вызов API
// Пример:
// try {
// const dataToSave = { [section]: settings[section] }; // Или вся группа настроек
// await api.post('/api/settings/ai', dataToSave);
// // Показать сообщение об успехе
// } catch (error) {
// console.error('Ошибка сохранения настроек ИИ:', error);
// // Показать сообщение об ошибке
// }
};
import { useRouter } from 'vue-router';
const router = useRouter();
const goToTelegram = () => router.push({ name: 'settings-telegram' });
const goToEmail = () => router.push({ name: 'settings-email' });
</script>
<style scoped>
@@ -121,50 +31,36 @@ const saveSettings = async (section) => {
margin-top: var(--spacing-lg);
animation: fadeIn var(--transition-normal);
}
h2 {
margin-bottom: var(--spacing-lg);
border-bottom: 1px solid var(--color-grey-light);
padding-bottom: var(--spacing-md);
.integration-blocks {
display: flex;
gap: 2rem;
flex-wrap: wrap;
}
h3 {
margin-bottom: var(--spacing-md);
color: var(--color-primary);
}
.sub-settings-panel {
margin-bottom: var(--spacing-lg);
padding-bottom: var(--spacing-lg);
border-bottom: 1px dashed var(--color-grey-light);
}
.sub-settings-panel:last-child {
border-bottom: none;
margin-bottom: 0;
padding-bottom: 0;
}
.setting-form {
.integration-block {
background: #fff;
border-radius: 12px;
box-shadow: 0 2px 8px rgba(0,0,0,0.04);
padding: 2rem;
min-width: 260px;
flex: 1 1 300px;
display: flex;
flex-direction: column;
gap: var(--spacing-md);
align-items: flex-start;
}
.form-group {
margin-bottom: 0; /* Убираем лишний отступ, т.к. есть gap */
.details-btn {
margin-top: 1.5rem;
background: var(--color-primary);
color: #fff;
border: none;
border-radius: 6px;
padding: 0.5rem 1.5rem;
cursor: pointer;
font-size: 1rem;
transition: background 0.2s;
}
.form-label {
display: flex;
align-items: center;
gap: var(--spacing-sm);
.details-btn:hover {
background: var(--color-primary-dark);
}
.form-control {
max-width: 500px; /* Ограничим ширину для select/textarea */
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }

View File

@@ -0,0 +1,72 @@
<template>
<div class="email-settings settings-panel">
<h2>Настройки Email</h2>
<form @submit.prevent="saveEmailSettings" class="settings-form">
<div class="form-group">
<label for="smtpHost">SMTP Host</label>
<input id="smtpHost" v-model="form.smtpHost" type="text" required />
</div>
<div class="form-group">
<label for="smtpUser">SMTP User</label>
<input id="smtpUser" v-model="form.smtpUser" type="text" required />
</div>
<div class="form-group">
<label for="smtpPassword">SMTP Password</label>
<input id="smtpPassword" v-model="form.smtpPassword" type="password" required />
</div>
<div class="form-group">
<label for="fromEmail">From Email</label>
<input id="fromEmail" v-model="form.fromEmail" type="email" required />
</div>
<button type="submit" class="save-btn">Сохранить</button>
</form>
</div>
</template>
<script setup>
import { reactive } from 'vue';
// TODO: Импортировать API для сохранения
const form = reactive({
smtpHost: '',
smtpUser: '',
smtpPassword: '',
fromEmail: ''
});
const saveEmailSettings = async () => {
// TODO: Реализовать вызов API для сохранения
alert('Настройки Email сохранены (заглушка)');
};
</script>
<style scoped>
.settings-panel {
padding: var(--block-padding);
background-color: var(--color-light);
border-radius: var(--radius-md);
margin-top: var(--spacing-lg);
max-width: 500px;
}
.settings-form {
display: flex;
flex-direction: column;
gap: 1.5rem;
}
.form-group {
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.save-btn {
background: var(--color-primary);
color: #fff;
border: none;
border-radius: 6px;
padding: 0.5rem 1.5rem;
cursor: pointer;
font-size: 1rem;
transition: background 0.2s;
}
.save-btn:hover {
background: var(--color-primary-dark);
}
</style>

View File

@@ -0,0 +1,62 @@
<template>
<div class="telegram-settings settings-panel">
<h2>Настройки Telegram</h2>
<form @submit.prevent="saveTelegramSettings" class="settings-form">
<div class="form-group">
<label for="botToken">Bot Token</label>
<input id="botToken" v-model="form.botToken" type="text" required />
</div>
<div class="form-group">
<label for="botUsername">Bot Username</label>
<input id="botUsername" v-model="form.botUsername" type="text" required />
</div>
<button type="submit" class="save-btn">Сохранить</button>
</form>
</div>
</template>
<script setup>
import { reactive } from 'vue';
// TODO: Импортировать API для сохранения
const form = reactive({
botToken: '',
botUsername: ''
});
const saveTelegramSettings = async () => {
// TODO: Реализовать вызов API для сохранения
alert('Настройки Telegram сохранены (заглушка)');
};
</script>
<style scoped>
.settings-panel {
padding: var(--block-padding);
background-color: var(--color-light);
border-radius: var(--radius-md);
margin-top: var(--spacing-lg);
max-width: 500px;
}
.settings-form {
display: flex;
flex-direction: column;
gap: 1.5rem;
}
.form-group {
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.save-btn {
background: var(--color-primary);
color: #fff;
border: none;
border-radius: 6px;
padding: 0.5rem 1.5rem;
cursor: pointer;
font-size: 1rem;
transition: background 0.2s;
}
.save-btn:hover {
background: var(--color-primary-dark);
}
</style>