资讯专栏INFORMATION COLUMN

Vue 后台模板 [Vue admin] SanJi Boot Admin Iview

546669204 / 3035人阅读

摘要:导读很久没有写文章了最近一直在忙之前一直想着可以把项目中的页面使用进行重写前几天算是阶段性的完成了这个计划后期会随着的模块不断增多对其进行对应的升级与扩展简介项目源码已托管到码云上使用技术实现了什么功能基于进行登陆时的认证支持跨域需要后台配

导读:

很久没有写文章了,最近一直在忙,之前一直想着可以把SanJi Boot Security项目中的页面使用 Vue+webpack 进行重写,前几天算是阶段性的完成了这个计划,后期会随着SanJi Boot 的模块不断增多 对其进行对应的升级与扩展

简介:

项目源码已托管到码云上

使用技术:

webpack + Vue + Vue Router + iviewUI

实现了什么功能:

基于token进行登陆时的认证 支持跨域 需要后台配合

修改 config/index.js 文件

const path = require("path")

module.exports = {
  dev: {

    // Paths
    assetsSubDirectory: "static",
    assetsPublicPath: "/",
    proxyTable: { "/api":
      {
        target:"http://localhost:8089/api",
        changeOrigin:true,
        pathRewrite:{
        "^/api": ""
        }
      }
    }
   ...
  }
}

自定义 axios src/api/http.js 文件

import router from "../router"
import axios from "axios"
import bus from "../bus"


// axios 配置
axios.defaults.timeout = 30000;

axios.interceptors.request.use(
  config => {
    if (bus.state.token) {  // 判断是否存在token,如果存在的话,则每个http header都加上token
      config.headers.Authorization = `${bus.state.token}`;
    }
    return config;
  },
  err => {
    return Promise.reject(err);
  });

// http response 拦截器
axios.interceptors.response.use(
  response => {
    return response;
  },
  error => {
    if (error.response) {
      switch (error.response.status) {
        case 401:
          // 返回 401 清除token信息并跳转到登录页面
          bus.state.token=undefined;
          router.replace({
            path: "login",
            query: {redirect: router.currentRoute.fullPath}
          })
      }
    }
    return Promise.reject(error.response.data)   // 返回接口返回的错误信息
  });
export default axios;

基于Vue Router 在进入页面前进行权限的前端认证

编写 src/router/index.js 文件

import Vue from "vue"
import Router from "vue-router"
import bus from "../bus"

Vue.use(Router)

//base

const Index = resolve => require(["../views/Index"], resolve)

const Login = resolve => require(["../views/Login"], resolve)

const Home = resolve => require(["../views/demo/Home"], resolve)

const Forbidden = resolve => require(["../views/demo/403"], resolve)

const NotFound = resolve => require(["../views/demo/NotFound"], resolve)

const Icon = resolve => require(["../views/demo/Icon"], resolve)

const Demo = resolve => require(["../views/demo/Demo"], resolve)

// sys

const UserManager = resolve => require(["../views/sys/User"], resolve)

const RoleManager = resolve => require(["../views/sys/Role"], resolve)



const router = new Router({
  routes: [
    {
      path: "/login",
      name: "login",
      component: Login
    },
    {
      path: "/",
      name: "index",
      component: Index,
      meta: {
        requireAuth: true,  // 添加该字段,表示进入这个路由是需要登录的
      },
      children: [
        {
          path: "//",
          name: "首页",
          component: Home,
          meta: {
            requireAuth: true,  // 添加该字段,表示进入这个路由是需要登录的
          },
        },
        {
          path: "/demo",
          name: "demo",
          component: Demo,
          meta: {
            requireAuth: true,  // 添加该字段,表示进入这个路由是需要登录的
          },
        }, {
          path: "/icon",
          name: "icon",
          component: Icon,
          meta: {
            requireAuth: true,  // 添加该字段,表示进入这个路由是需要登录的
          },
        },
        {
          path: "/sys/user",
          name: "用戶管理",
          component: UserManager,
          meta: {
            requireAuth: true,  // 添加该字段,表示进入这个路由是需要登录的
            permissions:"sys-user"
          }
        },
        {
          path: "/sys/role",
          name: "角色管理",
          component: RoleManager,
          meta: {
            requireAuth: true,  // 添加该字段,表示进入这个路由是需要登录的
            permissions:"sys-role"
          }
        },
        {
          path: "/403",
          name: "403",
          component: Forbidden,
        },{
          path: "/*",
          name: "404",
          component: NotFound,
          meta: {
            requireAuth: true,  // 添加该字段,表示进入这个路由是需要登录的
          }
        }
      ]
    }]
});

