- 小程序首页onLoad方法中判断是否已有用户个人信息(数据库查询)
1.1 如果有用户个人信息,则将用户个人信息保存为全局数据,然后直接跳转到小程序主功能页面
1.2 如果没有用户个人信息,则首页显示“开始使用”按钮
- 用户点击“开始使用”按钮
1.1 冗余判读,如果已有用户个人信息,则将用户个人信息保存为全局数据,然后直接跳转到小程序主功能页面
1.2 如果没有用户个人信息,则弹出对话框,提示允许使用微信头像和昵称,用户同意后将获取的用户个人信息保存到数据库,再将用户个人信息保存为全局数据,然后直接跳转到小程序主功能页面
主要代码如下:
first.wxml
<view class="page">
<view class="text-center">
<view class="text-xl text-grey">欢迎访问小程序</view>
<view class="text-xxl text-green" style="padding-top: 50rpx; font-weight: bold">****</view>
</view>
<view class="text-xl text-grey" style="text-indent:72rpx;">****是一个辅助老师管理学生信息的效率工具,****提供了<text class="text-orange">学生考勤</text>、<text class="text-orange">家校联系</text>、<text class="text-orange">信息收集</text>、<text class="text-orange">数据统计</text>等功能。</view>
<view class="text-center" hidden="{{hidddenBtn}}">
<button type="primary" bindtap="startUseMiniProgram">开始使用</button>
<view class="text-gray text-sm" style="padding-top: 20rpx;">请允许****使用微信头像和昵称</view>
</view>
<view></view>
</view>
first.js
var app = getApp()
Page({
/**
* 页面的初始数据
*/
data: {
hidddenBtn: true,
},
// 进入主页面
enterMainPage() {
let mainPageUrl = '/pages/attendance/index'
wx.redirectTo({
url: mainPageUrl,
})
},
// 开始使用小程序
startUseMiniProgram: function (e) {
if(app.globalData.hasUserInfo) {
// 已有用户个人信息,则进入小程序主页面(冗余判断)
this.enterMainPage()
}else {
// 没有用户个人信息,则获取用户个人信息
this.getUserProfile()
}
},
// 获取用户头像和昵称信息
getUserProfile() {
var that = this
// 推荐使用wx.getUserProfile获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认
// 开发者妥善保管用户快速填写的头像昵称,避免重复弹窗
wx.getUserProfile({
desc: '用于完善用户资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
success: (res) => {
// 将用户个人信息保存到数据库
that.saveUserInfo(res.userInfo)
}
})
},
// 保存用户个人信息到数据库
saveUserInfo (userInfo) {
var that = this
wx.cloud.callFunction({
name: 'v1_operationUserInfo',
data: {
action: 'saveUserInfo',
userInfo: userInfo,
},
success: res => {
console.warn('[云函数] [v1_operationUserInfo] saveUserInfo 调用成功:', res)
// 再将用户个人信息保存为全局数据
that.saveUserInfo2GlobaoData(userInfo)
},
fail: err => {
console.error('[云函数] [v1_operationUserInfo] saveUserInfo 调用失败:', err)
}
})
},
// 查询用户信息
searchUserInfo() {
var that = this
wx.cloud.callFunction({
name: 'v1_operationUserInfo',
data: {
action: 'searchUserInfo',
},
success: res => {
console.warn('[云函数] [v1_operationUserInfo] searchUserInfo 调用成功:', res)
if(res.result!=null && res.result.data.length==1) {
// 查询到用户信息
let userInfo = res.result.data[0].userInfo
// 再将用户个人信息保存为全局数据
that.saveUserInfo2GlobaoData(userInfo)
}else {
// 没有查询到用户信息,显示开始使用按钮
that.setData({
hidddenBtn: false
})
}
},
fail: err => {
console.error('[云函数] [v1_operationUserInfo] searchUserInfo 调用失败:', err)
}
})
},
// 将用户个人信息保存为全局数据后,小程序所有页面均可使用用户个人信息
saveUserInfo2GlobaoData(userInfo) {
// 保存为全局数据
app.globalData.userInfo = userInfo
app.globalData.hasUserInfo = true
console.log('app.globalData', app.globalData)
// 进入小程序主页面
this.enterMainPage()
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
// 查询是否已有用户信息
this.searchUserInfo()
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
}
})
first.wxss
page, .page {
height: 100%;
}
.page {
padding: 0 50rpx;
display: flex;
flex-direction: column;
justify-content: space-around;
align-items: center;
}
云函数:v1_operationUserInfo
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({
traceUser: true,
env: 'cloud1-4gdsuky0da99176e'
})
const db = cloud.database()
const _ = db.command
// 云函数入口函数
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
switch (event.action) {
case 'saveUserInfo': {
return saveUserInfo(event, wxContext)
}
case 'searchUserInfo': {
return searchUserInfo(event, wxContext)
}
default: {
return
}
}
}
// 写入用户信息
async function saveUserInfo(event, wxContext) {
let date = new Date()
let time = date.getTime()
try {
return await db.collection('v1_userInfo').add({
data: {
openid: wxContext.OPENID,
appid: wxContext.APPID,
unionid: wxContext.UNIONID,
userInfo: event.userInfo,
createDate: date,
createTime: time,
dataStatus: 1 // 1-有效,0-无效(逻辑删除)
}
})
} catch (e) {
console.error(e)
}
}
// 查询用户信息,如果一个用户查询出多条记录,取最新的一条记录
async function searchUserInfo(event, wxContext) {
try {
return await db.collection('v1_userInfo')
.where({openid: wxContext.OPENID})
.orderBy('createTime', 'desc')
.limit(1)
.get()
} catch (e) {
console.error(e)
}
}
网友评论