185 lines
6.1 KiB
Vue
185 lines
6.1 KiB
Vue
<template>
|
|
<el-scrollbar class="scroll">
|
|
<div>
|
|
<div class="title" >
|
|
<Icon icon="mdi:email-outline" width="24" height="24" />
|
|
<div>{{settingStore.settings.title}}</div>
|
|
</div>
|
|
<el-menu :collapse="false" text-color="#fff" active-text-color="#fff" style="margin-top: 10px">
|
|
<el-menu-item @click="router.push({name: 'email'})" index="email"
|
|
:class="route.meta.name === 'email' ? 'choose-item' : ''">
|
|
<Icon icon="hugeicons:mailbox-01" width="20" height="20" />
|
|
<span class="menu-name" style="margin-left: 21px">{{$t('inbox')}}</span>
|
|
</el-menu-item>
|
|
<el-menu-item @click="router.push({name: 'send'})" index="send" v-perm="'email:send'"
|
|
:class="route.meta.name === 'send' ? 'choose-item' : ''">
|
|
<Icon icon="cil:send" width="20" height="20" />
|
|
<span class="menu-name" style="margin-left: 21px">{{$t('sent')}}</span>
|
|
</el-menu-item>
|
|
<el-menu-item @click="router.push({name: 'draft'})" index="draft" v-perm="'email:send'"
|
|
:class="route.meta.name === 'draft' ? 'choose-item' : ''">
|
|
<Icon icon="ep:document" width="19" height="19" />
|
|
<span class="menu-name" style="margin-left: 22px">{{$t('drafts')}}</span>
|
|
</el-menu-item>
|
|
<el-menu-item @click="router.push({name: 'star'})" index="star"
|
|
:class="route.meta.name === 'star' ? 'choose-item' : ''">
|
|
<Icon icon="solar:star-line-duotone" width="20" height="20" />
|
|
<span class="menu-name" style="margin-left: 21px">{{$t('starred')}}</span>
|
|
</el-menu-item>
|
|
<el-menu-item @click="router.push({name: 'setting'})" index="setting"
|
|
:class="route.meta.name === 'setting' ? 'choose-item' : ''">
|
|
<Icon icon="fluent:settings-48-regular" width="20" height="20" />
|
|
<span class="menu-name" style="margin-left: 21px">{{$t('settings')}}</span>
|
|
</el-menu-item>
|
|
<div class="manage-title" v-perm="['user:query','role:query','setting:query','analysis:query']">
|
|
<div>{{$t('manage')}}</div>
|
|
</div>
|
|
<el-menu-item @click="router.push({name: 'analysis'})" index="analysis" v-perm="'analysis:query'"
|
|
:class="route.meta.name === 'analysis' ? 'choose-item' : ''">
|
|
<Icon icon="fluent:data-pie-20-regular" width="24" height="24" />
|
|
<span class="menu-name" style="margin-left: 18px">{{$t('analytics')}}</span>
|
|
</el-menu-item>
|
|
<el-menu-item @click="router.push({name: 'user'})" index="setting" v-perm="'user:query'"
|
|
:class="route.meta.name === 'user' ? 'choose-item' : ''">
|
|
<Icon icon="si:user-alt-2-line" width="20" height="20" />
|
|
<span class="menu-name" style="margin-left: 21px">{{$t('allUsers')}}</span>
|
|
</el-menu-item>
|
|
<el-menu-item @click="router.push({name: 'all-email'})" index="all-email" v-perm="'all-email:query'"
|
|
:class="route.meta.name === 'all-email' ? 'choose-item' : ''">
|
|
<Icon icon="fluent:mail-list-28-regular" width="22" height="22" />
|
|
<span class="menu-name" style="margin-left: 20px">{{$t('allMail')}}</span>
|
|
</el-menu-item>
|
|
<el-menu-item @click="router.push({name: 'role'})" index="setting" v-perm="'role:query'"
|
|
:class="route.meta.name === 'role' ? 'choose-item' : ''">
|
|
<Icon icon="fluent:lock-closed-16-regular" width="22" height="22" />
|
|
<span class="menu-name" style="margin-left: 20px">{{$t('permissions')}}</span>
|
|
</el-menu-item>
|
|
<el-menu-item @click="router.push({name: 'reg-key'})" index="reg-key" v-perm="'reg-key:query'"
|
|
:class="route.meta.name === 'reg-key' ? 'choose-item' : ''">
|
|
<Icon icon="fluent:fingerprint-20-filled" width="22" height="22" />
|
|
<span class="menu-name" style="margin-left: 20px">{{$t('inviteCode')}}</span>
|
|
</el-menu-item>
|
|
<el-menu-item @click="router.push({name: 'sys-setting'})" index="sys-setting" v-perm="'setting:query'"
|
|
:class="route.meta.name === 'sys-setting' ? 'choose-item' : ''">
|
|
<Icon icon="eos-icons:system-ok-outlined" width="18" height="18" />
|
|
<span class="menu-name" style="margin-left: 24px">{{$t('SystemSettings')}}</span>
|
|
</el-menu-item>
|
|
</el-menu>
|
|
</div>
|
|
</el-scrollbar>
|
|
</template>
|
|
|
|
<script setup>
|
|
import router from "@/router/index.js";
|
|
import { useRoute } from "vue-router";
|
|
import {Icon} from "@iconify/vue";
|
|
import {useSettingStore} from "@/store/setting.js";
|
|
|
|
const settingStore = useSettingStore();
|
|
const route = useRoute();
|
|
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
|
|
.title {
|
|
margin: 15px 10px;
|
|
height: 45px;
|
|
border-radius: 6px;
|
|
display: flex;
|
|
position: relative;
|
|
font-size: 16px;
|
|
font-weight: bold;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 5px;
|
|
color: #ffffff;
|
|
background: linear-gradient(135deg, #1890ff, #1c6dd0);
|
|
transition: all 0.3s ease;
|
|
|
|
:deep(.el-icon) {
|
|
font-size: 20px;
|
|
}
|
|
|
|
.user-right-icon {
|
|
align-self: center;
|
|
position: absolute;
|
|
font-size: 12px;
|
|
right: 8px;
|
|
color: #ffffff;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
.manage-title {
|
|
margin-top: 10px;
|
|
padding-left: 20px;
|
|
color: #fff;
|
|
}
|
|
|
|
.el-menu-item {
|
|
margin: 5px 10px !important;
|
|
border-radius: 6px;
|
|
height: 36px;
|
|
padding: 10px !important;
|
|
}
|
|
|
|
.choose-item {
|
|
font-weight: bold;
|
|
background: rgba(255, 255, 255, 0.08) !important;
|
|
backdrop-filter: blur(4px);
|
|
}
|
|
|
|
@media (hover: hover) {
|
|
.el-menu-item:hover {
|
|
background: rgba(255, 255, 255, 0.08) !important;
|
|
}
|
|
}
|
|
|
|
.menu-name {
|
|
user-select: none;
|
|
}
|
|
|
|
|
|
:deep(.el-scrollbar__wrap--hidden-default ) {
|
|
background: #001529 !important;
|
|
}
|
|
|
|
:deep(.el-menu-item) {
|
|
background: #001529;
|
|
}
|
|
|
|
:deep(.el-menu) {
|
|
background: #001529;
|
|
}
|
|
|
|
.el-menu {
|
|
border-right: 0;
|
|
width: 250px;
|
|
@media (max-width: 1199px) {
|
|
width: 250px;
|
|
}
|
|
}
|
|
|
|
:deep(.el-divider__text) {
|
|
background: #001529;
|
|
color: #FFFFFF;
|
|
}
|
|
|
|
.scroll {
|
|
|
|
}
|
|
|
|
.github {
|
|
position: absolute;
|
|
width: 100%;
|
|
bottom: 10px;
|
|
display: flex;
|
|
justify-content: center;
|
|
a{
|
|
color: #fff;
|
|
}
|
|
}
|
|
</style>
|