From 9afd63088584dcd59dd1ec6935206dae3e0ecacf Mon Sep 17 00:00:00 2001 From: xc Date: Tue, 18 Nov 2025 15:06:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=95=E5=85=A5=E7=99=BB=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vue/afvue/package-lock.json | 30 ++- vue/afvue/package.json | 2 + vue/afvue/src/App.vue | 9 +- vue/afvue/src/api/scinfo.js | 9 + vue/afvue/src/components/LoginLayout.vue | 28 ++ vue/afvue/src/permission.js | 8 +- vue/afvue/src/router/index.js | 5 + vue/afvue/src/store/index.js | 11 +- vue/afvue/src/views/Login.vue | 16 +- vue/afvue/yarn.lock | 326 ++++++++--------------- 10 files changed, 211 insertions(+), 233 deletions(-) create mode 100644 vue/afvue/src/components/LoginLayout.vue 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 @@