12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- <template>
- <section class="app-main">
- <router-view v-slot="{ Component, route }">
- <transition :enter-active-class="animante" mode="out-in">
- <keep-alive :include="tagsViewStore.cachedViews">
- <component v-if="!route.meta.link" :is="Component" :key="route.path" />
- </keep-alive>
- </transition>
- </router-view>
- <iframe-toggle />
- </section>
- </template>
- <script lang="ts">
- export default {
- name: 'AppMin'
- }
- </script>
- <script setup lang="ts">
- import useTagsViewStore from '@/store/modules/tagsView';
- import useSettingsStore from '@/store/modules/settings';
- import IframeToggle from './IframeToggle/index.vue'
- import { ComponentInternalInstance } from "vue";
- const { proxy } = getCurrentInstance() as ComponentInternalInstance;
- const tagsViewStore = useTagsViewStore();
- // 随机动画集合
- const animante = ref<string>('');
- const animationEnable = ref(useSettingsStore().animationEnable);
- watch(()=> useSettingsStore().animationEnable, (val) => {
- animationEnable.value = val;
- if (val) {
- animante.value = proxy?.animate.animateList[Math.round(Math.random() * proxy?.animate.animateList.length)] as string;
- } else {
- animante.value = proxy?.animate.defaultAnimate as string;
- }
- }, { immediate: true });
- </script>
- <style lang="scss" scoped>
- .app-main {
- /* 50= navbar 50 */
- min-height: calc(100vh - 50px);
- width: 100%;
- position: relative;
- overflow: hidden;
- }
- .fixed-header+.app-main {
- padding-top: 50px;
- }
- .hasTagsView {
- .app-main {
- /* 84 = navbar + tags-view = 50 + 34 */
- min-height: calc(100vh - 84px);
- }
- .fixed-header+.app-main {
- padding-top: 84px;
- }
- }
- </style>
- <style lang="scss">
- // fix css style bug in open el-dialog
- .el-popup-parent--hidden {
- .fixed-header {
- padding-right: 17px;
- }
- }
- </style>
|