一、VUE3+CSS+VITE+C(工程创建与登录,退出实现, 本地存储localStorage)

1、创建vite项目

npm create vite@latest txwd_vue --template vue

选项如下:

b8bd1b45-0991-484f-b285-1eb25af29726

 2、运行测试

dcef1f77-e1e1-4962-a840-a2a4dbfbd59a

 

3、安装必要的依赖

 #vue路由和状态管理

npm install vue-router@4 pinia

#可选:UI组件库(如Element Plus)简化样式开发

npm install elements-plus

45ae936b-3f4d-4db9-96f6-e55145b589fc

 

4、项目结构

plaintext
  src/
├── router/           # 路由配置
│   └── index.js
├── stores/           # 状态管理
│   └── user.js       # 用户登录状态
├── views/            # 页面组件
│   ├── LoginView.vue     # 登录页
│   └── HomeView.vue      # 首页(登录后访问)
├── App.vue           # 根组件
└── main.js           # 入口文件

5. 配置路由(src/router/index.js

 1 import {createRouter, createWebHistory} from 'vue-router'
 2 import LoginView from '../views/LoginView.vue'
 3 import HomeView from '../views/HomeView.vue'
 4 import {useUserStore} from '../stores/user'
 5 
 6 //路由守卫:未登录禁止访问首页
 7 const requireAuth = (to, from, next) => {
 8     const userStore = useUserStore()
 9     if(userStore.isLogin)
10     {
11         next();
12     }
13     else
14     {
15         next('/login')
16     }
17 }
18 
19 const routes = [
20     {
21         path:'/login',
22         component:LoginView
23     },
24     {
25         path:'/',
26         component:HomeView,
27         beforeEnter:requireAuth
28     },
29     {
30         //404重定向
31         path:'/:pathMath(.*)',
32         redirect:'/login'
33     }
34 ]
35 
36 const router = createRouter({
37     history:createWebHistory(),
38     routes
39 })
40 
41 export default router
View Code

6. 用户状态管理(src/stores/user.js

 1 import {defineStore} from 'pinia'
 2 
 3 export const useUserStore = defineStore('user', {
 4     state:() => ({
 5         isLogin:false,
 6         userInfo:null
 7     }),
 8     actions:{
 9         //模拟登录
10         login(userName, password)
11         {
12             //实际项目中替换为接口请求
13             if('admin' === userName && '123' === password)
14             {   
15                 this.isLogin = true
16                 this.userInfo = {userName}
17                 localStorage.setItem('user', JSON.stringify(this.userInfo)) //持久化存储
18                 return true
19             }
20             return false
21         },
22         // 退出登录
23         logout() {
24             this.isLogin = false
25             this.userInfo = null
26             localStorage.removeItem('user')
27         },
28         //初始化:从本地存储恢复状态
29         init(){
30             const user = localStorage.getItem('user')
31             if(user)
32             {
33                 this.isLogin = true
34                 this.userInfo = JSON.parse(user)
35             }
36         }
37     }
38 })
View Code

7. 登录页面(src/views/LoginView.vue

 1 <template>
 2     <div class="login-container">
 3         <h2>登录</h2>
 4         <form @submit.prevent="handleLogin">
 5             <div class="form-group">
 6                 <label>用户名</label>
 7                 <input type="text" v-model="userName" required placeholder="请输入用户名">
 8             </div>
 9             <div class="form-group">
10                 <label>密码</label>
11                 <input type="password" v-model="password" required placeholder="请输入密码">
12             </div>
13             <button type="submit">登录</button>
14             <p v-if="errorMsg" class="error">{{ errorMsg }}</p>
15         </form>
16     </div>
17 </template>
18 
19 <script setup>
20 import { ref } from "vue"
21 import { useRouter } from "vue-router"
22 import { useUserStore } from "../stores/user"
23 
24 const userName = ref('')
25 const password = ref('')
26 const errorMsg = ref('')
27 const router = useRouter()
28 const userStore = useUserStore()
29 
30 const handleLogin = () => {
31     const success = userStore.login(userName.value, password.value)
32     if(success)
33     {
34         router.push('/') //登录成功首页
35     }
36     else
37     {
38         errorMsg.value = '用户名或密码错误'
39     }
40 }
41 </script>
42 
43 <style scoped>
44     .login-container {
45         width: 300px;
46         margin: 100px auto;
47         padding: 20px;
48         border: 1px solid #ccc;
49         border-radius: 8px;
50     }
51     .form-group{
52         margin-bottom: 15px;
53     }
54     input{
55         width: 100%;
56         padding: 8px;
57         margin-top: 5px;
58     }
59     button{
60         width: 100%;
61         padding: 10px;
62         background: #42b983;
63         color: white;
64         border: none;
65         border-radius: 4px;
66         cursor: pointer;
67     }
68     .error{
69         color: red;
70         margin-top: 0.9em;
71         font-size: 0.9em;
72     }
73 </style>
View Code

8. 首页(src/views/HomeView.vue

 1 <template>
 2     <div class="home">
 3         <h2>欢迎回来,{{ useUserStore.userInfo?.userName}}</h2>
 4         <button @click="handleLogout">退出登录</button>
 5     </div>
 6 </template>
 7 
 8 <script setup>
 9 import { useRouter } from "vue-router"
10 import { useUserStore } from "../stores/user"
11 
12 const userStore = useUserStore()
13 const router = useRouter()
14 
15 const handleLogout = () => {
16     userStore.logout()
17     alert("logout then login")
18     router.push('/login')
19 }
20 </script>
21 
22 <style scoped>
23     .home{
24         text-align: center;
25         margin-top: 50px;
26     }
27     button{
28         padding: 8px 16px;
29         background: #ff4444;
30         color: white;
31         border: none;
32         border-radius: 4px;
33         cursor: pointer;
34     }
35 </style>
View Code

9. 根组件和入口文件(App.vue)

 1 <template>
 2   <div>
 3     <!--
 4     <a href="https://vite.dev" target="_blank">
 5       <img src="/vite.svg" class="logo" alt="Vite logo" />
 6     </a>
 7     <a href="https://vuejs.org/" target="_blank">
 8       <img src="./assets/vue.svg" class="logo vue" alt="Vue logo" />
 9     </a>
10     -->
11     <router-view></router-view>
12   </div>
13 </template>
14 
15 <style scoped>
16 </style>
View Code

10. 运行项目

访问 http://localhost:5173 即可看到登录页面,使用 admin/123 登录后可进入首页。

功能说明

  1. 登录验证:前端模拟用户名密码校验(实际项目需替换为接口请求)
  2. 路由守卫:未登录用户无法访问首页,会被重定向到登录页
  3. 状态持久化:登录状态保存在 localStorage,刷新页面不会丢失
  4. 退出功能:清除登录状态并跳转回登录页
 
 

 

posted @ 2025-10-28 16:35  tianxincode  阅读(5)  评论(0)    收藏  举报