增量提交
This commit is contained in:
@@ -11,6 +11,9 @@ App({
|
||||
|
||||
// 初始化网络监听
|
||||
this.initNetworkListener()
|
||||
|
||||
// 初始化用户信息
|
||||
this.initUserInfo()
|
||||
},
|
||||
|
||||
onShow: function () {
|
||||
@@ -25,6 +28,207 @@ App({
|
||||
console.error('小程序错误:', msg)
|
||||
},
|
||||
|
||||
// 初始化用户信息
|
||||
initUserInfo: function() {
|
||||
// 从本地存储获取用户信息
|
||||
const storedUserInfo = wx.getStorageSync('userInfo')
|
||||
if (storedUserInfo) {
|
||||
this.globalData.userInfo = storedUserInfo
|
||||
console.log('从本地存储加载用户信息:', storedUserInfo)
|
||||
}
|
||||
|
||||
// 检查授权状态
|
||||
this.checkAuthStatus()
|
||||
},
|
||||
|
||||
// 检查授权状态
|
||||
checkAuthStatus: function() {
|
||||
wx.getSetting({
|
||||
success: (res) => {
|
||||
console.log('授权状态:', res.authSetting)
|
||||
// 检查用户信息授权
|
||||
if (res.authSetting['scope.userInfo']) {
|
||||
console.log('已授权用户信息')
|
||||
} else {
|
||||
console.log('未授权用户信息')
|
||||
}
|
||||
|
||||
// 检查地理位置授权
|
||||
if (res.authSetting['scope.userLocation']) {
|
||||
console.log('已授权地理位置')
|
||||
} else {
|
||||
console.log('未授权地理位置')
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
// 获取用户信息
|
||||
getUserInfo: function(cb) {
|
||||
const that = this
|
||||
|
||||
if (this.globalData.userInfo) {
|
||||
typeof cb == "function" && cb(this.globalData.userInfo)
|
||||
} else {
|
||||
// 检查本地存储是否有用户信息
|
||||
const storedUserInfo = wx.getStorageSync('userInfo')
|
||||
if (storedUserInfo) {
|
||||
that.globalData.userInfo = storedUserInfo
|
||||
typeof cb == "function" && cb(storedUserInfo)
|
||||
} else {
|
||||
// 未授权,需要用户点击授权
|
||||
typeof cb == "function" && cb(null)
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// 触发用户授权
|
||||
triggerUserAuth: function(cb) {
|
||||
const that = this
|
||||
|
||||
wx.getUserProfile({
|
||||
desc: '用于完善个人资料,提供个性化服务',
|
||||
success: (res) => {
|
||||
that.globalData.userInfo = res.userInfo
|
||||
// 存储到本地
|
||||
wx.setStorageSync('userInfo', res.userInfo)
|
||||
// 获取全局唯一ID
|
||||
that.getGlobalUserId((userId) => {
|
||||
typeof cb == "function" && cb(res.userInfo)
|
||||
})
|
||||
},
|
||||
fail: (err) => {
|
||||
console.error('获取用户信息失败:', err)
|
||||
typeof cb == "function" && cb(null)
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
// 获取全局唯一ID(UnionID或OpenID)
|
||||
getGlobalUserId: function(cb) {
|
||||
const that = this
|
||||
|
||||
// 尝试从本地存储获取
|
||||
let userId = wx.getStorageSync('globalUserId')
|
||||
|
||||
if (userId) {
|
||||
typeof cb == "function" && cb(userId)
|
||||
return
|
||||
}
|
||||
|
||||
// 调用微信登录获取code
|
||||
wx.login({
|
||||
success: (res) => {
|
||||
if (res.code) {
|
||||
// 这里应该调用后端接口获取UnionID
|
||||
// 由于是模拟环境,我们使用code生成一个假的UnionID
|
||||
// 实际项目中应该发送code到后端,后端调用微信接口获取UnionID
|
||||
const mockUnionId = `union_${res.code}_${Date.now()}`
|
||||
userId = mockUnionId
|
||||
|
||||
// 存储到本地
|
||||
wx.setStorageSync('globalUserId', userId)
|
||||
that.globalData.globalUserId = userId
|
||||
|
||||
typeof cb == "function" && cb(userId)
|
||||
} else {
|
||||
console.error('获取微信登录凭证失败:', res.errMsg)
|
||||
// 失败时生成一个基于设备的ID作为备选
|
||||
const deviceInfo = that.globalData.systemInfo
|
||||
const fallbackId = `fallback_${deviceInfo.model.replace(/\s+/g, '_')}_${Date.now()}`
|
||||
wx.setStorageSync('globalUserId', fallbackId)
|
||||
that.globalData.globalUserId = fallbackId
|
||||
typeof cb == "function" && cb(fallbackId)
|
||||
}
|
||||
},
|
||||
fail: (err) => {
|
||||
console.error('微信登录失败:', err)
|
||||
// 失败时生成一个基于设备的ID作为备选
|
||||
const deviceInfo = that.globalData.systemInfo
|
||||
const fallbackId = `fallback_${deviceInfo.model.replace(/\s+/g, '_')}_${Date.now()}`
|
||||
wx.setStorageSync('globalUserId', fallbackId)
|
||||
that.globalData.globalUserId = fallbackId
|
||||
typeof cb == "function" && cb(fallbackId)
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
// 获取手机号
|
||||
getPhoneNumber: function(e, cb) {
|
||||
const that = this
|
||||
|
||||
if (e.detail.encryptedData && e.detail.iv) {
|
||||
// 调用网关接口解密手机号
|
||||
wx.request({
|
||||
url: `${that.globalData.gatewayUrl}/v1/wechat/phone`,
|
||||
method: 'POST',
|
||||
data: {
|
||||
encryptedData: e.detail.encryptedData,
|
||||
iv: e.detail.iv,
|
||||
code: e.detail.code // 有些版本会返回code
|
||||
},
|
||||
header: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
success: (res) => {
|
||||
if (res.data && res.data.phoneNumber) {
|
||||
const phoneNumber = res.data.phoneNumber
|
||||
// 存储到本地
|
||||
wx.setStorageSync('phoneNumber', phoneNumber)
|
||||
that.globalData.phoneNumber = phoneNumber
|
||||
typeof cb == "function" && cb(phoneNumber)
|
||||
} else {
|
||||
console.error('解密手机号失败:', res.data)
|
||||
typeof cb == "function" && cb(null)
|
||||
}
|
||||
},
|
||||
fail: (err) => {
|
||||
console.error('请求网关失败:', err)
|
||||
typeof cb == "function" && cb(null)
|
||||
}
|
||||
})
|
||||
} else {
|
||||
console.error('用户拒绝授权手机号或获取加密数据失败')
|
||||
typeof cb == "function" && cb(null)
|
||||
}
|
||||
},
|
||||
|
||||
// 获取地理位置信息
|
||||
getLocation: function(cb) {
|
||||
wx.getLocation({
|
||||
type: 'wgs84',
|
||||
success: (res) => {
|
||||
const locationInfo = {
|
||||
latitude: res.latitude,
|
||||
longitude: res.longitude,
|
||||
speed: res.speed,
|
||||
accuracy: res.accuracy
|
||||
}
|
||||
// 存储到本地
|
||||
wx.setStorageSync('locationInfo', locationInfo)
|
||||
typeof cb == "function" && cb(locationInfo)
|
||||
},
|
||||
fail: (err) => {
|
||||
console.error('获取地理位置失败:', err)
|
||||
typeof cb == "function" && cb(null)
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
// 获取设备信息
|
||||
getDeviceInfo: function() {
|
||||
return this.globalData.systemInfo
|
||||
},
|
||||
|
||||
// 获取网络状态
|
||||
getNetworkType: function(cb) {
|
||||
wx.getNetworkType({
|
||||
success: (res) => {
|
||||
typeof cb == "function" && cb(res.networkType)
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
// 检查更新
|
||||
checkForUpdate: function() {
|
||||
if (wx.canIUse('getUpdateManager')) {
|
||||
@@ -72,9 +276,12 @@ App({
|
||||
// 全局数据
|
||||
globalData: {
|
||||
userInfo: null,
|
||||
globalUserId: null,
|
||||
phoneNumber: null,
|
||||
systemInfo: null,
|
||||
apiBase: 'https://pactgo.cn/api/v1',
|
||||
websocketUrl: 'wss://pactgo.cn/ws/task',
|
||||
gatewayUrl: 'http://localhost:8000',
|
||||
version: '1.0.0'
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user