router.beforeEach((to, from, next) => {
  if (to.path === "/logout") {
    bus.state.token = undefined;
    next({
      path: "/login"
    })
  }else{
    bus.state.menu_title = to.name;
    if (to.meta.requireAuth) {  // 判断该路由是否需要登录权限
      // console.log("token:",bus.state.token!=null,bus.state.token,)
      if (bus.state.token!="undefined"&&bus.state.token) {  // 通过vuex state获取当前的token是否存在
        if(to.meta.permissions){
          if(bus.action.hasPermissions(bus,to.meta.permissions)){
            next();
          }else{
            bus.state.menu_title = "403"
            next("/403");
          }
        }else{
          next();
        }
      } else {
        next({
          path: "/login",
          query: {redirect: to.fullPath}  // 将跳转的路由path作为参数,登录成功后跳转到该路由
        })
      }
    } else {
      next();
    }
  }
})

export default router;

后台界面主框架 material design 风格

基于material_admin 实现前端界面响应式设计 支持快速切换后台界面主框架

  
    
      
    
  
目前有哪些功能模块:

用户管理
角色管理
demo表格+Icon图标

界面截图:

登陆页面

用户管理

角色管理

icon

后记

项目已托管 码云
需要配合 sanji-boot-security 使用

学习资料

快速上手 webpack+vue - vue cli 起手式

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/92406.html

相关文章

  • Spring Boot [后台脚手架] SanJi Boot v2.0 -去繁就简 重新出发

    摘要:去繁就简重新出发基于集成一些常用的功能,你只需要基于它做些简单的修改即可。 SanJi Boot v2.0 去繁就简 重新出发 基于Spring Boot 集成一些常用的功能,你只需要基于它做些简单的修改即可。 演示环境: 网址: SanJi-Boot v2.0 用户名/密码: admin/admin 功能列表: [x] 权限认证 [x] 权限管理 [x] 用户管理 [x] 角色管...

    SoapEye 评论0 收藏0
  • iView 发布后台管理系统 iview-admin,没错,它就是你想要的

    摘要:简介是基于,搭配使用组件库形成的一套后台集成解决方案,由前端可视化团队部分成员开发维护。遵守设计和开发约定,风格统一,设计考究,并且更多功能在不停开发中。 showImg(https://segmentfault.com/img/remote/1460000011603206); 简介 iView Admin 是基于 Vue.js,搭配使用 iView UI 组件库形成的一套后台集成解...

    HackerShell 评论0 收藏0
  • vue轻量级后台管理系统基础模板

    摘要:具体实现请查看和的退出登陆回调方法。现在除了必要的页面需要在一开始添加到路由表里,其他的页面都可以根据后台数据来自动生成。另外,如果在未登陆时要访问某一指定页面,会重定向到登陆页,登陆成功后会自动跳到这个指定页面。 项目地址 vue-admin-template 在线预览 更新 2019.6.25 更新 修复路由表冲突问题 退出当前用户,换账号重新登陆时,上个账号和现在的账号路由表会有...

    2shou 评论0 收藏0
  • Vue iview-admin框架二级菜单改为三级菜单

    摘要:最近在用的后台模板,从上下载后发现左侧导航栏最多支持到二级菜单也发现很多童鞋在问如何实现三级菜单。在实际的应用场景中还是会出现三级菜单的需求的,木有其他好办法,只能自己手动改代码了。 最近在用 iview-admin的Vue后台模板,从git上下载后发现左侧导航栏最多支持到二级菜单,也发现很多童鞋在问如何实现三级菜单。在实际的应用场景中还是会出现三级菜单的需求的,木有其他好办法,只能自...

    codeKK 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<