App.vue 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <template>
  2. <div id="app">
  3. <div class="big-nav">
  4. <iheader />
  5. <inavs />
  6. </div>
  7. <div class="mask" :class="{active: cp}" :style="{zIndex: maskZIndex}"></div>
  8. <!-- <ichat /> -->
  9. <router-view/>
  10. <ifooter />
  11. </div>
  12. </template>
  13. <script>
  14. import {mapState} from 'vuex'
  15. import '@/assets/style/reset.scss'
  16. import '@/assets/style/public.scss'
  17. import '@/assets/font/iconfont.css'
  18. import header from '@/page/layout/header'
  19. import footer from '@/page/layout/footer'
  20. import login from '@/page/layout/login'
  21. import navs from '@/page/navs'
  22. import chat from '@/page/chat'
  23. export default {
  24. name: 'App',
  25. data () {
  26. return {
  27. maskZIndex: -1
  28. }
  29. },
  30. components: {
  31. iheader: header,
  32. ifooter: footer,
  33. ilogin: login,
  34. inavs: navs,
  35. ichat: chat
  36. },
  37. computed: {
  38. ...mapState({
  39. cp: state => state.ui.nav
  40. })
  41. },
  42. watch: {
  43. cp (newVal) {
  44. clearTimeout(this.timeout)
  45. if (newVal) {
  46. this.maskZIndex = 3
  47. } else {
  48. this.timeout = setTimeout(() => {
  49. this.maskZIndex = -1
  50. }, 700)
  51. }
  52. }
  53. }
  54. }
  55. </script>
  56. <style lang="scss" scoped>
  57. #app {
  58. padding-top: 68px;
  59. }
  60. .big-nav {
  61. position: fixed;
  62. left: 0;
  63. top: 0;
  64. width: 100%;
  65. z-index: 4;
  66. }
  67. .mask {
  68. z-index: -1;
  69. display: block;
  70. background-color: rgba(0,0,0,0);
  71. transition: background-color .7s cubic-bezier(.77,0,.175,1);
  72. }
  73. .mask.active {
  74. background-color: rgba(0,0,0,0.4);
  75. }
  76. </style>