<template> <!-- <main :class="['aui-content', { 'aui-content--tabs': $route.meta.isTab }]"> --> <main :class="[this.$route.meta.hiddenSiderbar !== true ? ['aui-content', { 'aui-content--tabs': $route.meta.isTab }] : 'aui-sidebar.close']"> <!-- tab展示内容 --> <template v-if="$route.meta.isTab"> <el-dropdown class="aui-content--tabs-tools"> <i class="el-icon-arrow-down"></i> <el-dropdown-menu slot="dropdown" :show-timeout="0"> <el-dropdown-item @click.native="tabRemoveHandle($store.state.contentTabsActiveName)">{{ $t('contentTabs.closeCurrent') }}</el-dropdown-item> <el-dropdown-item @click.native="tabsCloseOtherHandle()">{{ $t('contentTabs.closeOther') }}</el-dropdown-item> <el-dropdown-item @click.native="tabsCloseAllHandle()">{{ $t('contentTabs.closeAll') }}</el-dropdown-item> </el-dropdown-menu> </el-dropdown> <el-tabs v-model="$store.state.contentTabsActiveName" @tab-click="tabSelectedHandle" @tab-remove="tabRemoveHandle" ref="tabs"> <el-tab-pane v-for="item in $store.state.contentTabs" :key="item.name" :name="item.name" :label="item.title" :closable="item.name !== ''" :class="{ 'is-iframe': tabIsIframe(item.iframeURL) }"> <!-- <template v-if="item.name === 'home'"> <svg slot="label" class="icon-svg aui-content--tabs-icon-nav" aria-hidden="true"><use xlink:href="#icon-home"></use></svg> </template> --> <iframe v-if="tabIsIframe(item.iframeURL)" :src="item.iframeURL" width="100%" height="100%" frameborder="0" scrolling="yes"></iframe> <keep-alive v-else> <router-view v-if="item.name === $store.state.contentTabsActiveName" /> </keep-alive> </el-tab-pane> </el-tabs> </template> <!-- 其他方式, 展示内容 --> <template v-else> <keep-alive> <router-view /> </keep-alive> </template> </main> </template> <script> import { isURL } from '@/utils/validate' export default { data() { return {} }, mounted() { this.$nextTick(() => { // 通过加上ref,再删除数组第一个元素来把空元素删除,不知为何会出现这个元素 this.$store.state.contentTabs.splice(0, 1) // 加个判断防止home页面报$children的错 if (this.$route.meta.hiddenSiderbar !== true) { this.$refs.tabs.$children[0].$refs.tabs[0].style.display = 'none' } // console.log(this.$refs.tabs.$children[0].$refs) // console.log('11',this.$refs.tabs.$children[0].$refs.tabs[0]) // console.log('22',this.$store.state.contentTabs) }) // setTimeout(function() { // // 执行代码块 // // 不加.bind(this) 因为使用的是function() 这样函数就不会从你的类组件继承this,所以this是undefined // this.$store.state.contentTabs.splice(0, 1) // // 加个判断防止home页面报$children的错 // if (this.$route.meta.hiddenSiderbar !== true) { // this.$refs.tabs.$children[0].$refs.tabs[0].style.display = 'none' // } // }.bind(this),0) }, methods: { // tabs, 是否通过iframe展示 tabIsIframe(url) { return isURL(url) }, // tabs, 选中tab tabSelectedHandle(tab) { tab = this.$store.state.contentTabs.filter((item) => item.name === tab.name)[0] if (tab) { this.$router.push({ name: tab.name, params: { ...tab.params }, query: { ...tab.query } }) } }, // tabs, 删除tab tabRemoveHandle(tabName) { if (tabName === 'home') { return false } this.$store.state.contentTabs = this.$store.state.contentTabs.filter((item) => item.name !== tabName) if (this.$store.state.contentTabs.length <= 0) { this.$store.state.sidebarMenuActiveName = this.$store.state.contentTabsActiveName = 'home' // return false this.$router.push({ name: 'home' }) } // 当前选中tab被删除 if (tabName === this.$store.state.contentTabsActiveName) { let tab = this.$store.state.contentTabs[this.$store.state.contentTabs.length - 1] this.$router.push({ name: tab.name, params: { ...tab.params }, query: { ...tab.query } }) } }, // tabs, 关闭其它 tabsCloseOtherHandle() { this.$store.state.contentTabs = this.$store.state.contentTabs.filter((item) => { return item.name === 'home' || item.name === this.$store.state.contentTabsActiveName }) }, // tabs, 关闭全部 tabsCloseAllHandle() { this.$store.state.contentTabs = this.$store.state.contentTabs.filter((item) => item.name === 'home') // this.$router.push({ name: 'sys-log-login' }) this.$router.push({ name: 'home' }) } } } </script>