deviceInfo.ts 2.06 KB
export interface DeviceIdentity {
  model: string
  brand: string
  manufacturer: string
  product: string
  device: string
  platform: string
}

let cachedDeviceIdentity: DeviceIdentity | null = null

function safeText (value: unknown): string {
  return String(value || '').trim()
}

export function getDeviceIdentity (): DeviceIdentity {
  if (cachedDeviceIdentity) return cachedDeviceIdentity

  const info = (() => {
    try {
      return uni.getSystemInfoSync()
    } catch (_) {
      return {} as UniApp.GetSystemInfoResult
    }
  })()

  const identity: DeviceIdentity = {
    model: safeText((info as any).model),
    brand: safeText((info as any).brand),
    manufacturer: '',
    product: '',
    device: '',
    platform: safeText((info as any).platform),
  }

  // #ifdef APP-PLUS
  try {
    const Build = plus.android.importClass('android.os.Build')
    identity.model = safeText((Build as any).MODEL) || identity.model
    identity.brand = safeText((Build as any).BRAND) || identity.brand
    identity.manufacturer = safeText((Build as any).MANUFACTURER)
    identity.product = safeText((Build as any).PRODUCT)
    identity.device = safeText((Build as any).DEVICE)
  } catch (_) {}
  // #endif

  cachedDeviceIdentity = identity
  return identity
}

export function getDeviceFingerprint (): string {
  const identity = getDeviceIdentity()
  return [
    identity.brand,
    identity.manufacturer,
    identity.model,
    identity.product,
    identity.device,
  ]
    .filter(Boolean)
    .join(' | ')
    .toLowerCase()
}

/** Gprinter AOA 一体机(rk3568 / 型号含 AOA):走内置 UPOS/TCP,勿依赖外接蓝牙扫描 */
export function isAoaAioDevice (): boolean {
  const identity = getDeviceIdentity()
  const fingerprint = getDeviceFingerprint()
  const blob = [
    identity.model,
    identity.product,
    identity.device,
    identity.brand,
    fingerprint,
  ]
    .map((s) => String(s || '').toLowerCase())
    .join(' ')
  if (!blob.trim()) return false
  return (
    blob.includes('aoa_rk3568')
    || blob.includes('rk3568')
    || /\baoa\b/.test(blob)
  )
}