2026-03-04 18:17:34 +08:00
|
|
|
<template>
|
2026-05-14 17:54:36 +08:00
|
|
|
<div class="lux-shell">
|
|
|
|
|
<div class="lux-shell-bg" aria-hidden="true">
|
|
|
|
|
<div class="lux-orb lux-orb-1" />
|
|
|
|
|
<div class="lux-orb lux-orb-2" />
|
|
|
|
|
<div class="lux-orb lux-orb-3" />
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<el-container class="lux-shell-body">
|
|
|
|
|
<el-aside width="220px" class="sidebar-glass">
|
|
|
|
|
<div class="sidebar-logo">
|
2026-05-15 17:34:54 +08:00
|
|
|
<h2>Luxsin CMS</h2>
|
2026-03-04 18:17:34 +08:00
|
|
|
</div>
|
|
|
|
|
<el-menu
|
2026-05-14 17:54:36 +08:00
|
|
|
class="lux-menu"
|
2026-03-04 18:17:34 +08:00
|
|
|
:default-active="activeMenu"
|
2026-05-14 17:54:36 +08:00
|
|
|
background-color="transparent"
|
|
|
|
|
text-color="#cbd5e1"
|
|
|
|
|
active-text-color="#7dd3fc"
|
2026-03-04 18:17:34 +08:00
|
|
|
router
|
|
|
|
|
>
|
|
|
|
|
<el-sub-menu index="1">
|
|
|
|
|
<template #title>
|
|
|
|
|
<el-icon><Headset /></el-icon>
|
|
|
|
|
<span>耳机管理</span>
|
|
|
|
|
</template>
|
|
|
|
|
<el-menu-item index="/brand">
|
|
|
|
|
<el-icon><Collection /></el-icon>
|
|
|
|
|
<span>品牌管理</span>
|
|
|
|
|
</el-menu-item>
|
|
|
|
|
<el-menu-item index="/model">
|
|
|
|
|
<el-icon><List /></el-icon>
|
|
|
|
|
<span>型号管理</span>
|
|
|
|
|
</el-menu-item>
|
|
|
|
|
</el-sub-menu>
|
2026-05-14 17:54:36 +08:00
|
|
|
<el-sub-menu index="upgrade">
|
|
|
|
|
<template #title>
|
|
|
|
|
<el-icon><Upload /></el-icon>
|
|
|
|
|
<span>升级管理</span>
|
|
|
|
|
</template>
|
|
|
|
|
<el-menu-item index="/ota">
|
|
|
|
|
<el-icon><Document /></el-icon>
|
|
|
|
|
<span>OTA 管理</span>
|
|
|
|
|
</el-menu-item>
|
|
|
|
|
</el-sub-menu>
|
2026-03-04 18:17:34 +08:00
|
|
|
</el-menu>
|
|
|
|
|
</el-aside>
|
|
|
|
|
|
2026-05-14 17:54:36 +08:00
|
|
|
<el-container class="lux-right-col">
|
|
|
|
|
<el-header class="lux-header">
|
2026-05-15 17:34:54 +08:00
|
|
|
<el-button
|
|
|
|
|
circle
|
|
|
|
|
type="primary"
|
|
|
|
|
class="lux-header-power-btn"
|
|
|
|
|
title="退出登录"
|
|
|
|
|
aria-label="退出登录"
|
|
|
|
|
@click="handleLogout"
|
|
|
|
|
>
|
|
|
|
|
<el-icon :size="18"><SwitchButton /></el-icon>
|
|
|
|
|
</el-button>
|
2026-03-04 18:17:34 +08:00
|
|
|
</el-header>
|
2026-05-14 17:54:36 +08:00
|
|
|
<el-main class="lux-main">
|
2026-03-04 18:17:34 +08:00
|
|
|
<router-view />
|
|
|
|
|
</el-main>
|
2026-05-15 17:34:54 +08:00
|
|
|
<el-footer class="lux-footer" height="auto">
|
|
|
|
|
<span class="lux-footer-copy">©Powered By EafonYang</span>
|
|
|
|
|
</el-footer>
|
2026-03-04 18:17:34 +08:00
|
|
|
</el-container>
|
|
|
|
|
</el-container>
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script setup>
|
|
|
|
|
import { computed } from 'vue'
|
2026-05-14 17:54:36 +08:00
|
|
|
import { useRoute, useRouter } from 'vue-router'
|
|
|
|
|
import { ElMessage } from 'element-plus'
|
2026-05-15 17:34:54 +08:00
|
|
|
import { Headset, Collection, List, Upload, Document, SwitchButton } from '@element-plus/icons-vue'
|
2026-05-14 17:54:36 +08:00
|
|
|
import { clearToken } from '@/utils/auth'
|
2026-03-04 18:17:34 +08:00
|
|
|
|
|
|
|
|
const route = useRoute()
|
2026-05-14 17:54:36 +08:00
|
|
|
const router = useRouter()
|
2026-03-04 18:17:34 +08:00
|
|
|
const activeMenu = computed(() => route.path)
|
|
|
|
|
|
2026-05-14 17:54:36 +08:00
|
|
|
const handleLogout = () => {
|
|
|
|
|
clearToken()
|
|
|
|
|
ElMessage.success('已退出登录')
|
|
|
|
|
router.push('/login')
|
2026-03-04 18:17:34 +08:00
|
|
|
}
|
2026-05-14 17:54:36 +08:00
|
|
|
</script>
|
2026-03-04 18:17:34 +08:00
|
|
|
|
2026-05-14 17:54:36 +08:00
|
|
|
<style scoped>
|
|
|
|
|
.lux-right-col {
|
|
|
|
|
flex: 1;
|
|
|
|
|
min-width: 0;
|
2026-05-15 17:34:54 +08:00
|
|
|
min-height: 0;
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-direction: column;
|
2026-03-04 18:17:34 +08:00
|
|
|
}
|
|
|
|
|
</style>
|