2019-11-21 15:46:14 +08:00
|
|
|
|
/*
|
|
|
|
|
* @Descripttion:
|
|
|
|
|
* @version: 1.0
|
|
|
|
|
* @Author: zhangti
|
|
|
|
|
* @Date: 2019-09-29 11:55:55
|
2020-06-29 11:14:44 +08:00
|
|
|
|
* @LastEditors : sueRimn
|
|
|
|
|
* @LastEditTime : 2020-01-16 11:57:42
|
2019-11-21 15:46:14 +08:00
|
|
|
|
*/
|
|
|
|
|
/**
|
|
|
|
|
*
|
|
|
|
|
* Cvearth Tools封装
|
|
|
|
|
* 常用工具集合
|
|
|
|
|
* 算法
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
//import * as FileSaver from '../../node_modules/file-saver/src/FileSaver.js';
|
|
|
|
|
export default class CVTools {
|
|
|
|
|
|
|
|
|
|
constructor() {}
|
2020-06-29 11:14:44 +08:00
|
|
|
|
_guid() {
|
|
|
|
|
return Number(Math.random().toString().substr(3, 3) + Date.now()).toString(36);
|
|
|
|
|
}
|
|
|
|
|
//距离
|
|
|
|
|
_distance(point1, point2) {
|
|
|
|
|
var point1cartographic = Cesium.Cartographic.fromCartesian(point1);
|
|
|
|
|
var point2cartographic = Cesium.Cartographic.fromCartesian(point2);
|
|
|
|
|
/**根据经纬度计算出距离**/
|
|
|
|
|
var geodesic = new Cesium.EllipsoidGeodesic();
|
|
|
|
|
geodesic.setEndPoints(point1cartographic, point2cartographic);
|
|
|
|
|
var s = geodesic.surfaceDistance;
|
|
|
|
|
//console.log(Math.sqrt(Math.pow(distance, 2) + Math.pow(endheight, 2)));
|
|
|
|
|
//返回两点之间的距离
|
|
|
|
|
s = Math.sqrt(Math.pow(s, 2) + Math.pow(point2cartographic.height - point1cartographic.height, 2));
|
|
|
|
|
return s;
|
|
|
|
|
}
|
|
|
|
|
//分组
|
|
|
|
|
groupBy(array,call){
|
|
|
|
|
const groups = {};
|
|
|
|
|
array.forEach(function(a){
|
|
|
|
|
const group = JSON.stringify(call(a));
|
|
|
|
|
groups[group] = groups[group] || [];
|
|
|
|
|
groups[group].push(a);
|
|
|
|
|
});
|
|
|
|
|
return Object.keys(groups).map(function(group){
|
|
|
|
|
return groups[group];
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
//数据去重 noe key
|
|
|
|
|
_uniqueArrOne(arr, key) {
|
|
|
|
|
let cs = [],
|
|
|
|
|
bArr = [];
|
|
|
|
|
for (let i in arr) {
|
|
|
|
|
if (!cs.includes(arr[i][key])) {
|
|
|
|
|
cs.push(arr[i][key]),
|
|
|
|
|
bArr.push(arr[i]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return bArr;
|
|
|
|
|
}
|
|
|
|
|
//数据去重 two key
|
|
|
|
|
_uniqueArrTwo(arr, key,key2) {
|
|
|
|
|
for (let i = 0; i < arr.length; i++) {
|
|
|
|
|
for (let j = i + 1; j < arr.length; j++) {
|
|
|
|
|
if (arr[i][key] == arr[j][key]) {
|
|
|
|
|
if (arr[i][key2] == arr[j][key2]) {
|
|
|
|
|
arr.splice(j, 1);
|
|
|
|
|
j--;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return arr;
|
|
|
|
|
}
|
|
|
|
|
_uniqueArr3(arr, key, key2, key3) {
|
|
|
|
|
let bArr = [];
|
|
|
|
|
for (let i = 0; i < arr.length; i++) {
|
|
|
|
|
for (let j = i + 1; j < arr.length; j++) {
|
|
|
|
|
if (arr[i][key] == arr[j][key]) {
|
|
|
|
|
if (arr[i][key2] == arr[j][key2]) {
|
|
|
|
|
if (arr[i][key3] == arr[j][key3]) {
|
|
|
|
|
arr.splice(j, 1);
|
|
|
|
|
j--;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return arr;
|
|
|
|
|
}
|
|
|
|
|
//数据聚合
|
|
|
|
|
dataCluster(positions, num) {
|
|
|
|
|
let satePosition = [];
|
|
|
|
|
if (positions.length > 0) {
|
|
|
|
|
for (var i = 0; i < positions.length; i += num) {
|
|
|
|
|
satePosition.push(positions.slice(i, i + num));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return satePosition;
|
|
|
|
|
}
|
|
|
|
|
//遍历
|
2019-11-21 15:46:14 +08:00
|
|
|
|
arrForEach(arr, func) {
|
|
|
|
|
try {// arr对象循环
|
|
|
|
|
for (let i = 0; i < arr.length; i++) {
|
|
|
|
|
let bool = func(arr[i], i);
|
|
|
|
|
if (true === bool) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (e) {
|
|
|
|
|
console.log(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
isIncludecChn(str){
|
|
|
|
|
if(/.*[\u4e00-\u9fa5]+.*$/.test(str))
|
|
|
|
|
{
|
|
|
|
|
return true ;
|
|
|
|
|
} else {
|
|
|
|
|
return false ;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
saveJsonText(j) {
|
|
|
|
|
let content = JSON.stringify(j.jsonData);
|
|
|
|
|
let blob = new Blob([content], { type: "text/plain;charset=utf-8" });
|
|
|
|
|
saveAs(blob, j.jsonName);
|
|
|
|
|
//FileSaver.saveAs(blob, j.jsonName);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
nullBool(param) { // 对象为空判断 为空返回true,反之false
|
|
|
|
|
if (null === param || undefined === param) return true;
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
strBool(param) { // string判断 为空返回true,反之false
|
|
|
|
|
if (this.nullBool(param) || "" === param || param.length === 0) return true;
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
arrBool(param) { // arraty判断 length不为零 为空返回true,反之false
|
|
|
|
|
if (null === param || undefined === param || param.length === 0) return true;
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
mapBool(param) { // 判断map是否为空 为空返回true,反之false
|
|
|
|
|
for (var t in param)
|
|
|
|
|
return !1;
|
|
|
|
|
return !0
|
|
|
|
|
}
|
|
|
|
|
jsonBool(param) { // 判断json是否可用,true为不可用,false反之
|
|
|
|
|
if (this.nullBool(param)
|
|
|
|
|
|| this.getMapSize(param) === 0) return true;
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
initError(param) { // 初始化异常: 为空返回true,反之false
|
|
|
|
|
if (null === param || undefined === param) {
|
|
|
|
|
alert("初始化页面异常,请刷新页面重新尝试!");
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
isArray(obj) { // 判断是否是array
|
|
|
|
|
return (typeof obj == 'object') && obj.constructor == Array;
|
|
|
|
|
}
|
|
|
|
|
isString(str) { // 判断是否是字符串
|
|
|
|
|
return (typeof str == 'string') && str.constructor == String;
|
|
|
|
|
}
|
|
|
|
|
isNumber(obj) { // 判断是否是数值
|
|
|
|
|
return (typeof obj == 'number') && obj.constructor == Number;
|
|
|
|
|
}
|
|
|
|
|
isDate(obj) { // 是否是时间对象
|
|
|
|
|
return (typeof obj == 'object') && obj.constructor == Date;
|
|
|
|
|
}
|
|
|
|
|
is(obj) { // 判断是否是函数
|
|
|
|
|
return (typeof obj == '') && obj.constructor == Function;
|
|
|
|
|
}
|
|
|
|
|
isObject(obj) { // 判断是否是对象
|
|
|
|
|
return (typeof obj == 'object') && obj.constructor == Object;
|
|
|
|
|
}
|
|
|
|
|
getMapSize(map) { // 获取map的个数
|
|
|
|
|
var index = 0;
|
|
|
|
|
if (this.nullBool(map)) return index;
|
|
|
|
|
for (var s in map) {
|
|
|
|
|
++index;
|
|
|
|
|
}
|
|
|
|
|
return index;
|
|
|
|
|
}
|
|
|
|
|
isIEBrowser() { // ie浏览器判断,是返回true
|
|
|
|
|
return !!window.ActiveXObject || "ActiveXObject" in window ? true : false;
|
|
|
|
|
}
|
|
|
|
|
mapMerge(coverMap, subjectMap) { // 将两个map合并成一个map
|
|
|
|
|
// coverMap 覆盖map,即两个map中有相同子元素,以覆盖此map中元素为准
|
|
|
|
|
var map = JSON.parse(JSON.stringify(coverMap));
|
|
|
|
|
var map2 = JSON.parse(JSON.stringify(subjectMap));
|
|
|
|
|
for (var s in map2) {
|
|
|
|
|
map[s] = map2[s];
|
|
|
|
|
}
|
|
|
|
|
return map;
|
|
|
|
|
}
|
|
|
|
|
deepCopy(obj) { // 深拷贝
|
|
|
|
|
return JSON.parse(JSON.stringify(obj));
|
|
|
|
|
}
|
|
|
|
|
numForEach(num, func) {
|
|
|
|
|
for (var i = 0; i < num; i++) { // 数循环
|
|
|
|
|
func(i)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
isChildren(contrastObj, boolObj) { // 判断是否是指定对象子类或自身 , 是返回true
|
|
|
|
|
var result = false;
|
|
|
|
|
if (!this.nullBool(contrastObj) && !this.nullBool(boolObj)) {
|
|
|
|
|
if ("body" === boolObj[0].nodeName.toLowerCase()) {
|
|
|
|
|
result = false;
|
|
|
|
|
} else {
|
|
|
|
|
var boolResult = $(contrastObj).is(boolObj);
|
|
|
|
|
if (boolResult) {
|
|
|
|
|
result = true;
|
|
|
|
|
} else {
|
|
|
|
|
result = this.isChildren(contrastObj, $(boolObj).parent());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
getCoords(el) { // 获取元素在页面中的坐标
|
|
|
|
|
var box = el.getBoundingClientRect(),
|
|
|
|
|
doc = el.ownerDocument,
|
|
|
|
|
body = doc.body,
|
|
|
|
|
html = doc.documentElement,
|
|
|
|
|
clientTop = html.clientTop || body.clientTop || 0,
|
|
|
|
|
clientLeft = html.clientLeft || body.clientLeft || 0,
|
|
|
|
|
top = box.top + (self.pageYOffset || html.scrollTop || body.scrollTop) - clientTop,
|
|
|
|
|
left = box.left + (self.pageXOffset || html.scrollLeft || body.scrollLeft) - clientLeft
|
|
|
|
|
return { 'top': top, 'left': left };
|
|
|
|
|
}
|
|
|
|
|
checkEmail(str) { // 邮箱验证
|
|
|
|
|
var re = /^[A-Za-z\d]+([-_.][A-Za-z\d]+)*@([A-Za-z\d]+[-.])+[A-Za-z\d]{2,4}$/;
|
|
|
|
|
if (re.test(str)) {
|
|
|
|
|
return true;
|
|
|
|
|
} else {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
checkMobile(str) { // 手机验证 , 11位数字,以1开头。
|
|
|
|
|
var re = /^1\d{10}$/;
|
|
|
|
|
if (re.test(str)) {
|
|
|
|
|
return true;
|
|
|
|
|
} else {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
checkUser(str) { // 验证帐号是否合法,字母、数字、下划线组成,字母开头,4-16位。
|
|
|
|
|
var re = /^[a-zA-z]\w{4,15}$/;
|
|
|
|
|
if (re.test(str)) {
|
|
|
|
|
return true;
|
|
|
|
|
} else {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
checkFullAngle(str) { // 判断是否有全角 , 有返回true
|
|
|
|
|
var str2 = str.match(/[\uff00-\uffff]/g);
|
|
|
|
|
if (null === str2) {
|
|
|
|
|
return false;
|
|
|
|
|
} else {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
chackStr(str) { // 判断是否有特殊符号 和 数字 ,有返回true
|
|
|
|
|
var regEn = /[-`~!@#$%^&*()_=+<>?:"{},\\\\.\/;'[\]]/im,
|
|
|
|
|
regCn = /[·!#¥(——):;“”‘、,|《。》?、【】[\]]/im;
|
|
|
|
|
if (regEn.test(str) || regCn.test(str)) { // 包含返回true
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
getSelectAttr(select, attrName) {
|
|
|
|
|
return $($(select).children("option:selected")).attr(attrName);
|
|
|
|
|
}
|
|
|
|
|
getEventSource(event) { // 获取事件源对象
|
|
|
|
|
return (bool.isIEBrowser() ? event.srcElement : event.target);
|
|
|
|
|
}
|
|
|
|
|
addPropertychange(Obj, func) { // 给input添加文本改变事件
|
|
|
|
|
if (this.arrBool($(Obj))) {
|
|
|
|
|
console.log("文本改变监控创建失败!");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
$(Obj).unbind().on('input propertychange', func);
|
|
|
|
|
}
|
|
|
|
|
addBlur(Obj, func) { // 给input对象添加鼠标光标离开事件
|
|
|
|
|
$(Obj).blur(func);
|
|
|
|
|
}
|
|
|
|
|
timingTask(func, hours, minutes, seconds) { // 每天指定时间执行
|
|
|
|
|
var time = new Date(); // 当前时间
|
|
|
|
|
var time2 = new Date(); // 下一天时间
|
|
|
|
|
time2.setDate(time.getDate() + 1);
|
|
|
|
|
time2.setHours(hours);
|
|
|
|
|
time2.setMinutes(minutes);
|
|
|
|
|
time2.setSeconds(seconds);
|
|
|
|
|
var doIT = function(){
|
|
|
|
|
func();
|
|
|
|
|
setTimeout(doIT, 24 * 60 * 60 * 1000);
|
|
|
|
|
}
|
|
|
|
|
setTimeout(doIT, time2 - time);
|
|
|
|
|
}
|
|
|
|
|
strRegHandle(str) { // 字符串正则处理
|
|
|
|
|
if (arguments.length == 0) return this;
|
|
|
|
|
var obj = arguments[0];
|
|
|
|
|
var s = this;
|
|
|
|
|
for (var key in obj) {
|
|
|
|
|
s = s.replace(new RegExp("\\{\\{" + key + "\\}\\}", "g"), obj[key]);
|
|
|
|
|
}
|
|
|
|
|
return s;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* 通用弹出框
|
|
|
|
|
*/
|
|
|
|
|
openCommonDiv (v) {
|
|
|
|
|
console.log(v);
|
|
|
|
|
if (v == undefined && v == null) {
|
|
|
|
|
alert("没有获取到弹出属性!");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
layer.open({
|
|
|
|
|
type: 1 //此处以iframe举例
|
|
|
|
|
, id: v.id
|
|
|
|
|
, title: v.title
|
|
|
|
|
, shade: 0
|
|
|
|
|
, offset: v.offset
|
|
|
|
|
, area: v.area
|
|
|
|
|
, btn: v.btn == undefined ? false : v.btn
|
|
|
|
|
, btn1: function () {
|
|
|
|
|
if (typeof v.btn1 == 'function') {
|
|
|
|
|
v.btn1();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
, maxmin: true
|
|
|
|
|
, content: v.content
|
|
|
|
|
, success: function () {
|
|
|
|
|
if (typeof v.fn == 'function') {
|
|
|
|
|
v.fn();
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
cancel : function(index, layero){
|
|
|
|
|
/* console.log(v);
|
|
|
|
|
if(v.id == undefined){
|
|
|
|
|
layer.close(index);
|
|
|
|
|
}
|
|
|
|
|
$('#' + v.id).parent().hide();
|
|
|
|
|
return false;*/
|
|
|
|
|
layer.close(index);
|
|
|
|
|
},
|
|
|
|
|
end: function () {}
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
}
|
2020-06-29 11:14:44 +08:00
|
|
|
|
/**
|
|
|
|
|
* ajax
|
|
|
|
|
* @param {*} url
|
|
|
|
|
* @param {*} data
|
|
|
|
|
* @param {*} async
|
|
|
|
|
* @param {*} type
|
|
|
|
|
* @param {*} call
|
|
|
|
|
*/
|
|
|
|
|
ajax(url,data,async,type,call){
|
|
|
|
|
|
|
|
|
|
showLoading();
|
|
|
|
|
$.ajax({
|
|
|
|
|
type:type,
|
|
|
|
|
url: url,
|
|
|
|
|
contentType:'application/json',
|
|
|
|
|
data: data,
|
|
|
|
|
async:async,
|
|
|
|
|
dataType: "json",
|
|
|
|
|
success: function(jsonData){
|
|
|
|
|
if(typeof call === 'function')call(jsonData);
|
|
|
|
|
hideLoading();
|
|
|
|
|
},
|
|
|
|
|
error:function(e){
|
|
|
|
|
alert(e.msg)
|
|
|
|
|
hideLoading();
|
|
|
|
|
},
|
|
|
|
|
complelte:function(){
|
|
|
|
|
hideLoading();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
2019-11-21 15:46:14 +08:00
|
|
|
|
}
|