-
Notifications
You must be signed in to change notification settings - Fork 16
/
App.vue
189 lines (185 loc) · 5.09 KB
/
App.vue
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
<script>
const CONFIG = require('@/config.js')
const WXAUTH = require('@/common/wxauth.js')
export default {
globalData: {
long: undefined,
lat: undefined,
userDetail: undefined,
},
onLaunch() {
this.$wxapi.init(CONFIG.subDomain)
this.checkForUpdate(); // 检查新版本
this.queryConfigBatch();
},
onShow(e) {
if (e && e.query && e.query.inviter_id) {
this.vuex('referrer', e.query.inviter_id)
}
this.autoLogin()
},
onHide() {
console.log('App Hide')
},
onPageNotFound(e) {
// 页面不存在 {path: '/1212', query: {a: '123'}, isEntryPage: true}
console.error('页面不存在', e)
},
methods: {
checkForUpdate() {
// #ifdef MP
const updateManager = uni.getUpdateManager();
updateManager.onCheckForUpdate(function(res) {
// 请求完新版本信息的回调
console.log(res.hasUpdate);
});
updateManager.onUpdateReady(function(res) {
uni.showModal({
title: '更新提示',
content: '新版本已经准备好,是否重启应用?',
success(res) {
if (res.confirm) {
// 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
updateManager.applyUpdate();
}
}
});
});
updateManager.onUpdateFailed(function(res) {
// 新的版本下载失败
});
// #endif
},
async queryConfigBatch() {
const sysconfigkeys = CONFIG.sysconfigkeys
if (!sysconfigkeys) {
return
}
// https://www.yuque.com/apifm/nu0f75/dis5tl
const res = await this.$wxapi.queryConfigBatch(sysconfigkeys)
if (res.code == 0) {
const sysconfigMap = {}
res.data.forEach(config => {
sysconfigMap[config.key] = config.value
})
this.vuex('sysconfigMap', sysconfigMap)
uni.$emit('sysconfigOK', sysconfigMap)
// uni.$on('sysconfigOK',data => {
// console.log('监听到事件来自 update ,携带参数 msg 为:' + data.msg);
// })
}
},
getLocation() {
const _this = this
return new Promise(function(resolve, reject) {
if (_this.globalData.lat && _this.globalData.long) {
resolve({
long: _this.globalData.long,
lat: _this.globalData.lat
})
return
}
uni.showLoading({
title: ''
})
uni.getFuzzyLocation({
type: "gcj02", //默认为 wgs84 返回 gps 坐标
success: res => {
console.log("定位获取:", res);
let platform = uni.getSystemInfoSync().platform;
if (platform == "ios") {
//toFixed() 方法可把 Number 四舍五入为指定小数位数的数字。
_this.globalData.lat = res.latitude.toFixed(6)
_this.globalData.long = res.longitude.toFixed(6)
resolve({
long: res.longitude.toFixed(6),
lat: res.latitude.toFixed(6)
})
} else {
_this.globalData.lat = res.latitude
_this.globalData.long = res.longitude
resolve({
long: res.longitude,
lat: res.latitude
})
}
},
fail: err => {
console.error(err)
reject(err)
if (
err.errMsg ===
"getLocation:fail 频繁调用会增加电量损耗,可考虑使用 wx.onLocationChange 监听地理位置变化"
) {
uni.showToast({
title: "请勿频繁定位",
icon: "none",
});
} else if (err.errMsg === "getLocation:fail auth deny") {
// 未授权
uni.showToast({
title: "无法定位,请重新获取位置信息",
icon: "none",
});
} else if (
err.errMsg ===
"getLocation:fail:ERROR_NOCELL&WIFI_LOCATIONSWITCHOFF"
) {
uni.showModal({
content: "请开启手机定位服务",
showCancel: false,
});
} else {
uni.showModal({
content: "无法获取手机定位 \n 请先确认定位服务是否已开启",
showCancel: false,
});
}
},
complete: () => {
uni.hideLoading()
},
});
});
},
getDistance(lat1, lng1, lat2, lng2) {
var dis = 0;
var radLat1 = toRadians(lat1);
var radLat2 = toRadians(lat2);
var deltaLat = radLat1 - radLat2;
var deltaLng = toRadians(lng1) - toRadians(lng2);
var dis = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(deltaLat / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(deltaLng / 2), 2)));
return dis * 6378137;
function toRadians(d) {
return d * Math.PI / 180;
}
},
async autoLogin(force) {
// 微信小程序自动登陆
// #ifdef MP-WEIXIN
const isLogined = await WXAUTH.checkHasLogined()
if (!isLogined) {
await WXAUTH.authorize()
}
setTimeout(() => {
uni.$emit('loginOK', {})
}, 500)
// #endif
},
async userDetail() {
const _this = this.$vm ? this.$vm : this
// https://www.yuque.com/apifm/nu0f75/zgf8pu
const res = await _this.$wxapi.userDetail(_this.token)
if (res.code == 0) {
_this.globalData.userDetail = res.data
}
},
},
}
</script>
<style>
.line {
height: 1rpx;
background-color: #e5e5e5;
}
</style>