import { defineAsyncApi, defineSyncApi } from '@dcloudio/uni-api' import deviceId from '../../../helpers/uuid' import { extend } from '@vue/shared' import { getWindowInfo } from './getWindowInfo' let systemInfo: any let _initSystemInfo = true function weexGetSystemInfoSync() { if (!_initSystemInfo) return const { getSystemInfoSync } = weex.requireModule('plus') systemInfo = getSystemInfoSync() } export const getDeviceInfo = defineSyncApi( 'getDeviceInfo', () => { weexGetSystemInfoSync() const { deviceBrand, deviceModel, osName, osVersion } = systemInfo const brand = deviceBrand.toLowerCase() return { deviceBrand: brand, deviceModel, brand, model: deviceModel, system: `${osName === 'ios' ? 'iOS' : 'Android'} ${osVersion}`, platform: osName, } } ) export const getAppBaseInfo = defineSyncApi( 'getAppBaseInfo', () => { weexGetSystemInfoSync() const { hostPackageName, hostName, osLanguage, hostVersion, hostLanguage, hostTheme, appId, appName, appVersion, appVersionCode, } = systemInfo return { SDKVersion: '', hostSDKVersion: '', enableDebug: false, appId, appName, appVersion, appVersionCode, appLanguage: uni.getLocale(), version: plus.runtime.innerVersion!, language: osLanguage, theme: '', hostPackageName, hostName, hostVersion, hostLanguage, hostTheme, hostFontSizeSetting: undefined, } } ) export const getSystemInfoSync = defineSyncApi( 'getSystemInfoSync', () => { _initSystemInfo = true weexGetSystemInfoSync() _initSystemInfo = false const windowInfo = getWindowInfo() const deviceInfo = getDeviceInfo() const appBaseInfo = getAppBaseInfo() _initSystemInfo = true const { osName, osLanguage, osVersion } = systemInfo const { pixelRatio } = windowInfo const osLanguageSplit = osLanguage.split('-') const osLanguageSplitLast = osLanguageSplit[osLanguageSplit.length - 1] let _osLanguage = `${osLanguageSplit[0]}${ osLanguageSplitLast ? '-' + osLanguageSplitLast : '' }` let extraData = { errMsg: 'getSystemInfo:ok', fontSizeSetting: appBaseInfo.hostFontSizeSetting, devicePixelRatio: pixelRatio, deviceId: deviceId(), uniCompileVersion: __uniConfig.compilerVersion, uniRuntimeVersion: __uniConfig.compilerVersion, osLanguage: _osLanguage, } if (osName === 'ios') { ;(extraData as any).romName = osName ;(extraData as any).romVersion = osVersion } const _systemInfo: UniApp.GetSystemInfoResult = extend( windowInfo, systemInfo, deviceInfo, appBaseInfo, extraData ) delete (_systemInfo as any).screenTop delete (_systemInfo as any).enableDebug delete (_systemInfo as any).theme return _systemInfo } ) export const getSystemInfo = defineAsyncApi( 'getSystemInfo', (_, { resolve }) => { return resolve(getSystemInfoSync()) } )