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 @@