智能照明系统APP-本地串口
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
LightingSystemApp-serial/.svn/pristine/f9/f9134b28d1af85dcfad9a30ba4c...

122 lines
3.4 KiB

import getWindowOffset from 'uni-platform/helpers/get-window-offset'
import safeAreaInsets from 'safe-area-insets'
const ua = navigator.userAgent
/**
* 是否安卓设备
*/
const isAndroid = /android/i.test(ua)
/**
* 是否iOS设备
*/
const isIOS = /iphone|ipad|ipod/i.test(ua)
/**
* 获取系统信息-同步
*/
export function getSystemInfoSync () {
var screen = window.screen
var pixelRatio = window.devicePixelRatio
// 横屏时 iOS 获取的屏幕宽高颠倒,进行纠正
const screenFix = /^Apple/.test(navigator.vendor) && typeof window.orientation === 'number'
const landscape = screenFix && Math.abs(window.orientation) === 90
var screenWidth = screenFix ? Math[landscape ? 'max' : 'min'](screen.width, screen.height) : screen.width
var screenHeight = screenFix ? Math[landscape ? 'min' : 'max'](screen.height, screen.width) : screen.height
var windowWidth = Math.min(window.innerWidth, document.documentElement.clientWidth, screenWidth) || screenWidth
var windowHeight = window.innerHeight
var language = navigator.language
var statusBarHeight = safeAreaInsets.top
var osname
var osversion
var model
if (isIOS) {
osname = 'iOS'
const osversionFind = ua.match(/OS\s([\w_]+)\slike/)
if (osversionFind) {
osversion = osversionFind[1].replace(/_/g, '.')
}
const modelFind = ua.match(/\(([a-zA-Z]+);/)
if (modelFind) {
model = modelFind[1]
}
} else if (isAndroid) {
osname = 'Android'
// eslint-disable-next-line no-useless-escape
const osversionFind = ua.match(/Android[\s/]([\w\.]+)[;\s]/)
if (osversionFind) {
osversion = osversionFind[1]
}
const infoFind = ua.match(/\((.+?)\)/)
const infos = infoFind ? infoFind[1].split(';') : ua.split(' ')
// eslint-disable-next-line no-useless-escape
const otherInfo = [/\bAndroid\b/i, /\bLinux\b/i, /\bU\b/i, /^\s?[a-z][a-z]$/i, /^\s?[a-z][a-z]-[a-z][a-z]$/i, /\bwv\b/i, /\/[\d\.,]+$/, /^\s?[\d\.,]+$/, /\bBrowser\b/i, /\bMobile\b/i]
for (let i = 0; i < infos.length; i++) {
const info = infos[i]
if (info.indexOf('Build') > 0) {
model = info.split('Build')[0].trim()
break
}
let other
for (let o = 0; o < otherInfo.length; o++) {
if (otherInfo[o].test(info)) {
other = true
break
}
}
if (!other) {
model = info.trim()
break
}
}
} else {
osname = 'Other'
osversion = '0'
}
var system = `${osname} ${osversion}`
var platform = osname.toLocaleLowerCase()
var safeArea = {
left: safeAreaInsets.left,
right: windowWidth - safeAreaInsets.right,
top: safeAreaInsets.top,
bottom: windowHeight - safeAreaInsets.bottom,
width: windowWidth - safeAreaInsets.left - safeAreaInsets.right,
height: windowHeight - safeAreaInsets.top - safeAreaInsets.bottom
}
const {
top: windowTop,
bottom: windowBottom
} = getWindowOffset()
windowHeight -= windowTop
windowHeight -= windowBottom
return {
windowTop,
windowBottom,
windowWidth,
windowHeight,
pixelRatio,
screenWidth,
screenHeight,
language,
statusBarHeight,
system,
platform,
model,
safeArea,
safeAreaInsets: {
top: safeAreaInsets.top,
right: safeAreaInsets.right,
bottom: safeAreaInsets.bottom,
left: safeAreaInsets.left
}
}
}
/**
* 获取系统信息-异步
*/
export function getSystemInfo () {
return getSystemInfoSync()
}