index.tsx 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import { defineComponent } from 'vue'
  2. import { RouterLink } from 'vue-router'
  3. import styles from './index.module.less'
  4. export const getAssetsHomeFile = (fileName: string) => {
  5. const path = `./images/${fileName}`
  6. const modules = import.meta.globEager('./images/*')
  7. return modules[path].default
  8. }
  9. // 个人中心默认地址
  10. const defaultRoute = 'studentInfo'
  11. export default defineComponent({
  12. name: 'user-menu',
  13. data() {
  14. return {}
  15. },
  16. computed: {
  17. activeRoute() {
  18. return this.$route.name
  19. },
  20. acitveMenuRoute() {
  21. return this.$route.meta.activeMenu
  22. },
  23. menuList() {
  24. const hasRoute = this.$router.hasRoute(defaultRoute)
  25. // 判断是否有个人中心的菜单
  26. if (!hasRoute) {
  27. return
  28. }
  29. const allRouter = this.$router.getRoutes()
  30. const userInfoRouter = allRouter.find(item => item.name === defaultRoute)
  31. const list: any = []
  32. userInfoRouter?.children.forEach((item: any) => {
  33. if (!item.meta.hidden) {
  34. list.push(item)
  35. }
  36. })
  37. return list
  38. }
  39. },
  40. render() {
  41. return (
  42. <div class="bg-white rounded-[6px] text-center py-6 px-[18px] flex items-center flex-col">
  43. {this.menuList.map((item: any) => (
  44. <RouterLink
  45. to={item.path}
  46. class={[
  47. 'py-2 px-6 mb-1.5 flex items-center text-base text-[#666] w-full last:mb-0 cursor-pointer',
  48. styles.menuItem,
  49. (item.name === this.activeRoute ||
  50. item.name === this.acitveMenuRoute) &&
  51. styles.active
  52. ]}
  53. >
  54. <i class={['w-7 h-7 mr-3.5', styles['icon' + item.meta.index]]}></i>
  55. {item.meta.title}
  56. </RouterLink>
  57. ))}
  58. </div>
  59. )
  60. }
  61. })