4、vue3总组件/入口文件/路由设置

1、安装element-plus依赖包

npm i element-plus

 2、项目主组件修改(App.vue)

<script lang="ts" setup>
import { ElConfigProvider } from 'element-plus'
import { ElDialog } from "element-plus"
// 将 Element Plus 的语言设置为中文
import zhCn from "element-plus/es/locale/lang/zh-cn"
// 修复 dialog 打开时右侧出现抖动的问题
ElDialog.props.lockScroll.default = false

</script>

<template>
  <ElConfigProvider :locale="zhCn">
    <router-view />
  </ElConfigProvider>
</template>

<style scoped>
</style>

  

 3、项目入口配置(main.ts)

1)下载路由依赖包:npm i vue-router

 2)创建路由实例

 

import {
    createRouter, createWebHistory
} from 'vue-router'

// 路由配置表
const routes = [
    {
      path: '/login',
      name: 'login',
      component: () => import(/* webpackChunkName: "about" */ '@/views/login/login.vue'),
      meta: { title: '登录' }
    },
    {
      path: '/',
      redirect: '/workbench'
    },
    {
      path: '/workbench',
      name: 'workbench',
      // route level code-splitting
      // this generates a separate chunk (about.[hash].js) for this route
      // which is lazy-loaded when the route is visited.
      component: () => import(/* webpackChunkName: "about" */ '@/views/workbench/index.vue'),
      meta: { title: '工作台' }
    },
  ]
  
// 创建 router 实例,然后传 `routes` 配置
const router = createRouter({
  history: createWebHistory(), 
  routes,
})

// 登录权限判断也可以写在main.js文件中==>router.beforeEach((to, from, next) => {next()})
// 路由导航守卫(拦截器)的作用就是控制页面的访问状态
// beforeEach 是全局前置守卫,任何页面的访问都要经过这里
// to:要去的路由信息
// from:来自哪里的路由信息
// next:放行方法
router.beforeEach((to, from, next) => {
    // 如果要访问的页面不是 /login,校验登录状态
    // 如果没有登录,则跳转到登录页面
    // 如果登录了,则允许通过
  
    const token = window.localStorage.getItem('token')
  
    // 校验非登录页面的登录状态
    if (to.path !== '/login' && to.path !== '/register') {
      if (token) {
        // 已登录,允许通过
        next()
      } else {
        // 没有登录,跳转到登录页面
        next('/login')
      }
    } else {
      // 登录&注册页面,正常允许通过
      next()
    }
  })
  
  router.afterEach((to, from) => {
    if (from.path !== '/Login' && from.path !== '/' && to.path === '/Login') {
      window.location.reload()
    }
  })
  
  
  // 我们在组件中使用的 this.$router 其实就是这个模块中的 router
  export default router
  

3)创建子

<script setup lang="ts">
</script>

<template>
<div>测试</div>
</template>

<style scoped>
</style>

 

 4)配置main.ts(全局导入以及项目初始化)

 

posted @ 2024-08-01 10:26  卡卡嘻  阅读(18)  评论(0编辑  收藏  举报