You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

119 lines
2.9 KiB

4 months ago
<template>
<a-tabs v-model:activeKey="activeKey" size="large" @tabClick="tabChange">
<a-tab-pane v-for="(item, index) in tabListAuth" :key="index" :tab="item.title">
<router-view v-slot="{ Component }">
<!-- <keep-alive :include="data"> -->
<component :is="Component" />
<!-- </keep-alive> -->
</router-view> </a-tab-pane
>>
</a-tabs>
</template>
<script lang="ts">
import { defineComponent, ref, computed, watch } from 'vue';
import { useKeepAlive } from '/nerv-base/store/modules/keepAlive';
import { useRouter, onBeforeRouteUpdate, useRoute } from 'vue-router';
import { authorizationService } from '/nerv-base/store/modules/authorization-service';
export default defineComponent({
name: 'RecipientsToReturnIndex',
props: {
tabList: {
type: Array,
default: () => [],
},
selfName: {
type: String,
default: '',
},
},
setup(props) {
let activeKey = ref(0);
const authorizationStore = authorizationService();
const keepAliveStore = useKeepAlive();
const router = useRouter();
const route = useRoute();
const selfName = props['selfName'];
let tabListAuth = props['tabList'].filter((el) => {
if (authorizationStore.checkAllPermission(el.name)) {
return el;
}
});
const tabChange = function (params) {
let name = tabListAuth[params]['name'];
router.push({
name: name,
});
};
const exitRouter = (to) => {
let nameList = to.matched.map((el) => {
return el.name;
});
tabListAuth.some((el, i) => {
if (nameList.includes(el.name)) {
activeKey.value = i;
return true;
}
});
// tabChange(activeKey.value);
};
exitRouter(router.currentRoute.value);
onBeforeRouteUpdate((to) => {
exitRouter(to);
});
const data = computed(() => {
return keepAliveStore.getKeepAlive;
});
if (tabListAuth.length) {
if (route.name?.toString().toLowerCase().includes('index')) {
tabChange(activeKey.value);
}
}
watch(
() => route.path,
(value) => {
// tabChange(activeKey.value)
exitRouter(route);
if (route.name === selfName) {
tabChange(activeKey.value);
}
},
);
// onActivated
// onActivated(()=>{
// console.log(',mmm')
// });
return {
activeKey,
data,
tabChange,
tabListAuth,
};
},
activated() {
this.tabChange(this.activeKey);
},
});
</script>
<style lang="less" scoped>
.desc {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
display: block;
width: 100%;
}
:deep(.ant-tabs-nav-wrap) {
padding: 0 24px !important;
}
</style>