diff --git a/work/src/api/LoginApi.js b/work/src/api/LoginApi.js index d022cd6..7e0daa6 100644 --- a/work/src/api/LoginApi.js +++ b/work/src/api/LoginApi.js @@ -5,8 +5,8 @@ const LoginApi={ return service.post("/api/login",username,password) }, //退出登录 - logout(token){ - return service.post("/api/logout",token) + logout(){ + return service.post("/api/logout") } } export default LoginApi; \ No newline at end of file diff --git a/work/src/api/index.js b/work/src/api/index.js index d959d3a..9fc0204 100644 --- a/work/src/api/index.js +++ b/work/src/api/index.js @@ -18,6 +18,7 @@ import axios from "axios"; import { useTokenStore } from "../stores/token"; + const service = axios.create({ // baseURL: 'http://192.168.8.191:8080', // baseURL: 'http://localhost:8080', @@ -27,9 +28,9 @@ const service = axios.create({ // Axios的请求拦截器,在这里添加token到请求头 axios.interceptors.request.use(config => { - const token = useTokenStore(); - if (token) { - config.headers.token = `${token}`; + const tokenStore = useTokenStore(); + if (tokenStore.token) { + config.headers.token = tokenStore.token; } return config; }, error => { @@ -37,10 +38,10 @@ axios.interceptors.request.use(config => { }); service.interceptors.request.use(config => { - const token = useTokenStore(); - if (token) { + const tokenStore = useTokenStore(); + if (tokenStore.token) { // 一般后端会约定一个请求头的字段名来接收token,常见的如 'Authorization',并要求按照一定格式传递,比如 'Bearer ',这里按照此格式添加,你需要根据后端实际要求调整 - config.headers.token = `${token}`; + config.headers.token =tokenStore.token; } return config; }, error => { @@ -58,14 +59,14 @@ service.interceptors.request.use(config => { service.interceptors.response.use(response => { return response.data; }, error =>{ - if(error.code == "500"){ + if(error.code === "500"){ ElMessage.error("服务器错误!"); } const response = error.response; - if(error.response && error.response.status == 403){ + if(error.response && error.response.status === 403){ //提示一下权限不足 ElMessage.warning(response.data.message); - } else if(response && response.status == 401){ + } else if(response && response.code === 401){ //提示一下未登录 ElMessage.warning(response.data.message); //跳转登录页面 diff --git a/work/src/router/index.js b/work/src/router/index.js index 4a399d5..fc816a0 100644 --- a/work/src/router/index.js +++ b/work/src/router/index.js @@ -1,11 +1,10 @@ import { createRouter, createWebHistory } from 'vue-router'; import HomeWork from '../views/HomeWork.vue'; import Login from '../views/Login.vue'; -import WorksShowView from '../views/WorksShowView.vue'; -import DoHomeworkView from "@/views/DoHomeworkView.vue"; import AddWork from '../views/AddWork.vue'; import WorkDetail from '../views/WorkDetail.vue'; import UpdateWork from '../views/UpdateWork.vue'; +import { useTokenStore } from '../stores/token'; const router = createRouter({ history: createWebHistory(), @@ -26,16 +25,6 @@ const router = createRouter({ component: AddWork }, { - path: '/show', - name: 'workshow', - component: WorksShowView - }, - { - path:'/doWork/:id?/:sub?', - name:'doWork', - component: DoHomeworkView - }, - { path:'/workdetail/:id', name:'workdetail', component: WorkDetail @@ -48,4 +37,17 @@ const router = createRouter({ ] }) +// 添加全局前置守卫 +router.beforeEach((to, from, next) => { + const tokenStore = useTokenStore(); + const token = tokenStore.token; + if (!token && to.name !== 'login') { + // 如果没有token且要访问的不是登录页面,就跳转到登录页面 + next({ name: 'login' }); + } else { + // 有token或者要访问的是登录页面,正常放行 + next(); + } +}); + export default router diff --git a/work/src/views/AddWork.vue b/work/src/views/AddWork.vue index 15f42c7..886a502 100644 --- a/work/src/views/AddWork.vue +++ b/work/src/views/AddWork.vue @@ -29,11 +29,11 @@ - - + @@ -41,7 +41,7 @@
添加单选 添加多选 - 添加单选填空 + 添加简答题
-
+
+
设置选项: 添加 @@ -70,6 +71,7 @@
+
删除
@@ -127,6 +129,7 @@ const form = ref({ const articleTitle = ref(''); // 问题列表数据 const questions = ref([]); + const onSubmit = () => { // 从picker中获取日期数据并进行格式转换 if (form.value.picker && form.value.picker.length === 2) { @@ -137,13 +140,29 @@ const onSubmit = () => { } form.value.Questions = questions.value; AddWorkApi.addWork(form.value) - console.log(questions.value+'--------------') + .then(res =>{ + const code = res['code']; + const message=res['message'] + if (code !== 200) { + ElMessage.error(message); + }else{ + console.log(questions.value+'--------------') + ElMessage.success('添加成功'); + router.push('/list') + } + }); } const back = () => { window.history.back() } +// const handleInputLimit = () => { +// if (form.value.Name.length > 22) { +// form.value.Name = form.value.Name.slice(0, 22); +// ElMessage.warning('作业名称不能超过22个字符'); +// } +// }; // 存储根据文章输入内容查询到的关联文章结果列表 const articleSearchResults = ref([]); @@ -152,7 +171,7 @@ const queryArticleList = async (queryString: string) => { if (form.value.LiveId) { ElMessage.warning('您已关联直播,暂无法关联文章'); articleTitle.value = ''; // 清空文章标题输入框 - form.value.LiveId = ''; + //form.value.LiveId = ''; return []; } try { @@ -182,8 +201,8 @@ const handleLiveChange = () => { if (form.value.ArticleId) { ElMessage.warning('您已关联文章,暂无法关联直播'); form.value.LiveId = ''; // 清空关联直播选择框的值 - form.value.ArticleId = ''; - articleTitle.value = ''; + //form.value.ArticleId = ''; + //articleTitle.value = ''; } }; @@ -239,19 +258,7 @@ const addBlank = () => { }); }; -// const addOption = (questionIndex) => { -// const currentQuestion = questions.value[questionIndex]; -// const currentContent = JSON.parse(currentQuestion.content); -// currentContent.push({ "id": "", "text": "" }); -// currentQuestion.content = JSON.stringify(currentContent); -// }; -// const removeOption = (questionIndex, optionIndex) => { -// const currentQuestion = questions.value[questionIndex]; -// const currentContent = JSON.parse(currentQuestion.content); -// currentContent.splice(optionIndex, 1); -// currentQuestion.content = JSON.stringify(currentContent); -// }; const addOption = (questionIndex) => { const currentQuestion = questions.value[questionIndex]; // 如果当前题目没有content属性,则初始化一个空数组 diff --git a/work/src/views/DoHomeworkView.vue b/work/src/views/DoHomeworkView.vue deleted file mode 100644 index 712894e..0000000 --- a/work/src/views/DoHomeworkView.vue +++ /dev/null @@ -1,366 +0,0 @@ - - - - - diff --git a/work/src/views/HomeWork.vue b/work/src/views/HomeWork.vue index 006112b..767b5c4 100644 --- a/work/src/views/HomeWork.vue +++ b/work/src/views/HomeWork.vue @@ -130,6 +130,11 @@ const getAssignments = (PageNo, PageSize) => { //在组件初始化时(类似mounted生命周期的效果)获取一次初始数据 onMounted(() => { getAssignments(PageNo.value, PageSize.value); + const token = useTokenStore(); + console.log(token); + console.log(token.value); + console.log(token.token) + console.log("============="); }); const newAssignment = () => { @@ -188,15 +193,17 @@ const editAssignment = async (row) => { // } //退出 -function logout(){ +const logout=async()=>{ + try { + await LoginApi.logout() + } catch (error) { + console.log(error) + } //清除登录信息 const tokenStore = useTokenStore(); const userStore = useUserStore(); tokenStore.clear(); userStore.clear(); - LoginApi.logout().then(res => { - console.log(res) - }) router.push('/') } diff --git a/work/src/views/Login.vue b/work/src/views/Login.vue index a9b93a5..45bb447 100644 --- a/work/src/views/Login.vue +++ b/work/src/views/Login.vue @@ -28,6 +28,7 @@ import LoginApi from '../api/LoginApi'; import { ElMessage } from 'element-plus'; import { useRouter } from 'vue-router'; import axios from 'axios'; +import { useTokenStore } from '../stores/token'; // 使用ref创建响应式数据 const username = ref(''); const password = ref(''); @@ -50,18 +51,14 @@ const login = async () => { if (response.code === 200) { // 获取登录成功返回的token并存储 token.value = response.data.token; - // 将token存储到localStorage中,键名为'token',你可以根据实际情况调整键名 - localStorage.setItem('token', token.value); - // 设置axios的请求拦截器,将token添加到后续请求的请求头中 - axios.interceptors.request.use(config => { - //config.headers.token = `${token.value}`; - config.headers['token'] = token.value; - return config; - }); + const tokenStore=useTokenStore(); + tokenStore.changeToken(token.value); + // const userStore=useUserStore(); + // userStore.changeUser(response.data.user); console.log(token.value); + console.log("=--------"); // 登录成功提示 ElMessage.success('登录成功'); - // 这里可以根据实际业务逻辑,比如跳转到管理后台的首页等操作 router.push('/list'); } else { @@ -72,7 +69,6 @@ const login = async () => { // 捕获接口请求过程中的其他错误,比如网络问题等 ElMessage.error('网络异常,请检查网络连接后重试'); console.error(error); - } }; diff --git a/work/src/views/UpdateWork.vue b/work/src/views/UpdateWork.vue index 524b3d2..d357d7b 100644 --- a/work/src/views/UpdateWork.vue +++ b/work/src/views/UpdateWork.vue @@ -29,11 +29,11 @@ - - @@ -42,7 +42,7 @@
添加单选 添加多选 - 添加单选填空 + 添加简答题
-
+
+
设置选项: 添加 @@ -71,6 +72,7 @@
+
删除
@@ -88,7 +90,7 @@ - - - - \ No newline at end of file diff --git a/work/vite.config.js b/work/vite.config.js index 7baeba2..f33835d 100644 --- a/work/vite.config.js +++ b/work/vite.config.js @@ -28,4 +28,4 @@ export default defineConfig({ // } } } -}) +}) \ No newline at end of file