Navi.vue 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <template>
  2. <nav class="nav">
  3. <div class="nav__body">
  4. <router-link to="/"><img src="/image/seec-logo--full.png" class="nav__logo" /></router-link>
  5. <ul class="nav__list nav__list-left">
  6. <li class="nav__item nav__item-left"><a href="http://helper.seecoder.cn" target="_self">HELPER</a></li>
  7. <li class="nav__item nav__item-left"><a href="http://coder.seecoder.cn" target="_self">CODER</a></li>
  8. <li class="nav__item nav__item-left"><a href="http://developer.seecoder.cn" target="_self">DEVELOPER</a></li>
  9. </ul>
  10. <el-input placeholder="搜索课程" class="nav__search" disabled>
  11. <el-button slot="append" icon="el-icon-search" disabled></el-button>
  12. </el-input>
  13. <ul class="nav__list nav__list-right" v-if="isLogin">
  14. <li class="nav__item">
  15. <router-link to="/person/info" v-if="!isAdmin">个人中心</router-link>
  16. <router-link to="/admin/checkApplications" v-else>平台管理</router-link>
  17. </li>
  18. <li class="nav__item">
  19. <el-popover
  20. placement="bottom-start"
  21. width="120"
  22. trigger="hover"
  23. popper-class="drop-container">
  24. <div class="drop-info">
  25. <div class="drop-info__item drop-info__name">{{userName}}</div>
  26. <div class="drop-info__item">({{userPhone}})</div>
  27. </div>
  28. <el-menu
  29. class="el-menu-vertical-demo drop-list">
  30. <el-menu-item index="2" v-if="isTeacher">
  31. 教师界面
  32. </el-menu-item>
  33. <el-menu-item index="3" @click="logout">
  34. 退出登录
  35. </el-menu-item>
  36. </el-menu>
  37. <img slot="reference" class="nav__photo" src="/image/default-photo.jpg"/>
  38. </el-popover>
  39. </li>
  40. </ul>
  41. <ul class="nav__list nav__list-right" v-else>
  42. <li class="nav__item"><router-link to="/login">登录</router-link></li>
  43. <li class="nav__item"><router-link to="/register">注册</router-link></li>
  44. </ul>
  45. </div>
  46. </nav>
  47. </template>
  48. <script>
  49. export default {
  50. name: 'Navi',
  51. data () {
  52. return {
  53. isLogin: !!this.$store.state.token,
  54. isTeacher: this.$store.state.user.role === 'TEACHER',
  55. isAdmin: this.$store.state.user.role === 'ADMIN',
  56. userName: this.$store.state.user.name,
  57. userPhone: this.$store.state.user.phone
  58. }
  59. },
  60. mounted () {
  61. },
  62. methods: {
  63. logout () {
  64. this.$store.commit('saveToken', null)
  65. this.$store.commit('saveUser', {})
  66. this.$cookies.remove('token', { maxAge: 24 * 60 * 60 })
  67. this.$cookies.remove('user', { maxAge: 24 * 60 * 60 })
  68. this.refresh()
  69. this.$router.push('/')
  70. },
  71. refresh () {
  72. this.isLogin = !!this.$store.state.token
  73. this.isTeacher = this.$store.state.user.role === 'TEACHER'
  74. this.isAdmin = this.$store.state.user.role === 'ADMIN'
  75. this.userName = this.$store.state.user.name
  76. this.userPhone = this.$store.state.user.phone
  77. }
  78. }
  79. }
  80. </script>
  81. <style scoped>
  82. </style>