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)) }