当前位置: 首页 > news >正文

传业做微采商城网站wordpress 大站

传业做微采商城网站,wordpress 大站,廊坊网站关键字优化,东莞路桥投资发展有限公司前端开发之vue动态路由实现方案 前言2. 实现1、登录页面创建登录函数和watch监听路由2、调用的login方法(1)登录方法(2)存储token 3、router.push的时候调用路由守卫(1)创建路由守卫,建议路由守…

前端开发之vue动态路由实现方案

  • 前言
  • 2. 实现
    • 1、登录页面创建登录函数和watch监听路由
    • 2、调用的login方法
      • (1)登录方法
      • (2)存储token
    • 3、router.push的时候调用路由守卫
      • (1)创建路由守卫,建议路由守卫封装为单独的文件
      • (2)var文件引用
    • (3)将在main中添加调用,由于我封装到permissions.ts文件中,通过var文件调用
      • (4) setRoutes方法:存储vuex中routes,合并路由列表
      • (5)filterRoutes:根据权限和rolesControl过滤路由
      • (6)toLoginRoute:
    • 4、创建router.js 文件,创建路由列表和添加路由的方法

前言

本篇讲解的路由实现方案:默认存在的路由json->登录获取路由的json数据和权限->index.vue页面通过watch监听router为路由附加默认值->通过router.push跳转->触发beforeEach实现页面权限的判断和addrouter合并路由列表

2. 实现

1、登录页面创建登录函数和watch监听路由

//redirect 赋值
watch: {$route: {handler (route) {this.redirect = (route.query && route.query.redirect) || '/'},immediate: true}},
//登录函数
const ruleForm = ref('')
const login = (userInfo) => {dispatch('user/login', userInfo)
}
const handleRoute = () => {return data.redirect === '/404' || data.redirect === '/403'? '/': data.redirect
}
const handleLogin = () => {ruleForm.value.validate(async (valid) => {if (valid) {try {data.loading = trueawait login(data.forms)await router.push(handleRoute())} finally {data.loading = false}}})
}

2、调用的login方法

(1)登录方法

const actions = {//登录成功将token存储到localStorage中,并为vuex的token中赋值async login ({ commit }: { commit: any }, userInfo: any) {// const { data } = await login(userInfo)// const token = data[tokenName]const token = 'admin-token-bbfd1c4e-4e11-F71E-B4B6-aEbCE62cDC3A'if (token) {commit('setToken', token)const hour = new Date().getHours()} else {const err = `登录接口异常,未正确返回${tokenName}...`throw err}}
}

(2)存储token

 * @description 存储token* @param token*/
export function setToken (token:any) {if (storage) {if (storage === 'localStorage') {return localStorage.setItem(tokenTableName, token)} else if (storage === 'sessionStorage') {return sessionStorage.setItem(tokenTableName, token)} else if (storage === 'cookie') {return cookie.set(tokenTableName, token)} else {return localStorage.setItem(tokenTableName, token)}} else {return localStorage.setItem(tokenTableName, token)}
}

3、router.push的时候调用路由守卫

(1)创建路由守卫,建议路由守卫封装为单独的文件

详细讲解了路由的跳转和

