SubMenu.vue 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. <script setup lang="ts" name="SubMenu">
  2. import { useRouter } from 'vue-router'
  3. const router = useRouter()
  4. defineProps<{ menuList: Menu.MenuOptions[] }>()
  5. const handleClickMenu = (route: Menu.MenuOptions) => {
  6. router.push(route.path)
  7. }
  8. // const reg = /^[\u4e00-\u9fa5]+$/
  9. const reg = /^\\{1}/
  10. const isUnicode = (val: string | undefined) => {
  11. if (!val) return
  12. console.log(val)
  13. return reg.test(val)
  14. }
  15. console.log(isUnicode('\ue663'))
  16. </script>
  17. <template>
  18. <template v-for="subItem in menuList" :key="subItem.path">
  19. <el-sub-menu v-if="subItem.children && subItem.children.length > 0" :index="subItem.path">
  20. <template #title>
  21. <el-icon v-if="subItem.meta.icon">
  22. <component :is="subItem.meta.icon"></component>
  23. </el-icon>
  24. <i v-else class="iconfont">{{ subItem.meta.icon }}</i>
  25. <span>{{ subItem.meta.title }}</span>
  26. </template>
  27. <SubMenu :menuList="subItem.children" />
  28. </el-sub-menu>
  29. <el-menu-item v-else :index="subItem.path" @click="handleClickMenu(subItem)">
  30. <el-icon v-if="subItem.meta.icon">
  31. <component :is="subItem.meta.icon"></component>
  32. </el-icon>
  33. <i v-else class="iconfont">{{ subItem.meta.unicode }}</i>
  34. <template #title>
  35. <span>{{ subItem.meta.title }}</span>
  36. </template>
  37. </el-menu-item>
  38. </template>
  39. </template>
  40. <style scoped>
  41. .iconfont {
  42. margin-right: 5px;
  43. width: var(--el-menu-icon-width);
  44. text-align: center;
  45. font-size: 18px;
  46. vertical-align: middle;
  47. }
  48. </style>