diff --git a/work/src/api/index.js b/work/src/api/index.js index fbcead0..d959d3a 100644 --- a/work/src/api/index.js +++ b/work/src/api/index.js @@ -29,7 +29,7 @@ const service = axios.create({ axios.interceptors.request.use(config => { const token = useTokenStore(); if (token) { - config.headers['token'] = `${token}`; + config.headers.token = `${token}`; } return config; }, error => { @@ -40,18 +40,44 @@ service.interceptors.request.use(config => { const token = useTokenStore(); if (token) { // 一般后端会约定一个请求头的字段名来接收token,常见的如 'Authorization',并要求按照一定格式传递,比如 'Bearer ',这里按照此格式添加,你需要根据后端实际要求调整 - config.headers['token'] = `${token}`; + config.headers.token = `${token}`; } return config; }, error => { return Promise.reject(error); }); -// Axios的响应拦截器 -service.interceptors.response.use(resp => { - return resp.data; -}, error => { +// // Axios的响应拦截器 +// service.interceptors.response.use(resp => { +// return resp.data; +// }, error => { +// return Promise.reject(error); +// }); + +//响应拦截器 +service.interceptors.response.use(response => { + return response.data; +}, error =>{ + if(error.code == "500"){ + ElMessage.error("服务器错误!"); + } + const response = error.response; + if(error.response && error.response.status == 403){ + //提示一下权限不足 + ElMessage.warning(response.data.message); + } else if(response && response.status == 401){ + //提示一下未登录 + ElMessage.warning(response.data.message); + //跳转登录页面 + const curURL = router.currentRoute.value.path; + if(curURL.startsWith('/')){ + router.push('/login') + } else{ + router.push('/login'); + } + console.log(); + } return Promise.reject(error); -}); +}) export default service; \ No newline at end of file diff --git a/work/src/stores/user.js b/work/src/stores/user.js new file mode 100644 index 0000000..673c4f9 --- /dev/null +++ b/work/src/stores/user.js @@ -0,0 +1,22 @@ +import {defineStore} from 'pinia'; +/* +使用pinia进行状态管理,不能刷新页面 +Vue中将一些全局的数据保存在某个位置,Vue项目的任何一个组件中,都可以访问它 +*/ +export const useUserStore = defineStore('user',{ + //状态管理 + state:()=>({ + user: JSON.parse(sessionStorage.getItem('user')), + }), + actions:{ + changeUser(user){ + this.user = user; + //长久保存token + sessionStorage.setItem('user', JSON.stringify(user)); //sessionStorage中只能保存字符串 + }, + clear(){ + this.user = null; + sessionStorage.removeItem('user'); + } + } +}); \ No newline at end of file diff --git a/work/src/views/AddWork.vue b/work/src/views/AddWork.vue index a0ebbb8..15f42c7 100644 --- a/work/src/views/AddWork.vue +++ b/work/src/views/AddWork.vue @@ -95,6 +95,8 @@ import { ElMessage } from 'element-plus' import LoginApi from '../api/LoginApi'; import axios from 'axios'; import { useRouter } from 'vue-router'; +import { useTokenStore } from '../stores/token'; +import { useUserStore } from '../stores/user'; const router = useRouter(); @@ -288,13 +290,19 @@ onMounted(() => { isHovered.value = Array(questions.value.length).fill(false); }); -//退出登录 -const logout = () => { - LoginApi.logout().then(res => { + +//退出 +function logout(){ + //清除登录信息 + const tokenStore = useTokenStore(); + const userStore = useUserStore(); + tokenStore.clear(); + userStore.clear(); + LoginApi.logout().then(res => { console.log(res) }) router.push('/') -} +}