diff --git a/assets/resources/prefabs/info_menu_input.prefab b/assets/resources/prefabs/info_menu_input.prefab index 5d7f580..0b630cf 100644 --- a/assets/resources/prefabs/info_menu_input.prefab +++ b/assets/resources/prefabs/info_menu_input.prefab @@ -1955,12 +1955,12 @@ "_N$string": "", "_fontSize": 30, "_lineHeight": 40, - "_enableWrapText": false, + "_enableWrapText": true, "_N$file": null, "_isSystemFontUsed": true, "_spacingX": 0, "_N$horizontalAlign": 0, - "_N$verticalAlign": 1, + "_N$verticalAlign": 0, "_N$fontFamily": "Arial", "_N$overflow": 1, "_id": "" @@ -2054,12 +2054,12 @@ "_N$string": "", "_fontSize": 20, "_lineHeight": 50, - "_enableWrapText": false, + "_enableWrapText": true, "_N$file": null, "_isSystemFontUsed": true, "_spacingX": 0, "_N$horizontalAlign": 0, - "_N$verticalAlign": 1, + "_N$verticalAlign": 0, "_N$fontFamily": "Arial", "_N$overflow": 1, "_id": "" @@ -2095,7 +2095,7 @@ }, "_N$returnType": 0, "_N$inputFlag": 5, - "_N$inputMode": 2, + "_N$inputMode": 6, "_N$fontSize": 30, "_N$lineHeight": 40, "_N$fontColor": { @@ -3192,7 +3192,6 @@ "codeImg": { "__id__": 62 }, - "needCode": false, "_id": "" }, { diff --git a/assets/scripts/infoMenu.js b/assets/scripts/infoMenu.js index a68c8a5..068f6a2 100644 --- a/assets/scripts/infoMenu.js +++ b/assets/scripts/infoMenu.js @@ -52,7 +52,7 @@ cc.Class({ self.node.removeFromParent(true); }); this.submitBtn.on('click', function () { - let mobile = self.mobileInput.string; + self.sendJoinInfo(); }); this.captchaBtn.on('click', function () { console.log(self.mobileInput.string); @@ -61,7 +61,15 @@ cc.Class({ alert('请输入有效的手机号码。'); return false; } - webapi.sendSms(mobile) + let code = ''; + if(self.top.needCode) { + code = self.codeInput.string; + if (!stringUtil.checkCaptchaCode(code)) { + alert('请输入正确的图形验证码。'); + return false; + } + } + webapi.sendSms(mobile, code) .then(res => { console.log(res); }) @@ -77,13 +85,12 @@ cc.Class({ showResultView() { let result = cc.instantiate(this.resultPrefab); this.top.node.addChild(result, 11); - this.node.removeFromParent(true); }, showCaptchaInput() { let self = this; cc.loader.load({ - url: webapi.captchaUrl()+'?'+new Date(), + url: webapi.captchaUrl()+'?token='+cc.sys.localStorage.getItem('activity_token')+'&data='+new Date(), type: 'jpg' }, function (err, texture) { if (err) { @@ -92,5 +99,23 @@ cc.Class({ } self.codeImg.spriteFrame = new cc.SpriteFrame(texture); }); + }, + hide() { + this.node.removeFromParent(true); + }, + + sendJoinInfo() { + let self = this; + let mobile = self.mobileInput.string; + if (!stringUtil.checkMobile(mobile)) { + alert('请输入有效的手机号码。'); + return false; + } + let moileCaptcha = self.captchaInput.string; + if (!stringUtil.checkAuthCode(moileCaptcha)) { + alert('请输入正确的验证码。'); + return false; + } + this.top.userLogin(mobile, moileCaptcha); } }); diff --git a/assets/scripts/main.js b/assets/scripts/main.js index 7c7284a..0b40306 100644 --- a/assets/scripts/main.js +++ b/assets/scripts/main.js @@ -1,5 +1,6 @@ -var http = require('./utils/http'); var onfire = require('./utils/onfire'); +let webapi = require('./utils/webapi'); +let stringUtil = require('./utils/string.util'); cc.Class({ extends: cc.Component, @@ -56,24 +57,53 @@ cc.Class({ default: null, type: cc.Node }, + infoView: { + default: null, + type: cc.Node + }, partsY: [], - needCode: true + needCode: true, + logined: false, + mobile: '', + images: [] }, // LIFE-CYCLE CALLBACKS: onLoad () { let self = this; - http.get('http://192.168.100.228/activity/api/index', {} ) - .then(res => { - console.log(res); + webapi.preLogin({}) + .then(rep => { + if (rep.errcode === 0) { + self.needCode = rep.smsCheck; + self.logined = rep.isLogin; + cc.sys.localStorage.setItem('activity_token', rep.token); + if (self.logined) { + return webapi.userInfo() + } + } + return null; }) - .catch(err => { - console.error(err); + .then(userRep => { + if (userRep) { + console.log(userRep); + if (userRep.errcode === 0) { + self.mobile = userRep.user.username; + self.images = userRep.user.images; + self.mainScrollContent.getComponent('scrollContent').updateUserName(stringUtil.parseMobile(self.mobile)); + self.mainScrollContent.getComponent('scrollContent').updatePuzzle(self.images); + self.mainScrollContent.getComponent('scrollContent').toggleLoginStatus(true); + } + + } + }) + .catch (err => { + console.log(err); }); this.partsY = [0, 1560, 2920, 3666, 4686]; this.mainScrollContent = cc.instantiate(this.mainScrollPrefab); this.scrollContent.addChild(this.mainScrollContent); + this.mainScrollContent.getComponent('scrollContent').top = this; this.mainScrollContent.getComponent('scrollContent').joinBtn.on('click', function () { self.showInfoMenu(); }); @@ -129,14 +159,18 @@ cc.Class({ this.topMenu.active = false; }, showInfoMenu() { - let infoMenu; if (this.needCode) { - infoMenu = cc.instantiate(this.infoMenuPrefab2); + this.infoView = cc.instantiate(this.infoMenuPrefab2); } else { - infoMenu = cc.instantiate(this.infoMenuPrefab); + this.infoView = cc.instantiate(this.infoMenuPrefab); } - infoMenu.getComponent('infoMenu').top = this; - this.node.addChild(infoMenu, 11); + this.infoView.getComponent('infoMenu').top = this; + this.node.addChild(this.infoView, 11); + }, + showResultView() { + this.infoView.getComponent('infoMenu').hide(); + let resultView = cc.instantiate(this.resultPrefab); + this.node.addChild(resultView, 11); }, showInviteMenu() { let inviteMenu = cc.instantiate(this.inviteMenuPrefab); @@ -156,5 +190,44 @@ cc.Class({ window.location.href = 'http://qm.qq.com/cgi-bin/qm/qr?k=9OEVDuOyP1BZ_cXOApidE9P2ea8daCVF'; break; } + }, + userLogin(mobile, code) { + let self = this; + webapi.login(mobile, code) + .then(rep => { + if (rep.errcode === 0 || rep.errcode === 102 || rep.errcode === 103) { + self.logined = true; + self.mobile = rep.user.username; + self.images = rep.user.images; + self.mainScrollContent.getComponent('scrollContent').updateUserName(stringUtil.parseMobile(self.mobile)); + self.mainScrollContent.getComponent('scrollContent').updatePuzzle(self.images); + self.mainScrollContent.getComponent('scrollContent').toggleLoginStatus(true); + self.infoView.getComponent('infoMenu').hide(); + if (rep.errcode === 103 || rep.errcode === 102) { + alert('您已预约'); + } + if (rep.errcode === 0) { + self.showResultView(); + } + + } + }) + .catch (err => { + console.log(err); + }); + }, + userLogout() { + let self = this; + if (confirm('确定退出?')) { + webapi.logout() + .then(rep => { + if (rep.errcode === 0) { + self.mainScrollContent.getComponent('scrollContent').toggleLoginStatus(false); + } + }) + .catch(err => { + console.log(err); + }) + } } }); diff --git a/assets/scripts/scrollContent.js b/assets/scripts/scrollContent.js index 8132dc7..36615c6 100644 --- a/assets/scripts/scrollContent.js +++ b/assets/scripts/scrollContent.js @@ -77,13 +77,14 @@ cc.Class({ // LIFE-CYCLE CALLBACKS: onLoad() { + let self = this; this.loginStatusLabel.node.active = false; var processBar = cc.instantiate(this.processBarPrefab); // processBar.getComponent('progressBar').currentVal = 50000; this.part1.addChild(processBar); processBar.getComponent('progressBar').updateShow(50000); - var puzzle = cc.instantiate(this.puzzlePrefab); - this.part2.addChild(puzzle); + this.puzzle = cc.instantiate(this.puzzlePrefab); + this.part2.addChild(this.puzzle); var tip = cc.instantiate(this.tipPrefab); this.part2.addChild(tip); tip.getComponent('inviteTip').setLabelTxt('xx接受了您的邀请'); @@ -91,11 +92,14 @@ cc.Class({ this.part4.addChild(imageSwiper, 0); var bottomSwiper = cc.instantiate(this.bottomSwiperPrefab); this.part5.addChild(bottomSwiper); - let self = this; - this.scheduleOnce(function () { - processBar.getComponent('progressBar').updateShow(35000); - puzzle.getComponent('puzzle').updateValues([0, 1, 0, 1, 0, 1, 1, 0, 1]) - }, 5); + this.logoutBtn.on('click', function () { + self.top.userLogout(); + }) + + // this.scheduleOnce(function () { + // processBar.getComponent('progressBar').updateShow(35000); + // self.puzzle.getComponent('puzzle').updateValues([]) + // }, 5); }, start() { @@ -124,4 +128,14 @@ cc.Class({ this.time = 0; this.startup = false; }, + updatePuzzle(valArr) { + this.puzzle.getComponent('puzzle').updateValues(valArr) + }, + updateUserName(username) { + this.loginStatusLabel.string = username; + }, + toggleLoginStatus(status) { + this.loginStatusLabel.node.active = status; + this.joinBtn.active = !status; + } }); diff --git a/assets/scripts/utils/http.js b/assets/scripts/utils/http.js index e092e5e..e89f22b 100644 --- a/assets/scripts/utils/http.js +++ b/assets/scripts/utils/http.js @@ -19,12 +19,16 @@ const post = (url, data, header) => { const Ajax = (url, method, data, header) => { header = header || {}; + let token = cc.sys.localStorage.getItem('activity_token'); + if (token) { + header['token'] = token; + } return new Promise((resolve, reject) => { var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function () { if (xhr.readyState === 4 ){ if(xhr.status >= 200 && xhr.status < 400) { - resolve(xhr.responseText); + resolve(JSON.parse(xhr.responseText)); }else{ reject(xhr.statusText); } diff --git a/assets/scripts/utils/string.util.js b/assets/scripts/utils/string.util.js index 51914b9..4e7b0d6 100644 --- a/assets/scripts/utils/string.util.js +++ b/assets/scripts/utils/string.util.js @@ -5,7 +5,10 @@ export default { checkAuthCode(code) { return /^\d{6}$/.test(code); }, - checkCaptcheCode(code) { - + checkCaptchaCode(code) { + return /^[a-z,0-9]{4}$/.test(code); + }, + parseMobile(mobile) { + return mobile.slice(0,3) + '****' + mobile.slice(7); } } diff --git a/assets/scripts/utils/webapi.js b/assets/scripts/utils/webapi.js index a7ac021..c15aeee 100644 --- a/assets/scripts/utils/webapi.js +++ b/assets/scripts/utils/webapi.js @@ -1,6 +1,6 @@ var http = require('./http'); -const baseUrl = 'http://192.168.100.228'; +const baseUrl = 'http://192.168.100.228:3000'; export default { sendSms: (mobile, captcha) => { let data = {mobile: mobile}; @@ -12,6 +12,26 @@ export default { return http.post(url, data); }, captchaUrl: () => { - return baseUrl + '/captcha/ch/login' + return baseUrl + '/activity/ch/login' + }, + preLogin: (data) => { + let url = baseUrl + '/activity/api/pre_login'; + return http.post(url, data); + }, + userInfo: () => { + let url = baseUrl + '/activity/api/user_info'; + return http.get(url); + }, + login: (mobile, code) => { + let data = { + mobile: mobile, + captcha: code + }; + let url = baseUrl + '/activity/api/join'; + return http.post(url, data); + }, + logout: () => { + let url = baseUrl + '/activity/api/logout'; + return http.post(url, {}); } }