DefaultLayout.vue 1.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <script setup>
  2. import { provide, ref } from 'vue'
  3. import AppHeader from '@/components/AppHeader.vue'
  4. import AppSidebar from '@/components/AppSidebar.vue'
  5. import AppFooterCoreUI from '@/components/AppFooterCoreUI.vue'
  6. import AppFlashMessages from '@/components/AppFlashMessages.vue'
  7. const sidebarVisible = ref(true)
  8. const toggleSidebar = () => (sidebarVisible.value = !sidebarVisible.value)
  9. const sidebarUnfoldable = ref(false)
  10. const toggleUnfoldable = () => (sidebarUnfoldable.value = !sidebarUnfoldable.value)
  11. const modalAlertVisible = ref(false)
  12. const toggleModalAlert = () => (modalAlertVisible.value = !modalAlertVisible.value)
  13. provide('defaultLayout', {
  14. sidebarVisible,
  15. toggleSidebar,
  16. sidebarUnfoldable,
  17. toggleUnfoldable,
  18. modalAlertVisible,
  19. toggleModalAlert,
  20. })
  21. </script>
  22. <template>
  23. <AppSidebar />
  24. <div class="wrapper">
  25. <AppHeader />
  26. <CContainer fluid>
  27. <AppFlashMessages />
  28. <slot :toggleModalAlert="toggleModalAlert" />
  29. </CContainer>
  30. <AppFooterCoreUI />
  31. </div>
  32. </template>
  33. <style lang="scss">
  34. @import '@coreui/coreui/scss/coreui';
  35. .wrapper {
  36. width: 100%;
  37. @include ltr-rtl('padding-left', var(--cui-sidebar-occupy-start, 0));
  38. will-change: auto;
  39. @include transition(padding 0.15s);
  40. }
  41. </style>