UNPKG

miue-ui

Version:

ali miniProgram UI components for vehicle.

250 lines (229 loc) 7.02 kB
/** * systeminfo * pixelRatio:1 * windowWidth:Nunber * widdow Height:numbe * * ===alios 示例 === pixelRatio:1 windowWidth: windowHeight: titleBarHeight: statusBarHeight: screenWidth: screenHeight: theme: fontSizeSetting model:AS22L brand:AS22L app:aliauto version:v1.2012281400.230511031,这个是容器的打包生成的时间???? storage:1.92G currentBattery: language:zh-CN system:3.0.1-R-20230511.0018 ,这个是alios系统的版本号???? platform:Aliauto ===android 示例 jili === model:OneOS brand:qti app:AP version:1.1.0.20230515041305-D-prod-parachute-andorid-geely storage:7 + 80 system:9 platform:android ==android 示例 nisan == model:P33AMC brand:NISSAN app:AP version:v1.2.2009251000.2009251000 storage:8 + 50 system:11 platform:android DRIVICE_ID: BM_brand+model+ */ let _changeTheme=(theme)=>{ let reg = /\b(prefers-color-scheme-)(light|dark)\b/g; }; let _read=(obj,key)=>{ return new Promise((resolve, reject) => { if(my.MIUE_env.info){ //console.log('MIUE_env success 直接返回了 '); resolve(my.MIUE_env.info); return; } // 异步读取 my.getSystemInfo({ success: (res) => { // 定义 let {fontSizeSetting=32,performance='unkonw',benchmarkLevel=-1,platform,storage,system,theme='dark'}=res; // 对部份车机storage信息中取值 let [_memory=0,_storage=-1]=storage.replace(/\s/g,'').match(/[\d.]+/g); if(_storage<0){ [_storage,_memory]=[_memory,_storage]; } // 修正 app 统一为 aliauto; res.app='aliauto'; // IDE 的模拟器并没准确,对windowsHeight 高度进行修正; if(my.isIDE){ res.windowHeight=res.windowHeight-68; } //对平台名称进行统一修正 platform=platform.toLowerCase(); res.platform=platform=='aliauto'?'alios':platform; // 设置偏好样式的数组 let prefers=[]; prefers.push('prefers-color-scheme-'+theme); // 对内存不足4,或是 空间不足 32 的进行进级处理; //console.warn(`_memory:${_memory},_storage:${_storage}`) // 当内存大于4 或是 空间大于32 表示性能较高的车机; if(_memory>4 || _storage>32){ prefers.push('prefers-reduced-motion-no-preference'); //prefers.push('prefers-reduced-motion-reduce'); }else{ prefers.push('prefers-reduced-motion-reduce'); } res.prefers=prefers; res.prefersClass=prefers.join(" "); // 获取系统默认字号,并对字号进行处理,忽略18px以下的默认字号; //console.warn(fontSizeSetting); res.fontSizeSetting=fontSizeSetting<19?'':fontSizeSetting; // performance为支付宝平台定义,有 unknown,low,middle:Android 设备运行内存大于等于 3GB 且 CPU 核心数大于 4,high,高性能。Android 设备运行内存大于等于 4GB。 // benchmarkLevel,微信定义:设备性能等级(仅 Android)。取值为:-2 或 0(该设备无法运行小游戏),-1(性能未知),>=1(设备性能值,该值越高,设备性能越好,目前最高不到50) // 假定支付宝low= 1-10,middle(10-20),high > 20 // 假设 performance 和 benchmarkLevel 可用的情况下,输出一个可标记的结果; if(benchmarkLevel==-1){ if(performance=='low'){ benchmarkLevel=2; } if(performance=='middle'){ benchmarkLevel=10; } if(performance=='high'){ benchmarkLevel=20; } } res.benchmarkLevel=benchmarkLevel; // res.__defineGetter__('c',()=>{}); if(res.theme==undefined){ res.theme='dark'; } resolve(res); my.MIUE_env.info=res; //console.log(res); }, fail:(res) => { reject(res); } }) }); } let guid=()=> { return 'xxxxxxxx'.replace(/[xy]/g, function (c) { var r = Math.random() * 16 | 0,v = c == 'x' ? r : (r & 0x3 | 0x8); return v.toString(16); }); } let GUID_KEY='GUID_KEY'; let _guid=()=>{ return new Promise((resolve, reject) => { _read().then((res)=>{ //console.log(res); let {brand,model,platform}=res; let _random='Rxxxxxxxx'.replace(/[xy]/g, function (c) { var r = Math.random() * 16 | 0,v = c == 'x' ? r : (r & 0x3 | 0x8); return v.toString(16); }); // GUID规则为 BM-平台-品牌-型号-随机位8-时间戳 let _id=`BM-${platform}-${brand}-${model}-${_random}-T${Date.now()}`; _id=_id.replace(/[\u4e00-\u9fa5*]/g,'X'); my.setStorage({ key:GUID_KEY, data:{data:_id}, success:()=>{ }, fail:()=>{}, }); resolve({data:_id}); }); }) } let _getDeviceId=()=>{ return new Promise((resolve, reject) => { my.getStorage({ key: GUID_KEY, success: (res)=> { //获取成功 //console.log(res); let _data=res.data; if(_data==null){ //console.log('读取本地的数据为 null ') _guid().then((re)=>{ //console.log(re); resolve(re); }) //reject({code:11,msg:'本地数据已格式已损坏'}); }else{ resolve(_data); } }, fail: (res)=>{//读取失败 _guid().then((re)=>{ resolve(re); }) //reject({code:11,msg:'获取当前数据失败'}); } }); }) } //------------------------------------------走行限制接口:code>0 则限制,< 1 侧不限制; // 定义走行限制信息 let drivinBlockInfo=(code)=>{ let errInfo=""; switch(code){ case 0: errInfo="无操作限制。"; break; case 1: errInfo="当前操作限制,请注意行车安全。"; break; case 2: errInfo="当前显示限制,请注意行车安全。"; break; case 3: errInfo="当前操作/显示限制,请注意行车安全。"; break; case 4: errInfo="当前限制,请注意行车安全。"; break; default: errInfo="末知"; break; } return {code:code,msg:errInfo} } let _getDrivingBlock=()=>{ //获取走行限制的能力 return new Promise((resolve, reject) => { if(my.aliauto.getDrivingBlock){ my.aliauto.getDrivingBlock({ success: (res) => { let {type=0,code=0}=res || {}; let _code=parseInt(type || code); resolve(drivinBlockInfo(_code)); }, fail: () => { // 走行限制读取失败的情况 resolve(drivinBlockInfo(-1)); } }); }else{ resolve(drivinBlockInfo(-1)); } }) }; let INFO={}; INFO.read=_read; INFO.getDeviceId=_getDeviceId; INFO.getDrivingBlock=_getDrivingBlock; my.MIUE_env=INFO; export default INFO;