FTagList.vue 3.4 KB
Newer Older
kadycui's avatar
kadycui 已提交
1
<template>
kadycui's avatar
kadycui 已提交
2
    <div class="f-tag-list" :style="{ left: $store.state.asideWidth }">
kadycui's avatar
kadycui 已提交
3 4 5
        <el-tabs 
        v-model="activeTab" 
        type="card" 
kadycui's avatar
kadycui 已提交
6 7 8
        class="flex-1" 
        @tab-remove="removeTab" 
        style="min-width: 100px;"
kadycui's avatar
kadycui 已提交
9 10 11
        @tab-change="changeTab">
            <el-tab-pane :closable="item.path != '/'" v-for="item in tabList" :key="item.path" :label="item.title"
                :name="item.path">
kadycui's avatar
kadycui 已提交
12 13 14 15 16 17
            </el-tab-pane>
        </el-tabs>

        <span class="tag-btn">
            <el-dropdown>
                <span class="el-dropdown-link">
kadycui's avatar
kadycui 已提交
18
                    <el-icon>
kadycui's avatar
kadycui 已提交
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
                        <arrow-down />
                    </el-icon>
                </span>
                <template #dropdown>
                    <el-dropdown-menu>
                        <el-dropdown-item>Action 1</el-dropdown-item>
                        <el-dropdown-item>Action 2</el-dropdown-item>
                        <el-dropdown-item>Action 3</el-dropdown-item>
                        <el-dropdown-item disabled>Action 4</el-dropdown-item>
                        <el-dropdown-item divided>Action 5</el-dropdown-item>
                    </el-dropdown-menu>
                </template>
            </el-dropdown>
        </span>
    </div>
kadycui's avatar
kadycui 已提交
34
    <div style="height: 44px;"></div>
kadycui's avatar
kadycui 已提交
35 36 37 38 39
</template>


<script setup>
import { ref } from 'vue'
kadycui's avatar
kadycui 已提交
40 41
import { onBeforeRouteUpdate, useRoute } from 'vue-router'
import { useCookies } from '@vueuse/integrations/useCookies'
kadycui's avatar
kadycui 已提交
42

kadycui's avatar
kadycui 已提交
43 44

const route = useRoute()
kadycui's avatar
kadycui 已提交
45
const cookie = useCookies()
kadycui's avatar
kadycui 已提交
46 47 48 49


const activeTab = ref(route.path)
const tabList = ref([
kadycui's avatar
kadycui 已提交
50
    {
kadycui's avatar
kadycui 已提交
51 52
        title: '后台首页',
        path: "/",
kadycui's avatar
kadycui 已提交
53
    }
kadycui's avatar
kadycui 已提交
54 55
])

kadycui's avatar
kadycui 已提交
56 57 58 59 60 61 62 63
// 添加标签导航
function addTab(tab) {
    let noTab = tabList.value.findIndex(t => t.path == tab.path) == -1

    if (noTab) {
        tabList.value.push(tab)
    }
    cookie.set("tabList", tabList.value)
kadycui's avatar
kadycui 已提交
64
}
kadycui's avatar
kadycui 已提交
65

kadycui's avatar
kadycui 已提交
66 67

// 初始化标签导航列表
kadycui's avatar
kadycui 已提交
68
function initTabList() {
kadycui's avatar
kadycui 已提交
69
    let tbs = cookie.get("tabList")
kadycui's avatar
kadycui 已提交
70
    if (tbs) {
kadycui's avatar
kadycui 已提交
71 72
        tabList.value = tbs
    }
kadycui's avatar
kadycui 已提交
73 74
}

kadycui's avatar
kadycui 已提交
75 76 77
initTabList()


kadycui's avatar
kadycui 已提交
78 79 80 81 82 83 84 85 86 87
onBeforeRouteUpdate((to, from) => {
    activeTab.value = to.path
    addTab({
        title: to.meta.title,
        path: to.path

    })

})

kadycui's avatar
kadycui 已提交
88
// 路由跳转
kadycui's avatar
kadycui 已提交
89
const changeTab = (t) => {
kadycui's avatar
kadycui 已提交
90 91 92 93 94
    activeTab.value = t
    router.push(t)

}

kadycui's avatar
kadycui 已提交
95

kadycui's avatar
kadycui 已提交
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
const removeTab = (t) => {
    let tabs = tabList.value
    let a = activeTab.value
    if (a == t) {
        tabs.forEach((tab, index) => {
            if (tab.path == t) {
                const nextTab = tabs[index + 1] || tabs[index - 1]
                if (nextTab) {
                    a = nextTab.path
                }
            }
        })
    }
    activeTab.value = a
    tabList.value = tabList.value.filter(tab=>tab.path != t)
    cookie.set("tabList", tabList.value)
kadycui's avatar
kadycui 已提交
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
}
</script>

<style scoped>
.f-tag-list {
    @apply fixed bg-gray-100 flex items-center px-2;
    top: 64px;
    right: 0;
    height: 44px;
    z-index: 100;

}

.tag-btn {
    @apply bg-white rounded ml-auto flex items-center justify-center px-2;
    height: 32px;

}

:deep(.el-tabs__header) {
kadycui's avatar
kadycui 已提交
132
    border: 0 !important;
kadycui's avatar
kadycui 已提交
133 134 135 136 137 138 139 140 141 142 143 144 145 146
    @apply mb-0;
}

:deep(.el-tabs__nav) {
    border: 0 !important;
}

:deep(.el-tabs__item) {
    border: 0 !important;
    height: 32px;
    line-height: 32px;
    @apply bg-white mx-1 rounded mt-1;
}

kadycui's avatar
kadycui 已提交
147 148
:deep(.el-tabs__nav-next),
:deep(.el-tabs__nav-prev) {
kadycui's avatar
kadycui 已提交
149 150 151 152 153 154
    line-height: 32px;
    height: 32px;
    @apply mt-1;

}

kadycui's avatar
kadycui 已提交
155
:deep(.is-disabled) {
kadycui's avatar
kadycui 已提交
156 157 158 159 160 161
    cursor: not-allowed;
    @apply text-gray-300;
}
</style>