feat: new settings and mainpage blocks
This commit is contained in:
@@ -26,8 +26,8 @@
|
||||
<RouterLink :to="{name: 'orders'}">Заказы</RouterLink>
|
||||
</li>
|
||||
|
||||
<li :class="{active: route.name === 'slider'}">
|
||||
<RouterLink :to="{name: 'slider'}">Слайдер</RouterLink>
|
||||
<li :class="{active: route.name === 'mainpage'}">
|
||||
<RouterLink :to="{name: 'mainpage'}">Главная страница</RouterLink>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
@@ -36,20 +36,39 @@
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<Button label="Сохранить настройки" @click="settings.saveSettings"/>
|
||||
<Divider/>
|
||||
<div class="tw:flex tw:items-center tw:justify-start tw:gap-4">
|
||||
<Button
|
||||
label="Сохранить настройки"
|
||||
:disabled="!settings.hasUnsavedChanges"
|
||||
v-tooltip.top="settings.hasUnsavedChanges ? 'Сохранить изменения' : 'Нет изменений для сохранения'"
|
||||
@click="settings.saveSettings"
|
||||
/>
|
||||
<div v-if="settings.hasUnsavedChanges"
|
||||
class="tw:flex tw:items-center tw:gap-2 tw:text-red-600">
|
||||
<i class="fa fa-exclamation-triangle"></i>
|
||||
<span class="tw:text-sm">Есть несохранённые изменения</span>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div v-if="settings.isLoading" class="tw:w-full tw:h-full tw:absolute tw:top-0 tw:left-0 tw:z-30 tw:backdrop-blur-sm">
|
||||
<div class="tw:fixed tw:top-0 tw:left-0 tw:w-full tw:h-full tw:flex tw:justify-center tw:items-center tw:z-40 tw:text-4xl">
|
||||
<div v-if="settings.isLoading"
|
||||
class="tw:w-full tw:h-full tw:absolute tw:top-0 tw:left-0 tw:z-30 tw:backdrop-blur-sm">
|
||||
<div
|
||||
class="tw:fixed tw:top-0 tw:left-0 tw:w-full tw:h-full tw:flex tw:justify-center tw:items-center tw:z-40 tw:text-4xl">
|
||||
<i class="fa fa-spin fa-spinner tw:mr-5"></i>
|
||||
<div>Загрузка...</div>
|
||||
</div>
|
||||
</div>
|
||||
<Toast position="top-right"/>
|
||||
<ConfirmDialog/>
|
||||
<ConfirmPopup group="popup"/>
|
||||
</div>
|
||||
|
||||
<div v-else class="tw:w-full tw:h-full tw:absolute tw:top-0 tw:left-0 tw:z-30 tw:backdrop-blur-sm">
|
||||
<div class="tw:fixed tw:top-0 tw:left-0 tw:w-full tw:h-full tw:flex tw:flex-col tw:justify-center tw:items-center tw:z-40">
|
||||
<div v-else
|
||||
class="tw:w-full tw:h-full tw:absolute tw:top-0 tw:left-0 tw:z-30 tw:backdrop-blur-sm">
|
||||
<div
|
||||
class="tw:fixed tw:top-0 tw:left-0 tw:w-full tw:h-full tw:flex tw:flex-col tw:justify-center tw:items-center tw:z-40">
|
||||
<i class="fa fa-ban tw:text-4xl"></i>
|
||||
<div class="tw:text-4xl">{{ settings.error }}</div>
|
||||
<div>Обратитесь в поддержку</div>
|
||||
@@ -61,15 +80,36 @@
|
||||
import {RouterView, useRoute} from 'vue-router';
|
||||
import {useSettingsStore} from "@/stores/settings.js";
|
||||
import Toast from 'primevue/toast';
|
||||
import { toastBus } from '@/utils/toastHelper';
|
||||
import {toastBus} from '@/utils/toastHelper';
|
||||
import {useToast} from "primevue";
|
||||
import Button from 'primevue/button';
|
||||
import TopLead from "@/components/TopLead.vue";
|
||||
import Divider from 'primevue/divider';
|
||||
import ConfirmDialog from 'primevue/confirmdialog';
|
||||
import ConfirmPopup from 'primevue/confirmpopup';
|
||||
import {onBeforeUnmount, onMounted} from "vue";
|
||||
|
||||
const route = useRoute();
|
||||
const settings = useSettingsStore();
|
||||
const toast = useToast();
|
||||
toastBus.on('show', (data) => toast.add(data));
|
||||
|
||||
// Защита от обновления страницы или закрытия вкладки
|
||||
function handleBeforeUnload(event) {
|
||||
if (settings.hasUnsavedChanges) {
|
||||
event.preventDefault();
|
||||
event.returnValue = 'У вас есть несохранённые изменения. Вы уверены, что хотите покинуть страницу?';
|
||||
return event.returnValue;
|
||||
}
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
window.addEventListener('beforeunload', handleBeforeUnload);
|
||||
});
|
||||
|
||||
onBeforeUnmount(() => {
|
||||
window.removeEventListener('beforeunload', handleBeforeUnload);
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user