mirror of
https://github.com/algerkong/AlgerMusicPlayer.git
synced 2026-05-17 10:27:30 +08:00
feat: 优化登录功能 添加UID登录功能
This commit is contained in:
@@ -75,6 +75,7 @@ import { getUserFollowers } from '@/api/user';
|
||||
import { useUserStore } from '@/store/modules/user';
|
||||
import type { IUserFollow } from '@/type/user';
|
||||
import { getImgUrl, setAnimationClass, setAnimationDelay } from '@/utils';
|
||||
import { checkLoginStatus as checkAuthStatus } from '@/utils/auth';
|
||||
|
||||
defineOptions({
|
||||
name: 'UserFollowers'
|
||||
@@ -114,17 +115,16 @@ const checkTargetUser = () => {
|
||||
|
||||
// 检查登录状态
|
||||
const checkLoginStatus = () => {
|
||||
const token = localStorage.getItem('token');
|
||||
const userData = localStorage.getItem('user');
|
||||
const loginInfo = checkAuthStatus();
|
||||
|
||||
if (!token || !userData) {
|
||||
if (!loginInfo.isLoggedIn) {
|
||||
router.push('/login');
|
||||
return false;
|
||||
}
|
||||
|
||||
// 如果store中没有用户数据,但localStorage中有,则恢复用户数据
|
||||
if (!userStore.user && userData) {
|
||||
userStore.setUser(JSON.parse(userData));
|
||||
if (!userStore.user && loginInfo.user) {
|
||||
userStore.setUser(loginInfo.user);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
@@ -75,6 +75,7 @@ import { getUserFollows } from '@/api/user';
|
||||
import { useUserStore } from '@/store/modules/user';
|
||||
import type { IUserFollow } from '@/type/user';
|
||||
import { getImgUrl, setAnimationClass, setAnimationDelay } from '@/utils';
|
||||
import { checkLoginStatus as checkAuthStatus } from '@/utils/auth';
|
||||
|
||||
defineOptions({
|
||||
name: 'UserFollows'
|
||||
@@ -114,17 +115,16 @@ const checkTargetUser = () => {
|
||||
|
||||
// 检查登录状态
|
||||
const checkLoginStatus = () => {
|
||||
const token = localStorage.getItem('token');
|
||||
const userData = localStorage.getItem('user');
|
||||
const loginInfo = checkAuthStatus();
|
||||
|
||||
if (!token || !userData) {
|
||||
if (!loginInfo.isLoggedIn) {
|
||||
router.push('/login');
|
||||
return false;
|
||||
}
|
||||
|
||||
// 如果store中没有用户数据,但localStorage中有,则恢复用户数据
|
||||
if (!userStore.user && userData) {
|
||||
userStore.setUser(JSON.parse(userData));
|
||||
if (!userStore.user && loginInfo.user) {
|
||||
userStore.setUser(loginInfo.user);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
@@ -7,7 +7,10 @@
|
||||
:style="{ backgroundImage: `url(${getImgUrl(user.backgroundUrl)})` }"
|
||||
>
|
||||
<div class="page">
|
||||
<div class="user-name">{{ user.nickname }}</div>
|
||||
<div class="user-name">
|
||||
<span>{{ user.nickname }}</span>
|
||||
<span class="login-type">{{ t('login.title.' + currentLoginType) }}</span>
|
||||
</div>
|
||||
<div class="user-info">
|
||||
<n-avatar round :size="50" :src="getImgUrl(user.avatarUrl, '50y50')" />
|
||||
<div class="user-info-list">
|
||||
@@ -26,7 +29,6 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="uesr-signature">{{ userDetail.profile.signature }}</div>
|
||||
|
||||
<div class="play-list" :class="setAnimationClass('animate__fadeInLeft')">
|
||||
<div class="title">
|
||||
<div>{{ t('user.playlist.created') }}</div>
|
||||
@@ -119,6 +121,7 @@ import { useUserStore } from '@/store/modules/user';
|
||||
import type { Playlist } from '@/type/listDetail';
|
||||
import type { IUserDetail } from '@/type/user';
|
||||
import { getImgUrl, isElectron, isMobile, setAnimationClass, setAnimationDelay } from '@/utils';
|
||||
import { checkLoginStatus as checkAuthStatus } from '@/utils/auth';
|
||||
import LoginComponent from '@/views/login/index.vue';
|
||||
|
||||
defineOptions({
|
||||
@@ -150,17 +153,26 @@ onBeforeUnmount(() => {
|
||||
|
||||
// 检查登录状态
|
||||
const checkLoginStatus = () => {
|
||||
const token = localStorage.getItem('token');
|
||||
const userData = localStorage.getItem('user');
|
||||
// 优先使用 userStore 中的状态
|
||||
if (userStore.user && userStore.loginType) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!token || !userData) {
|
||||
// 如果 store 中没有数据,尝试从 localStorage 恢复
|
||||
const loginInfo = checkAuthStatus();
|
||||
|
||||
if (!loginInfo.isLoggedIn) {
|
||||
!isMobile.value && router.push('/login');
|
||||
return false;
|
||||
}
|
||||
|
||||
// 如果store中没有用户数据,但localStorage中有,则恢复用户数据
|
||||
if (!userStore.user && userData) {
|
||||
userStore.setUser(JSON.parse(userData));
|
||||
// 恢复用户数据和登录类型到 store
|
||||
if (!userStore.user && loginInfo.user) {
|
||||
userStore.setUser(loginInfo.user);
|
||||
}
|
||||
|
||||
if (!userStore.loginType && loginInfo.loginType) {
|
||||
userStore.setLoginType(loginInfo.loginType);
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -289,6 +301,7 @@ const handleLoginSuccess = () => {
|
||||
};
|
||||
|
||||
const isLoggedIn = computed(() => userStore.user);
|
||||
const currentLoginType = computed(() => userStore.loginType);
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@@ -314,7 +327,7 @@ const isLoggedIn = computed(() => userStore.user);
|
||||
}
|
||||
|
||||
.user-name {
|
||||
@apply text-xl font-bold mb-4;
|
||||
@apply text-xl font-bold mb-4 flex justify-between;
|
||||
@apply text-white text-opacity-70;
|
||||
}
|
||||
|
||||
@@ -414,6 +427,10 @@ const isLoggedIn = computed(() => userStore.user);
|
||||
}
|
||||
}
|
||||
|
||||
.login-type {
|
||||
@apply text-sm text-green-500 dark:text-green-400;
|
||||
}
|
||||
|
||||
.mobile {
|
||||
.user-page {
|
||||
@apply px-4;
|
||||
|
||||
Reference in New Issue
Block a user