语言功能

后端从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']是获取mapkeylang的数据,我们可以假设他有值,直接告诉他:嘿!你的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' }
      }
    ]
  }
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