authSession.ts 2.71 KB
import type { UsAppBoundLocationDto } from '../types/usAppBound'

const KEY_ACCESS = 'access_token'
const KEY_REFRESH = 'refresh_token'
const KEY_LOCATIONS = 'bound_locations_json'
const KEY_LOGGED = 'isLoggedIn'
const KEY_USER = 'userName'
const KEY_EMAIL = 'user_email'
const KEY_REMEMBER = 'login_remember_me'
const KEY_SAVED_EMAIL = 'login_saved_email'
const KEY_SAVED_PASSWORD = 'login_saved_password'

export function saveAuthSession(payload: {
  token: string
  refreshToken: string
  locations: UsAppBoundLocationDto[]
  /** 展示用:无姓名接口时用邮箱本地部分或全文 */
  displayName: string
  email: string
}): void {
  uni.setStorageSync(KEY_ACCESS, payload.token)
  uni.setStorageSync(KEY_REFRESH, payload.refreshToken)
  uni.setStorageSync(KEY_LOCATIONS, JSON.stringify(payload.locations ?? []))
  uni.setStorageSync(KEY_LOGGED, 'true')
  uni.setStorageSync(KEY_USER, payload.displayName)
  uni.setStorageSync(KEY_EMAIL, payload.email)
}

export function setBoundLocations(locations: UsAppBoundLocationDto[]): void {
  uni.setStorageSync(KEY_LOCATIONS, JSON.stringify(locations ?? []))
}

export function getBoundLocations(): UsAppBoundLocationDto[] {
  try {
    const raw = uni.getStorageSync(KEY_LOCATIONS)
    if (!raw || typeof raw !== 'string') return []
    const parsed = JSON.parse(raw) as unknown
    if (!Array.isArray(parsed)) return []
    return parsed as UsAppBoundLocationDto[]
  } catch {
    return []
  }
}

export function clearAuthSession(): void {
  uni.removeStorageSync(KEY_ACCESS)
  uni.removeStorageSync(KEY_REFRESH)
  uni.removeStorageSync(KEY_LOCATIONS)
  uni.removeStorageSync(KEY_LOGGED)
  uni.removeStorageSync(KEY_USER)
  uni.removeStorageSync(KEY_EMAIL)
  uni.removeStorageSync('storeId')
  uni.removeStorageSync('storeName')
  uni.removeStorageSync('storeLocationCode')
}

export function isLoggedIn(): boolean {
  return !!uni.getStorageSync(KEY_ACCESS) && uni.getStorageSync(KEY_LOGGED) === 'true'
}

export function getAccessToken(): string {
  return uni.getStorageSync(KEY_ACCESS) || ''
}

export function saveRememberPreference(remember: boolean, email: string, password: string): void {
  uni.setStorageSync(KEY_REMEMBER, remember ? '1' : '0')
  if (remember) {
    uni.setStorageSync(KEY_SAVED_EMAIL, email)
    uni.setStorageSync(KEY_SAVED_PASSWORD, password)
  } else {
    uni.removeStorageSync(KEY_SAVED_EMAIL)
    uni.removeStorageSync(KEY_SAVED_PASSWORD)
  }
}

export function loadSavedCredentials(): { email: string; password: string; remember: boolean } {
  const remember = uni.getStorageSync(KEY_REMEMBER) === '1'
  return {
    remember,
    email: remember ? (uni.getStorageSync(KEY_SAVED_EMAIL) || '') : '',
    password: remember ? (uni.getStorageSync(KEY_SAVED_PASSWORD) || '') : '',
  }
}