Vue實(shí)現(xiàn)側(cè)邊導(dǎo)航欄于Tab頁(yè)關(guān)聯(lián)的示例代碼
技術(shù)棧
- 側(cè)邊欄用
- Antdtab使用element
效果
<template> <div class="main-card"> <el-row> <el-col :span="3"> <div class="menu-all"> <div class="menu-head"> <span class="menu-head-title">倉(cāng)庫(kù)管理</span>/<span class="menu-head-title" @click="goBack" >大屏</span > </div> <!-- <div class="menu-body"> <div class="menu-item" @click="openTabs(item)" v-for="item in menuItems" :key="item"> <i class="el-icon-s-home" v-if="item.value === '01'"></i>{{ item.name }} </div> </div> --> <a-menu mode="inline" theme="dark" :openKeys="openKeys" v-model="SelectedKeys" @openChange="onOpenChange" > <a-sub-menu v-for="item in menuItems" :key="item.value"> <span slot="title" ><a-icon type="appstore" /><span>{{ item.name }}</span></span > <a-menu-item v-for="childrenItem in item.children" :key="childrenItem.value" @click="addTabs(childrenItem)" >{{ childrenItem.name }} </a-menu-item> </a-sub-menu> </a-menu> </div> </el-col> <el-col :span="21"> <el-row> <el-col :span="24"> <div> <el-tabs v-model="editableTabsValue" type="card" closable @tab-remove="removeTab"> <el-tab-pane v-for="item in editableTabs" :key="item.name" :label="item.title" :name="item.name"> <component :is="item.content"></component> </el-tab-pane> </el-tabs> </div> </el-col> </el-row> </el-col> </el-row> </div> </template> <script> export default { data(){ return{ openKeys: [],//控制一級(jí)菜單折疊展開(kāi)的數(shù)組 存放一級(jí)菜單的value SelectedKeys: '',//控制二級(jí)菜單高亮 存放二級(jí)菜單value //側(cè)邊導(dǎo)航菜單數(shù)組 menuItems: [ { name: '應(yīng)入應(yīng)出報(bào)表', value: '0', children: [ { name: '應(yīng)入庫(kù)單量報(bào)表', value: '01', content: () => import('@/views/main/index/qtyReportIndex.vue'), }, { name: '應(yīng)入庫(kù)臺(tái)數(shù)報(bào)表', value: '02', content: () => import('@/views/main/index/qtyReportIndexQty.vue'), }, { name: '應(yīng)出庫(kù)單量報(bào)表', value: '03', content: () => import('@/views/main/index/handoverReportIndex.vue'), }, { name: '應(yīng)出庫(kù)臺(tái)數(shù)報(bào)表', value: '04', content: () => import('@/views/main/index/handoverReportIndexQty.vue'), }, ], }, { name: '預(yù)測(cè)', value: '1', children: [ { name: '到貨登記', value: '11', content: () => import('@/views/main/index/asnHdrDockIndex.vue'), }, { name: '倉(cāng)庫(kù)利用率', value: '12', content: () => import('@/views/main/index/whUteIndex.vue'), }, { name: '庫(kù)內(nèi)庫(kù)存', value: '13', content: () => import('@/views/main/index/imOdsStorageIndex.vue'), }, ], }, { name: '指標(biāo)', value: '2', children: [ { name: '單倉(cāng)提貨率', value: '201', content: () => import('@/views/main/index/singleWhDeliveryScaleIndex.vue'), }, { name: '中轉(zhuǎn)在庫(kù)時(shí)長(zhǎng)', value: '202', content: () => import('@/views/main/index/transitDurationInWhIndex.vue'), }, { name: '重復(fù)SN', value: '203', content: () => import('@/views/main/index/dwExceptionBarcodeIndex.vue'), }, { name: '盤(pán)點(diǎn)日清單', value: '204', content: () => import('@/views/main/index/inventoryRqIndex.vue'), }, { name: '移庫(kù)指標(biāo)監(jiān)控', value: '205', content: () => import('@/views/main/index/transferIndexIndex.vue'), }, { name: '揀貨庫(kù)位分析匯總報(bào)表', value: '206', content: () => import('@/views/main/index/pickingByLocSumIndex.vue'), }, { name: '裝車(chē)報(bào)表匯總', value: '207', content: () => import('@/views/main/index/loadingSummaryIndex.vue'), }, { name: '出庫(kù)SN報(bào)錯(cuò)率', value: '208', content: () => import('@/views/main/index/dwBarcodeErrorRptIndex.vue'), }, { name: '揀貨庫(kù)位分析明細(xì)', value: '209', content: () => import('@/views/main/index/dwPickFxmxIndex.vue'), }, { name: '不按批次揀貨庫(kù)區(qū)維度', value: '210', content: () => import('@/views/main/index/notPickingByBatchIndex.vue'), }, ], }, ], editableTabsValue: '',//tab頁(yè)當(dāng)前active的item editableTabs: [],//tab頁(yè)數(shù)組 } }, methods:{ // 用于其他頁(yè)面跳轉(zhuǎn)來(lái)到主頁(yè)并打開(kāi)tab頁(yè)的方法 // goTable(item) { // this.openKeys = [item.value.substring(0, 1)] // this.SelectedKeys = item.value // this.$store.commit('updateHomeOrIndexSwitch', false) // this.openTabs(item) //}, addTab(item) { let onOff = false; this.editableTabs.forEach((x) => { if (x.name == item.name) { this.editableTabsValue = item.name onOff=true return; } }) if(!onOff){ this.editableTabs.push({ title: item.name, name: item.name, content: item.content, }) this.editableTabsValue = item.name } }, //關(guān)閉tab頁(yè)觸發(fā) targetName = item.name removeTab(targetName) { let tabs = this.editableTabs let activeName = this.editableTabsValue if (activeName === targetName) { tabs.forEach((tab, index) => { if (tab.name === targetName) { let nextTab = tabs[index + 1] || tabs[index - 1] if (nextTab) { activeName = nextTab.name } else { this.openKeys = [] this.SelectedKeys = '' } } }) } this.editableTabsValue = activeName this.editableTabs = tabs.filter((tab) => tab.name !== targetName) }, }, watch:{ editableTabsValue(val) { this.menuItems.forEach((menuItem) => { if (menuItem.children) { menuItem.children.forEach((childrenItem) => { if (childrenItem.name === val) { this.openKeys = [childrenItem.value.substring(0, 1)] this.SelectedKeys = childrenItem.value return } }) } }) }, } } </script>
分析
這一套組件不能單憑element一個(gè)單一框架實(shí)現(xiàn),側(cè)邊導(dǎo)航欄我們需要控制折疊,控制高亮,以及菜單組三個(gè)參數(shù),而element的導(dǎo)航菜單控制折疊展開(kāi)菜單組的參數(shù)是一個(gè)函數(shù)@open控制,所以我們沒(méi)有辦法通過(guò)代碼去控制某個(gè)菜單組的展開(kāi)收起所以跨框架做了這么一個(gè)功能 記錄一下
到此這篇關(guān)于Vue實(shí)現(xiàn)側(cè)邊導(dǎo)航欄于Tab頁(yè)關(guān)聯(lián)的示例代碼的文章就介紹到這了,更多相關(guān)Vue 側(cè)邊導(dǎo)航欄于Tab頁(yè)關(guān)聯(lián)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue-cli3.0如何使用CDN區(qū)分開(kāi)發(fā)、生產(chǎn)、預(yù)發(fā)布環(huán)境
這篇文章主要介紹了vue-cli3.0如何使用CDN區(qū)分開(kāi)發(fā)、生產(chǎn)、預(yù)發(fā)布環(huán)境,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11Vue重要修飾符.sync對(duì)比v-model的區(qū)別及使用詳解
這篇文章主要為大家介紹了Vue中重要修飾符.sync與v-model的區(qū)別對(duì)比及使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07Nuxt.js實(shí)現(xiàn)一個(gè)SSR的前端博客的示例代碼
這篇文章主要介紹了Nuxt.js實(shí)現(xiàn)一個(gè)SSR的前端博客的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09vue-cli和v-charts實(shí)現(xiàn)可視化圖表過(guò)程解析
這篇文章主要介紹了vue-cli和v-charts實(shí)現(xiàn)可視化圖表過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10vue2.x中monaco-editor的使用說(shuō)明
這篇文章主要介紹了vue2.x中monaco-editor的使用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08基于vue+face-api.js實(shí)現(xiàn)前端人臉識(shí)別功能
基于face-api.js要實(shí)現(xiàn)人臉識(shí)別功能,首先要將自己需要的模型文件下載保存在靜態(tài)目錄下,可以通過(guò)cdn的方式在index.html中引入face-api.js,本文給大家介紹vue+face-api.js實(shí)現(xiàn)前端人臉識(shí)別功能,感興趣的朋友一起看看吧2023-12-12vue3?關(guān)于reactive的重置問(wèn)題及解決
這篇文章主要介紹了vue3?關(guān)于reactive的重置問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05vue引入微信sdk 實(shí)現(xiàn)分享朋友圈獲取地理位置功能
這篇文章主要介紹了h5 vue引入微信sdk 實(shí)現(xiàn)分享朋友圈,分享給朋友,獲取地理位置功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07