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

@@ -22,17 +22,13 @@
<!-- Заголовок страницы -->
<div class="page-header">
<div class="header-content">
<h1>📄 Управление контентом</h1>
<p v-if="isAdmin && address">Создавайте и управляйте страницами вашего DLE</p>
<h1>Управление контентом</h1>
<p v-if="canEditData && address">Создавайте и управляйте страницами вашего DLE</p>
<p v-else>Просмотр опубликованных страниц DLE</p>
<button v-if="isAdmin && address" class="btn btn-primary" @click="goToCreate">
<button v-if="canEditData && address" class="btn btn-primary" @click="goToCreate">
<i class="fas fa-plus"></i>
Создать страницу
</button>
<button v-else class="btn btn-primary" @click="goToPublicPages">
<i class="fas fa-eye"></i>
Публичные страницы
</button>
</div>
<div class="header-actions">
<button class="close-btn" @click="goBack">×</button>
@@ -68,7 +64,7 @@
<!-- Вкладка Страницы -->
<div v-if="activeTab === 'pages'" class="pages-section">
<div class="section-header">
<h2 v-if="isAdmin && address">Созданные страницы</h2>
<h2 v-if="canEditData && address">Созданные страницы</h2>
<h2 v-else>Опубликованные страницы</h2>
<div class="search-box">
<input
@@ -91,7 +87,7 @@
>
<div class="page-card-header">
<h3>{{ page.title }}</h3>
<div class="page-actions" v-if="isAdmin && address">
<div class="page-actions" v-if="canEditData && address">
<button
class="action-btn edit-btn"
@click.stop="goToEdit(page.id)"
@@ -133,18 +129,14 @@
<div class="empty-icon">
<i class="fas fa-file-alt"></i>
</div>
<h3 v-if="isAdmin && address">Нет созданных страниц</h3>
<h3 v-if="canEditData && address">Нет созданных страниц</h3>
<h3 v-else>Нет опубликованных страниц</h3>
<p v-if="isAdmin && address">Создайте первую страницу для вашего DLE</p>
<p v-if="canEditData && address">Создайте первую страницу для вашего DLE</p>
<p v-else>Публичные страницы появятся здесь после их создания администраторами</p>
<button v-if="isAdmin && address" class="btn btn-primary" @click="goToCreate">
<button v-if="canEditData && address" class="btn btn-primary" @click="goToCreate">
<i class="fas fa-plus"></i>
Создать страницу
</button>
<button v-else class="btn btn-primary" @click="goToPublicPages">
<i class="fas fa-eye"></i>
Публичные страницы
</button>
</div>
<!-- Загрузка -->
@@ -193,6 +185,7 @@ import { useRouter } from 'vue-router';
import BaseLayout from '../../components/BaseLayout.vue';
import pagesService from '../../services/pagesService';
import { useAuthContext } from '../../composables/useAuth';
import { usePermissions } from '../../composables/usePermissions';
// Props
const props = defineProps({
@@ -218,7 +211,22 @@ const props = defineProps({
const emit = defineEmits(['auth-action-completed']);
const router = useRouter();
const { isAdmin, address } = useAuthContext();
const { address } = useAuthContext();
const { canEditData } = usePermissions();
// Подписываемся на централизованные события очистки и обновления данных
onMounted(() => {
window.addEventListener('clear-application-data', () => {
console.log('[ContentListView] Clearing pages data');
// Очищаем данные при выходе из системы
pages.value = [];
});
window.addEventListener('refresh-application-data', () => {
console.log('[ContentListView] Refreshing pages data');
loadPages(); // Обновляем данные при входе в систему
});
});
// Состояние
const activeTab = ref('pages');
@@ -250,16 +258,13 @@ function goToCreate() {
router.push({ name: 'content-create' });
}
function goToPublicPages() {
router.push({ name: 'public-pages' });
}
function goBack() {
router.go(-1);
}
function goToPage(id) {
if (isAdmin.value && address.value) {
if (canEditData.value && address.value) {
router.push({ name: 'page-view', params: { id } });
} else {
router.push({ name: 'public-page-view', params: { id } });
@@ -307,7 +312,7 @@ async function loadPages() {
isLoading.value = true;
// Проверяем роль админа через кошелек
if (isAdmin.value && address.value) {
if (canEditData.value && address.value) {
try {
// Пытаемся загрузить админские страницы
const response = await pagesService.getPages();

View File

@@ -19,13 +19,7 @@
@auth-action-completed="$emit('auth-action-completed')"
>
<div class="public-page-view">
<!-- Кнопка назад -->
<div class="back-button">
<button class="btn btn-outline" @click="goBack">
<i class="fas fa-arrow-left"></i>
Назад к списку страниц
</button>
</div>
<button class="close-btn" @click="goBack">×</button>
<!-- Заголовок страницы -->
<div class="page-header" v-if="page">
@@ -127,7 +121,7 @@ const isLoading = ref(false);
// Методы
function goBack() {
router.push({ name: 'public-pages' });
router.push({ name: 'content-list' });
}
function formatDate(date) {
@@ -176,10 +170,24 @@ onMounted(() => {
width: 100%;
max-width: 1200px;
margin: 0 auto;
position: relative;
}
.back-button {
margin-bottom: 20px;
.close-btn {
position: absolute;
top: 18px;
right: 18px;
background: none;
border: none;
font-size: 2rem;
cursor: pointer;
color: #bbb;
transition: color 0.2s;
z-index: 10;
}
.close-btn:hover {
color: #333;
}
.page-header {