| | |
| | | <template>
|
| | | <div :class="classObj" class="app-wrapper" :style="{ '--current-color': theme }">
|
| | | <div v-if="device === 'mobile' && sidebar.opened" class="drawer-bg" @click="handleClickOutside"/>
|
| | | <sidebar class="sidebar-container" />
|
| | | <div :class="{ hasTagsView: needTagsView }" class="main-container">
|
| | | <sidebar v-if="!sidebar.hide" class="sidebar-container" />
|
| | | <div :class="{ hasTagsView: needTagsView, sidebarHide: sidebar.hide }" class="main-container">
|
| | | <div :class="{ 'fixed-header': fixedHeader }">
|
| | | <navbar @setLayout="setLayout" />
|
| | | <tags-view v-if="needTagsView" />
|
| | |
| | | import { AppMain, Navbar, Settings, TagsView } from './components'
|
| | | import defaultSettings from '@/settings'
|
| | |
|
| | | const store = useStore();
|
| | | const theme = computed(() => store.state.settings.theme);
|
| | | const sideTheme = computed(() => store.state.settings.sideTheme);
|
| | | const sidebar = computed(() => store.state.app.sidebar);
|
| | | const device = computed(() => store.state.app.device);
|
| | | const needTagsView = computed(() => store.state.settings.tagsView);
|
| | | const fixedHeader = computed(() => store.state.settings.fixedHeader);
|
| | | import useAppStore from '@/store/modules/app'
|
| | | import useSettingsStore from '@/store/modules/settings'
|
| | |
|
| | | const settingsStore = useSettingsStore()
|
| | | const theme = computed(() => settingsStore.theme)
|
| | | const sideTheme = computed(() => settingsStore.sideTheme)
|
| | | const sidebar = computed(() => useAppStore().sidebar)
|
| | | const device = computed(() => useAppStore().device)
|
| | | const needTagsView = computed(() => settingsStore.tagsView)
|
| | | const fixedHeader = computed(() => settingsStore.fixedHeader)
|
| | |
|
| | | const classObj = computed(() => ({
|
| | | hideSidebar: !sidebar.value.opened,
|
| | |
| | | mobile: device.value === 'mobile'
|
| | | }))
|
| | |
|
| | | const { width, height } = useWindowSize();
|
| | | const WIDTH = 992; // refer to Bootstrap's responsive design
|
| | | const { width, height } = useWindowSize()
|
| | | const WIDTH = 992 // refer to Bootstrap's responsive design
|
| | |
|
| | | watch(() => device.value, () => {
|
| | | if (device.value === 'mobile' && sidebar.value.opened) {
|
| | | useAppStore().closeSideBar({ withoutAnimation: false })
|
| | | }
|
| | | })
|
| | |
|
| | | watchEffect(() => {
|
| | | if (device.value === 'mobile' && sidebar.value.opened) {
|
| | | store.dispatch('app/closeSideBar', { withoutAnimation: false })
|
| | | }
|
| | | if (width.value - 1 < WIDTH) {
|
| | | store.dispatch('app/toggleDevice', 'mobile')
|
| | | store.dispatch('app/closeSideBar', { withoutAnimation: true })
|
| | | useAppStore().toggleDevice('mobile')
|
| | | useAppStore().closeSideBar({ withoutAnimation: true })
|
| | | } else {
|
| | | store.dispatch('app/toggleDevice', 'desktop')
|
| | | useAppStore().toggleDevice('desktop')
|
| | | }
|
| | | })
|
| | |
|
| | | function handleClickOutside() {
|
| | | store.dispatch('app/closeSideBar', { withoutAnimation: false })
|
| | | useAppStore().closeSideBar({ withoutAnimation: false })
|
| | | }
|
| | |
|
| | | const settingRef = ref(null);
|
| | | const settingRef = ref(null)
|
| | | function setLayout() {
|
| | | settingRef.value.openSetting();
|
| | | settingRef.value.openSetting()
|
| | | }
|
| | | </script>
|
| | |
|
| | |
| | | width: calc(100% - 54px);
|
| | | }
|
| | |
|
| | | .sidebarHide .fixed-header {
|
| | | width: 100%;
|
| | | }
|
| | |
|
| | | .mobile .fixed-header {
|
| | | width: 100%;
|
| | | }
|