MtaNavbar.vue 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <template>
  2. <!-- left-icon="left" left-text="返回" @clickLeft="handleBack" shadow status-bar -->
  3. <uni-nav-bar dark :fixed="true" shadow background-color="transparent" title="自定义导航栏" class="dljt-navBar-box">
  4. <view class="dljt-logo-box"></view>
  5. <icon class="dljt-menu-box" v-if="hasRight" @click="handleChangeMenu"></icon>
  6. </uni-nav-bar>
  7. <!-- 菜单面板 -->
  8. <uni-collapse class="head-collapse-box" ref="collapse" accordion v-model="data.activeMenu" v-show="data.showMenu">
  9. <uni-collapse-item class="head-collapse-item" :title="item.title" v-for="item in data.list" :key="item.title" :name="item.url">
  10. <view class="head-item-text" v-for="cIt in item.children" :key="item.title"
  11. :class="{active: cIt.url.includes(data.activePath)}" @click="handleClick(cIt)">
  12. {{cIt.title}}
  13. </view>
  14. </uni-collapse-item>
  15. </uni-collapse>
  16. </template>
  17. <script setup>
  18. import {
  19. ref,
  20. reactive
  21. } from "vue"
  22. const showLeft = ref(null)
  23. import {
  24. onLoad
  25. } from "@dcloudio/uni-app"
  26. const props = defineProps({
  27. hasRight: {
  28. type: Boolean,
  29. default: true
  30. }
  31. })
  32. const ani = ref(null)
  33. const data = reactive({
  34. list: [{
  35. title: '1',
  36. url: '1',
  37. children: [{
  38. title: '1-1',
  39. url: '/pages/dqgzDangjiangongzuo/dqgzDangjiangongzuo'
  40. }, {
  41. title: '1-2',
  42. url: 'http://www.baidu.com',
  43. type: 'link'
  44. }, {
  45. title: '1-3',
  46. url: '/pages/index/index'
  47. }, {
  48. title: '1-4',
  49. url: '2'
  50. }, ]
  51. },
  52. {
  53. title: '2',
  54. url: '3',
  55. children: [{
  56. title: '2-1',
  57. url: '4'
  58. }, {
  59. title: '2-2',
  60. url: '5'
  61. }, {
  62. title: '2-3',
  63. url: '6'
  64. }, {
  65. title: '2-4',
  66. url: '7'
  67. }]
  68. }
  69. ],
  70. activeMenu: null,
  71. activePath: '',
  72. showMenu: false,
  73. })
  74. onLoad(() => {
  75. const pages = getCurrentPages();
  76. data.activePath = pages[pages.length - 1].route;
  77. const parentMenu = data.list.find(item => item.children.some(cit => cit.url.includes(data.activePath)));
  78. console.log('parentMenu && parentMenu.url', parentMenu && parentMenu.url)
  79. data.activeMenu = parentMenu && parentMenu.url;
  80. })
  81. function handleClick(data) {
  82. console.log(`菜单:${data.title};路径:${data.url}`);
  83. if (data.type == 'link') {
  84. window.location.href = data.url;
  85. return;
  86. }
  87. if (data.url) {
  88. uni.navigateTo({
  89. url: data.url
  90. })
  91. }
  92. }
  93. function handleChangeMenu() {
  94. data.showMenu = !data.showMenu;
  95. }
  96. function handleBack() {
  97. uni.navigateBack()
  98. }
  99. </script>
  100. <style>
  101. </style>