// 登录态与微信登录封装 import { TOKEN_KEY, MEMBER_KEY } from '@/utils/config' import { login as loginApi } from '@/api/mall' export function getToken() { return uni.getStorageSync(TOKEN_KEY) || '' } export function setToken(token) { if (token) uni.setStorageSync(TOKEN_KEY, token) } export function getMember() { return uni.getStorageSync(MEMBER_KEY) || null } export function setMember(member) { if (member) uni.setStorageSync(MEMBER_KEY, member) } export function clearAuth() { uni.removeStorageSync(TOKEN_KEY) uni.removeStorageSync(MEMBER_KEY) } export function isLogin() { return !!getToken() } /** * 微信登录:uni.login 拿 code → 调后端 Login → 存 token 与 member * @param {Object} profile 可选 { nickName, avatar } * @returns {Promise} 登录结果 { token, member } */ export function wechatLogin(profile = {}) { return new Promise((resolve, reject) => { uni.login({ provider: 'weixin', success: (res) => { if (!res || !res.code) { reject(new Error('微信登录失败:未获取到 code')) return } const payload = { code: res.code } if (profile.nickName) payload.nickName = profile.nickName if (profile.avatar) payload.avatar = profile.avatar loginApi(payload) .then((data) => { if (data && data.token) { setToken(data.token) if (data.member) setMember(data.member) } resolve(data) }) .catch(reject) }, fail: (err) => reject(err) }) }) } /** * 确保已登录:已有 token 直接返回;否则静默微信登录 * @returns {Promise} */ export function ensureLogin() { if (isLogin()) { return Promise.resolve({ token: getToken(), member: getMember() }) } return wechatLogin() }