diff --git a/App.vue b/App.vue index 9943dca..e322074 100644 --- a/App.vue +++ b/App.vue @@ -1,13 +1,99 @@ diff --git a/common/http.js b/common/http.js index c75ad23..69800b2 100644 --- a/common/http.js +++ b/common/http.js @@ -24,7 +24,7 @@ function getsign(params) { return params; } -function $http(url, data = {}){ +function $http(url, data = {}, options = {}){ return new Promise((resolve, reject) => { // 绑定this let that = this; @@ -74,6 +74,12 @@ function $http(url, data = {}){ // 生成sign getsign(data); console.log(url, data); + + // 动态赋值是否显示loading加载框 TODO验证一下是否有问题 + if(that.$shared.isValueType(options.showLoading) != 'undefined'){ + that.$u.http.setConfig({showLoading: options.showLoading}); + } + // 发起请求 that.$u.post(url, data).then(res => { resolve(res); diff --git a/common/mixin.js b/common/mixin.js index f7303db..0a87aa9 100644 --- a/common/mixin.js +++ b/common/mixin.js @@ -70,18 +70,19 @@ export default{ }); }, $url(url, options = {}){ - // TODO 判断登录逻辑;防抖 - if(options.type && options.type !== ''){ - if(options.type === 'redirect'){ // 关闭当前,跳转 - uni.redirectTo({ url }) - }else if(options.type === 'switch'){ // 跳转 - uni.switchTab({ url }) - }else if(options.type === 'launch'){ // 关闭所有,跳转 - uni.reLaunch({ url }) + this.$u.throttle(() => { + if(options.type && options.type !== ''){ + if(options.type === 'redirect'){ // 关闭当前,跳转 + uni.redirectTo({ url }) + }else if(options.type === 'switch'){ // 跳转 + uni.switchTab({ url }) + }else if(options.type === 'launch'){ // 关闭所有,跳转 + uni.reLaunch({ url }) + } + }else{ + uni.navigateTo({ url }) // 跳转 } - }else{ - uni.navigateTo({ url }) // 跳转 - } + }, 100); }, $toBack(){ let pages = getCurrentPages(); // 当前页 diff --git a/common/shared.js b/common/shared.js new file mode 100644 index 0000000..c7a8b9c --- /dev/null +++ b/common/shared.js @@ -0,0 +1,43 @@ +/* + 全局共享实用方法 shared.js + */ + +// 设置角标, 必须传入下标值,设置值可传可不传,传参时显示,不传时移除角标 +function setBadge(index = 0, value){ + if(isRight(value)){ + uni.setTabBarBadge({ + index: Number(index), + text: value > 99 ? '99+' : String(value) + }) + }else{ + uni.removeTabBarBadge({index: Number(index)}); + } +} + +// 判断对错/是否显示,万能校验 +function isRight(obj) { + if (isValueType(obj) === 'string') { + obj = obj.trim(); + if (obj === 'null' || obj === 'undefined') { + return false; + } + } else if (isValueType(obj) === 'number' && (isValueType(obj) === "number" && !isNaN(obj)) && obj !== 0) { + return true; + } + for (var key in obj) { + return true; + } + return false; +} + +// 判断一个值所属的类型,返回一个字符串 +function isValueType(value) { + let str = Object.prototype.toString.call(value); + return str.match(/\[object (.*?)\]/)[1].toLowerCase(); +} + +module.exports = { + setBadge, + isRight, + isValueType +} \ No newline at end of file diff --git a/main.js b/main.js index 1a69262..a972626 100644 --- a/main.js +++ b/main.js @@ -2,6 +2,7 @@ import Vue from 'vue' import App from './App' import mixin from '@/common/mixin.js'; import * as API from '@/common/api.js'; +import $shared from '@/common/shared.js'; Vue.config.productionTip = false @@ -10,6 +11,8 @@ Vue.mixin(mixin); // 将API注入全局 Vue.prototype.API = API; +// 全局共享方法 +Vue.prototype.$shared = $shared; // 引入全局uView import uView from 'uview-ui' diff --git a/pages.json b/pages.json index b088f57..ebcdee7 100644 --- a/pages.json +++ b/pages.json @@ -76,6 +76,12 @@ "style": { "navigationBarTitleText": "登录" } + }, + { + "path": "pages/login/accountLogin", + "style": { + "navigationBarTitleText": "绑定" + } } ], "globalStyle": { diff --git a/pages/center/index.vue b/pages/center/index.vue index 6567d0f..46b25ad 100644 --- a/pages/center/index.vue +++ b/pages/center/index.vue @@ -149,7 +149,8 @@ position: absolute; width: 100%; height: 100%; - z-index: -1; + z-index: 1; + background: transparent; } &:last-child{ border-bottom: none; diff --git a/pages/login/accountLogin.vue b/pages/login/accountLogin.vue new file mode 100644 index 0000000..f716eae --- /dev/null +++ b/pages/login/accountLogin.vue @@ -0,0 +1,165 @@ + + + + + diff --git a/pages/login/index.vue b/pages/login/index.vue index 5908010..c153ccc 100644 --- a/pages/login/index.vue +++ b/pages/login/index.vue @@ -2,16 +2,28 @@ - 游客jdsfbuskdnko - - 暂不绑定继续操作 + 游客jdsfbuskdnko + + + 暂不绑定继续操作 + + + + 使用手机号登录 + + - - + + + + 请认真阅读并同意 《时空网协议》 @@ -27,14 +39,51 @@ export default { data(){ return { - checked: true + checked: false, // 是否勾选协议 + isLogin: false, // 是否已登录 + userInfo: {} } }, onLoad(){ }, methods: { - + // 进入查看协议 + enterAgree(){ + console.log("查看协议"); + }, + // 勾选协议发生变化 + checkboxChange(event){ + console.log(event) + this.checked = event.detail.value.length > 0; + }, + // 微信快捷登录获取手机号 + getPhoneNumber(event){ + console.log(event); + if(event.detail.errMsg == 'getPhoneNumber:ok'){ + let encryptedData = event.detail.encryptedData; + let iv = event.detail.iv; + this.isLogin = true; // TODO 接口请求回来再赋值 + } + }, + // 获取用户信息 + getUserProfile(){ + uni.getUserProfile({ + desc: '您的信息将用于时空网显示', + lang: 'zh_CN', + complete: result => { + console.log(result) + if(result.errMsg == 'getUserProfile:ok'){ + let encryptedData = result.encryptedData; + let iv = result.iv; + let signature = result.signature; + let userInfo = result.userInfo; + // 获取成功,请求接口完毕后返回页面 + this.$toBack(); + } + } + }); + } } } @@ -50,6 +99,7 @@ width: 750rpx; height: auto; box-sizing: border-box; + position: relative; .img{ width: 180rpx; height: 180rpx; @@ -76,4 +126,12 @@ color: #1e90ff; } } + + .mask{ + position: absolute; + bottom: 46rpx; + left: 0; + width: 100%; + height: 190rpx; + }