1 import SiteInfo from "siteInfo.js"; 2 App({ 3 onShow: function () { 4 // wx.checkSession({ //检测当前用户的session_key是否过期 5 // success: function() { //session_key 未过期,并且在本生命周期一直有效 6 7 // }, 8 // fail: function() { //session_key 已经失效,需要重新执行登录流程 9 // console.warn("授权过期,重新登录小程序") 10 // wx.navigateTo({ 11 // url: "/pages/openauth/index" //重新授权 12 // }) 13 // } 14 // }) 15 }, 16 onLaunch: function () { 17 // console.log("授权未过期") 18 let vm = this; 19 wx.showToast({ 20 title: '欢迎来到 nunumua !', 21 icon: "none", 22 mask: true 23 }) 24 //更新版本 25 vm.CheckVersion(); 26 let promise = this.SetHeader(); 27 promise.then(res => { 28 }).catch(errMsg => { 29 console.error(errMsg) 30 }); 31 }, 32 /**检查小程序版本更新 */ 33 CheckVersion: function () { 34 const updateManager = wx.getUpdateManager() 35 36 updateManager.onCheckForUpdate(function (res) { 37 // 请求完新版本信息的回调 38 // console.log(res.hasUpdate) 39 }) 40 41 updateManager.onUpdateReady(function () { 42 wx.showModal({ 43 title: '更新提示', 44 content: '新版本已经准备好,是否重启应用?', 45 success: function (res) { 46 if (res.confirm) { 47 // 新的版本已经下载好,调用 applyUpdate 应用新版本并重启 48 updateManager.applyUpdate() 49 } 50 } 51 }) 52 }) 53 54 updateManager.onUpdateFailed(function () { 55 // 新版本下载失败 56 console.error('新版本下载失败!') 57 wx.showToast({ 58 title: '新版本下载失败,请检查你的网路链接是否通畅!', 59 icon: 'none', 60 duration: 2000, 61 mask: true 62 }) 63 }) 64 }, 65 /**检查是否授权 */ 66 CheckAuth: function () { 67 var that = this; 68 // 查看是否授权 69 wx.getSetting({ 70 success(res) { 71 if (res.authSetting['scope.userInfo']) { 72 // 已经授权,可以直接调用 getUserInfo 获取头像昵称 73 wx.getUserInfo({ 74 success: function (res) { 75 App.globalData.userInfo = res.userInfo; //更新用户信息 76 } 77 }); 78 //是否授权获取地理位置 79 if (!res.authSetting['scope.userLocation']) { 80 wx.navigateTo({ 81 url: '/pages/openauth/index', //跳转到授权页面 82 }) 83 } 84 } else { 85 wx.navigateTo({ 86 url: '/pages/openauth/index', //跳转到授权页面 87 }) 88 } 89 } 90 }) 91 }, 92 /**小程序登录:调用接口获取登录凭证(code) */ 93 WxLogin: function () { 94 return new Promise((resolve, reject) => { 95 let vm = this; 96 wx.showLoading({ 97 title: '登录小程序', 98 mask: true 99 }); 100 wx.login({ 101 success(res) { 102 if (res.code) { 103 //发起网络请求 104 wx.request({ 105 url: SiteInfo["Siteroot"] + '/api/login', 106 header: { 107 Version: SiteInfo["Version"] 108 }, 109 method: 'POST', 110 data: { 111 code: res.code 112 }, 113 success(res) { 114 res.data && res.data.code == 200 ? resolve(res.data.data) : reject(res.data.message); 115 }, 116 fail(res) { 117 wx.hideLoading(); 118 console.log('登录失败!' + res.errMsg) 119 }, 120 complete: function (res) { 121 wx.hideLoading(); 122 }, 123 }); 124 } else { 125 wx.hideLoading(); 126 console.log('登录失败!' + res.errMsg) 127 } 128 }, 129 fail(res) { 130 console.error('调用小程序登录接口失败!' + res.errMsg) 131 wx.showToast({ 132 title: '登录小程序失败,请检查你的网路链接是否通畅', 133 icon: 'none', 134 duration: 2000, 135 mask: true 136 }) 137 } 138 }) 139 }); 140 }, 141 /** 自定义头部:返回按钮位置 */ 142 SetHeader: function () { 143 return new Promise((resolve, reject) => { 144 const vm = this; 145 wx.getSystemInfo({ 146 success: function (res) { 147 let totalTopHeight = 82 148 if (res.model.indexOf('iPhone X') !== -1) { 149 totalTopHeight = 110 150 } else if (res.model.indexOf('iPhone') !== -1) { 151 totalTopHeight = 64 152 } 153 vm.globalData.statusBarHeight = res.statusBarHeight; 154 vm.globalData.titleBarHeight = totalTopHeight - res.statusBarHeight; 155 resolve(res); 156 }, 157 failure() { 158 vm.globalData.statusBarHeight = 0; 159 vm.globalData.titleBarHeight = 0; 160 reject("获取系统信息失败!"); 161 } 162 }) 163 }) 164 165 }, 166 /** 开始选择地理位置 */ 167 ChooseLocation: function () { 168 let vm = this; 169 wx.showLoading({ 170 title: '获取地理位置', 171 mask: true, 172 }); 173 setTimeout(() => { 174 wx.hideLoading() 175 wx.chooseLocation({ 176 success: (res) => { 177 // console.log(res); 178 if (res.errMsg == "chooseLocation:ok") { 179 if (res.address == "") { 180 vm.CancelChooseLocation() 181 } else { 182 delete res.errMsg; 183 vm.globalData.locationBool = true; // 184 wx.setStorageSync("location", res) //将地理位置缓存 185 vm.GetLoacationOrGoHome(); //前往首页 186 } 187 } else { 188 console.error(res.errMsg); 189 } 190 }, 191 fail: (res) => { 192 vm.CancelChooseLocation() 193 // if (res.errMsg == "chooseLocation:fail cancel") { 194 // vm.CancelChooseLocation() 195 // } else if (res.errMsg =="chooseLocation:fail auth deny"){ 196 // wx.showModal({ 197 // content: 'motiva 需要获取你的位置来定位附近的场地。', 198 // showCancel: false, 199 // success(res) { 200 // if (res.confirm) { 201 // vm.ChooseLocation() 202 // } 203 // } 204 // }) 205 // } 206 console.error("chooseLocation:" + res.errMsg); 207 }, 208 complete: () => { } 209 }); 210 }, 500) 211 }, 212 /**用户取消选择地理位置 */ 213 CancelChooseLocation: function () { 214 let vm = this; 215 let location_name = wx.getStorageSync('location').name; 216 if (!location_name) { 217 wx.showModal({ 218 content: '点击确定在地图下方选择您的地理位置,nunumua 需要定位你附近的场地。', 219 showCancel: false, 220 success(res) { 221 if (res.confirm) { 222 vm.ChooseLocation() 223 } 224 } 225 }) 226 } 227 }, 228 /** 完成授权和地理位置 之后返回首页 */ 229 GetLoacationOrGoHome: function () { 230 // let location = wx.getStorageSync("location"); 231 // if (location) { 232 var pages = getCurrentPages(); 233 if (pages.length == 1) { 234 wx.switchTab({ 235 url: '/pages/home/index/index' 236 }) 237 } else { 238 wx.navigateBack({ 239 delta: 2 240 }) 241 } 242 243 // } else { 244 // this.ChooseLocation(); 245 // } 246 }, 247 /**获取用户信息 */ 248 SaveUserInfo: function (userInfo) { 249 return new Promise((resolve, reject) => { 250 wx.request({ 251 url: SiteInfo["Siteroot"] + '/api/registered', 252 header: { 253 Version: SiteInfo["Version"] 254 }, 255 method: 'POST', 256 data: { 257 userInfo: userInfo 258 }, 259 success(res) { 260 res.data && res.data.code == 200 ? resolve(res.data.data) : reject(res.data.message); 261 }, 262 fail(res) { 263 wx.hideLoading(); 264 console.log('用户注册失败!' + res.errMsg) 265 }, 266 complete: function (res) { 267 wx.hideLoading(); 268 }, 269 }); 270 271 }) 272 }, 273 globalData: { 274 statusBarHeight: 0, 275 titleBarHeight: 0, 276 userInfo: null,//用户信息 277 location: null,//用户地理位置 278 userInfoBool: false,//用户授权 279 locationBool: false,//用户定位 280 needReauth: false //是否需要重新授权 281 } 282 });
获取用户信息、获取定位
import
SiteInfo
from
"siteInfo.js";
App({
onShow
:
function () {
// wx.checkSession({ //检测当前用户的session_key是否过期
// success: function() { //session_key 未过期,并且在本生命周期一直有效
// },
// fail: function() { //session_key 已经失效,需要重新执行登录流程
// console.warn("授权过期,重新登录小程序")
// wx.navigateTo({
// url: "/pages/openauth/index" //重新授权
// })
// }
// })
},
onLaunch
:
function () {
// console.log("授权未过期")
let
vm =
this;
wx.
showToast({
title:
'欢迎来到 motiva !',
icon:
"none",
mask:
true
})
//更新版本
vm.
CheckVersion();
let
promise =
this.
SetHeader();
promise.
then(
res
=> {
}).
catch(
errMsg
=> {
console.
error(
errMsg)
});
},
/**检查小程序版本更新 */
CheckVersion
:
function () {
const
updateManager =
wx.
getUpdateManager()
updateManager.
onCheckForUpdate(
function (
res) {
// 请求完新版本信息的回调
// console.log(res.hasUpdate)
})
updateManager.
onUpdateReady(
function () {
wx.
showModal({
title:
'更新提示',
content:
'新版本已经准备好,是否重启应用?',
success
:
function (
res) {
if (
res.
confirm) {
// 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
updateManager.
applyUpdate()
}
}
})
})
updateManager.
onUpdateFailed(
function () {
// 新版本下载失败
console.
error(
'新版本下载失败!')
wx.
showToast({
title:
'新版本下载失败,请检查你的网路链接是否通畅!',
icon:
'none',
duration:
2000,
mask:
true
})
})
},
/**检查是否授权 */
CheckAuth
:
function () {
var
that =
this;
// 查看是否授权
wx.
getSetting({
success(
res) {
if (
res.
authSetting[
'scope.userInfo']) {
// 已经授权,可以直接调用 getUserInfo 获取头像昵称
wx.
getUserInfo({
success
:
function (
res) {
App.
globalData.
userInfo =
res.
userInfo;
//更新用户信息
}
});
//是否授权获取地理位置
if (!
res.
authSetting[
'scope.userLocation']) {
wx.
navigateTo({
url:
'/pages/openauth/index',
//跳转到授权页面
})
}
}
else {
wx.
navigateTo({
url:
'/pages/openauth/index',
//跳转到授权页面
})
}
}
})
},
/**小程序登录:调用接口获取登录凭证(code) */
WxLogin
:
function () {
return
new
Promise((
resolve,
reject)
=> {
let
vm =
this;
wx.
showLoading({
title:
'登录小程序',
mask:
true
});
wx.
login({
success(
res) {
if (
res.
code) {
//发起网络请求
wx.
request({
url:
SiteInfo[
"Siteroot"] +
'/api/login',
header: {
Version:
SiteInfo[
"Version"]
},
method:
'POST',
data: {
code:
res.
code
},
success(
res) {
res.
data &&
res.
data.
code ==
200 ?
resolve(
res.
data.
data) :
reject(
res.
data.
message);
},
fail(
res) {
wx.
hideLoading();
console.
log(
'登录失败!' +
res.
errMsg)
},
complete
:
function (
res) {
wx.
hideLoading();
},
});
}
else {
wx.
hideLoading();
console.
log(
'登录失败!' +
res.
errMsg)
}
},
fail(
res) {
console.
error(
'调用小程序登录接口失败!' +
res.
errMsg)
wx.
showToast({
title:
'登录小程序失败,请检查你的网路链接是否通畅',
icon:
'none',
duration:
2000,
mask:
true
})
}
})
});
},
/** 自定义头部:返回按钮位置 */
SetHeader
:
function () {
return
new
Promise((
resolve,
reject)
=> {
const
vm =
this;
wx.
getSystemInfo({
success
:
function (
res) {
let
totalTopHeight =
82
if (
res.
model.
indexOf(
'iPhone X') !== -
1) {
totalTopHeight =
110
}
else
if (
res.
model.
indexOf(
'iPhone') !== -
1) {
totalTopHeight =
64
}
vm.
globalData.
statusBarHeight =
res.
statusBarHeight;
vm.
globalData.
titleBarHeight =
totalTopHeight -
res.
statusBarHeight;
resolve(
res);
},
failure() {
vm.
globalData.
statusBarHeight =
0;
vm.
globalData.
titleBarHeight =
0;
reject(
"获取系统信息失败!");
}
})
})
},
/** 开始选择地理位置 */
ChooseLocation
:
function () {
let
vm =
this;
wx.
showLoading({
title:
'获取地理位置',
mask:
true,
});
setTimeout(()
=> {
wx.
hideLoading()
wx.
chooseLocation({
success
: (
res)
=> {
// console.log(res);
if (
res.
errMsg ==
"chooseLocation:ok") {
if (
res.
address ==
"") {
vm.
CancelChooseLocation()
}
else {
delete
res.
errMsg;
vm.
globalData.
locationBool =
true;
//
wx.
setStorageSync(
"location",
res)
//将地理位置缓存
vm.
GetLoacationOrGoHome();
//前往首页
}
}
else {
console.
error(
res.
errMsg);
}
},
fail
: (
res)
=> {
vm.
CancelChooseLocation()
// if (res.errMsg == "chooseLocation:fail cancel") {
// vm.CancelChooseLocation()
// } else if (res.errMsg =="chooseLocation:fail auth deny"){
// wx.showModal({
// content: 'motiva 需要获取你的位置来定位附近的场地。',
// showCancel: false,
// success(res) {
// if (res.confirm) {
// vm.ChooseLocation()
// }
// }
// })
// }
console.
error(
"chooseLocation:" +
res.
errMsg);
},
complete
: ()
=> { }
});
},
500)
},
/**用户取消选择地理位置 */
CancelChooseLocation
:
function () {
let
vm =
this;
let
location_name =
wx.
getStorageSync(
'location').
name;
if (!
location_name) {
wx.
showModal({
content:
'点击确定在地图下方选择您的地理位置,motiva 需要定位你附近的场地。',
showCancel:
false,
success(
res) {
if (
res.
confirm) {
vm.
ChooseLocation()
}
}
})
}
},
/** 完成授权和地理位置 之后返回首页 */
GetLoacationOrGoHome
:
function () {
// let location = wx.getStorageSync("location");
// if (location) {
var
pages =
getCurrentPages();
if (
pages.
length ==
1) {
wx.
switchTab({
url:
'/pages/home/index/index'
})
}
else {
wx.
navigateBack({
delta:
2
})
}
// } else {
// this.ChooseLocation();
// }
},
/**获取用户信息 */
SaveUserInfo
:
function (
userInfo) {
return
new
Promise((
resolve,
reject)
=> {
wx.
request({
url:
SiteInfo[
"Siteroot"] +
'/api/registered',
header: {
Version:
SiteInfo[
"Version"]
},
method:
'POST',
data: {
userInfo:
userInfo
},
success(
res) {
res.
data &&
res.
data.
code ==
200 ?
resolve(
res.
data.
data) :
reject(
res.
data.
message);
},
fail(
res) {
wx.
hideLoading();
console.
log(
'用户注册失败!' +
res.
errMsg)
},
complete
:
function (
res) {
wx.
hideLoading();
},
});
})
},
globalData: {
statusBarHeight:
0,
titleBarHeight:
0,
userInfo:
null,
//用户信息
location:
null,
//用户地理位置
userInfoBool:
false,
//用户授权
locationBool:
false,
//用户定位
needReauth:
false
//是否需要重新授权
}
});