5487ece142
- 新增 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方法
82 lines
2.2 KiB
JavaScript
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)
|
|
}
|
|
})
|
|
}
|
|
}
|