清空默认
This commit is contained in:
		
							parent
							
								
									2bb23e5d0f
								
							
						
					
					
						commit
						2fb067308d
					
				@ -1,24 +1,24 @@
 | 
			
		||||
import request from '@/utils/request'
 | 
			
		||||
// import request from '@/utils/request'
 | 
			
		||||
 | 
			
		||||
export function login(data) {
 | 
			
		||||
  return request({
 | 
			
		||||
    url: '/vue-admin-template/user/login',
 | 
			
		||||
    method: 'post',
 | 
			
		||||
    data
 | 
			
		||||
  })
 | 
			
		||||
  // return request({
 | 
			
		||||
  //   url: '/vue-admin-template/user/login',
 | 
			
		||||
  //   method: 'post',
 | 
			
		||||
  //   data
 | 
			
		||||
  // })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function getInfo(token) {
 | 
			
		||||
  return request({
 | 
			
		||||
    url: '/vue-admin-template/user/info',
 | 
			
		||||
    method: 'get',
 | 
			
		||||
    params: { token }
 | 
			
		||||
  })
 | 
			
		||||
  // return request({
 | 
			
		||||
  //   url: '/vue-admin-template/user/info',
 | 
			
		||||
  //   method: 'get',
 | 
			
		||||
  //   params: { token }
 | 
			
		||||
  // })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function logout() {
 | 
			
		||||
  return request({
 | 
			
		||||
    url: '/vue-admin-template/user/logout',
 | 
			
		||||
    method: 'post'
 | 
			
		||||
  })
 | 
			
		||||
  // return request({
 | 
			
		||||
  //   url: '/vue-admin-template/user/logout',
 | 
			
		||||
  //   method: 'post'
 | 
			
		||||
  // })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,64 +1,64 @@
 | 
			
		||||
import router from './router'
 | 
			
		||||
import store from './store'
 | 
			
		||||
import { Message } from 'element-ui'
 | 
			
		||||
import NProgress from 'nprogress' // progress bar
 | 
			
		||||
import 'nprogress/nprogress.css' // progress bar style
 | 
			
		||||
import { getToken } from '@/utils/auth' // get token from cookie
 | 
			
		||||
import getPageTitle from '@/utils/get-page-title'
 | 
			
		||||
// import router from './router'
 | 
			
		||||
// import store from './store'
 | 
			
		||||
// import { Message } from 'element-ui'
 | 
			
		||||
// import NProgress from 'nprogress' // progress bar
 | 
			
		||||
// import 'nprogress/nprogress.css' // progress bar style
 | 
			
		||||
// import { getToken } from '@/utils/auth' // get token from cookie
 | 
			
		||||
// import getPageTitle from '@/utils/get-page-title'
 | 
			
		||||
 | 
			
		||||
NProgress.configure({ showSpinner: false }) // NProgress Configuration
 | 
			
		||||
// NProgress.configure({ showSpinner: false }) // NProgress Configuration
 | 
			
		||||
 | 
			
		||||
const whiteList = ['/login'] // no redirect whitelist
 | 
			
		||||
// const whiteList = ['/login'] // no redirect whitelist
 | 
			
		||||
 | 
			
		||||
router.beforeEach(async(to, from, next) => {
 | 
			
		||||
  // start progress bar
 | 
			
		||||
  NProgress.start()
 | 
			
		||||
// router.beforeEach(async(to, from, next) => {
 | 
			
		||||
//   // start progress bar
 | 
			
		||||
//   NProgress.start()
 | 
			
		||||
 | 
			
		||||
  // set page title
 | 
			
		||||
  document.title = getPageTitle(to.meta.title)
 | 
			
		||||
//   // set page title
 | 
			
		||||
//   document.title = getPageTitle(to.meta.title)
 | 
			
		||||
 | 
			
		||||
  // determine whether the user has logged in
 | 
			
		||||
  const hasToken = getToken()
 | 
			
		||||
//   // determine whether the user has logged in
 | 
			
		||||
//   const hasToken = getToken()
 | 
			
		||||
 | 
			
		||||
  if (hasToken) {
 | 
			
		||||
    if (to.path === '/login') {
 | 
			
		||||
      // if is logged in, redirect to the home page
 | 
			
		||||
      next({ path: '/' })
 | 
			
		||||
      NProgress.done()
 | 
			
		||||
    } else {
 | 
			
		||||
      const hasGetUserInfo = store.getters.name
 | 
			
		||||
      if (hasGetUserInfo) {
 | 
			
		||||
        next()
 | 
			
		||||
      } else {
 | 
			
		||||
        try {
 | 
			
		||||
          // get user info
 | 
			
		||||
          await store.dispatch('user/getInfo')
 | 
			
		||||
//   if (hasToken) {
 | 
			
		||||
//     if (to.path === '/login') {
 | 
			
		||||
//       // if is logged in, redirect to the home page
 | 
			
		||||
//       next({ path: '/' })
 | 
			
		||||
//       NProgress.done()
 | 
			
		||||
//     } else {
 | 
			
		||||
//       const hasGetUserInfo = store.getters.name
 | 
			
		||||
//       if (hasGetUserInfo) {
 | 
			
		||||
//         next()
 | 
			
		||||
//       } else {
 | 
			
		||||
//         try {
 | 
			
		||||
//           // get user info
 | 
			
		||||
//           await store.dispatch('user/getInfo')
 | 
			
		||||
 | 
			
		||||
          next()
 | 
			
		||||
        } catch (error) {
 | 
			
		||||
          // remove token and go to login page to re-login
 | 
			
		||||
          await store.dispatch('user/resetToken')
 | 
			
		||||
          Message.error(error || 'Has Error')
 | 
			
		||||
          next(`/login?redirect=${to.path}`)
 | 
			
		||||
          NProgress.done()
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  } else {
 | 
			
		||||
    /* has no token*/
 | 
			
		||||
//           next()
 | 
			
		||||
//         } catch (error) {
 | 
			
		||||
//           // remove token and go to login page to re-login
 | 
			
		||||
//           await store.dispatch('user/resetToken')
 | 
			
		||||
//           Message.error(error || 'Has Error')
 | 
			
		||||
//           next(`/login?redirect=${to.path}`)
 | 
			
		||||
//           NProgress.done()
 | 
			
		||||
//         }
 | 
			
		||||
//       }
 | 
			
		||||
//     }
 | 
			
		||||
//   } else {
 | 
			
		||||
//     /* has no token*/
 | 
			
		||||
 | 
			
		||||
    if (whiteList.indexOf(to.path) !== -1) {
 | 
			
		||||
      // in the free login whitelist, go directly
 | 
			
		||||
      next()
 | 
			
		||||
    } else {
 | 
			
		||||
      // other pages that do not have permission to access are redirected to the login page.
 | 
			
		||||
      next(`/login?redirect=${to.path}`)
 | 
			
		||||
      NProgress.done()
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
})
 | 
			
		||||
//     if (whiteList.indexOf(to.path) !== -1) {
 | 
			
		||||
//       // in the free login whitelist, go directly
 | 
			
		||||
//       next()
 | 
			
		||||
//     } else {
 | 
			
		||||
//       // other pages that do not have permission to access are redirected to the login page.
 | 
			
		||||
//       next(`/login?redirect=${to.path}`)
 | 
			
		||||
//       NProgress.done()
 | 
			
		||||
//     }
 | 
			
		||||
//   }
 | 
			
		||||
// })
 | 
			
		||||
 | 
			
		||||
router.afterEach(() => {
 | 
			
		||||
  // finish progress bar
 | 
			
		||||
  NProgress.done()
 | 
			
		||||
})
 | 
			
		||||
// router.afterEach(() => {
 | 
			
		||||
//   // finish progress bar
 | 
			
		||||
//   NProgress.done()
 | 
			
		||||
// })
 | 
			
		||||
 | 
			
		||||
@ -1,8 +1,14 @@
 | 
			
		||||
// const getters = {
 | 
			
		||||
//   sidebar: state => state.app.sidebar,
 | 
			
		||||
//   device: state => state.app.device,
 | 
			
		||||
//   token: state => state.user.token,
 | 
			
		||||
//   avatar: state => state.user.avatar,
 | 
			
		||||
//   name: state => state.user.name
 | 
			
		||||
// }
 | 
			
		||||
// export default getters
 | 
			
		||||
 | 
			
		||||
const getters = {
 | 
			
		||||
  sidebar: state => state.app.sidebar,
 | 
			
		||||
  device: state => state.app.device,
 | 
			
		||||
  token: state => state.user.token,
 | 
			
		||||
  avatar: state => state.user.avatar,
 | 
			
		||||
  name: state => state.user.name
 | 
			
		||||
  device: state => state.app.device
 | 
			
		||||
}
 | 
			
		||||
export default getters
 | 
			
		||||
 | 
			
		||||
@ -1,97 +1,103 @@
 | 
			
		||||
import { login, logout, getInfo } from '@/api/user'
 | 
			
		||||
import { getToken, setToken, removeToken } from '@/utils/auth'
 | 
			
		||||
import { resetRouter } from '@/router'
 | 
			
		||||
// import { login, logout, getInfo } from '@/api/user'
 | 
			
		||||
// import { getToken, setToken, removeToken } from '@/utils/auth'
 | 
			
		||||
// import { resetRouter } from '@/router'
 | 
			
		||||
 | 
			
		||||
const getDefaultState = () => {
 | 
			
		||||
  return {
 | 
			
		||||
    token: getToken(),
 | 
			
		||||
    name: '',
 | 
			
		||||
    avatar: ''
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
// const getDefaultState = () => {
 | 
			
		||||
//   return {
 | 
			
		||||
//     token: getToken(),
 | 
			
		||||
//     name: '',
 | 
			
		||||
//     avatar: ''
 | 
			
		||||
//   }
 | 
			
		||||
// }
 | 
			
		||||
 | 
			
		||||
const state = getDefaultState()
 | 
			
		||||
// const state = getDefaultState()
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
// 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
 | 
			
		||||
//   }
 | 
			
		||||
// }
 | 
			
		||||
 | 
			
		||||
const actions = {
 | 
			
		||||
  // user login
 | 
			
		||||
  login({ commit }, userInfo) {
 | 
			
		||||
    const { username, password } = userInfo
 | 
			
		||||
    return new Promise((resolve, reject) => {
 | 
			
		||||
      login({ username: username.trim(), password: password }).then(response => {
 | 
			
		||||
        const { data } = response
 | 
			
		||||
        commit('SET_TOKEN', data.token)
 | 
			
		||||
        setToken(data.token)
 | 
			
		||||
        resolve()
 | 
			
		||||
      }).catch(error => {
 | 
			
		||||
        reject(error)
 | 
			
		||||
      })
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
// const actions = {
 | 
			
		||||
//   // user login
 | 
			
		||||
//   login({ commit }, userInfo) {
 | 
			
		||||
//     const { username, password } = userInfo
 | 
			
		||||
//     return new Promise((resolve, reject) => {
 | 
			
		||||
//       login({ username: username.trim(), password: password }).then(response => {
 | 
			
		||||
//         const { data } = response
 | 
			
		||||
//         commit('SET_TOKEN', data.token)
 | 
			
		||||
//         setToken(data.token)
 | 
			
		||||
//         resolve()
 | 
			
		||||
//       }).catch(error => {
 | 
			
		||||
//         reject(error)
 | 
			
		||||
//       })
 | 
			
		||||
//     })
 | 
			
		||||
//   },
 | 
			
		||||
 | 
			
		||||
  // get user info
 | 
			
		||||
  getInfo({ commit, state }) {
 | 
			
		||||
    return new Promise((resolve, reject) => {
 | 
			
		||||
      getInfo(state.token).then(response => {
 | 
			
		||||
        const { data } = response
 | 
			
		||||
//   // get user info
 | 
			
		||||
//   getInfo({ commit, state }) {
 | 
			
		||||
//     return new Promise((resolve, reject) => {
 | 
			
		||||
//       getInfo(state.token).then(response => {
 | 
			
		||||
//         const { data } = response
 | 
			
		||||
 | 
			
		||||
        if (!data) {
 | 
			
		||||
          return reject('Verification failed, please Login again.')
 | 
			
		||||
        }
 | 
			
		||||
//         if (!data) {
 | 
			
		||||
//           return reject('Verification failed, please Login again.')
 | 
			
		||||
//         }
 | 
			
		||||
 | 
			
		||||
        const { name, avatar } = data
 | 
			
		||||
//         const { name, avatar } = data
 | 
			
		||||
 | 
			
		||||
        commit('SET_NAME', name)
 | 
			
		||||
        commit('SET_AVATAR', avatar)
 | 
			
		||||
        resolve(data)
 | 
			
		||||
      }).catch(error => {
 | 
			
		||||
        reject(error)
 | 
			
		||||
      })
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
//         commit('SET_NAME', name)
 | 
			
		||||
//         commit('SET_AVATAR', avatar)
 | 
			
		||||
//         resolve(data)
 | 
			
		||||
//       }).catch(error => {
 | 
			
		||||
//         reject(error)
 | 
			
		||||
//       })
 | 
			
		||||
//     })
 | 
			
		||||
//   },
 | 
			
		||||
 | 
			
		||||
  // user logout
 | 
			
		||||
  logout({ commit, state }) {
 | 
			
		||||
    return new Promise((resolve, reject) => {
 | 
			
		||||
      logout(state.token).then(() => {
 | 
			
		||||
        removeToken() // must remove  token  first
 | 
			
		||||
        resetRouter()
 | 
			
		||||
        commit('RESET_STATE')
 | 
			
		||||
        resolve()
 | 
			
		||||
      }).catch(error => {
 | 
			
		||||
        reject(error)
 | 
			
		||||
      })
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
//   // user logout
 | 
			
		||||
//   logout({ commit, state }) {
 | 
			
		||||
//     return new Promise((resolve, reject) => {
 | 
			
		||||
//       logout(state.token).then(() => {
 | 
			
		||||
//         removeToken() // must remove  token  first
 | 
			
		||||
//         resetRouter()
 | 
			
		||||
//         commit('RESET_STATE')
 | 
			
		||||
//         resolve()
 | 
			
		||||
//       }).catch(error => {
 | 
			
		||||
//         reject(error)
 | 
			
		||||
//       })
 | 
			
		||||
//     })
 | 
			
		||||
//   },
 | 
			
		||||
 | 
			
		||||
  // remove token
 | 
			
		||||
  resetToken({ commit }) {
 | 
			
		||||
    return new Promise(resolve => {
 | 
			
		||||
      removeToken() // must remove  token  first
 | 
			
		||||
      commit('RESET_STATE')
 | 
			
		||||
      resolve()
 | 
			
		||||
    })
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
//   // remove token
 | 
			
		||||
//   resetToken({ commit }) {
 | 
			
		||||
//     return new Promise(resolve => {
 | 
			
		||||
//       removeToken() // must remove  token  first
 | 
			
		||||
//       commit('RESET_STATE')
 | 
			
		||||
//       resolve()
 | 
			
		||||
//     })
 | 
			
		||||
//   }
 | 
			
		||||
// }
 | 
			
		||||
 | 
			
		||||
// export default {
 | 
			
		||||
//   namespaced: true,
 | 
			
		||||
//   state,
 | 
			
		||||
//   mutations,
 | 
			
		||||
//   actions
 | 
			
		||||
// }
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  namespaced: true,
 | 
			
		||||
  state,
 | 
			
		||||
  mutations,
 | 
			
		||||
  actions
 | 
			
		||||
  state: {},
 | 
			
		||||
  mutations: {},
 | 
			
		||||
  actions: {}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,7 @@
 | 
			
		||||
import axios from 'axios'
 | 
			
		||||
import { MessageBox, Message } from 'element-ui'
 | 
			
		||||
import store from '@/store'
 | 
			
		||||
import { getToken } from '@/utils/auth'
 | 
			
		||||
// import { MessageBox, Message } from 'element-ui'
 | 
			
		||||
// import store from '@/store'
 | 
			
		||||
// import { getToken } from '@/utils/auth'
 | 
			
		||||
 | 
			
		||||
// create an axios instance
 | 
			
		||||
const service = axios.create({
 | 
			
		||||
@ -15,71 +15,75 @@ service.interceptors.request.use(
 | 
			
		||||
  config => {
 | 
			
		||||
    // do something before request is sent
 | 
			
		||||
 | 
			
		||||
    if (store.getters.token) {
 | 
			
		||||
      // let each request carry token
 | 
			
		||||
      // ['X-Token'] is a custom headers key
 | 
			
		||||
      // please modify it according to the actual situation
 | 
			
		||||
      config.headers['X-Token'] = getToken()
 | 
			
		||||
    }
 | 
			
		||||
    // if (store.getters.token) {
 | 
			
		||||
    //   // let each request carry token
 | 
			
		||||
    //   // ['X-Token'] is a custom headers key
 | 
			
		||||
    //   // please modify it according to the actual situation
 | 
			
		||||
    //   config.headers['X-Token'] = getToken()
 | 
			
		||||
    // }
 | 
			
		||||
    return config
 | 
			
		||||
  },
 | 
			
		||||
  error => {
 | 
			
		||||
    // do something with request error
 | 
			
		||||
    console.log(error) // for debug
 | 
			
		||||
    return Promise.reject(error)
 | 
			
		||||
  }
 | 
			
		||||
  }//,
 | 
			
		||||
  // error => {
 | 
			
		||||
  //   // do something with request error
 | 
			
		||||
  //   console.log(error) // for debug
 | 
			
		||||
  //   return Promise.reject(error)
 | 
			
		||||
  // }
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// response interceptor
 | 
			
		||||
service.interceptors.response.use(
 | 
			
		||||
  /**
 | 
			
		||||
   * If you want to get http information such as headers or status
 | 
			
		||||
   * Please return  response => response
 | 
			
		||||
  */
 | 
			
		||||
// service.interceptors.response.use(
 | 
			
		||||
//   /**
 | 
			
		||||
//    * If you want to get http information such as headers or status
 | 
			
		||||
//    * Please return  response => response
 | 
			
		||||
//   */
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Determine the request status by custom code
 | 
			
		||||
   * Here is just an example
 | 
			
		||||
   * You can also judge the status by HTTP Status Code
 | 
			
		||||
   */
 | 
			
		||||
  response => {
 | 
			
		||||
    const res = response.data
 | 
			
		||||
//   /**
 | 
			
		||||
//    * Determine the request status by custom code
 | 
			
		||||
//    * Here is just an example
 | 
			
		||||
//    * You can also judge the status by HTTP Status Code
 | 
			
		||||
//    */
 | 
			
		||||
//   response => {
 | 
			
		||||
//     const res = response.data
 | 
			
		||||
 | 
			
		||||
    // if the custom code is not 20000, it is judged as an error.
 | 
			
		||||
    if (res.code !== 20000) {
 | 
			
		||||
      Message({
 | 
			
		||||
        message: res.message || 'Error',
 | 
			
		||||
        type: 'error',
 | 
			
		||||
        duration: 5 * 1000
 | 
			
		||||
      })
 | 
			
		||||
//     // if the custom code is not 20000, it is judged as an error.
 | 
			
		||||
//     if (res.code !== 20000) {
 | 
			
		||||
//       Message({
 | 
			
		||||
//         message: res.message || 'Error',
 | 
			
		||||
//         type: 'error',
 | 
			
		||||
//         duration: 5 * 1000
 | 
			
		||||
//       })
 | 
			
		||||
 | 
			
		||||
      // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
 | 
			
		||||
      if (res.code === 50008 || res.code === 50012 || res.code === 50014) {
 | 
			
		||||
        // to re-login
 | 
			
		||||
        MessageBox.confirm('You have been logged out, you can cancel to stay on this page, or log in again', 'Confirm logout', {
 | 
			
		||||
          confirmButtonText: 'Re-Login',
 | 
			
		||||
          cancelButtonText: 'Cancel',
 | 
			
		||||
          type: 'warning'
 | 
			
		||||
        }).then(() => {
 | 
			
		||||
          store.dispatch('user/resetToken').then(() => {
 | 
			
		||||
            location.reload()
 | 
			
		||||
          })
 | 
			
		||||
        })
 | 
			
		||||
      }
 | 
			
		||||
      return Promise.reject(new Error(res.message || 'Error'))
 | 
			
		||||
    } else {
 | 
			
		||||
      return res
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  error => {
 | 
			
		||||
    console.log('err' + error) // for debug
 | 
			
		||||
    Message({
 | 
			
		||||
      message: error.message,
 | 
			
		||||
      type: 'error',
 | 
			
		||||
      duration: 5 * 1000
 | 
			
		||||
    })
 | 
			
		||||
    return Promise.reject(error)
 | 
			
		||||
  }
 | 
			
		||||
)
 | 
			
		||||
//       // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
 | 
			
		||||
//       if (res.code === 50008 || res.code === 50012 || res.code === 50014) {
 | 
			
		||||
//         // to re-login
 | 
			
		||||
//         MessageBox.confirm('You have been logged out, you can cancel to stay on this page, or log in again', 'Confirm logout', {
 | 
			
		||||
//           confirmButtonText: 'Re-Login',
 | 
			
		||||
//           cancelButtonText: 'Cancel',
 | 
			
		||||
//           type: 'warning'
 | 
			
		||||
//         }).then(() => {
 | 
			
		||||
//           store.dispatch('user/resetToken').then(() => {
 | 
			
		||||
//             location.reload()
 | 
			
		||||
//           })
 | 
			
		||||
//         })
 | 
			
		||||
//       }
 | 
			
		||||
//       return Promise.reject(new Error(res.message || 'Error'))
 | 
			
		||||
//     } else {
 | 
			
		||||
//       return res
 | 
			
		||||
//     }
 | 
			
		||||
//   },
 | 
			
		||||
//   error => {
 | 
			
		||||
//     console.log('err' + error) // for debug
 | 
			
		||||
//     Message({
 | 
			
		||||
//       message: error.message,
 | 
			
		||||
//       type: 'error',
 | 
			
		||||
//       duration: 5 * 1000
 | 
			
		||||
//     })
 | 
			
		||||
//     return Promise.reject(error)
 | 
			
		||||
//   }
 | 
			
		||||
// )
 | 
			
		||||
 | 
			
		||||
service.interceptors.response.use(res => {
 | 
			
		||||
  return res
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
export default service
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user