Files
venue-miniapp/miniprogram/src/modules/comprehensive/api/member.js
T
gqt 5487ece142 feat: 登录注册流程重构 - 登录页+完善信息页+401跳转
- 新增 profile/login.vue 登录页(UnauthLoginPanel)
- 新增 profile/setup.vue 完善信息页(头像/昵称/手机号)
- profile/index 未登录态显示头像占位+点击登录+菜单列表
- 登录后始终跳转setup页,completeLogin后才持久化token
- auth.js 登录后用pendingToken(内存),不检查profile_completed
- request.js 401时reLaunch到登录页,不显示toast,防重复跳转
- 约课页移除UnauthLoginPanel,未登录直接显示列表
- session.js 新增needsSetup状态和completeLogin方法
2026-07-13 21:09:07 +08:00

82 lines
2.2 KiB
JavaScript

import { request, uploadFile } from './request'
import { toNumber, toPageQuery, toPagination } from './mappers'
const toMember = (backendMember = {}) => ({
id: backendMember.id ?? null,
openid: backendMember.openid || '',
unionid: backendMember.unionid || '',
nickname: backendMember.nickname || '',
phone: backendMember.phone || '',
avatar_url: backendMember.avatar_url || '',
balance: backendMember.balance || '0.00',
is_active: backendMember.is_active === true,
profile_completed: backendMember.profile_completed === true,
created_at: backendMember.created_at || ''
})
const toBalance = (backendData = {}) => ({
member_id: backendData.member_id ?? null,
balance: backendData.balance || '0.00'
})
const toBalanceRecord = (backendRecord = {}) => ({
id: backendRecord.id ?? null,
amount: backendRecord.amount || '0.00',
kind: backendRecord.kind || '',
kind_label: backendRecord.kind_label || backendRecord.kind || '',
order_id: backendRecord.order_id ?? null,
remark: backendRecord.remark || '',
created_at: backendRecord.created_at || ''
})
export const memberApi = {
getMemberMe() {
return request({
url: '/api/members/me'
}).then(toMember)
},
updateMemberProfile(payload = {}) {
return request({
url: '/api/members/profile',
method: 'POST',
data: {
nickname: payload.nickname || null,
avatar_url: payload.avatar_url || null
}
}).then(toMember)
},
uploadAvatar(filePath) {
return uploadFile({
url: '/api/members/avatar',
filePath
}).then((data) => ({
avatar_url: data.avatar_url || '',
member: toMember(data.member)
}))
},
bindMemberPhone(code) {
return request({
url: '/api/members/phone/bind',
method: 'POST',
data: { code }
}).then(toMember)
},
getBalance() {
return request({
url: '/api/members/balance'
}).then(toBalance)
},
getBalanceRecords(params = {}) {
return request({
url: '/api/members/balance-records',
data: toPageQuery(params)
}).then((data) => {
const pagination = toPagination(data, toBalanceRecord)
return {
...pagination,
total: toNumber(pagination.total)
}
})
}
}