Skip to content

Commit c51b352

Browse files
添加登录状态
1 parent 05b961a commit c51b352

File tree

9 files changed

+1217
-78
lines changed

9 files changed

+1217
-78
lines changed

package-lock.json

Lines changed: 1096 additions & 51 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
"dependencies": {
1414
"axios": "^1.7.8",
1515
"pinia": "^2.2.6",
16+
"pinia-plugin-persistedstate": "^4.1.3",
1617
"vue": "^3.5.13",
1718
"vue-router": "^4.4.5",
1819
"vuetify": "^3.7.5"

src/api/login.ts

Lines changed: 0 additions & 11 deletions
This file was deleted.

src/api/login/api.ts

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
import request from '@/util/request';
2+
3+
// 登录
4+
export async function login(code:string,email:string):Promise<any>{
5+
try {
6+
const response = await request({
7+
url: '/user/login',
8+
method: "post",
9+
params: {
10+
code:code,
11+
email:email
12+
}
13+
})
14+
return response;
15+
} catch (error) {
16+
console.error('登录请求失败:', error);
17+
}
18+
}
19+
// 登出
20+
export async function logout(code:string,email:string):Promise<any>{
21+
try {
22+
const response = await request({
23+
url: '/user/logout',
24+
method: "post",
25+
})
26+
return response;
27+
} catch (error) {
28+
console.error('登出请求失败:', error);
29+
}
30+
}
31+
// 发送图片验证码
32+
export async function captcha():Promise<any>{
33+
try {
34+
const response = await request({
35+
url: '/user/captcha',
36+
method: "get",
37+
})
38+
return response;
39+
} catch (error) {
40+
console.error('发送图片验证码请求失败:', error);
41+
}
42+
}
43+
// 发送邮箱验证码
44+
export async function sendCaptcha(email:string,pid:string,code:string):Promise<any>{
45+
try {
46+
const response = await request({
47+
url: '/user/sendCaptcha',
48+
method: "get",
49+
data:{
50+
email: email,
51+
pid:pid,
52+
code:code
53+
}
54+
})
55+
return response;
56+
} catch (error) {
57+
console.error('发送邮箱验证码请求失败:', error);
58+
}
59+
}
60+
// 获取当前登录用户信息
61+
export async function getInfo(code:string,email:string):Promise<any>{
62+
try {
63+
const response = await request({
64+
url: '/user/getInfo',
65+
method: "get",
66+
})
67+
return response;
68+
} catch (error) {
69+
console.error('获取用户信息请求失败:', error);
70+
}
71+
}

src/api/login/type.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
export interface UserInfo {
2+
id: string;
3+
name: string;
4+
avatar: string;
5+
}

src/main.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
import './assets/main.css'
22

33
import { createApp } from 'vue'
4-
import { createPinia } from 'pinia'
5-
64
import App from './App.vue'
75
import router from './router'
86

@@ -15,10 +13,15 @@ const vuetify = createVuetify({
1513
components:{VSnackbar},
1614
directives:{}
1715
})
16+
// Pinia
17+
import { createPinia } from 'pinia'
18+
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate';
19+
const pinia = createPinia();
20+
pinia.use(piniaPluginPersistedstate);
1821

1922
const app = createApp(App)
2023

21-
app.use(createPinia())
24+
app.use(pinia)
2225
app.use(router)
2326
app.use(vuetify)
2427

src/stores/authStore.ts

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { defineStore } from "pinia";
2+
3+
import router from "@/router";
4+
import type {UserInfo} from "@/api/login/type.ts";
5+
6+
export const useAuthStore = defineStore("auth", {
7+
state: () => ({
8+
isLoggedIn: false,
9+
user: null as UserInfo | null
10+
}),
11+
12+
persist: {
13+
enabled: true,
14+
strategies: [{ storage: localStorage, paths: ["isLoggedIn"] }],
15+
},
16+
17+
getters: {},
18+
19+
actions: {
20+
setLoggedIn(user: UserInfo) {
21+
this.isLoggedIn = true;
22+
this.user = user;
23+
router.push("/");
24+
},
25+
26+
logout() {
27+
this.isLoggedIn = false;
28+
router.push("/");
29+
},
30+
},
31+
});

src/stores/counter.ts

Lines changed: 0 additions & 12 deletions
This file was deleted.

src/views/home/index.vue

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import Text from "@/components/normal/Text.vue";
55
import router from "@/router";
66
import Snackbar from "@/components/normal/Snackbar.vue";
77
8+
// 导航栏
89
const currentIndex = ref(0)
910
const tabs = [
1011
{ name: 'market', component: MarketView },
@@ -13,6 +14,10 @@ const tabs = [
1314
const selectTab = (index: any) =>{
1415
currentIndex.value = index;
1516
}
17+
18+
// 登陆状态
19+
import { useAuthStore } from "@/stores/authStore.ts";
20+
const authStore = useAuthStore();
1621
</script>
1722

1823
<template>
@@ -34,7 +39,8 @@ const selectTab = (index: any) =>{
3439
</div>
3540
</nav>
3641
<nav class="side flex">
37-
<button @click="router.push('/login')">login</button>
42+
<button v-if="!authStore.isLoggedIn" @click="router.push('/login')">login</button>
43+
<button v-else @click="router.push('/personal')">头像</button>
3844
</nav>
3945
</header>
4046
<div class="tabs-content">

0 commit comments

Comments
 (0)