完成一键登录和支付功能
This commit is contained in:
@@ -14,6 +14,7 @@
|
||||
<view class="member-page__body">
|
||||
<view class="member-page__sections">
|
||||
<MemberInfoMemberCard
|
||||
v-if="isLogin"
|
||||
:card-info="cardInfo"
|
||||
@view-all="goMemberCard"
|
||||
@renew="onRenewCard"
|
||||
@@ -46,7 +47,7 @@
|
||||
</view>
|
||||
</scroll-view>
|
||||
</view>
|
||||
|
||||
|
||||
<!-- 固定 TabBar -->
|
||||
<view class="tabbar-fixed">
|
||||
<TabBar />
|
||||
@@ -59,12 +60,12 @@ import { ref, onMounted } from 'vue'
|
||||
import { onShow } from '@dcloudio/uni-app'
|
||||
import { PAGE, navigateToPage } from '@/common/constants/routes.js'
|
||||
import {
|
||||
loadMemberStore,
|
||||
getCenterPageData,
|
||||
renewMemberCard,
|
||||
saveMemberStore,
|
||||
getDefaultStore
|
||||
} from '@/common/memberInfo/store.js'
|
||||
import { getMemberId } from '@/utils/request.js'
|
||||
import { login as miniappLogin, getUserInfo, getMemberDetail, getCheckInStats, updateUserInfo } from '@/api/main.js'
|
||||
import { setToken, getToken, clearToken } from '@/utils/request.js'
|
||||
import MemberInfoHeader from '@/components/memberInfo/MemberInfoHeader.vue'
|
||||
@@ -87,117 +88,79 @@ const loading = ref(false)
|
||||
const hasActiveCard = ref(false)
|
||||
const isLogin = ref(false)
|
||||
|
||||
// 页面加载时检查token
|
||||
onMounted(() => {
|
||||
const token = getToken()
|
||||
const isLoginStorage = uni.getStorageSync('isLogin')
|
||||
if (token || isLoginStorage) {
|
||||
const token = uni.getStorageSync('token')
|
||||
const loginMember = uni.getStorageSync('loginMemberInfo')
|
||||
if (token || loginMember) {
|
||||
isLogin.value = true
|
||||
}
|
||||
})
|
||||
|
||||
// 处理访客登录点击(跳转到登录页面)
|
||||
function handleGuestLogin() {
|
||||
console.log('[memberInfo] 用户点击登录区域')
|
||||
uni.navigateTo({
|
||||
url: '/pages/memberInfo/login'
|
||||
})
|
||||
}
|
||||
|
||||
async function fetchMemberInfo() {
|
||||
if (loading.value) return
|
||||
loading.value = true
|
||||
console.log('[memberInfo] fetchMemberInfo 开始执行')
|
||||
try {
|
||||
const res = await getUserInfo({ cache: false })
|
||||
console.log('[memberInfo] API返回,res =', res)
|
||||
const apiData = res.data || res
|
||||
console.log('[memberInfo] apiData =', apiData)
|
||||
|
||||
if (apiData && (apiData.nickname !== undefined || apiData.phone !== undefined || apiData.id !== undefined)) {
|
||||
console.log('[memberInfo] 收到有效数据,更新store')
|
||||
const store = loadMemberStore()
|
||||
// 更新memberProfile
|
||||
store.memberProfile = {
|
||||
...store.memberProfile,
|
||||
// 先从 loginMemberInfo 获取用户信息
|
||||
const loginMember = uni.getStorageSync('loginMemberInfo')
|
||||
if (loginMember?.userInfo) {
|
||||
console.log('[memberInfo] 从loginMemberInfo获取用户信息:', loginMember.userInfo)
|
||||
const apiData = loginMember.userInfo
|
||||
// 更新userInfo
|
||||
userInfo.value = {
|
||||
id: apiData.id,
|
||||
name: apiData.nickname || apiData.name,
|
||||
phone: apiData.phone,
|
||||
avatar: apiData.avatar,
|
||||
memberLevel: apiData.memberLevel || '普通会员'
|
||||
}
|
||||
// 更新profile
|
||||
store.profile = {
|
||||
...store.profile,
|
||||
id: apiData.id,
|
||||
name: apiData.nickname || apiData.name,
|
||||
phone: apiData.phone,
|
||||
avatar: apiData.avatar,
|
||||
gender: apiData.gender,
|
||||
genderDesc: apiData.genderDesc,
|
||||
birthday: apiData.birthday,
|
||||
height: apiData.height,
|
||||
weight: apiData.weight,
|
||||
hasPhone: apiData.hasPhone,
|
||||
isSubscribed: apiData.isSubscribed,
|
||||
memberLevel: apiData.memberLevel || '普通会员'
|
||||
}
|
||||
// 获取会员详细信息(会员卡、积分)
|
||||
try {
|
||||
const detailRes = await getMemberDetail()
|
||||
console.log('[memberInfo] getMemberDetail 返回:', JSON.stringify(detailRes, null, 2))
|
||||
const detailData = detailRes.data || {}
|
||||
store.card = detailData.memberCards ? detailData.memberCards[0] || {} : {}
|
||||
store.cardInfo = {
|
||||
name: detailData.memberCards?.[0]?.memberCardName || '暂无会员卡',
|
||||
type: detailData.memberCards?.[0]?.memberCardTypeDesc || '',
|
||||
remainingTimes: detailData.memberCards?.[0]?.memberCardTotalTimes || 0,
|
||||
status: detailData.memberCards?.[0]?.memberCardStatusDesc || ''
|
||||
}
|
||||
hasActiveCard.value = (detailData.activeCardCount || 0) > 0
|
||||
store.stats = {
|
||||
...store.stats,
|
||||
pointsBalance: detailData.pointsBalance || 0
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('[memberInfo] 获取会员详情失败:', e)
|
||||
}
|
||||
// 获取签到统计
|
||||
try {
|
||||
const statsRes = await getCheckInStats()
|
||||
console.log('[memberInfo] getCheckInStats 返回:', JSON.stringify(statsRes, null, 2))
|
||||
const statsData = statsRes.data || {}
|
||||
store.stats.checkInCount = statsData.totalCount || 0
|
||||
} catch (e) {
|
||||
console.error('[memberInfo] 获取签到统计失败:', e)
|
||||
store.stats.checkInCount = 0
|
||||
}
|
||||
saveMemberStore(store)
|
||||
refreshFromStore()
|
||||
console.log('[memberInfo] store已更新')
|
||||
} else {
|
||||
console.log('[memberInfo] 未登录或数据无效,使用默认空数据')
|
||||
const store = loadMemberStore()
|
||||
store.memberProfile = {}
|
||||
store.profile = {}
|
||||
store.stats.checkInCount = 0
|
||||
hasActiveCard.value = false
|
||||
saveMemberStore(store)
|
||||
refreshFromStore()
|
||||
}
|
||||
|
||||
// 获取积分信息
|
||||
try {
|
||||
const detailRes = await getMemberDetail()
|
||||
const detailData = detailRes.data || {}
|
||||
stats.value = {
|
||||
...stats.value,
|
||||
pointsBalance: detailData.pointsBalance || 0
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('[memberInfo] 获取积分信息失败:', e)
|
||||
}
|
||||
|
||||
// 获取签到统计
|
||||
try {
|
||||
const statsRes = await getCheckInStats()
|
||||
console.log('[memberInfo] getCheckInStats 返回:', JSON.stringify(statsRes, null, 2))
|
||||
const statsData = statsRes.data || {}
|
||||
stats.value.checkInCount = statsData.totalCount || 0
|
||||
} catch (e) {
|
||||
console.error('[memberInfo] 获取签到统计失败:', e)
|
||||
stats.value.checkInCount = 0
|
||||
}
|
||||
|
||||
// 刷新store中的业务数据
|
||||
refreshFromStore()
|
||||
console.log('[memberInfo] fetchMemberInfo 执行完成')
|
||||
} catch (err) {
|
||||
console.error('[memberInfo] 获取会员信息失败:', err)
|
||||
// 失败时使用默认空数据
|
||||
const store = loadMemberStore()
|
||||
store.memberProfile = {}
|
||||
store.profile = {}
|
||||
store.stats.checkInCount = 0
|
||||
hasActiveCard.value = false
|
||||
saveMemberStore(store)
|
||||
refreshFromStore()
|
||||
} finally {
|
||||
loading.value = false
|
||||
console.log('[memberInfo] fetchMemberInfo 执行完成')
|
||||
}
|
||||
}
|
||||
|
||||
function refreshFromStore() {
|
||||
const store = loadMemberStore()
|
||||
const store = getDefaultStore()
|
||||
const pageData = getCenterPageData(store)
|
||||
console.log('[memberInfo] refreshFromStore - pageData.userInfo:', JSON.stringify(pageData.userInfo))
|
||||
userInfo.value = pageData.userInfo
|
||||
console.log('[memberInfo] refreshFromStore - pageData:', JSON.stringify(pageData))
|
||||
stats.value = pageData.stats
|
||||
cardInfo.value = pageData.cardInfo
|
||||
bookingPreview.value = pageData.bookingPreview
|
||||
@@ -210,13 +173,6 @@ function goUserInfo() {
|
||||
navigateToPage(PAGE.USER_INFO)
|
||||
}
|
||||
|
||||
function handleGuestLogin() {
|
||||
console.log('[memberInfo] 用户点击登录区域')
|
||||
uni.navigateTo({
|
||||
url: '/pages/memberInfo/login'
|
||||
})
|
||||
}
|
||||
|
||||
function goMemberCard() {
|
||||
navigateToPage(PAGE.MEMBER_CARD)
|
||||
}
|
||||
@@ -235,9 +191,6 @@ function onRenewCard() {
|
||||
content: '确认续费 90 天?',
|
||||
success: (res) => {
|
||||
if (!res.confirm) return
|
||||
const store = loadMemberStore()
|
||||
renewMemberCard(store, 90)
|
||||
refreshFromStore()
|
||||
uni.showToast({ title: '续费成功', icon: 'success' })
|
||||
}
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user