diff --git a/vue/afvue/package-lock.json b/vue/afvue/package-lock.json
index 8fdf4d9..dc1fbad 100644
--- a/vue/afvue/package-lock.json
+++ b/vue/afvue/package-lock.json
@@ -7,13 +7,17 @@
"": {
"name": "afvue",
"version": "0.0.0",
+ "license": "MIT",
"dependencies": {
"axios": "^1.11.0",
"event-source-polyfill": "^1.0.31",
"lodash": "^4.17.21",
+ "nprogress": "^0.2.0",
"pinia": "^2.0.16",
+ "store": "^2.0.12",
"vue": "^2.7.7",
- "vue-router": "^3.5.4"
+ "vue-router": "^3.5.4",
+ "vuex": "^3.1.1"
},
"devDependencies": {
"@vitejs/plugin-legacy": "^2.0.0",
@@ -706,6 +710,12 @@
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
}
},
+ "node_modules/nprogress": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmmirror.com/nprogress/-/nprogress-0.2.0.tgz",
+ "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==",
+ "license": "MIT"
+ },
"node_modules/path-parse": {
"version": "1.0.7",
"resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz",
@@ -896,6 +906,15 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/store": {
+ "version": "2.0.12",
+ "resolved": "https://registry.npmmirror.com/store/-/store-2.0.12.tgz",
+ "integrity": "sha512-eO9xlzDpXLiMr9W1nQ3Nfp9EzZieIQc10zPPMP5jsVV7bLOziSFFBP0XoDXACEIFtdI+rIz0NwWVA/QVJ8zJtw==",
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/supports-preserve-symlinks-flag": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
@@ -1033,6 +1052,15 @@
"resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-3.6.5.tgz",
"integrity": "sha512-VYXZQLtjuvKxxcshuRAwjHnciqZVoXAjTjcqBTz4rKc8qih9g9pI3hbDjmqXaHdgL3v8pV6P8Z335XvHzESxLQ==",
"license": "MIT"
+ },
+ "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==",
+ "license": "MIT",
+ "peerDependencies": {
+ "vue": "^2.0.0"
+ }
}
}
}
diff --git a/vue/afvue/package.json b/vue/afvue/package.json
index aa7ce8b..82b006b 100644
--- a/vue/afvue/package.json
+++ b/vue/afvue/package.json
@@ -12,7 +12,9 @@
"axios": "^1.11.0",
"event-source-polyfill": "^1.0.31",
"lodash": "^4.17.21",
+ "nprogress": "^0.2.0",
"pinia": "^2.0.16",
+ "store": "^2.0.12",
"vue": "^2.7.7",
"vue-router": "^3.5.4",
"vuex": "^3.1.1"
diff --git a/vue/afvue/src/App.vue b/vue/afvue/src/App.vue
index 96788ef..d3cc44c 100644
--- a/vue/afvue/src/App.vue
+++ b/vue/afvue/src/App.vue
@@ -1,7 +1,8 @@
diff --git a/vue/afvue/src/api/scinfo.js b/vue/afvue/src/api/scinfo.js
index 42b015d..5596d5e 100644
--- a/vue/afvue/src/api/scinfo.js
+++ b/vue/afvue/src/api/scinfo.js
@@ -60,3 +60,12 @@ export function SendZipFile(data){
data
})
}
+
+// 用户登录
+export function login(data){
+ return axios({
+ url: '/login',
+ method: 'POST',
+ data
+ })
+}
diff --git a/vue/afvue/src/components/LoginLayout.vue b/vue/afvue/src/components/LoginLayout.vue
new file mode 100644
index 0000000..04fc9cc
--- /dev/null
+++ b/vue/afvue/src/components/LoginLayout.vue
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/vue/afvue/src/permission.js b/vue/afvue/src/permission.js
index a41f10d..99fd221 100644
--- a/vue/afvue/src/permission.js
+++ b/vue/afvue/src/permission.js
@@ -1,6 +1,5 @@
import router from './router'
import store from './store' // 导入Vuex store
-import storage from 'store'
import NProgress from 'nprogress' // progress bar
import '@/components/nprogress.css' // progress bar style
@@ -24,7 +23,12 @@ router.beforeEach((to, from, next) => {
}
// 使用Vuex store检查登录状态
- const token = store.state.user.token || storage.get('token')
+ let token = ''
+ try {
+ token = store.state.user.token || localStorage.getItem('token')
+ } catch (e) {
+ console.error('Error reading token:', e)
+ }
// 检查登录状态
if (token) {
diff --git a/vue/afvue/src/router/index.js b/vue/afvue/src/router/index.js
index b7bca50..42e1463 100644
--- a/vue/afvue/src/router/index.js
+++ b/vue/afvue/src/router/index.js
@@ -55,6 +55,11 @@ const router = new VueRouter({
// this generates a separate chunk (About.[hash].js) for this route
// which is lazy-loaded when the route is visited.
component: () => import('../views/AboutView.vue')
+ },
+ {
+ path: '/login',
+ name: 'login',
+ component: () => import('../views/Login.vue')
}
]
})
diff --git a/vue/afvue/src/store/index.js b/vue/afvue/src/store/index.js
index f6f9fe1..0d5dcdc 100644
--- a/vue/afvue/src/store/index.js
+++ b/vue/afvue/src/store/index.js
@@ -1,7 +1,6 @@
import Vue from 'vue'
import Vuex from 'vuex'
import user from './modules/user'
-import storage from 'store'
Vue.use(Vuex)
@@ -24,9 +23,13 @@ const store = new Vuex.Store({
})
// 初始化时从localStorage恢复用户状态
-const token = storage.get('token')
-if (token) {
- store.commit('user/SET_TOKEN', token)
+try {
+ const token = localStorage.getItem('token')
+ if (token) {
+ store.commit('user/SET_TOKEN', token)
+ }
+} catch (e) {
+ console.error('Error reading token from localStorage:', e)
}
export default store
\ No newline at end of file
diff --git a/vue/afvue/src/views/Login.vue b/vue/afvue/src/views/Login.vue
index 379c35d..0a7b514 100644
--- a/vue/afvue/src/views/Login.vue
+++ b/vue/afvue/src/views/Login.vue
@@ -1,5 +1,5 @@
-