175 lines
4.7 KiB
Vue
175 lines
4.7 KiB
Vue
<!--
|
|
Copyright (c) 2024-2025 Тарабанов Александр Викторович
|
|
All rights reserved.
|
|
|
|
This software is proprietary and confidential.
|
|
Unauthorized copying, modification, or distribution is prohibited.
|
|
|
|
For licensing inquiries: info@hb3-accelerator.com
|
|
Website: https://hb3-accelerator.com
|
|
GitHub: https://github.com/HB3-ACCELERATOR
|
|
-->
|
|
|
|
<template>
|
|
<BaseLayout>
|
|
<div class="create-table-container">
|
|
<h2>Создать новую таблицу</h2>
|
|
<form v-if="canEditData" @submit.prevent="handleCreateTable" class="create-table-form">
|
|
<label>Название таблицы</label>
|
|
<input v-model="newTableName" required placeholder="Введите название" />
|
|
<label>Описание</label>
|
|
<textarea v-model="newTableDescription" placeholder="Описание (необязательно)" />
|
|
<label>Источник для ИИ ассистента</label>
|
|
<select v-model="newTableIsRagSourceId" required>
|
|
<option :value="1">Да</option>
|
|
<option :value="2">Нет</option>
|
|
</select>
|
|
<div class="form-actions">
|
|
<button type="submit">Создать</button>
|
|
<button type="button" @click="goBack">Отмена</button>
|
|
</div>
|
|
</form>
|
|
<div v-else class="empty-table-placeholder">
|
|
<p>Нет прав для создания таблицы</p>
|
|
<button type="button" @click="goBack" class="btn btn-primary">Назад</button>
|
|
</div>
|
|
</div>
|
|
</BaseLayout>
|
|
</template>
|
|
|
|
<script setup>
|
|
import { ref, onMounted } from 'vue';
|
|
import { useRouter } from 'vue-router';
|
|
import BaseLayout from '../../components/BaseLayout.vue';
|
|
import tablesService from '../../services/tablesService';
|
|
import { useAuthContext } from '@/composables/useAuth';
|
|
import { usePermissions } from '@/composables/usePermissions';
|
|
|
|
const router = useRouter();
|
|
const newTableName = ref('');
|
|
const newTableDescription = ref('');
|
|
const newTableIsRagSourceId = ref(2);
|
|
const { canEditData } = usePermissions();
|
|
|
|
// Подписываемся на централизованные события очистки и обновления данных
|
|
onMounted(() => {
|
|
window.addEventListener('clear-application-data', () => {
|
|
console.log('[CreateTableView] Clearing form data');
|
|
// Очищаем данные формы при выходе из системы
|
|
form.value = { name: '', description: '' };
|
|
});
|
|
|
|
window.addEventListener('refresh-application-data', () => {
|
|
console.log('[CreateTableView] Refreshing form data');
|
|
// CreateTableView не нуждается в обновлении данных
|
|
});
|
|
});
|
|
|
|
async function handleCreateTable() {
|
|
if (!newTableName.value) return;
|
|
await tablesService.createTable({
|
|
name: newTableName.value,
|
|
description: newTableDescription.value,
|
|
isRagSourceId: newTableIsRagSourceId.value
|
|
});
|
|
router.push({ name: 'tables-list' });
|
|
}
|
|
function goBack() {
|
|
router.back();
|
|
}
|
|
</script>
|
|
|
|
<style scoped>
|
|
.create-table-container {
|
|
background: #fff;
|
|
border-radius: var(--radius-lg);
|
|
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
|
|
padding: 20px;
|
|
margin-top: 20px;
|
|
margin-bottom: 20px;
|
|
width: 100%;
|
|
position: relative;
|
|
overflow-x: auto;
|
|
margin-left: 0;
|
|
margin-right: 0;
|
|
}
|
|
.create-table-form {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 1.1em;
|
|
}
|
|
.create-table-form label {
|
|
font-weight: 500;
|
|
margin-bottom: 0.2em;
|
|
}
|
|
.create-table-form input,
|
|
.create-table-form textarea,
|
|
.create-table-form select {
|
|
border: 1px solid #ececec;
|
|
border-radius: 7px;
|
|
padding: 0.5em 0.8em;
|
|
font-size: 1em;
|
|
background: #fafbfc;
|
|
}
|
|
.create-table-form textarea {
|
|
min-height: 60px;
|
|
resize: vertical;
|
|
}
|
|
.form-actions {
|
|
display: flex;
|
|
gap: 1em;
|
|
margin-top: 1.2em;
|
|
}
|
|
.form-actions button[type="submit"] {
|
|
background: #2ecc40;
|
|
color: #fff;
|
|
border: none;
|
|
border-radius: 8px;
|
|
padding: 0.5em 1.2em;
|
|
font-weight: 600;
|
|
cursor: pointer;
|
|
transition: background 0.2s;
|
|
}
|
|
.form-actions button[type="submit"]:hover {
|
|
background: #27ae38;
|
|
}
|
|
.form-actions button[type="button"] {
|
|
background: #eaeaea;
|
|
color: #333;
|
|
border: none;
|
|
border-radius: 8px;
|
|
padding: 0.5em 1.2em;
|
|
font-weight: 500;
|
|
cursor: pointer;
|
|
transition: background 0.2s;
|
|
}
|
|
.form-actions button[type="button"]:hover {
|
|
background: #d5d5d5;
|
|
}
|
|
|
|
.empty-table-placeholder {
|
|
text-align: center;
|
|
padding: 2em;
|
|
color: #666;
|
|
}
|
|
|
|
.empty-table-placeholder p {
|
|
margin-bottom: 1.5em;
|
|
font-size: 1.1em;
|
|
}
|
|
|
|
.empty-table-placeholder .btn {
|
|
background: #2ecc40;
|
|
color: #fff;
|
|
border: none;
|
|
border-radius: 8px;
|
|
padding: 0.5em 1.2em;
|
|
font-weight: 600;
|
|
cursor: pointer;
|
|
transition: background 0.2s;
|
|
}
|
|
|
|
.empty-table-placeholder .btn:hover {
|
|
background: #27ae38;
|
|
}
|
|
</style> |