/*** @description 路由守卫*/
import store from '@/store'
import router from '@/router'
import getPageTitle from '@/utils/pageTitle'
import { toLoginRoute } from '@/utils/routes'
import configOb from '@/config'
//调用封装的配置文件
//intelligence(前端导出路由)和all(后端导出路由)两种方式
//authentication: 'intelligence',
const { authentication } = configOb
export function setup () {router.beforeEach(async (to, from, next) => {//获取tokenlet hasToken = store.getters['user/token']if (hasToken) {if (store.getters['routes/routes'].length) {// 禁止已登录用户返回登录页if (to.path === '/login') {next({ path: '/' })} else next()} else {//setRoutes:下面讲解,存储vuex中routes,合并路由列表await store.dispatch('routes/setRoutes', authentication)next({ ...to, replace: true })}} else {next(toLoginRoute(to.path))}})router.afterEach((to) => {//设置标题document.title = getPageTitle(to.meta.title)})
}

(2)var文件引用

在这里插入图片描述

export function setupVab (app: any) {// 加载插件const Plugins = require.context('./plugins', true, /\.ts$/)Plugins.keys().forEach((key) => Plugins(key).setup(app))
}

(3)将在main中添加调用,由于我封装到permissions.ts文件中,通过var文件调用

import { createApp } from 'vue'
import App from './App.vue'
import { setupVab } from '@/vab'const app = createApp(App)
setupVab(app)

(4) setRoutes方法:存储vuex中routes,合并路由列表

async setRoutes ({ commit }: { commit: any }, mode = 'none') {// 默认前端路由const routes = [...asyncRoutes]// 设置游客路由关闭路由拦截const control = mode === 'visit' ? false : rolesControl// 后端路由// if (authentication === 'all') {//   const { data } = await getRouterList()//   const { list } = data//   if (!isArray(list))//     gp.$baseMessage(//       '路由格式返回有误!',//       'error',//       false,//       'vab-hey-message-error'//     )// if (list[list.length - 1].path !== '*') {//   list.push({//     path: '/:pathMatch(.*)*',//     redirect: '/404',//     name: 'NotFound',//     hidden: true//   })//   routes = convertRouter(list)// }// 根据权限和rolesControl过滤路由const finallyRoutes = filterRoutes([...constantRoutes, ...routes], control)// // 设置菜单所需路由commit('setRoutes', finallyRoutes)// // 根据可访问路由重置Vue Routerawait resetRouter(finallyRoutes)},

(5)filterRoutes:根据权限和rolesControl过滤路由

export function filterRoutes (routes:any, rolesControl:any, baseUrl = '/') {return routes.filter((route:any) => {if (rolesControl && route.meta && route.meta.roles) {return hasAccess(route.meta.roles)return false} else { return true }})// .map((route) => {//   if (route.path !== '*' && !isExternal(route.path))//     route.fullPath = resolve(baseUrl, route.path)//   if (route.children)//     route.children = filterRoutes(//       route.children,//       rolesControl,//       route.fullPath//     )//   return route// })
}

(6)toLoginRoute:

/*** 获取当前跳转登录页的Route* @param currentPath 当前页面地址*/
export function toLoginRoute (currentPath:any) {if (recordRoute && currentPath !== '/') {return {path: '/login',query: { redirect: currentPath },replace: true}} else {return { path: '/login', replace: true }}
}

4、创建router.js 文件,创建路由列表和添加路由的方法

设置默认路由和模拟请求后添加的路由,定义添加路由的方法

// 定义路由和路由添加的方法
import { createRouter, createWebHashHistory, createWebHistory } from 'vue-router'
import configOb from '@/config'
import { getNames } from '@/utils/routes'//设置默认数组
export const constantRoutes = [{path: '/login',name: 'Login',component: () => import('@/views/login/index.vue'),hidden: true},{path: '/403',name: '403',component: () => import('../views/403.vue'),hidden: true},{path: '/404',name: '404',component: () => import('../views/404.vue'),hidden: true}
]//假设请求的到的数组
export const asyncRoutes = [{path: '/',name: 'Root',// component: Layout,redirect: '/index',meta: {title: '平台首页',icon: 'iconfont icon-ptsyy icon-white'},children: [{path: 'index',name: 'Index',component: () => import('../views/index/index.vue'),meta: {title: '首页',icon: 'home-2-line',noClosable: true}}]},{path: '/error',name: 'Error',// component: Layout,redirect: '/error/403',menuHidden: true,meta: {title: '错误页',icon: 'error-warning-line'},children: [{path: '403',name: 'Error403',component: () => import('../views/403.vue'),meta: {title: '403',icon: 'error-warning-line'}},{path: '404',name: 'Error404',component: () => import('../views/404.vue'),meta: {title: '404',icon: 'error-warning-line'}}]},{path: '/:pathMatch(.*)*',redirect: '/404',name: 'NotFound',hidden: true}
]//是否开启hash模式
const { isHashRouterMode, publicPath } = configOb
const router = createRouter({history: isHashRouterMode? createWebHashHistory(publicPath): createWebHistory(publicPath),routes: constantRoutes
})/*** 添加路由* @param routes*/
function addRouter (routes:any) {routes.forEach((route:any) => {if (!router.hasRoute(route.name)) router.addRoute(route)if (route.children) addRouter(route.children)})
}export default router
http://www.yayakq.cn/news/796693/

相关文章:

  • 英文网站注册网站开发的公司推荐
  • 阿里云服务器部署网站太阳能灯网站建设
  • 济南网站建设山东聚搜网见效快wordpress 插件卸载
  • 茂名网站开发公司推荐wordpress兑换卡密
  • 网站主机 流量网站怎么做交易平台
  • 东莞多语言网站建设wordpress媒体库加一个分类
  • 来凡网站建设公司Wordpress编辑工具
  • 电商网站平台石家庄建站网页模板
  • 西宁做网站的有吗百度提交wordpress
  • 天津哪家网站做的好怎么做游戏和网站漏洞
  • 打开一个不良网站提示创建成功网站建设期任务及总结
  • 做二手手机交易网站网站建设用图
  • 微信小程序 做网站河北手机网站制作多少钱
  • 钓鱼网站怎么做公司响应式网站
  • 可以做软文的网站电子商务网站建设的规划和实施
  • 中国教学网站泉州手机网站制作
  • 南宁站建站时间网站开发用什么技术可行性
  • 南昌企业网站排名优化建众智业公司简介
  • 专业网站建设公司首选中国铁塔公司招聘网站
  • 无锡网页建站浙江网站建设平台
  • 地方网站源码阀门网站建设
  • 婚纱摄影网站论文网站下载不了怎么解决
  • 电子设计网站网站开发准备流程图
  • 目前做定制产品的网站做问卷的网站
  • 网站建设公司制作网站西宁网站设计公司
  • 宿州网站建设报价小制作小发明视频
  • 做uml图网站上海公司注册名字查询网
  • 上海市建设安全协会成绩查询的网站wordpress如何去掉amp
  • 外海网站如何做网站的推广罗湖商城网站建设哪家技术好
  • 微信引流神器手机电影网站怎么做做网站公司哪家比较好