前端工程师想要做一个Vue-ts后台管理系统,如何完成?

前端工程师想要做一个Vue-ts后台管理系统,如何完成?
2020年12月09日 14:11 源码时代

项目准备一.1.项目描述

  • 该项目是基于vue和ts的后台管理系统

  • 具体包含了登录、数据管理、账号管理模块

  • 用户登录系统后,可以查看自己学习情况和添加最新的学习任务等

一.2.项目功能界面

一.3.开发环境与技术

开发环境

Window10

开发工具

vscode

技术栈

Vue + ts + vuex + axios + element-ui

一.4.项目收获

  • 熟悉vue项目开发流程

  • 熟悉ts使用

  • 熟悉element-UI使用

....

应用开发详解一.5.引入element-ui

//element-ui

import ElementUI from 'element-ui' //element-ui的全部组件

import 'element-ui/lib/theme-chalk/index.css'//element-ui的css

Vue.use(ElementUI) //使用elementUI

一.6.引入axios

//挂载axios

Vue.prototype.$axios = axios;

一.7.路由分配

//外部可访问 用于动态渲染路由信息

export const asyncRouterMap = [

{

path: '/',

name: 'dashboard',

component: Layout,

//在左侧菜单中显示

hidden: true,

//实际跳转页面

redirect: '/home',

children: [

{

path: '/home',

name: 'home',

//对应在左侧菜单中显示的名称和icon

meta: { title: '首页', icon: 'fa fa-home' },

component: () => import('@/views/Home.vue')

}

]

},

// 数据管理

{

path: '/dataManage',

name: 'dataManage',

//在左侧菜单中显示

hidden: true,

//对应在左侧菜单中显示的名称和icon

meta: { title: '数据管理', icon: 'fa fa-database' },

component: Layout,

redirect: '/tableData',

children: [

//表格管理

{

path: '/tableData',

name: 'tableData',

meta: { title: '表格管理', icon: 'fa fa-table' },

component: () => import('@/views/DataManage/TableData.vue')

},

//图表管理

{

path: '/chartsData',

name: 'chartsData',

meta: { title: '图表管理', icon: 'fa fa-bar-chart' },

component: () => import('@/views/DataManage/ChartsData.vue')

},

//表单管理

{

path: '/formData',

name: 'formData',

meta: {

title: '表单管理',

icon: 'fa fa-file-text-o',

// 限制访问权限 只有管理员和客服能够访问

roles: ['admin', 'editor']

},

component: () => import('@/views/DataManage/FormData.vue')

}

]

},

//账户管理

{

path: '/userManage',

name: 'userManage',

component: Layout,

//显示

hidden: true,

redirect: '/accountData',

children: [

// /账户管理

{

path: '/accountData',

name: 'accountData',

meta: { title: '账户管理', icon: 'fa fa-user-plus', roles: ['admin'] }, // 只有管理员能够访问

component: () => import('@/views/UserManage/AccountData.vue')

}

]

},

//个人中心

{

path: '/user',

component: Layout,

redirect: '/userInfo',

//不需要在左侧菜单中显示

hidden: false,

children: [

{

path: '/userInfo',

name: 'userInfo',

meta: { title: '个人中心' },

component: () => import('@/views/UserManage/UserInfo.vue')

}

]

},

// 404页面

{

path: '/404',

name: '404',

hidden: false,

meta: { title: '404' },

component: () => import('@/views/404.vue')

},

{

path: '*',

redirect: '/404'

},

// login

{

path: '/login',

name: 'login',

hidden: false,

meta: { title: '系统登录' },

component: () => import('@/views/Login/login.vue')

},

//password

{

path: '/password',

name: 'password',

hidden: false,

meta: { title: '找回密码' },

component: () => import('@/views/Login/password.vue')

}

];

一.8.请求拦截

// 请求拦截

service.interceptors.request.use(

(config: AxiosRequestConfig) => {

//是否在发起请求

if (localStorage.tsToken) {

config.headers.Authorization = localStorage.tsToken;

}

return config;

},

(err: any) => {

Promise.reject(err);

}

);

一.9.响应拦截

// 响应拦截

service.interceptors.response.use(

(response: AxiosResponse) => {

return response;

},

(err: any) => {

let errMsg = '';

if (err && err.response.status) {

switch (err.response.status) {

case 401:

errMsg = '登录状态失效,请重新登录';

//删除储存的token

localStorage.removeItem('tsToken');

router.push('/login');

break;

case 403:

errMsg = '拒绝访问';

break;

case 408:

errMsg = '请求超时';

break;

case 500:

errMsg = '服务器内部错误';

break;

case 501:

errMsg = '服务未实现';

break;

case 502:

errMsg = '网关错误';

break;

case 503:

errMsg = '服务不可用';

break;

case 504:

errMsg = '网关超时';

break;

case 505:

errMsg = 'HTTP版本不受支持';

break;

default:

errMsg = err.response.data.msg;

break;

}

} else {

errMsg = err;

}

Message.error(errMsg);

return Promise.reject(errMsg);

}

);

....

财经自媒体联盟更多自媒体作者

新浪首页 语音播报 相关新闻 返回顶部