/**
|
* Helper - 帮助小功能集
|
* @author Tevin
|
*/
|
|
export class Helper {
|
|
constructor() {
|
this._data = {
|
locations: [],
|
};
|
}
|
|
/**
|
* 检查网络状态
|
* @param {Function} callback
|
*/
|
checkOnlineState(callback) {
|
// 网页模式
|
if (process.env.TARO_ENV === 'h5') {
|
// 网络已开启
|
if (navigator.onLine) {
|
// 用图片资源测试网络状态
|
const img = new Image();
|
img.onload = () => {
|
img.onload = null;
|
callback && callback(true);
|
};
|
img.onerror = () => {
|
img.onerror = null;
|
callback && callback(false);
|
};
|
img.src = 'http://gz.zhiheiot.com/disp/download/buildArchive/online.png?t=' + Date.now();
|
}
|
// 网络未开启
|
else {
|
callback && callback(false);
|
}
|
}
|
// 补充:小程序模式用 getNetworkType
|
}
|
|
/**
|
* 操作GPS定位
|
* @param {String} type
|
* @param {Object} [location]
|
* @return {Number|Object}
|
*/
|
oprGPSLocation(type, location) {
|
// 开始记录
|
if (type === 'restart') {
|
this._data.locations = [];
|
}
|
// 添加记录
|
else if (type === 'add') {
|
this._data.locations.push({
|
...location,
|
radius: Number(location.radius),
|
});
|
// 按精度排序
|
this._data.locations.sort((a, b) => a.radius < b.radius ? -1 : 1);
|
}
|
// 获取高精度次数计数
|
else if (type === 'countHigh') {
|
let count = 0;
|
this._data.locations.forEach(location => {
|
if (location.radius <= 10) {
|
count++;
|
}
|
});
|
return count;
|
}
|
// 读取最精确的记录
|
else if (type === 'read') {
|
return this._data.locations[0];
|
}
|
// 读取最精确的记录,并返回字符串
|
else if (type === 'readStr') {
|
const location = this._data.locations[0];
|
return location.longitude + ',' + location.latitude + ',' + location.radius;
|
}
|
}
|
|
/**
|
* 播放App操作的提醒语音
|
* @param {String} name
|
*/
|
playOprSound(name) {
|
const audio = new Audio('../assets/sound/' + name + '.mp3');
|
audio.play();
|
}
|
|
/**
|
* 显示调试面板(仅支持H5)
|
* @param {{cssSelector,autoOpen}} options
|
* @param {Function} [callback]
|
*/
|
showDevConsole(options = {}, callback) {
|
// 只支持 h5 编译
|
if (process.env.TARO_ENV !== 'h5') {
|
return;
|
}
|
const fileref = document.createElement('script');
|
fileref.setAttribute('type', 'text/javascript');
|
if (window.location.protocol === 'https:') {
|
fileref.setAttribute('src', 'https://rb.zhiheiot.com/static/pages/libs/eruda.min.js');
|
} else {
|
fileref.setAttribute('src', 'http://rb.zhiheiot.com/static/pages/libs/eruda.min.js');
|
}
|
document.getElementsByTagName('head')[0].appendChild(fileref);
|
const simulateTouch = (dom, type) => {
|
const button = dom;
|
const touch = new Touch({
|
identifier: Date.now(),
|
target: button,
|
clientX: 0,
|
clientY: 0,
|
screenX: 0,
|
screenY: 0,
|
pageY: 0,
|
pageX: 0,
|
radiusX: 2.5,
|
radiusY: 2.5,
|
rotationAngle: 10,
|
force: 0.5,
|
});
|
const touchstart = new TouchEvent(type, {
|
cancelable: true,
|
bubbles: true,
|
composed: true,
|
touches: [touch],
|
targetTouches: [touch],
|
changedTouches: [touch],
|
});
|
button.dispatchEvent(touchstart);
|
};
|
const erudaTimer = setInterval(() => {
|
if (window.eruda) {
|
clearInterval(erudaTimer);
|
setTimeout(() => {
|
const container = document.createElement('div');
|
if (options.cssSelector) {
|
document.querySelector(options.cssSelector).appendChild(container);
|
} else {
|
document.getElementsByTagName('body')[0].appendChild(container);
|
}
|
window.eruda.init({
|
container: container,
|
useShadowDom: false,
|
});
|
if (options.autoOpen) {
|
let button = null;
|
setTimeout(() => {
|
button = document.querySelector('.eruda-entry-btn');
|
}, 50);
|
setTimeout(() => {
|
simulateTouch(button, 'touchstart');
|
}, 60);
|
setTimeout(() => {
|
simulateTouch(button, 'touchend');
|
}, 350);
|
}
|
setTimeout(() => {
|
console.warn('=====【艾信App调试模式】=====');
|
}, 800);
|
setTimeout(() => {
|
console.warn('点击右下角悬浮工具箱图标可以折叠面板');
|
}, 900);
|
setTimeout(() => {
|
callback && callback();
|
}, 1000);
|
}, 100);
|
}
|
}, 100);
|
}
|
|
}
|
|
export const $helper = new Helper();
|