New file |
| | |
| | | <template> |
| | | <page> |
| | | <div class="contentBox"> |
| | | <div class="breadcrumbBox"> |
| | | <span>位置:</span> |
| | | <el-breadcrumb :separator-icon="ArrowRight"> |
| | | <el-breadcrumb-item>个人中心</el-breadcrumb-item> |
| | | <el-breadcrumb-item>{{ label }}</el-breadcrumb-item> |
| | | </el-breadcrumb> |
| | | </div> |
| | | <el-divider /> |
| | | <div class="personalPage clear"> |
| | | <div class="leftList fl"> |
| | | <ul class="menu"> |
| | | <li |
| | | v-for="item in listMenu" |
| | | :key="item.key" |
| | | @click="goRouter(item)" |
| | | :class="`/${item.path}` === path ? 'activeItem hover' : 'menuItem hover'" |
| | | > |
| | | <span |
| | | :style="{ |
| | | fill: `/${item.path}` === path ? '#fff' : '#000', |
| | | }" |
| | | v-html="item.icon" |
| | | > |
| | | </span> |
| | | <span>{{ item.label }}</span> |
| | | </li> |
| | | </ul> |
| | | </div> |
| | | <div class="rightContent"> |
| | | <div> |
| | | <!-- 让主体做子路由的显示 --> |
| | | <router-view /> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </page> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { ArrowRight } from '@element-plus/icons-vue' |
| | | import { menu } from './config.ts' |
| | | import { useRouter, onBeforeRouteUpdate } from 'vue-router' |
| | | import { ref, onMounted } from 'vue' |
| | | const router = useRouter() |
| | | const routerVal = router.currentRoute.value |
| | | const path = ref(routerVal.path) |
| | | const label = ref('') |
| | | const listMenu: any = ref([]) |
| | | onBeforeRouteUpdate(async (to, from) => { |
| | | path.value = to.fullPath |
| | | }) |
| | | onMounted(() => { |
| | | menu.forEach((item) => { |
| | | if ('/' + item.path === path.value) { |
| | | label.value = item.label |
| | | } |
| | | }) |
| | | // const userCache: any = localStorage.getItem('jesk-userInfo') |
| | | // const userInfo = JSON.parse(userCache) |
| | | // if(!userInfo){ |
| | | // router.push({ |
| | | // path:'/' |
| | | // }) |
| | | // return false; |
| | | // } |
| | | // if (userInfo.role == 'Teacher') { |
| | | // const data: any = menu.filter((item) => item.path != 'class') |
| | | // listMenu.value = data |
| | | // } else { |
| | | const data: any = menu.filter((item) => item.path != 'course') |
| | | listMenu.value = data |
| | | // } |
| | | }) |
| | | const goRouter = (item: any) => { |
| | | // if (!localStorage.getItem('jsek-token') || localStorage.getItem('jsek-token') == null) { |
| | | // router.push({ |
| | | // path: '/home', |
| | | // query: { |
| | | // showLogin: '1' |
| | | // } |
| | | // }) |
| | | // } else { |
| | | label.value = item.label |
| | | router.push({ path: item.path }) |
| | | // } |
| | | } |
| | | </script> |
| | | <style lang="less" scoped> |
| | | .breadcrumbBox { |
| | | display: flex; |
| | | padding: 20px; |
| | | } |
| | | |
| | | .personalPage { |
| | | padding: 20px 10px; |
| | | display: flex; |
| | | |
| | | .leftList { |
| | | width: 275px; |
| | | border-radius: 10px 10px 10px 10px; |
| | | background: #e1ebe3; |
| | | height: max-content; |
| | | .menu { |
| | | li { |
| | | height: 50px; |
| | | padding: 10px 40px; |
| | | font-size: 16px; |
| | | display: flex; |
| | | align-items: center; |
| | | border-bottom: 1px solid #ffffff; |
| | | |
| | | img { |
| | | width: 19px; |
| | | height: 24px; |
| | | } |
| | | |
| | | span { |
| | | margin-left: 10px; |
| | | } |
| | | } |
| | | |
| | | .activeItem { |
| | | background: linear-gradient(90deg, #019e58 0%, #144941 100%); |
| | | background-size: 100% 100%; |
| | | color: #fff; |
| | | svg { |
| | | fill: #fff; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .rightContent { |
| | | flex: 1; |
| | | overflow: auto; |
| | | margin-left: 15px; |
| | | background-color: #fff; |
| | | } |
| | | } |
| | | </style> |