feat: новая функция

This commit is contained in:
2025-10-13 22:41:49 +03:00
parent 34666b44d8
commit 0e028bc722
83 changed files with 1595 additions and 6093 deletions

View File

@@ -14,7 +14,7 @@
<BaseLayout>
<div class="create-table-container">
<h2>Создать новую таблицу</h2>
<form v-if="canEdit" @submit.prevent="handleCreateTable" class="create-table-form">
<form v-if="canEditData" @submit.prevent="handleCreateTable" class="create-table-form">
<label>Название таблицы</label>
<input v-model="newTableName" required placeholder="Введите название" />
<label>Описание</label>
@@ -38,7 +38,7 @@
</template>
<script setup>
import { ref } from 'vue';
import { ref, onMounted } from 'vue';
import { useRouter } from 'vue-router';
import BaseLayout from '../../components/BaseLayout.vue';
import tablesService from '../../services/tablesService';
@@ -49,8 +49,21 @@ const router = useRouter();
const newTableName = ref('');
const newTableDescription = ref('');
const newTableIsRagSourceId = ref(2);
const { isAdmin } = useAuthContext();
const { canEdit } = usePermissions();
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;

View File

@@ -16,10 +16,10 @@
<h2>Удалить таблицу?</h2>
<p>Вы уверены, что хотите удалить эту таблицу? Это действие необратимо.</p>
<div class="actions">
<button v-if="canDelete" class="danger" @click="remove">Удалить</button>
<button v-if="canDeleteData" class="danger" @click="remove">Удалить</button>
<button @click="cancel">Отмена</button>
</div>
<div v-if="!canDelete" class="empty-table-placeholder">Нет прав для удаления таблицы</div>
<div v-if="!canDeleteData" class="empty-table-placeholder">Нет прав для удаления таблицы</div>
</div>
</BaseLayout>
</template>
@@ -29,10 +29,24 @@ import BaseLayout from '../../components/BaseLayout.vue';
import axios from 'axios';
import { useAuthContext } from '@/composables/useAuth';
import { usePermissions } from '@/composables/usePermissions';
import { onMounted } from 'vue';
const $route = useRoute();
const router = useRouter();
const { isAdmin } = useAuthContext();
const { canDelete } = usePermissions();
const { canDeleteData } = usePermissions();
// Подписываемся на централизованные события очистки и обновления данных
onMounted(() => {
window.addEventListener('clear-application-data', () => {
console.log('[DeleteTableView] Clearing confirmation data');
// Очищаем данные при выходе из системы
table.value = null;
});
window.addEventListener('refresh-application-data', () => {
console.log('[DeleteTableView] Refreshing confirmation data');
// DeleteTableView не нуждается в обновлении данных
});
});
async function remove() {
await axios.delete(`/tables/${$route.params.id}`);

View File

@@ -17,10 +17,10 @@
<button class="nav-btn" @click="goToTables">Таблицы</button>
<button class="nav-btn" @click="goToCreate">Создать таблицу</button>
<button class="close-btn" @click="closeTable">Закрыть</button>
<button v-if="canEdit" class="action-btn" @click="goToEdit">Редактировать</button>
<button v-if="canDelete" class="danger-btn" @click="goToDelete">Удалить</button>
<button v-if="canEditData" class="action-btn" @click="goToEdit">Редактировать</button>
<button v-if="canDeleteData" class="danger-btn" @click="goToDelete">Удалить</button>
</div>
<UserTableView v-if="canRead" :table-id="Number($route.params.id)" />
<UserTableView v-if="canViewData" :table-id="Number($route.params.id)" />
<div v-else class="empty-table-placeholder">Нет данных для отображения</div>
</div>
</BaseLayout>
@@ -32,10 +32,25 @@ import UserTableView from '../../components/tables/UserTableView.vue';
import { useRoute, useRouter } from 'vue-router';
import { useAuthContext } from '@/composables/useAuth';
import { usePermissions } from '@/composables/usePermissions';
import { onMounted } from 'vue';
const $route = useRoute();
const router = useRouter();
const { isAdmin } = useAuthContext();
const { canRead, canEdit, canDelete } = usePermissions();
const { canViewData, canEditData, canDeleteData } = usePermissions();
// Подписываемся на централизованные события очистки и обновления данных
onMounted(() => {
window.addEventListener('clear-application-data', () => {
console.log('[TableView] Clearing table data');
// Очищаем данные при выходе из системы
tableData.value = [];
columns.value = [];
});
window.addEventListener('refresh-application-data', () => {
console.log('[TableView] Refreshing table data');
loadTableData(); // Обновляем данные при входе в систему
});
});
function closeTable() {
if (window.history.length > 1) {

View File

@@ -15,7 +15,7 @@
<div class="tables-list-block">
<button class="close-btn" @click="goBack">×</button>
<h2>Список таблиц</h2>
<UserTablesList v-if="canRead" />
<UserTablesList v-if="canViewData" />
<div v-else class="empty-table-placeholder">Нет данных для отображения</div>
</div>
</BaseLayout>
@@ -27,9 +27,24 @@ import UserTablesList from '../../components/tables/UserTablesList.vue';
import { useRouter } from 'vue-router';
import { useAuthContext } from '@/composables/useAuth';
import { usePermissions } from '@/composables/usePermissions';
import { onMounted } from 'vue';
const router = useRouter();
const { isAdmin } = useAuthContext();
const { canRead } = usePermissions();
const { canViewData } = usePermissions();
// Подписываемся на централизованные события очистки и обновления данных
onMounted(() => {
window.addEventListener('clear-application-data', () => {
console.log('[TablesListView] Clearing tables data');
// Очищаем данные при выходе из системы
tables.value = [];
});
window.addEventListener('refresh-application-data', () => {
console.log('[TablesListView] Refreshing tables data');
loadTables(); // Обновляем данные при входе в систему
});
});
function goBack() {
router.push({ name: 'crm' });
}