children-menu.vue 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <template>
  2. <template v-for="menu in modelValue" :key="menu.name">
  3. <template v-if="menu.meta?.bind"> </template>
  4. <template v-else>
  5. <t-menu-item
  6. v-if="!menu.children || menu.children.length === 0"
  7. :value="menu.name"
  8. :disabled="menu.disabled"
  9. @click="routerPush(menu)"
  10. >
  11. <template v-if="menu.meta.icon" #icon>
  12. <svg-icon :name="menu.meta.icon"></svg-icon>
  13. </template>
  14. <span>
  15. {{ menu.meta.title }}
  16. </span>
  17. <span
  18. v-if="menu.meta?.alias && counts[menu.meta.alias]"
  19. class="t-menu__count"
  20. >
  21. {{ counts[menu.meta?.alias] }}
  22. </span>
  23. </t-menu-item>
  24. <!-- 下面这个目前是用不上了 -->
  25. <t-submenu v-else :value="menu.name">
  26. <template v-if="menu.meta.icon" #icon>
  27. <svg-icon :name="menu.meta.icon"></svg-icon>
  28. </template>
  29. <template #title>
  30. {{ menu.meta.title }}
  31. </template>
  32. <template v-if="menu.children">
  33. <children-menu v-model="menu.children" />
  34. </template>
  35. </t-submenu>
  36. </template>
  37. </template>
  38. </template>
  39. <script setup name="ChildrenMenu">
  40. import { useRouter } from 'vue-router';
  41. import { useWorkStore } from '@/store';
  42. import { computed } from 'vue';
  43. defineProps({ modelValue: Array });
  44. const router = useRouter();
  45. const workStore = useWorkStore();
  46. const counts = computed(() => workStore.counts);
  47. const routerPush = (menu) => {
  48. if (menu.meta && menu.meta.type === 'L') {
  49. window.open(menu.path);
  50. } else {
  51. router.push(menu.path);
  52. }
  53. };
  54. </script>