+
+
+ 租客成长等级
+ {{ session.renterGrowthLevelName }}
+
+
+ 当前积分
+ {{ session.renterGrowthPoints }}
+
+
+
div {
+ display: grid;
+ gap: 5px;
+ min-width: 0;
+ min-height: 62px;
+ padding: 11px 12px;
+ border-radius: 12px;
+ background: #f8fafc;
+}
+
+.dropdown-growth-panel span {
+ color: #8b9cb5;
+ font-size: 12px;
+ font-weight: 800;
+}
+
+.dropdown-growth-panel strong {
+ min-width: 0;
+ overflow: hidden;
+ color: #7c3aed;
+ font-size: 18px;
+ font-weight: 900;
+ line-height: 1.2;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
.dropdown-status {
display: inline-flex;
align-items: center;
@@ -989,6 +1084,10 @@ async function handleSupportClick() {
}
@media (max-width: 1280px) {
+ .pc-growth-badge {
+ display: none;
+ }
+
.pc-realname-badge {
display: none;
}
diff --git a/frontend/src/stores/session.ts b/frontend/src/stores/session.ts
index 050e70b..2609478 100644
--- a/frontend/src/stores/session.ts
+++ b/frontend/src/stores/session.ts
@@ -9,6 +9,16 @@ import {
} from '@/shared/utils/authStorage'
import { loginWithPassword, registerWithPassword } from '@/features/auth/api/auth'
+function renterGrowthLevelName(level: string) {
+ const map: Record = {
+ normal: '普通',
+ platinum: '铂金',
+ diamond: '钻石',
+ peak: '巅峰',
+ }
+ return map[level] || '普通'
+}
+
export const useSessionStore = defineStore('session', {
state: () => ({
token: getAccessToken('user'),
@@ -18,6 +28,8 @@ export const useSessionStore = defineStore('session', {
nickname: localStorage.getItem('nickname') || '',
avatarUrl: localStorage.getItem('avatar_url') || '',
realnameStatus: localStorage.getItem('realname_status') || 'unknown',
+ renterGrowthPoints: Number(localStorage.getItem('renter_growth_points') || 0),
+ renterGrowthLevel: localStorage.getItem('renter_growth_level') || 'normal',
_loadingMe: false, // 防止重复调用
}),
getters: {
@@ -25,6 +37,7 @@ export const useSessionStore = defineStore('session', {
displayName: state =>
state.nickname || (state.phone ? `用户${state.phone.slice(-6)}` : `用户${state.userId || 0}`),
avatarText: state => (state.nickname || state.phone || 'U').slice(0, 1),
+ renterGrowthLevelName: state => renterGrowthLevelName(state.renterGrowthLevel),
},
actions: {
async login(phone: string, code: string) {
@@ -78,6 +91,8 @@ export const useSessionStore = defineStore('session', {
this.nickname = ''
this.avatarUrl = ''
this.realnameStatus = 'unknown'
+ this.renterGrowthPoints = 0
+ this.renterGrowthLevel = 'normal'
clearAuthStorage('user')
},
syncFromStorage() {
@@ -88,6 +103,8 @@ export const useSessionStore = defineStore('session', {
this.nickname = localStorage.getItem('nickname') || ''
this.avatarUrl = localStorage.getItem('avatar_url') || ''
this.realnameStatus = localStorage.getItem('realname_status') || 'unknown'
+ this.renterGrowthPoints = Number(localStorage.getItem('renter_growth_points') || 0)
+ this.renterGrowthLevel = localStorage.getItem('renter_growth_level') || 'normal'
},
applySession(user: AuthUser, accessToken: string, refreshToken: string) {
this.token = accessToken
@@ -111,6 +128,10 @@ export const useSessionStore = defineStore('session', {
localStorage.setItem('avatar_url', user.avatar_url)
this.realnameStatus = user.realname_status
localStorage.setItem('realname_status', user.realname_status)
+ this.renterGrowthPoints = Number(user.renter_growth_points || 0)
+ localStorage.setItem('renter_growth_points', String(this.renterGrowthPoints))
+ this.renterGrowthLevel = user.renter_growth_level || 'normal'
+ localStorage.setItem('renter_growth_level', this.renterGrowthLevel)
},
},
})