登录、退出登录

This commit is contained in:
李志鹏
2026-05-21 11:04:12 +08:00
parent 6772bf0e90
commit 2346e079a1
3 changed files with 31 additions and 42 deletions

View File

@@ -30,7 +30,6 @@ export const AccountLogin = (data) => {
}) })
} }
/** /**
* 注册 * 注册
* @param data - 包含注册信息的参数 * @param data - 包含注册信息的参数

View File

@@ -5,22 +5,20 @@ import { removeLocal, setLocal } from '@/utils/local'
import MyEvent from '@/utils/myEvent' import MyEvent from '@/utils/myEvent'
export const useUserInfoStore = defineStore('userInfo', () => { export const useUserInfoStore = defineStore('userInfo', () => {
const state = ref({ const state = ref({
userInfo: {}, userInfo: {
token: '', userId: "",
generateParams: { email: "",
stylist: '', username: "",
sex: '', accessToken: "",
stylistImage: '' expiresIn: "",
} },
token: ''
}) })
// getters
const getUserInfo = computed(() => state.value.userInfo)
// actions // actions
const setUserInfo = (data: any) => { const setUserInfo = (data: any) => {
state.value.userInfo = data state.value.userInfo = data
state.value.token = data.accessToken setToken(data.accessToken)
} }
const setToken = (data: string) => { const setToken = (data: string) => {
@@ -28,44 +26,26 @@ export const useUserInfoStore = defineStore('userInfo', () => {
setLocal(data, 'token') setLocal(data, 'token')
} }
const getGenerateParams = () => { const logout = () => {
return state.value.generateParams
}
const setGenerateParams = (data: any) => {
state.value.generateParams = data
}
const resetGenerateParams = () => {
state.value.generateParams = {
stylist: '',
sex: '',
stylistImage: ''
}
}
const logOut = () => {
// 处理退出登录的一些逻辑 // 处理退出登录的一些逻辑
return new Promise((resolve) => { return new Promise((resolve) => {
state.value.userInfo = {
userId: "",
email: "",
username: "",
accessToken: "",
expiresIn: "",
}
state.value.token = '' state.value.token = ''
state.value.userInfo = {}
removeLocal('token') removeLocal('token')
resetGenerateParams()
MyEvent.emit('clear-generate-state')
MyEvent.emit('clear-client-state')
MyEvent.emit('clearAllCache')
resolve('') resolve('')
}) })
} }
return { return {
state, state,
getUserInfo,
setToken, setToken,
setUserInfo, setUserInfo,
setGenerateParams, logout
getGenerateParams,
resetGenerateParams,
logOut
} }
}) })

View File

@@ -26,13 +26,13 @@
> >
<svg-icon :name="activePath === v.path ? v.active_icon : v.icon" size="22" /> <svg-icon :name="activePath === v.path ? v.active_icon : v.icon" size="22" />
</div> </div>
<div class="login" @click="onLogin">Login</div>
<el-popover <el-popover
ref="profilePopover" ref="profilePopover"
placement="bottom-end" placement="bottom-end"
trigger="click" trigger="click"
:show-arrow="false" :show-arrow="false"
popper-style="width: 24rem; padding: 0; border-radius: 0; right: 2rem; top: 10rem;" popper-style="width: 24rem; padding: 0; border-radius: 0; right: 2rem; top: 10rem;"
v-if="userInfo.userId"
> >
<template #reference><div class="profile"></div></template> <template #reference><div class="profile"></div></template>
<template #default> <template #default>
@@ -41,7 +41,7 @@
<img src="@/assets/images/profile-content-bg.jpg" alt="" /> <img src="@/assets/images/profile-content-bg.jpg" alt="" />
<div class="content"> <div class="content">
<div class="profile"></div> <div class="profile"></div>
<div class="name">Hi, Alexandra_chen</div> <div class="name">Hi, {{ userInfo.username }}</div>
</div> </div>
</div> </div>
<div class="nav-item" @click="onMyWardrobe"> <div class="nav-item" @click="onMyWardrobe">
@@ -64,6 +64,7 @@
</div> </div>
</template> </template>
</el-popover> </el-popover>
<div class="login" @click="onLogin" v-else>Login</div>
<div class="language" @click="onLanguageClick"> <div class="language" @click="onLanguageClick">
<span :class="{ active: locale === 'CHINESE_SIMPLIFIED' }"></span> / <span :class="{ active: locale === 'CHINESE_SIMPLIFIED' }"></span> /
<span :class="{ active: locale === 'ENGLISH' }">ENG</span> <span :class="{ active: locale === 'ENGLISH' }">ENG</span>
@@ -73,13 +74,17 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ElMessageBox } from 'element-plus'
import { computed, ref } from 'vue' import { computed, ref } from 'vue'
import { useRouter, useRoute } from 'vue-router' import { useRouter, useRoute } from 'vue-router'
import myEvent from '@/utils/myEvent' import myEvent from '@/utils/myEvent'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
import { useUserInfoStore } from '@/stores/userInfo'
const { t, locale } = useI18n() const { t, locale } = useI18n()
const userInfoStore = useUserInfoStore()
const router = useRouter() const router = useRouter()
const route = useRoute() const route = useRoute()
const userInfo = computed(() => userInfoStore.state.userInfo)
const activePath = computed(() => route.path) const activePath = computed(() => route.path)
const navList1 = ref([ const navList1 = ref([
{ {
@@ -137,7 +142,12 @@
} }
const onLogout = () => { const onLogout = () => {
hideProfilePopover() hideProfilePopover()
console.log('logout') ElMessageBox.confirm('Are you sure to log off?')
.then(() => {
userInfoStore.logout()
router.go(0)
})
.catch(() => {})
} }
const onLanguageClick = () => { const onLanguageClick = () => {
locale.value = locale.value === 'ENGLISH' ? 'CHINESE_SIMPLIFIED' : 'ENGLISH' locale.value = locale.value === 'ENGLISH' ? 'CHINESE_SIMPLIFIED' : 'ENGLISH'