diff --git a/App.vue b/App.vue index 313eae1ee8bdab4a4591034dbf58e20b3aefd5af..08fe8aaf5e1dfb7ee77571d41c34eafb3f562342 100644 --- a/App.vue +++ b/App.vue @@ -13,7 +13,7 @@ // #ifdef APP-PLUS //checkIsAgree(); 暂时先用默认生成的,自定义的等待原生支持后实现。因为启动vue界面时已经,请求了部分权限这并不符合国家的法规 // #endif - + // #ifdef APP-PLUS //一键登录 功能预登录 plus.oauth.getServices(oauthServices => { @@ -37,31 +37,6 @@ console.error('获取服务供应商失败:' + JSON.stringify(err)); }) // #endif - - //clientDB的错误提示 - const db = uniCloud.database() - function onDBError({ - code, // 错误码详见https://uniapp.dcloud.net.cn/uniCloud/clientdb?id=returnvalue - message - }) { - // 处理错误 - console.log(code,message); - if([ - 'TOKEN_INVALID_INVALID_CLIENTID', - 'TOKEN_INVALID', - 'TOKEN_INVALID_TOKEN_EXPIRED', - 'TOKEN_INVALID_WRONG_TOKEN', - 'TOKEN_INVALID_ANONYMOUS_USER', - ].includes(code)){ - uni.navigateTo({ - url:'/pages/ucenter/login-page/index/index' - }) - } - } - // 绑定clientDB错误事件 - db.on('error', onDBError) - // 解绑clientDB错误事件 - //db.off('error', onDBError) }, onShow: function() { console.log('App Show') diff --git a/README.md b/README.md index 2e463e567c3c011473eb89041a672bed1ccab5cf..eab918f905abd6c6cb5280a60abd03c6d2cdea8c 100644 --- a/README.md +++ b/README.md @@ -177,6 +177,22 @@ uni-starter + uniCloud admin,应用开发从未如此简单快捷! 1. 最新的华为应用市场要求,隐私政策提示框上接受按钮的文本,必须为“同意”而不能是其他有歧义的文字。 2. 配置后提交云端打包后生效。理论上绝大部分和`manifest.json`生效相关的配置均需要提交云打包后生效 +#### 10.拦截器改造后的uniCloud +1. Debug,调试期间开启Debug。接口一旦file就会弹出真实错误信息。否则将弹出,系统错误请稍后再试! +``` + if(Debug){ + console.log(e); + uni.showModal({ + content: JSON.stringify(e), + showCancel: false + }); + } +``` +2. 断网自动重试,当callFunction为fail时检测是否因断网引起。如果是会提醒用户并且会在恢复网络之后自动重新发起请求 +3. 常规的errCoder自动执行对应程序,如token无效/过期自动跳转到登陆页面。 +4. token自动续期。 + + ### 应用启动时序介绍 文件路径: App.vue ``` diff --git a/changelog.md b/changelog.md index e390145ffc2324cdb2cd152fd1d5c61580c8fa4c..824b0ad363030bf9fc6e3a09496bae3e7494907e 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,5 @@ +## 1.0.9(2021-05-23) +修复变量被重复定义的问题 ## 1.0.8(2021-05-22) 宫格页(/pages/grid/grid),新增根据当前用户是否登陆、是否为管理员的角色来决定是否显示的示范 ## 1.0.7(2021-05-22) diff --git a/common/appInit.js b/common/appInit.js index feaa79ea681e2d21b893fa90530d15a7c07702c7..5b55b624b970e01983ac8058a92d86f5d7134d78 100644 --- a/common/appInit.js +++ b/common/appInit.js @@ -1,10 +1,12 @@ import uniStarterConfig from '@/uni-starter.config.js'; +import store from '@/store' //应用初始化页 // #ifdef APP-PLUS import checkUpdate from '@/uni_modules/uni-upgrade-center-app/utils/check-update'; import callCheckVersion from '@/uni_modules/uni-upgrade-center-app/utils/call-check-version'; import interceptorChooseImage from '@/uni_modules/json-interceptor-chooseImage/js_sdk/main.js'; // #endif +const db = uniCloud.database() export default function() { setTimeout(()=>{ @@ -21,7 +23,132 @@ export default function() { interceptorChooseImage() // #endif - + + //clientDB的错误提示 + function onDBError({ + code, // 错误码详见https://uniapp.dcloud.net.cn/uniCloud/clientdb?id=returnvalue + message + }) { + // 处理错误 + console.log(code,message); + if([ + 'TOKEN_INVALID_INVALID_CLIENTID', + 'TOKEN_INVALID', + 'TOKEN_INVALID_TOKEN_EXPIRED', + 'TOKEN_INVALID_WRONG_TOKEN', + 'TOKEN_INVALID_ANONYMOUS_USER', + ].includes(code)){ + uni.navigateTo({ + url:'/pages/ucenter/login-page/index/index' + }) + } + } + // 绑定clientDB错误事件 + db.on('error', onDBError) + + // 解绑clientDB错误事件 + //db.off('error', onDBError) + + db.on('refreshToken', function({ + token, + tokenExpired + }) { + console.log('监听到clientDB的refreshToken',{token,tokenExpired}); + store.commit('user/login', { + token, + tokenExpired + }) + }) + + + const Debug = true; + //拦截器封装callFunction + let callFunctionOption; + uniCloud.addInterceptor('callFunction',{ + invoke(e){ + console.log(JSON.stringify(e)); + callFunctionOption = e + }, + complete(e){ + // console.log(JSON.stringify(e)); + }, + fail(e) { // 失败回调拦截 + if(Debug){ + console.log(e); + uni.showModal({ + content: JSON.stringify(e), + showCancel: false + }); + }else{ + uni.showModal({ + content: "系统错误请稍后再试!", + showCancel: false, + confirmText:"知道了" + }); + } + //如果执行错误,检查是否断网 + uni.getNetworkType({ + complete:res => { + console.log(res); + if (res.networkType == 'none') { + uni.showToast({ + title: '手机网络异常', + icon: 'none' + }); + console.log('手机网络异常'); + let callBack = res=>{ + console.log(res); + if (res.isConnected) { + uni.showToast({ + title: '恢复联网自动重新执行', + icon: 'none' + }); + console.log(res.networkType,"恢复联网自动重新执行"); + uni.offNetworkStatusChange(e=>{ + console.log("移除监听成功",e); + }) + //恢复联网自动重新执行 + uniCloud.callFunction(callFunctionOption) + uni.offNetworkStatusChange(callBack); + } + } + uni.onNetworkStatusChange(callBack); + } + } + }); + }, + success:(e)=>{ + console.log(e); + const {token,tokenExpired} = e.result + if (token && tokenExpired) { + store.commit('user/login', { + token, + tokenExpired + }) + } + + console.log(e.result.code); + switch (e.result.code){ + case 403: + uni.showModal({ + content: '未登陆,跳登陆', + showCancel: false + }); + break; + case 50101: + uni.showToast({ + title: e.result.msg, + icon: 'none', + duration:2000 + }); + break; + default: + console.log('code的值是:'+e.result.code,'可以在这里插入,自动处理响应体'); + break; + } + } + }) + //自定义路由拦截 const {"router": {needLogin,login} } = uniStarterConfig //需要登录的页面 let list = ["navigateTo", "redirectTo", "reLaunch", "switchTab"]; diff --git a/components/uni-quick-login/uni-quick-login.vue b/components/uni-quick-login/uni-quick-login.vue index 574a0eeefcbc7943f41b129e192531bda3d5ad4c..3ccfcd2b9093418b360df1f1de145468e8cadca1 100644 --- a/components/uni-quick-login/uni-quick-login.vue +++ b/components/uni-quick-login/uni-quick-login.vue @@ -93,8 +93,8 @@ }, }, created() { - console.log('loginConfig', this.loginConfig); - console.log('this.getRoute(1)', this.getRoute(1)); + // console.log('loginConfig', this.loginConfig); + // console.log('this.getRoute(1)', this.getRoute(1)); let servicesList = this.servicesList //去掉当前页面对应的登录选项 for (var i = 0; i < servicesList.length; i++) { @@ -109,7 +109,7 @@ servicesList.splice(i, 1) } } - console.log('servicesList', servicesList); + // console.log('servicesList', servicesList); }, mounted() { //获取当前环境能用的快捷登录方式 @@ -265,17 +265,27 @@ params, type }); - this.request('uni-id-cf/login_by_' + type, params, result => { - console.log(result); - if (result.code === 0) { - if (type == 'univerify') { - uni.closeAuthView() - } - uni.hideLoading() - loginSuccess(result) - delete result.userInfo.token - this.setUserInfo(result.userInfo) - } + uniCloud.callFunction({ + name:'uni-id-cf', + data:{ + action:'login_by_'+type, + params + }, + success: ({result}) => { + console.log(result); + if (result.code === 0) { + if (type == 'univerify') { + uni.closeAuthView() + } + uni.hideLoading() + loginSuccess(result) + delete result.userInfo.token + this.setUserInfo(result.userInfo) + } + }, + complete: () => { + uni.hideLoading() + } }) }, async getUserInfo(e) { diff --git a/components/uni-send-sms-code/uni-send-sms-code.vue b/components/uni-send-sms-code/uni-send-sms-code.vue index ee7046dbad202863e016cc6164acafec878711be..d58cf7432e5f8bd94279bf5d30cedc75bf036b26 100644 --- a/components/uni-send-sms-code/uni-send-sms-code.vue +++ b/components/uni-send-sms-code/uni-send-sms-code.vue @@ -74,22 +74,26 @@ title: '手机号格式错误', icon: 'none' }); - - this.request('uni-id-cf/sendSmsCode', - { - "mobile": this.phone, - "type": this.codeType - },result=>{ - console.log(result); - uni.showToast({ - title: "短信验证码发送成功", - icon: 'none' - }); - this.reverseNumber = Number(this.count); - this.getCode(); - this.$emit('getCode'); - } - ) + uniCloud.callFunction({ + name:'uni-id-cf', + data:{ + action:'sendSmsCode', + params:{ + "mobile": this.phone, + "type": this.codeType + }, + }, + success: ({result}) => { + console.log(result); + uni.showToast({ + title: "短信验证码发送成功", + icon: 'none' + }); + this.reverseNumber = Number(this.count); + this.getCode(); + this.$emit('getCode'); + } + }) }, getCode() { if (this.reverseNumber == 0) { diff --git a/js_sdk/request.js b/js_sdk/request.js deleted file mode 100644 index f9a5f628e68cb04ee6e1bee3c660b8d66fcdf170..0000000000000000000000000000000000000000 --- a/js_sdk/request.js +++ /dev/null @@ -1,38 +0,0 @@ -/* -1.优雅访问指定路由地址 -2.load自动显示与关闭 -3.统一路由拦截 - 3.1 读取云端接口权限配置,先验证本地token再访问 - 3.2 处理因token过期等问题自动更新本地token,或token无效跳转至登录页面 -*/ -const debug = true;//开启后,会alert错误信息 -export default function request(name,params,callback=false,{showLoading=false,loadText='',fail=()=>{}}={}){ - // console.log('request'); - showLoading||loadText? uni.showLoading({title:loadText,mask:true}):''; - let routers = name.split('/'); - var action = false - if (routers.length>1){ - name = routers[0] - action = routers[1] - } - console.log({name,data:{action,params}}) - return new Promise((resolve,reject)=>{ - uniCloud.callFunction({name,data:{action,params}, - success(e){ - console.log(e); - const {result:{data,code}} = e - console.log(data,code); - resolve(e) - return callback(e.result,e) - }, - fail(err){ - reject(err) - console.log(err); - fail(err) - }, - complete() { - if(showLoading || loadText) uni.hideLoading() - } - }) - }) -} \ No newline at end of file diff --git a/main.js b/main.js index 7c03a732fb3fe720ab7982fcae998008ea577fa4..4b4275845110f6e42e238b88698d6a3cdd290054 100644 --- a/main.js +++ b/main.js @@ -2,10 +2,8 @@ import Vue from 'vue' import App from './App' import store from './store/index.js'; import openApp from './common/openApp.js'; -import request from './js_sdk/request.js'; Vue.config.productionTip = false -Vue.prototype.request = request openApp(); App.mpType = 'app' diff --git a/package.json b/package.json index 128393133d41657e15c09ac1fe9e54c071577906..5424ed06532918fd7cbbdf7b0f67e00f0e438467 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "id": "uni-starter", "displayName": "uni-starter", - "version": "1.0.7", + "version": "1.0.9", "description": "云端一体应用快速开发模版", "keywords": [ "uni-starter", diff --git a/pages/list/list.nvue b/pages/list/list.nvue index 6bc8b30686d38eddcc9d7a206ab8b74f376f46d2..b46c5613728b27234a9ad8e74890569b05bc34f9 100644 --- a/pages/list/list.nvue +++ b/pages/list/list.nvue @@ -58,7 +58,7 @@ } } }, - onReady() { + onReady() { // #ifdef APP-NVUE this.listHight = uni.getSystemInfoSync().windowHeight - 96 + 'px' // #endif diff --git a/pages/ucenter/login-page/index/index.vue b/pages/ucenter/login-page/index/index.vue index 0f14bee287803cec8ae57c2da7ab30b332643277..8c54a53010cb5b1fd97e8be27caa63fcf87e7cc9 100644 --- a/pages/ucenter/login-page/index/index.vue +++ b/pages/ucenter/login-page/index/index.vue @@ -13,7 +13,7 @@ -