diff --git a/package.json b/package.json index 58eeddb..61a0d84 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,11 @@ "build": "vite build", "serve": "vite preview" }, - "keywords": ["vue", "meida", "fashion"], + "keywords": [ + "vue", + "meida", + "fashion" + ], "author": "", "license": "ISC", "dependencies": { @@ -16,6 +20,7 @@ "axios": "^1.8.4", "vite": "^6.3.0", "vue": "^3.5.13", - "vue-router": "^4.5.0" + "vue-router": "^4.5.0", + "vuex": "^4.1.0" } } diff --git a/src/main.js b/src/main.js index 4d066c3..3d8f68e 100644 --- a/src/main.js +++ b/src/main.js @@ -1,9 +1,11 @@ import { createApp } from 'vue' import App from './App.vue' import router from './router' +import store from './store' import './assets/main.css' const app = createApp(App) app.use(router) +app.use(store) app.mount('#app') \ No newline at end of file diff --git a/src/router/index.js b/src/router/index.js index 0a37891..548ef74 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -1,5 +1,6 @@ import { createRouter, createWebHistory } from 'vue-router' import Home from '../views/Home.vue' +import store from '../store' const routes = [ { @@ -7,10 +8,23 @@ const routes = [ name: 'home', component: Home }, + { + path: '/password', + name: 'password', + component: () => import('../views/PasswordProtection.vue') + }, { path: '/tryon-history', name: 'tryon-history', - component: () => import('../views/TryonHistory.vue') + component: () => import('../views/TryonHistory.vue'), + meta: { requiresAuth: true }, + beforeEnter: (to, from, next) => { + if (store.getters.isAuthenticated) { + next() + } else { + next('/password') + } + } } ] diff --git a/src/store/index.js b/src/store/index.js new file mode 100644 index 0000000..1ce9cd7 --- /dev/null +++ b/src/store/index.js @@ -0,0 +1,30 @@ +import { createStore } from 'vuex' + +const store = createStore({ + state: { + isAuthenticated: false + }, + mutations: { + setAuthenticated(state, value) { + state.isAuthenticated = value + } + }, + actions: { + authenticate({ commit }, password) { + return new Promise((resolve, reject) => { + if (password === '147258') { + commit('setAuthenticated', true) + resolve(true) + } else { + commit('setAuthenticated', false) + reject(new Error('密码错误')) + } + }) + } + }, + getters: { + isAuthenticated: state => state.isAuthenticated + } +}) + +export default store \ No newline at end of file diff --git a/src/views/Home.vue b/src/views/Home.vue index 4657705..a451b49 100644 --- a/src/views/Home.vue +++ b/src/views/Home.vue @@ -3,7 +3,7 @@

欢迎使用美搭

您的个人时尚穿搭助手

- 查看穿搭历史 + 查看穿搭历史
diff --git a/src/views/PasswordProtection.vue b/src/views/PasswordProtection.vue new file mode 100644 index 0000000..e70ad10 --- /dev/null +++ b/src/views/PasswordProtection.vue @@ -0,0 +1,115 @@ + + + + + \ No newline at end of file diff --git a/src/views/TryonHistory.vue b/src/views/TryonHistory.vue index cb76fb0..b6af9a9 100644 --- a/src/views/TryonHistory.vue +++ b/src/views/TryonHistory.vue @@ -1,5 +1,5 @@