17.路由配置与页面创建

路由配置与页面创建

官网:https://router.vuejs.org/zh/

Vue Router 和 组合式 API | Vue Router (vuejs.org)

1. 修改index.ts

ts 复制代码
import { RouteRecordRaw, createRouter, createWebHistory } from "vue-router";
import Layout from '@/layout/Index.vue'

const routes: Array<RouteRecordRaw> = [
    {
        path: '/home',
        component: Layout,
        redirect: '/dashboard',
        children: [
            {
                path: '/dashboard',
                component: () => import('@/layout/dashboard.vue'),
                name: 'dashboard',
                meta: {
                title: '首页',
                icon: '#icondashboard'
                }
            },
            {
                path: "/adminUser",
                component: () => import('@/views/system/AdminUser.vue'),
                name: "adminUser",
                meta: {
                title: "管理员管理",
                icon: "UserFilled",
                roles: ["sys:adminUser"],
                }
            },
            {
                path: "/userList",
                component: () => import('@/views/system/UserList.vue'),
                name: "userList",
                meta: {
                title: "用户管理",
                icon: "Wallet",
                roles: ["sys:userList"],
                }
            },
            {
                path: "/menuList",
                component: () => import('@/views/menu/Index.vue'),
                name: "menuList",
                meta: {
                title: "菜单管理",
                icon: "Menu",
                roles: ["sys:menu"],
                }
            },
            {
                path: "/goodsType",
                component: () => import('@/views/goods/GoodsType.vue'),
                name: "goodsType",
                meta: {
                title: "商品分类",
                icon: "UserFilled",
                roles: ["sys:goodsType"],
                }
            },
            {
                path: "/unusedList",
                component: () => import('@/views/goods/UnusedList.vue'),
                name: "unusedList",
                meta: {
                title: "闲置商品",
                icon: "UserFilled",
                roles: ["sys:unusedList"],
                }
            },
            {
                path: "/buyList",
                component: () => import('@/views/goods/BuyList.vue'),
                name: "buyList",
                meta: {
                title: "求购商品",
                icon: "Wallet",
                roles: ["sys:buyList"],
                }
            },
            {
                path: "/unusedOrder",
                component: () => import('@/views/order/UnusedOrder.vue'),
                name: "unusedOrder",
                meta: {
                title: "闲置订单",
                icon: "UserFilled",
                roles: ["sys:unusedOrder"],
                }
            },
            {
                path: "/buyOrder",
                component: () => import('@/views/order/BuyOrder.vue'),
                name: "buyOrder",
                meta: {
                title: "求购订单",
                icon: "UserFilled",
                roles: ["sys:buyOrder"],
                }
            },
            // {
            //     path: "/bannerList",
            //     component: () => import('@/views/banner/Index.vue'),
            //     name: "bannerList",
            //     meta: {
            //     title: "广告列表",
            //     icon: "UserFilled",
            //     roles: ["sys:bannerList"],
            //     }
            // },
            {
                path: "/report",
                component: () => import('@/views/report/Index.vue'),
                name: "report",
                meta: {
                title: "投诉管理",
                icon: "UserFilled",
                roles: ["sys:report"],
                }
            },
            {
                path: "/commentList",
                component: () => import('@/views/comment/CommentList.vue'),
                name: "commentList",
                meta: {
                title: "评论列表",
                icon: "UserFilled",
                roles: ["sys:commentList"],
                }
            }
        ]
    }
]

const router = createRouter({
    history: createWebHistory(),
    routes
})

export default router

2. 创建相应页面

3. 问题

  1. 首页字为灰色

    解决方式:

    在Menu.vue中添加样式

    css 复制代码
    // 首页颜色
    :deep(.el-menu-item){
    	color:var(--el-border-color) !important;
    }
  2. 折叠时鼠标悬浮的字体为灰色

    解决方式:

    在Menu.vue中添加text-color="#fff"<el-menu>标签中

4. 效果图

5. 在MenuBar.vue组件的el-menu添加router属性

router 是否使用 vue-router 的模式,启用该模式会在激活导航时以 index 作为 path 进行路由跳转

(已加)

6. src/layout/Index.vue的<el-main>添加路由<router-view>

vue 复制代码
<template>
    <el-container class="mycontainer">
        <el-aside width="230px" class="asside">
            <Menu></Menu>
        </el-aside>
        <el-container>
            <el-header class="header">Header</el-header>
            <el-main class="mymain">
                <router-view></router-view>
            </el-main>
        </el-container>
    </el-container>
</template>

7. 设置当前激活的菜单

在Menu.vue中

ts 复制代码
import { ref,reactive, computed } from 'vue'
import { useRoute,useRouter } from 'vue-router';
import MenuItem from './MenuItem.vue';

//获取当前路由
const route = useRoute();
const router = useRouter();

//当前激活的导航菜单
const activeIndex = computed(()=>{
  const {path} = route;
  return path;
})
vue 复制代码
    <el-menu
    :default-active="activeIndex"
    class="el-menu-vertical-demo"
    :collapse="isCollapse"
    router
    unique-opened
    @open="handleOpen"
    @close="handleClose"
    background-color="#0a2542"
    text-color="#fff"
  >

效果为刷新保留在此页面

相关推荐
上海合宙LuatOS43 分钟前
Air780EPM通过MQTT上传温湿度数据
开发语言·人工智能·物联网·junit·luatos
接着奏乐接着舞2 小时前
sse 两种调用方式
前端·javascript·vue.js
叼烟扛炮2 小时前
C++ 知识点08 类与对象
开发语言·c++·算法·类和对象
不会敲代码17 小时前
手写 Mini React:从 JSX 到虚拟 DOM 再到 render,搞懂 React 底层原理
前端·javascript·react.js
你不是我我8 小时前
【Java 开发日记】HTTP3 性能更好,为什么内网微服务依然多用 HTTP2?HTTP2 内网优势是什么?
java·开发语言·微服务
kyriewen8 小时前
你的代码仓库变成“毛线团”了?Monorepo 用 Turborepo 拆成“乐高积木”
前端·javascript·面试
身如柳絮随风扬8 小时前
你知道什么是 Ajax 吗?—— 从入门到原理,一篇彻底搞懂
前端·ajax·okhttp
tjl521314_219 小时前
04C++ 名称空间(Namespace)
开发语言·c++
赏金术士9 小时前
Kotlin 数据流与单双向绑定
android·开发语言·kotlin
旷世奇才李先生9 小时前
Vue3\+TypeScript 2026实战——企业级前端项目架构搭建与性能优化全指南
前端·架构·typescript