App.vue 2.8 KB
<template>
  <div id="app">
    <transition :name="routerAnimate">
      <keep-alive :include="keepAlive">
        <router-view class="app-content"></router-view>
      </keep-alive>
    </transition>
  </div>
</template>

<script>
export default {
  name: 'app',
  data () {
    return {
      routerAnimate: '',
      keepAlive: [],
      aliveRoute: ['peopleList']
    }
  },
  watch: {
    // 监听 $route 为内页设置不同的过渡效果
    "$route" (to, from) {

      /*动态设置路由缓存 start*/
      //?需要缓存的组件
      if (this.aliveRoute.includes(to.name)) {
        to.meta.keepAlive = true
      }
      // console.log(to.path + '---' + to.meta.keepAlive);
      let aliveRoute = this.$router.options.routes.filter(e => e.meta && e.meta.keepAlive).map(e => e.name)
      this.keepAlive = aliveRoute
      /*动态设置路由缓存 end*/
      // console.log(aliveRoute);

      if (to.meta.index === from.meta.index) {
        this.routerAnimate = ""
        return;
        // this.routerAnimate = "slide-left"
      }
      //都有值时
      if (to.meta.index && from.meta.index) {
        if (to.meta.index > from.meta.index) {//前进
          this.routerAnimate = "slide-left"
        } else {//后退
          this.routerAnimate = "slide-right"
        }
      }
      // 如果 该路由 在 免登录之外 且 loginFlg 状态为 需要登录 则跳转登录页
      // console.log(this.$store.state.userInfo, '-this.userInfo');

      // if (!this.$normalPage().toString().includes(this.$route.path) && (!this.userInfo.loginFlg || this.userInfo.loginFlg != '1')) {
      //   console.log("检验未通过,走index")
      //   this.$router.push({
      //     path: "/index",
      //   });
      // }
    },
  },
  computed: {
    userInfo () {
      return this.$store.state.userInfo || {}
    },

  },
  methods: {
  },
  created () {

  },

  mounted () {
  }

}
</script>
<style lang="scss">
/*将公用的样式统一在此导入*/
@import './assets/css/base.css';
@import './assets/css/vuex-ui.css';
@import './assets/css/vant-ui.css';
@import './assets/iconfont.css';

html,
body {
  width: 100%;
  height: 100%;
  font-size: 16px;
  //overflow: hidden;
}

html {
  font-size: calc(100vw / 7.5); /*1rem = 100px*/
}

#app {
  height: 100%;
  width: 100%;
}
.slide-right-enter-active,
.slide-right-leave-active,
.slide-left-enter-active,
.slide-left-leave-active {
  will-change: transform;
  transition: all 500ms;
  position: absolute;
}
.slide-right-enter {
  opacity: 0;
  transform: translate3d(-100%, 0, 0);
}
.slide-right-leave-active {
  /*opacity: 0;*/
  display: none;
  transform: translate3d(100%, 0, 0);
}
.slide-left-enter {
  opacity: 0;
  transform: translate3d(100%, 0, 0);
}
.slide-left-leave-active {
  /*opacity: 0;*/
  display: none;
  transform: translate3d(-100%, 0, 0);
}
</style>