From a8ab61169495ead066f6a02321d7895e49139a5e Mon Sep 17 00:00:00 2001
From: Cool <747682928@qq.com>
Date: Thu, 4 Jul 2024 17:41:31 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=99=BB=E5=BD=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
package-lock.json | 17 ++++-
package.json | 3 +-
src/main.js | 3 +-
src/router/index.js | 5 +-
src/router/permission.js | 22 ++++++
src/store/index.js | 26 +++++++
src/store/request.js | 55 ++++++++++++++
src/views/Login.vue | 158 ++++++++++++++++++++-------------------
src/views/User.vue | 6 +-
9 files changed, 211 insertions(+), 84 deletions(-)
create mode 100644 src/router/permission.js
create mode 100644 src/store/index.js
create mode 100644 src/store/request.js
diff --git a/package-lock.json b/package-lock.json
index 45f8104..26ab0ac 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -14,7 +14,8 @@
"element-ui": "^2.15.14",
"less-loader": "^12.2.0",
"vue": "^2.6.14",
- "vue-router": "^2.8.1"
+ "vue-router": "^2.8.1",
+ "vuex": "^3.6.2"
},
"devDependencies": {
"@babel/core": "^7.12.16",
@@ -10895,6 +10896,14 @@
"prettier": "^1.18.2 || ^2.0.0"
}
},
+ "node_modules/vuex": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmmirror.com/vuex/-/vuex-3.6.2.tgz",
+ "integrity": "sha512-ETW44IqCgBpVomy520DT5jf8n0zoCac+sxWnn+hMe/CzaSejb/eVw2YToiXYX+Ex/AuHHia28vWTq4goAexFbw==",
+ "peerDependencies": {
+ "vue": "^2.0.0"
+ }
+ },
"node_modules/watchpack": {
"version": "2.4.1",
"resolved": "https://registry.npmmirror.com/watchpack/-/watchpack-2.4.1.tgz",
@@ -20009,6 +20018,12 @@
"integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==",
"dev": true
},
+ "vuex": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmmirror.com/vuex/-/vuex-3.6.2.tgz",
+ "integrity": "sha512-ETW44IqCgBpVomy520DT5jf8n0zoCac+sxWnn+hMe/CzaSejb/eVw2YToiXYX+Ex/AuHHia28vWTq4goAexFbw==",
+ "requires": {}
+ },
"watchpack": {
"version": "2.4.1",
"resolved": "https://registry.npmmirror.com/watchpack/-/watchpack-2.4.1.tgz",
diff --git a/package.json b/package.json
index 29e37d2..8ad2c7e 100644
--- a/package.json
+++ b/package.json
@@ -14,7 +14,8 @@
"element-ui": "^2.15.14",
"less-loader": "^12.2.0",
"vue": "^2.6.14",
- "vue-router": "^2.8.1"
+ "vue-router": "^2.8.1",
+ "vuex": "^3.6.2"
},
"devDependencies": {
"@babel/core": "^7.12.16",
diff --git a/src/main.js b/src/main.js
index bb5a82a..e892f37 100644
--- a/src/main.js
+++ b/src/main.js
@@ -1,7 +1,7 @@
import Vue from 'vue'
import App from './App.vue'
import router from './router';
-
+import store from './store'; // 导入你配置好的store
Vue.config.productionTip = false
// 注册element-ui
import ElementUI from 'element-ui';
@@ -10,6 +10,7 @@ Vue.use(ElementUI);
new Vue({
+ store,
router,
render: h => h(App),
}).$mount('#app')
diff --git a/src/router/index.js b/src/router/index.js
index a8b32fb..4e086e6 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -15,7 +15,10 @@ const routes = [
{
path: 'user',
name: 'User',
- component: User
+ component: User,
+ meta: {
+ isLogin: true
+ },
},
{
path: 'login',
diff --git a/src/router/permission.js b/src/router/permission.js
new file mode 100644
index 0000000..daf098c
--- /dev/null
+++ b/src/router/permission.js
@@ -0,0 +1,22 @@
+import router from "./index";
+//路由守护
+router.beforeEach((to, from, next) => {
+ if (to.meta.isLogin) {
+ if (to.path === '/login') {
+ next()
+ }
+ else {
+ var tokenStr = window.localStorage.getItem('token')
+
+ if (!tokenStr) {
+ return next('/login')
+ }
+ else {
+ next()
+ }
+ }
+ }
+ else {
+ next();
+ }
+})
\ No newline at end of file
diff --git a/src/store/index.js b/src/store/index.js
new file mode 100644
index 0000000..81d7fc4
--- /dev/null
+++ b/src/store/index.js
@@ -0,0 +1,26 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+
+Vue.use(Vuex)
+
+export default new Vuex.Store({
+ state: {
+ token: localStorage.getItem('token') ? localStorage.getItem('token') : 'abc'
+ },
+ getters: {
+ },
+ mutations: {
+ setToken(state, token) {
+ state.token = token
+ localStorage.setItem("token", token)//存储token
+ },
+ delToken(state) {
+ state.token = ''
+ localStorage.removeItem("token")//删除token
+ }
+ },
+ actions: {
+ },
+ modules: {
+ }
+})
diff --git a/src/store/request.js b/src/store/request.js
new file mode 100644
index 0000000..ac251c4
--- /dev/null
+++ b/src/store/request.js
@@ -0,0 +1,55 @@
+import router from "@/router";
+import axios from "axios";
+import { Message } from "element-ui";
+
+//创建axios实例
+const axiosInstance = axios.create({
+ // baseURL: 'http://119.29.254.99:8887', // 设置默认发送地址为后端端口
+ baseURL: 'http://localhost:8081',
+});
+
+//添加拦截器,在每次ajax之前都会执行这个操作
+axiosInstance.interceptors.request.use(function (config) {
+ //从本地缓存获得token
+ const token = window.localStorage.getItem('token')
+
+ //如果存在将其加入请求头中
+ if (token) {
+ config.headers.token = token;
+ }
+ return config;
+}, function (error) {
+
+
+ return Promise.reject(error);//发生错误返回一个拒绝的promise对象
+})
+
+axiosInstance.interceptors.response.use(function (response) {
+ return response
+},
+ function (error) {
+ if (error.response.status === 401) {
+ router.push({ path: "/login" }, () => { }, () => { })
+ var msg = "登录超时,请重新登录"
+ Message({
+ message: msg,
+ type: 'error',
+ duration: 3000
+ })
+ localStorage.removeItem('token')
+ }
+ else if (error.response.status === 402) {
+ router.push({ path: "/login" });
+ }
+ else if (error.response.status === 500) {
+ var msg1 = '出现未知错误'
+ Message({
+ message: msg1,
+ type: 'error',
+ duration: 3000
+ })
+ }
+ }
+)
+
+export default axiosInstance;
\ No newline at end of file
diff --git a/src/views/Login.vue b/src/views/Login.vue
index 8b7c493..402e933 100644
--- a/src/views/Login.vue
+++ b/src/views/Login.vue
@@ -24,7 +24,7 @@
-
+
@@ -34,13 +34,13 @@
-
+
注册
@@ -52,7 +52,7 @@