import {
|
GUIDE_LOGIN_KEY,
|
GUIDE_ORDERS_KEY,
|
GUIDE_SELECTED_BANK_KEY,
|
GUIDE_SELECTED_BRANCH_KEY,
|
guideProfile
|
} from '../constants/mock'
|
import { request } from '../utils/request'
|
import { initializePush } from './push'
|
|
const GUIDE_PHONE_CHANGE_STATE_KEY = 'mingdao_guide_phone_change_state'
|
|
export function getLoginState() {
|
const state = uni.getStorageSync(GUIDE_LOGIN_KEY) || null
|
if (state && state.expiresAt && Number(state.expiresAt) <= Date.now()) {
|
clearGuideLocalData()
|
return null
|
}
|
return state
|
}
|
|
export function isLoggedIn() {
|
const state = getLoginState()
|
return Boolean(state && state.token)
|
}
|
|
function resolveAuditStatus(status) {
|
if (status === 1) return 'approved'
|
if (status === 2) return 'pending'
|
if (status === 0) return 'disabled'
|
return 'pending'
|
}
|
|
export function loginByPhone({ phone, code }) {
|
if (!phone || !code) {
|
return Promise.reject(new Error('请输入手机号和验证码'))
|
}
|
return request({
|
url: '/guide/auth/login',
|
method: 'POST',
|
authenticated: false,
|
data: { phone, code }
|
}).then((auth) => {
|
const user = auth.user || {}
|
const expiresIn = Number(auth.expiresIn)
|
clearGuideLocalData()
|
const state = {
|
token: auth.token,
|
expiresIn: auth.expiresIn,
|
expiresAt: Number.isFinite(expiresIn) && expiresIn > 0
|
? Date.now() + expiresIn * 1000
|
: null,
|
guide: {
|
...guideProfile,
|
id: user.id,
|
name: user.realName || user.username || guideProfile.name,
|
phone: user.mobile || phone,
|
avatar: user.avatar || guideProfile.avatar,
|
rating: Number(user.rating || 0),
|
orderCount: user.acceptedOrderCount || 0,
|
auditStatus: resolveAuditStatus(user.status),
|
onlineStatus: 'offline',
|
groupName: user.teamName || (user.teamType === '个人' ? '个人导游' : guideProfile.groupName)
|
}
|
}
|
uni.setStorageSync(GUIDE_LOGIN_KEY, state)
|
initializePush()
|
return state
|
})
|
}
|
|
export function sendLoginCode(phone) {
|
return request({
|
url: '/guide/auth/sms-code',
|
method: 'POST',
|
authenticated: false,
|
data: { phone, scene: 'login' }
|
})
|
}
|
|
export function logout() {
|
const state = getLoginState()
|
if (!state || !state.token) {
|
clearGuideLocalData()
|
return Promise.resolve()
|
}
|
return request({ url: '/guide/push-device', method: 'DELETE' })
|
.catch(() => undefined)
|
.then(() => request({ url: '/guide/auth/logout', method: 'POST' }))
|
.finally(() => clearGuideLocalData())
|
}
|
|
export function cancelAccount() {
|
return request({ url: '/guide/push-device', method: 'DELETE' })
|
.catch(() => undefined)
|
.then(() => request({ url: '/guide/auth/account', method: 'DELETE' }))
|
.then((result) => {
|
clearGuideLocalData()
|
return result
|
})
|
}
|
|
export function clearGuideLocalData() {
|
[
|
GUIDE_LOGIN_KEY,
|
GUIDE_ORDERS_KEY,
|
GUIDE_SELECTED_BANK_KEY,
|
GUIDE_SELECTED_BRANCH_KEY,
|
GUIDE_PHONE_CHANGE_STATE_KEY
|
].forEach((key) => uni.removeStorageSync(key))
|
}
|