import Taro from '@tarojs/taro' /** 当前登录用户信息在 Storage 中的 key */ export const USER_KEY = 'smart_user_info' /** 当前激活 openid 在 Storage 中的 key */ export const ACTIVE_USER_KEY = 'smart_active_openid' /** 判断 openid 是否为历史版仅前端 mock 残留(形如 mock_xxx)。 * 本地后端 WX_MOCK_LOGIN=1 返回 mock-xxx,属于可校验的联调用户,不能清除其 token。 */ export function isMockOpenid(openid?: string | null): boolean { return !!openid && openid.startsWith('mock_') } /** 取当前用户 openid;没有登录态时回退 _guest_ 并缓存 */ function getActiveOpenid(): string { let user: any = null try { user = Taro.getStorageSync(USER_KEY) } catch { user = null } const openid = user?.openid || Taro.getStorageSync(ACTIVE_USER_KEY) || '_guest_' Taro.setStorageSync(ACTIVE_USER_KEY, openid) return openid } /** 按当前用户生成作用域 storage key */ export function key(scope: string): string { const prefix = getActiveOpenid() return `${scope}_${prefix}` } /** 按指定 openid 生成作用域 storage key */ export function keyFor(scope: string, openid: string): string { return `${scope}_${openid}` }