utils.js
7.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
import Vue from 'vue';
// import moment from 'moment';
// #ifdef APP-PLUS
import {judgePermission} from './permission'
// #endif
const DATE_TIME_FORMAT = 'YYYY-MM-DD HH:mm:ss';
//金额过滤
Vue.filter('money', function(val) {
if (val) {
let value = Math.round(parseFloat(val) * 100) / 100;
let valMoney = value.toString().split(".");
if (valMoney.length == 1) {
value = value.toString() + ".00";
return value;
}
if (valMoney.length > 1) {
if (valMoney[1].length < 2) {
value = value.toString() + "0";
}
return value;
}
return value;
} else {
return "0.00";
}
});
//手机号中间4位为*
Vue.filter('phone', function(val) {
var tel = val;
tel = "" + tel;
var telShort = tel.replace(tel.substring(3, 7), "****")
return telShort
})
//获取系统信息、判断ipX安全距离
export const getTabbarHeight = function() {
var systemInfo = uni.getSystemInfoSync()
var data = {
...systemInfo,
tabbarH: 50,//tabbar高度--单位px
tabbarPaddingB: 0,//tabbar底部安全距离高度--单位px
device: systemInfo.system.indexOf('iOS') != -1?'iOS':'Android', //苹果或者安卓设备
}
let modelArr = ['10,3','10,6','X', 'XR', 'XS', '11', '12', '13', '14', '15', '16'];
let model = systemInfo.model;
model && modelArr.forEach(item => {
//适配iphoneX以上的底部,给tabbar一定高度的padding-bottom
if(model.indexOf(item) != -1 && (model.indexOf('iPhone') != -1 || model.indexOf('iphone') != -1)) {
data.tabbarH = 70
data.tabbarPaddingB = 20
}
})
return data;
}
//计算两点距离
export const commonDistance = function(lat1, lng1, lat2, lng2) {
var f = ((lat1 + lat2) / 2) * Math.PI / 180.0;
var g = ((lat1 - lat2) / 2) * Math.PI / 180.0;
var l = ((lng1 - lng2) / 2) * Math.PI / 180.0;
var sg = Math.sin(g);
var sl = Math.sin(l);
var sf = Math.sin(f);
var s, c, w, r, d, h1, h2;
var a = 6378137.0; //地球的直径
var fl = 1 / 298.257;
sg = sg * sg;
sl = sl * sl;
sf = sf * sf;
s = sg * (1 - sl) + (1 - sf) * sl;
c = (1 - sg) * (1 - sl) + sf * sl;
w = Math.atan(Math.sqrt(s / c));
r = Math.sqrt(s * c) / w;
d = 2 * w * a;
h1 = (3 * r - 1) / 2 / c;
h2 = (3 * r + 1) / 2 / s;
var num = d * (1 + fl * (h1 * sf * (1 - sg) - h2 * (1 - sf) * sg))
// 换算单位
if (num == undefined) {
num = "0.0 m"
};
if (num < 1000) {
num = (Math.round(num)).toFixed(1) + "m"
} else if (num > 1000) {
num = (Math.round(num / 100) / 10).toFixed(1) + "km"
}
return num
}
// px转upx
export const px2upx = function(n){
return n/(uni.upx2px(n)/n);
}
// 判断两时间段之间活动状态、判断活动还有多长时间开始、多长时间结束----添加定时器运行此方法可倒计时
// var startTime = new Date(item.startTime.replace(/-/g, '/')).getTime(); //转时间戳
// var closeTime = new Date(item.closeTime.replace(/-/g, '/')).getTime(); //转时间戳
// var djs = this.djsTime(startTime, closeTime);
export const djsTime = function(startTime, endTime) {
var bbb = new Date().getTime(),
leftTime = startTime - bbb,
rightTime = endTime - bbb,
djsTime = '',
speed = 0,
activityStatus = 0, //活动状态 1:未开始 2:进行中 3:已结束
dd,hh,mm,ss;
if (leftTime > 0) { //还未开始
activityStatus = 1
dd = Math.floor(leftTime / 1000 / 60 / 60 / 24);
hh = Math.floor((leftTime / 1000 / 60 / 60) % 24) < 10 ? '0' + Math.floor((leftTime / 1000 / 60 / 60) % 24) : Math.floor((leftTime / 1000 / 60 / 60) % 24);
mm = Math.floor((leftTime / 1000 / 60) % 60) < 10 ? '0' + Math.floor((leftTime / 1000 / 60) % 60) : Math.floor((leftTime / 1000 / 60) % 60);
ss = Math.floor((leftTime / 1000) % 60) < 10 ? '0' + Math.floor((leftTime / 1000) % 60) : Math.floor((leftTime / 1000) % 60);
if (dd != 0) {
djsTime = dd + "天 " + hh + ":" + mm + ":" + ss;
} else {
djsTime = hh + ":" + mm + ":" + ss;
}
} else if (leftTime <= 0) {
if (rightTime > 0) { //进行中
activityStatus = 2;
speed = (1 - rightTime / (endTime - startTime)) * 100;
dd = Math.floor(rightTime / 1000 / 60 / 60 / 24);
hh = Math.floor((rightTime / 1000 / 60 / 60) % 24) < 10 ? '0' + Math.floor((rightTime / 1000 / 60 / 60) % 24) : Math.floor((rightTime / 1000 / 60 / 60) % 24);
mm = Math.floor((rightTime / 1000 / 60) % 60) < 10 ? '0' + Math.floor((rightTime / 1000 / 60) % 60) : Math.floor((rightTime / 1000 / 60) % 60);
ss = Math.floor((rightTime / 1000) % 60) < 10 ? '0' + Math.floor((rightTime / 1000) % 60) : Math.floor((rightTime / 1000) % 60);
if (dd != 0) {
djsTime = dd + "天 " + hh + ":" + mm + ":" + ss;
} else {
djsTime = hh + ":" + mm + ":" + ss;
}
} else { //已结束
speed = 100;
djsTime = '已结束';
activityStatus = 3;
}
}
var item = {
djsTime: djsTime, //距离当前时间差
activityStatus: activityStatus, //活动状态 1:未开始 2:进行中 3:已结束
speed: speed, //进度(单位%)
dd: dd, //天
hh: hh, //小时
mm: mm, //分
ss: ss, //秒
}
return item;
}
// 小程序获取定位权限判断
// isOpenSetting 默认false:不检验授权,true:检验授权后获取地址
function getMpLocation(successCallback, errCallback, isOpenSetting) {
uni.getSetting({
success: res => {
if (res.authSetting['scope.userLocation'] || !isOpenSetting) {
uni.getLocation({
// #ifndef MP-ALIPAY
type: 'gcj02',
// #endif
success(res){
console.log('successCallback')
successCallback(res);
},
fail(err){
console.log("位置信息错误", err);
errCallback("位置信息获取失败");
}
});
} else {
errCallback("“位置信息”未授权");
isOpenSetting && uni.showModal({
title: '提示',
content: '请先在设置页面打开“位置信息”使用权限',
confirmText: '去设置',
cancelText: '再逛会',
success: res => {
if (res.confirm) {
uni.openSetting();
}
}
});
}
}
});
}
// 获取地址信息
let locationAuthorize = true;
export const getAppLatLon = function(successCallback, errCallback, isOpenSetting) {
const _this = this;
// #ifdef MP-WEIXIN
if (locationAuthorize && isOpenSetting) {
uni.authorize({
scope: 'scope.userLocation',
success: () => {
getMpLocation(successCallback, errCallback, isOpenSetting);
locationAuthorize = false;
},
fail: () => {
locationAuthorize = false;
}
});
} else {
getMpLocation(successCallback, errCallback, isOpenSetting);
}
// #endif
// #ifdef MP-ALIPAY
getMpLocation(successCallback, errCallback, false);
// #endif
// #ifdef H5
uni.getLocation({
type: 'gcj02',
success(res){
console.log('successCallback')
successCallback(res);
},
fail(err){
console.log("位置信息错误", err);
errCallback("位置信息获取失败");
}
});
// #endif
// #ifdef APP-PLUS
judgePermission("location", function(result) {
if (result == 1) {
uni.getLocation({
type: 'gcj02',
success: res => {
successCallback(res);
},
fail: (err) => {
console.log("位置信息错误", err);
errCallback("位置信息获取失败");
}
});
}
});
// #endif
}
export function formatToDate(date = undefined, format = DATE_TIME_FORMAT) {
return moment(date).format(format);
}