2022-06-14 09:32:49 +08:00
|
|
|
<template>
|
|
|
|
<main :class="['aui-content', { 'aui-content--tabs': $route.meta.isTab }]">
|
|
|
|
<!-- 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">
|
2022-06-21 15:48:41 +08:00
|
|
|
<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>
|
2022-06-14 09:32:49 +08:00
|
|
|
</el-dropdown-menu>
|
|
|
|
</el-dropdown>
|
2022-06-21 15:48:41 +08:00
|
|
|
<el-tabs
|
|
|
|
v-model="$store.state.contentTabsActiveName"
|
|
|
|
@tab-click="tabSelectedHandle"
|
|
|
|
@tab-remove="tabRemoveHandle"
|
|
|
|
>
|
2022-06-14 09:32:49 +08:00
|
|
|
<el-tab-pane
|
|
|
|
v-for="item in $store.state.contentTabs"
|
|
|
|
:key="item.name"
|
|
|
|
:name="item.name"
|
|
|
|
:label="item.title"
|
|
|
|
:closable="item.name !== 'home'"
|
2022-06-21 15:48:41 +08:00
|
|
|
:class="{ 'is-iframe': tabIsIframe(item.iframeURL) }"
|
|
|
|
>
|
2022-06-14 09:32:49 +08:00
|
|
|
<template v-if="item.name === 'home'">
|
2022-06-21 15:48:41 +08:00
|
|
|
<svg
|
|
|
|
slot="label"
|
|
|
|
class="icon-svg aui-content--tabs-icon-nav"
|
|
|
|
aria-hidden="true"
|
|
|
|
>
|
|
|
|
<use xlink:href="#icon-home"></use>
|
|
|
|
</svg>
|
2022-06-14 09:32:49 +08:00
|
|
|
</template>
|
2022-06-21 15:48:41 +08:00
|
|
|
<iframe
|
|
|
|
v-if="tabIsIframe(item.iframeURL)"
|
|
|
|
:src="item.iframeURL"
|
|
|
|
width="100%"
|
|
|
|
height="100%"
|
|
|
|
frameborder="0"
|
|
|
|
scrolling="yes"
|
|
|
|
></iframe>
|
2022-06-14 09:32:49 +08:00
|
|
|
<keep-alive v-else>
|
2022-06-21 15:48:41 +08:00
|
|
|
<router-view
|
|
|
|
v-if="item.name === $store.state.contentTabsActiveName"
|
|
|
|
/>
|
2022-06-14 09:32:49 +08:00
|
|
|
</keep-alive>
|
|
|
|
</el-tab-pane>
|
|
|
|
</el-tabs>
|
|
|
|
</template>
|
|
|
|
<!-- 其他方式, 展示内容 -->
|
|
|
|
<template v-else>
|
|
|
|
<keep-alive>
|
|
|
|
<router-view />
|
|
|
|
</keep-alive>
|
|
|
|
</template>
|
|
|
|
</main>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
<script>
|
2022-11-24 19:54:20 +08:00
|
|
|
import { isURL } from '@/utils/validate'
|
2022-06-14 09:32:49 +08:00
|
|
|
export default {
|
2022-11-24 19:54:20 +08:00
|
|
|
data () {
|
|
|
|
return {}
|
2022-06-14 09:32:49 +08:00
|
|
|
},
|
|
|
|
methods: {
|
|
|
|
// tabs, 是否通过iframe展示
|
2022-11-24 19:54:20 +08:00
|
|
|
tabIsIframe (url) {
|
|
|
|
return isURL(url)
|
2022-06-14 09:32:49 +08:00
|
|
|
},
|
|
|
|
// tabs, 选中tab
|
2022-11-24 19:54:20 +08:00
|
|
|
tabSelectedHandle (tab) {
|
2022-06-21 15:48:41 +08:00
|
|
|
tab = this.$store.state.contentTabs.filter(
|
|
|
|
(item) => item.name === tab.name
|
2022-11-24 19:54:20 +08:00
|
|
|
)[0]
|
2022-06-14 09:32:49 +08:00
|
|
|
if (tab) {
|
|
|
|
this.$router.push({
|
2022-11-24 19:54:20 +08:00
|
|
|
name: /^iframe_.+/.test(tab.name) ? 'iframe' : tab.name,
|
2022-06-21 15:48:41 +08:00
|
|
|
params: { ...tab.params },
|
2022-11-24 19:54:20 +08:00
|
|
|
query: { ...tab.query }
|
|
|
|
})
|
2022-06-14 09:32:49 +08:00
|
|
|
}
|
|
|
|
},
|
|
|
|
// tabs, 删除tab
|
2022-11-24 19:54:20 +08:00
|
|
|
tabRemoveHandle (tabName) {
|
|
|
|
if (tabName === 'home') {
|
|
|
|
return false
|
2022-06-14 09:32:49 +08:00
|
|
|
}
|
2022-11-24 19:54:20 +08:00
|
|
|
console.log('删除', this.$store.state.contentTabs)
|
|
|
|
if (this.$store.state.contentTabs.length !== 1) {
|
|
|
|
this.$store.state.contentTabs = this.$store.state.contentTabs.filter(
|
|
|
|
(item) => item.name !== tabName
|
|
|
|
)
|
|
|
|
} else {
|
|
|
|
this.$message({
|
|
|
|
message: '必须打开一个窗口!',
|
|
|
|
type: 'warning'
|
|
|
|
})
|
2022-06-14 09:32:49 +08:00
|
|
|
}
|
2022-11-24 19:54:20 +08:00
|
|
|
// if (this.$store.state.contentTabs.length <= 0) {
|
|
|
|
// this.$store.state.sidebarMenuActiveName =
|
|
|
|
// this.$store.state.contentTabsActiveName = 'home'
|
|
|
|
// return false
|
|
|
|
// }
|
2022-06-14 09:32:49 +08:00
|
|
|
// 当前选中tab被删除
|
|
|
|
if (tabName === this.$store.state.contentTabsActiveName) {
|
2022-11-24 19:54:20 +08:00
|
|
|
const tab =
|
2022-06-21 15:48:41 +08:00
|
|
|
this.$store.state.contentTabs[
|
|
|
|
this.$store.state.contentTabs.length - 1
|
2022-11-24 19:54:20 +08:00
|
|
|
]
|
2022-06-14 09:32:49 +08:00
|
|
|
this.$router.push({
|
2022-11-24 19:54:20 +08:00
|
|
|
name: /^iframe_.+/.test(tab.name) ? 'iframe' : tab.name,
|
2022-06-14 09:32:49 +08:00
|
|
|
params: { ...tab.params },
|
2022-11-24 19:54:20 +08:00
|
|
|
query: { ...tab.query }
|
|
|
|
})
|
2022-06-14 09:32:49 +08:00
|
|
|
}
|
|
|
|
},
|
|
|
|
// tabs, 关闭其它
|
2022-11-24 19:54:20 +08:00
|
|
|
tabsCloseOtherHandle () {
|
2022-06-21 15:48:41 +08:00
|
|
|
this.$store.state.contentTabs = this.$store.state.contentTabs.filter(
|
|
|
|
(item) => {
|
|
|
|
return (
|
2022-11-24 19:54:20 +08:00
|
|
|
item.name === 'home' ||
|
2022-06-21 15:48:41 +08:00
|
|
|
item.name === this.$store.state.contentTabsActiveName
|
2022-11-24 19:54:20 +08:00
|
|
|
)
|
2022-06-21 15:48:41 +08:00
|
|
|
}
|
2022-11-24 19:54:20 +08:00
|
|
|
)
|
2022-06-14 09:32:49 +08:00
|
|
|
},
|
|
|
|
// tabs, 关闭全部
|
2022-11-24 19:54:20 +08:00
|
|
|
tabsCloseAllHandle () {
|
2022-06-21 15:48:41 +08:00
|
|
|
this.$store.state.contentTabs = this.$store.state.contentTabs.filter(
|
2022-11-24 19:54:20 +08:00
|
|
|
(item) => item.name === 'home'
|
|
|
|
)
|
|
|
|
this.$router.push({ name: 'home' })
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2022-06-21 15:48:41 +08:00
|
|
|
</script>
|
|
|
|
<style scoped lang="scss">
|
|
|
|
.aui-content {
|
|
|
|
.el-tabs {
|
|
|
|
::v-deep .el-tabs__header {
|
|
|
|
left: 266px;
|
|
|
|
.el-tabs__nav-wrap {
|
|
|
|
.el-tabs__nav-scroll {
|
|
|
|
.el-tabs__nav {
|
|
|
|
.el-tabs__item ::after {
|
|
|
|
background-color: #0058e1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2022-06-14 09:32:49 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2022-11-24 19:54:20 +08:00
|
|
|
</style>
|