diff --git a/app.js b/app.js index c58f898..b885f7b 100644 --- a/app.js +++ b/app.js @@ -1,49 +1,81 @@ //app.js // global.regeneratorRuntime = require('./utils/regenerator/runtime-module') +import api from './utils/api.js'; + + App({ - onLaunch: function() { + + async onLaunch() { // 展示本地存储能力 // var logs = wx.getStorageSync('logs') || [] // logs.unshift(Date.now()) // wx.setStorageSync('logs', logs) - var openId = this.globalData.openId = wx.getStorageSync('openId') || ''; + var openId = wx.getStorageSync('openId') || ''; - // 登录 - // wx.login({ - // success: res => { - // // 发送 res.code 到后台换取 openId, sessionKey, unionId - // console.log('login==>', res); - // } - // }) - if (openId){ + this.globalData.openId = openId + + if (openId) { // 已经有openid了 可以直接获取用户信息 + console.log('init get user info'); + await this.getUserInfo(openId); + return; + } else { + // 登录并获取openid + wx.login({ + success: res => { + // 发送 res.code 到后台换取 openId, sessionKey, unionId + console.log('login==>', res); + if (res.errMsg == 'login:ok') { + this.processLogin(res.code); + } + } + }); return; } // 获取用户信息 - wx.getSetting({ - success: res => { - console.log('getSetting==>', res); - if (res.authSetting['scope.userInfo']) { - // 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框 - wx.getUserInfo({ - success: res => { - // 可以将 res 发送给后台解码出 unionId - this.globalData.wxuserInfo = res.userInfo - - // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回 - // 所以此处加入 callback 以防止这种情况 - if (this.userInfoReadyCallback) { - this.userInfoReadyCallback(res) - } + + }, + async processLogin(code) { + try { + let data = await api.userLogin(code); + // 获取openid + this.globalData.openId = data.openid; + // 保存用户openid + wx.setStorageSync('openId', this.globalData.openId); + + } catch (e) { + console.log('login error->', e); + } + }, + getOpenId() { + return new Promise(async(resolve, reject) => { + if(this.globalData.openId){ + resolve(this.globalData.openId) + }else{ + wx.login({ + success:async res => { + if (res.errMsg == 'login:ok') { + await this.processLogin(res.code); + resolve(this.globalData.openId) } - }) - } + } + }); } }) + }, + async getUserInfo() { + try { + let openid = this.globalData.openId; + let userInfo = await api.userInfo(openid, false); + console.log('init user info data', userInfo); + this.globalData.userInfo = userInfo; + } catch (e) { + console.log('init user info error', e); + } }, globalData: { - wxuserInfo:null, + wxuserInfo: null, userInfo: null, openId: '' } diff --git a/app.json b/app.json index 4ea5238..352747c 100644 --- a/app.json +++ b/app.json @@ -1,10 +1,10 @@ { "pages": [ "pages/index/index", + "pages/init/userinfo", "pages/user/result", "pages/user/evaluation", "pages/user/index", - "pages/init/userinfo", "pages/init/agreement" ], "window": { diff --git a/assets/icon-error.svg b/assets/icon-error.svg new file mode 100644 index 0000000..d3faa2c --- /dev/null +++ b/assets/icon-error.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pages/index/index.js b/pages/index/index.js index dbf813a..8650fd0 100644 --- a/pages/index/index.js +++ b/pages/index/index.js @@ -2,14 +2,15 @@ //index.js //获取应用实例 const app = getApp() +import api from './../../utils/api.js'; Page({ data: { - motto: 'Hello World', + motto: 'Hello', userInfo: { avatarUrl: '/assets/head.svg', - realname:'张二娃', - lastEvaluation:'2019-06-23 09:43' + realname: '张二娃', + lastEvaluation: '2019-06-23 09:43' }, hasUserInfo: false, canIUse: wx.canIUse('button.open-type.getUserInfo') @@ -21,51 +22,132 @@ Page({ content: '', }) }, - onUserInfoTap(){ - wx.navigateTo({ - url: '../user/index' - }) - }, onLoad: function() { + console.log('index load data',app.globalData) // 加载 - if (app.globalData.userInfo) { - this.setData({ - userInfo: app.globalData.userInfo, - hasUserInfo: true - }) + if (app.globalData.openId) { // 已经获取了用户数据 + this.processGetUserInfo(); } else if (this.data.canIUse) { // 可以获取用户信息 // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回 // 所以此处加入 callback 以防止这种情况 - app.userInfoReadyCallback = res => { - this.setData({ - userInfo: res.userInfo, - hasUserInfo: true - }) - } + // app.userInfoReadyCallback = res => { + // this.processGetUserInfo(res.userInfo) + // } + // 获取用户信息 + wx.getSetting({ + success: res => { + console.log('getSetting==>', res); + if (res.authSetting['scope.userInfo']) { + // 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框 + wx.getUserInfo({ + success: res => { + this.processGetUserInfo(res.userInfo) + // // 可以将 res 发送给后台解码出 unionId + // this.globalData.wxuserInfo = res.userInfo + + // // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回 + // // 所以此处加入 callback 以防止这种情况 + // if (this.userInfoReadyCallback) { + // this.userInfoReadyCallback(res) + // } + } + }) + } + } + }) } else { // 在没有 open-type=getUserInfo 版本的兼容处理 wx.getUserInfo({ success: res => { - app.globalData.userInfo = res.userInfo - this.setData({ - userInfo: res.userInfo, - hasUserInfo: true - }) + this.processGetUserInfo(res.userInfo) } }) } }, - getUserInfo: function(e) { - console.log(e) - app.globalData.wxuserInfo = e.detail.userInfo - this.setData({ - userInfo: e.detail.userInfo, - hasUserInfo: true + getUserInfo: function(e) { // 获取草用户数据 + this.processGetUserInfo(e.detail.userInfo) + }, + + // 初始化用户数据 + async initUserInfo() { + try { + let openid = await app.getOpenId(); + let userInfo = await api.userInfo(openid, false); + console.log('init user info data', userInfo); + this.globalData.userInfo = userInfo; + this.processGetUserInfo(userInfo); + } catch (e) { + console.log('init user info error', e); + } + }, + // 处理获取到用户数据的逻辑 + async processGetUserInfo(userInfo) { + // + if (app.globalData.userInfo) { // 已经存在数据则直接跳过 + this.setData({ + userInfo: app.globalData.userInfo, + hasUserInfo: true + }); + return; + }else{ // 尝试创建该用户 + + let openid = app.globalData.openId; + let userInfo = null; + try{ + userInfo = await api.userInfo(openid, false); + if (userInfo.detail){ + userInfo['realname'] = userInfo.detail.realname; + } + app.globalData.userInfo = userInfo; + this.setData({ + userInfo: userInfo, + hasUserInfo: true + }); + return; + }catch(e){} + try { + let data = await api.createUserInfo({ + open_id: app.globalData.openId, + nickname: userInfo.nickName, + username: app.globalData.openId, + avatarUrl: userInfo.avatarUrl, + }); + // 保存数据 + app.globalData.userInfo = data; + this.setData({ + userInfo: data, + hasUserInfo: true + }); + } catch (e) { + console.log('create user error', e); + } + } + // 判断是否需要跳转 + if (this.data.userInfo.detail) { return; } + this.gotoAgreementPage() + + }, + gotoAgreementPage() { + wx.navigateTo({ + url: '../init/agreement' }) }, - gotoEvaluation(){ - wx.navigateTo({ - url: './../user/evaluation', - }) + gotoUserIndex() { + if (this.data.userInfo.detail) { // 判断是否已经存在用户数据 + wx.navigateTo({ + url: '../user/index' + }) + }else{ + this.gotoAgreementPage() + } + }, + gotoEvaluation() { + if (this.data.userInfo.detail) { // 判断是否已经存在用户数据 + wx.navigateTo({ + url: './../user/evaluation', + }) + } else { + this.gotoAgreementPage() + } } }) \ No newline at end of file diff --git a/pages/index/index.wxml b/pages/index/index.wxml index 0dc3732..ea580b2 100644 --- a/pages/index/index.wxml +++ b/pages/index/index.wxml @@ -1,7 +1,7 @@