Vue-element-admin 登录功能,token填写,语言转换,路由设置,参数传递拼接
·
语言功能
后端从url获取lang参数决定返回的语言
在utils中创建language.js提供方法
import Cookies from 'js-cookie'
const languageKey = 'admin-language'
export function getLanguage() {
return Cookies.get(languageKey)
}
export function setLanguage(language) {
return Cookies.set(languageKey, language)
}
然后在请求拦截器中对所有请求设置全局参数
// 请求拦截器
service.interceptors.request.use(
config => {
// 在发送请求之前做一些事情
if (store.getters.token) {
// 让每个请求都携带token
// ['X-Token'] 是自定义标题键
// 请根据实际情况修改
config.headers['Authorization'] = getToken()
config.params = { 'lang': getLanguage() }
}
return config
},
error => {
// 处理请求错误
console.log(error) // 用于调试
return Promise.reject(error)
}
)
补充:
但是请注意,如果使用vue-elemeentui-admin框架,这样会导致默认的传参失效;
改为这种写法:
if (store.getters.token) {
// 让每个请求都携带token
// ['X-Token'] 是自定义标题键
// 请根据实际情况修改
config.headers['Authorization'] = getToken()
// 设置语言参数
config.params['lang'] = (getLanguage() === '' || getLanguage() === undefined) ? 'zh_CN' : getLanguage()
}
真是java用习惯了,惯性思维觉得必须有一个api设置进去,而此处恰恰相反.,我们只需要虚空取值,直接设置进去,
config.params['lang']
是获取map
中key
为lang
的数据,我们可以假设他有值,直接告诉他:嘿!你的lang=zh_CN
补充一个
get传参
post传参
在请求拦截器中添加param参数
// 请求拦截器
service.interceptors.request.use(
config => {
// 在发送请求之前做一些事情
if (store.getters.token) {
// 让每个请求都携带token
// ['X-Token'] 是自定义key
// 请根据实际情况修改
config.headers['Authorization'] = getToken()
// 设置语言参数
if (config.params) {
config.params['lang'] = (getLanguage() === '' || getLanguage() === undefined) ? 'zh_CN' : getLanguage()
}
}
return config
},
URL直接传递JSON
export function getGoodsList(data) {
return request({
url: '/goods',
method: 'get',
params: { data }
})
}
传递效果
http://localhost:38888/onenaira-admin/api/goods?data={"page":1,"size":100}
登录部分
const actions = {
// 登录方法
login({ commit }, userInfo) {
// 解构username和pwd
const { username, password } = userInfo
// 请求,参数为两个回调参数
return new Promise((resolve, reject) => {
// 调用上面引入的login方法,将参数封装为对象传输
login({ email: username.trim(), password: password.trim() }).then(response => {
const { data } = response
// commit向store的SET_TOKEN提交数据
commit('SET_TOKEN', data.token)
// 将token设置进cookie方便取用
setToken(data.token)
setRefreshToken(data.refreshToken)
resolve()
}).catch(error => {
// 失败回调
reject(error)
})
})
}
commit指向的
相关连接
const mutations = {
RESET_STATE: (state) => {
Object.assign(state, getDefaultState())
},
SET_TOKEN: (state, token) => {
state.token = token
},
SET_NAME: (state, name) => {
state.name = name
},
SET_AVATAR: (state, avatar) => {
state.avatar = avatar
}
}
路由设置
单级页面路由
{
path: '/user',
component: Layout,
children: [
{
path: 'index',
name: 'userManager',
component: () => import('@/views/form/index'),
meta: { title: 'Form', icon: 'form' }
}
]
},
二级路由
{
path: '/course', // 路径和
component: Layout,
redirect: '/course', // 重定向地址,如果访问path以后需要重定向就需要填写,否则保持一直
name: 'courseManager',
meta: { title: '课程管理', icon: 'el-icon-s-help' },
children: [
{
path: 'table',
name: 'Table',
component: () => import('@/views/table/index'),
meta: { title: 'Table', icon: 'table' }
},
{
path: 'tree',
name: 'Tree',
component: () => import('@/views/tree/index'),
meta: { title: 'Tree', icon: 'tree' }
}
]
}
三级路由
{
path: '/nested',
component: Layout,
redirect: '/nested/menu1',
name: 'Nested',
meta: {
title: 'Nested',
icon: 'nested'
},
children: [
{
path: 'menu1',
component: () => import('@/views/nested/menu1/index'), // Parent router-view
name: 'Menu1',
meta: { title: 'Menu1' },
children: [
{
path: 'menu1-1',
component: () => import('@/views/nested/menu1/menu1-1'),
name: 'Menu1-1',
meta: { title: 'Menu1-1' }
},
{
path: 'menu1-2',
component: () => import('@/views/nested/menu1/menu1-2'),
name: 'Menu1-2',
meta: { title: 'Menu1-2' },
children: [
{
path: 'menu1-2-1',
component: () => import('@/views/nested/menu1/menu1-2/menu1-2-1'),
name: 'Menu1-2-1',
meta: { title: 'Menu1-2-1' }
},
{
path: 'menu1-2-2',
component: () => import('@/views/nested/menu1/menu1-2/menu1-2-2'),
name: 'Menu1-2-2',
meta: { title: 'Menu1-2-2' }
}
]
},
{
path: 'menu1-3',
component: () => import('@/views/nested/menu1/menu1-3'),
name: 'Menu1-3',
meta: { title: 'Menu1-3' }
}
]
},
{
path: 'menu2',
component: () => import('@/views/nested/menu2/index'),
name: 'Menu2',
meta: { title: 'menu2' }
}
]
}
更多推荐
所有评论(0)