MtaNavbar.vue 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  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. <!-- <scroll-view scroll-y :scroll-top="scrollTop">-->
  9. <uni-collapse class="head-collapse-box" ref="collapse" accordion v-model="data.activeMenu" v-show="data.showMenu">
  10. <uni-collapse-item class="head-collapse-item" :title="item.title" v-for="item in data.list" :key="item.title"
  11. :name="item.url">
  12. <view class="head-item-text" v-for="cIt in item.children" :key="item.title"
  13. :class="{active: cIt.url.includes(data.activePath)}" @click="handleClick(cIt)">
  14. {{cIt.title}}
  15. </view>
  16. </uni-collapse-item>
  17. </uni-collapse>
  18. <!-- </scroll-view>-->
  19. </template>
  20. <script setup>
  21. import {
  22. ref,
  23. reactive,
  24. onMounted,
  25. nextTick
  26. } from "vue"
  27. const showLeft = ref(null)
  28. import {
  29. onLoad
  30. } from "@dcloudio/uni-app"
  31. const props = defineProps({
  32. hasRight: {
  33. type: Boolean,
  34. default: true
  35. }
  36. })
  37. const ani = ref(null)
  38. const data = reactive({
  39. list: [{
  40. title: '学校主页',
  41. url: '/pages/index/index',
  42. children: [{
  43. title: '首页',
  44. url: '/pages/index/index',
  45. }]
  46. },
  47. {
  48. title: '学院概况',
  49. url: '/pages/xygkXueyuanjianjie/xygkXueyuanjianjie',
  50. children: [{
  51. title: '学院简介',
  52. url: '/pages/xygkXueyuanjianjie/xygkXueyuanjianjie'
  53. }, {
  54. title: '机构设置',
  55. url: '/pages/xygkJigoushezhi/xygkJigoushezhi',
  56. }, {
  57. title: '学院荣誉',
  58. url: '/pages/xygkXueyuanrongyu/xygkXueyuanrongyu'
  59. }, {
  60. title: '学院文化',
  61. url: '/pages/xygkXueyuanwenhua/xygkXueyuanwenhua'
  62. }, {
  63. title: '校园风光',
  64. url: '/pages/xygkXiaoyuanfengguang/xygkXiaoyuanfengguang'
  65. }, {
  66. title: '联系方式',
  67. url: '/pages/xygkLianxifangshi/xygkLianxifangshi'
  68. },
  69. ]
  70. },
  71. {
  72. title: '党群工作',
  73. url: '/pages/dqgzDangzuzhijiagou/dqgzDangzuzhijiagou',
  74. children: [{
  75. title: '党组织架构',
  76. url: '/pages/dqgzDangzuzhijiagou/dqgzDangzuzhijiagou'
  77. }, {
  78. title: '工会组织架构',
  79. url: '/pages/dqgzGonghuizuzhijiagou/dqgzGonghuizuzhijiagou'
  80. }, {
  81. title: '党建工作',
  82. url: '/pages/dqgzDangjiangongzuo/dqgzDangjiangongzuo'
  83. }, {
  84. title: '党员风采',
  85. url: '/pages/dqgzDangyuanfengcai/dqgzDangyuanfengcai'
  86. }, {
  87. title: '工会之家',
  88. url: '/pages/dqgzGonghuizhijia/dqgzGonghuizhijia'
  89. }]
  90. },
  91. {
  92. title: '校园动态',
  93. url: '3',
  94. children: [{
  95. title: '学院新闻',
  96. url: '/pages/xydtXueyuanxingwen/xydtXueyuanxingwen'
  97. }, {
  98. title: '通知公告',
  99. url: '/pages/xydtTongzhigonggao/xydtTongzhigonggao'
  100. }, {
  101. title: '校务公开',
  102. url: '/pages/xydtXiaowugongkai/xydtXiaowugongkai'
  103. }, {
  104. title: '学院风采',
  105. url: '/pages/xydtXueyuanfengcai/xydtXueyuanfengcai'
  106. }]
  107. },
  108. {
  109. title: '教育教学',
  110. url: '/pages/jyjxZhuanyejianshe/jyjxZhuanyejianshe',
  111. children: [{
  112. title: '专业建设',
  113. url: '/pages/jyjxZhuanyejianshe/jyjxZhuanyejianshe'
  114. }, {
  115. title: '师资队伍',
  116. url: '/pages/jyjxShiziduiwu/jyjxShiziduiwu'
  117. }, {
  118. title: '教研活动',
  119. url: '/pages/jyjxKeyanhuodong/jyjxKeyanhuodong'
  120. }, {
  121. title: '科研动态',
  122. url: '/pages/jyjxKeyandongtai/jyjxKeyandongtai'
  123. }, {
  124. title: '技能鉴定',
  125. url: '/pages/jyjxJinengjianding/jyjxJinengjianding'
  126. }, {
  127. title: '第二课堂',
  128. url: '/pages/jyjxDierketang/jyjxDierketang'
  129. }, {
  130. title: '大赛风采',
  131. url: '/pages/jyjxDasaifengcai/jyjxDasaifengcai'
  132. }, {
  133. title: '重点项目',
  134. url: '/pages/jyjxZhongdianxiangmu/jyjxZhongdianxiangmu'
  135. },
  136. {
  137. title: '校企合作',
  138. url: '/pages/jyjxXiaoqihezuo/jyjxXiaoqihezuo'
  139. },
  140. {
  141. title: '规章制度',
  142. url: '/pages/jyjxGuizhangzhidu/jyjxGuizhangzhidu'
  143. },
  144. ]
  145. }, {
  146. title: '学生园地',
  147. url: '/pages/xsydDeyuduiwu/xsydDeyuduiwu',
  148. children: [{
  149. title: '德育队伍',
  150. url: '/pages/xsydDeyuduiwu/xsydDeyuduiwu'
  151. }, {
  152. title: '学生活动',
  153. url: '/pages/xsydXueshenghuodong/xsydXueshenghuodong'
  154. }, {
  155. title: '共青团',
  156. url: '/pages/xsydGongqingtuan/xsydGongqingtuan'
  157. }, {
  158. title: '资助管理',
  159. url: '/pages/xsydZizhuguanli/xsydZizhuguanli'
  160. }]
  161. },
  162. {
  163. title: '招生就业',
  164. url: "pages/zsjyZhaoshengjianzhang/zsjyZhaoshengjianzhang",
  165. children: [{
  166. title: '招生简章',
  167. url: "/pages/zsjyZhaoshengjianzhang/zsjyZhaoshengjianzhang",
  168. }, {
  169. title: '专业介绍',
  170. url: '/pages/zsjyZhuanyejieshao/zsjyZhuanyejieshao'
  171. }, {
  172. title: '升学',
  173. url: '/pages/zsjyShengxue/zsjyShengxue'
  174. }, {
  175. title: '报考指南',
  176. url: '/pages/zsjyBaokaozhinan/zsjyBaokaozhinan'
  177. }, {
  178. title: '往年录取分数',
  179. url: '/pages/zsjyWangnianluqufenshu/zsjyWangnianluqufenshu'
  180. }, {
  181. title: '校企合作',
  182. url: '/pages/zsjyXiaoqihezuo/zsjyXiaoqihezuo'
  183. }, {
  184. title: '招聘信息',
  185. url: '/pages/zsjyZhaopinxinxi/zsjyZhaopinxinxi'
  186. }, {
  187. title: '政策文件',
  188. url: '/pages/zsjyZhengcewenjian/zsjyZhengcewenjian'
  189. }, {
  190. title: '优秀毕业生',
  191. url: '/pages/zsjyYouxiubiyesheng/zsjyYouxiubiyesheng'
  192. }, {
  193. title: '预报名',
  194. url: '/pages/zsjyYubaoming/zsjyYubaoming'
  195. }]
  196. }, {
  197. title: '职业培训',
  198. url: '/pages/zypxTongzhigonggao/zypxTongzhigonggao',
  199. children: [{
  200. title: '线上教育',
  201. type: 'link',
  202. url: '/mdist/#/pages/index/index'
  203. }, {
  204. title: '课程查询',
  205. type: 'link',
  206. url: '/mdist/#/pages/index/index'
  207. }, {
  208. title: '通知公告',
  209. url: '/pages/zypxTongzhigonggao/zypxTongzhigonggao'
  210. }]
  211. }, {
  212. title: '下载中心',
  213. url: '/pages/xzzxXiazaizhongxin/xzzxXiazaizhongxin',
  214. children: [{
  215. title: '下载',
  216. url: '/pages/xzzxXiazaizhongxin/xzzxXiazaizhongxin',
  217. }]
  218. },
  219. ],
  220. activeMenu: null,
  221. activePath: '',
  222. showMenu: false,
  223. })
  224. onLoad(() => {
  225. const pages = getCurrentPages();
  226. data.activePath = pages[pages.length - 1].route;
  227. const parentMenu = data.list.find(item => item.children.some(cit => cit.url.includes(data.activePath)));
  228. console.log('parentMenu && parentMenu.url', parentMenu && parentMenu.url)
  229. data.activeMenu = parentMenu && parentMenu.url;
  230. })
  231. function handleClick(data) {
  232. console.log(`菜单:${data.title};路径:${data.url}`);
  233. if (data.type == 'link') {
  234. window.location.href = data.url;
  235. return;
  236. }
  237. if (data.url) {
  238. uni.navigateTo({
  239. url: data.url
  240. })
  241. }
  242. }
  243. function handleChangeMenu() {
  244. data.showMenu = !data.showMenu;
  245. // data.showMenu && scrollToElement('.head-item-text.active')
  246. }
  247. function handleBack() {
  248. uni.navigateBack()
  249. }
  250. const scrollTop = ref(0);
  251. // 滚动到目标元素
  252. const scrollToElement = (selector) => {
  253. nextTick(() => {
  254. uni.createSelectorQuery().in(this)
  255. .select(selector).boundingClientRect(rect => {
  256. scrollTop.value = rect.top; // 设置滚动位置
  257. }).exec();
  258. })
  259. };
  260. </script>
  261. <style>
  262. </style>