diff --git a/usertool.js b/usertool.js index 64702b9..8c3aeaa 100644 --- a/usertool.js +++ b/usertool.js @@ -13,7 +13,7 @@ export default { WHITE_BUTTON: 'default', // [todo] 能否把这些默认值放到 export 以外? - BACKEND_DEFAULT: 'SERVER', // 服务器 SERVER 或云服务 UNICLOUD + BASE_TYPE_DEFAULT: 'SERVER', // 服务器 SERVER 或云服务 UNICLOUD thisPage () { return this.__page__ @@ -152,12 +152,12 @@ export default { /** 统一 uni.request 和 uniCloud.callFunction 的调用方法,提供统一、透明的后台调用 * 返回值:{ _state, 成功结果或错误结果 },其中 _state 除了后台返回的,还可以是 - * - CLIENT_BACKEND_BROKEN: 前端发现后台断线 - * - CLIENT_BACKEND_TIMEOUT: 前端发现后台超时 - * - CLINET_BACKEND_EXCEPTION: 前端发现后台异常 + * - CLIENT_BASEND_BROKEN: 前端发现后台断线 + * - CLIENT_BASEND_TIMEOUT: 前端发现后台超时 + * - CLINET_BASEND_EXCEPTION: 前端发现后台异常 **/ - async callBackend ({ - backend = this.envar?.Backend_Default || wo?.envar?.Backend_Default || this.BACKEND_DEFAULT, + async callBase ({ + basendType = this.envar?.Basend_Type_Default || wo?.envar?.Basend_Type_Default || this.BASE_TYPE_DEFAULT, httpMethod = 'POST', apiVersion = 'api', apiWho, @@ -168,7 +168,14 @@ export default { const startTime = new Date().toJSON() let url = undefined let result = {} - if (backend === 'UNICLOUD') { + if (basendType === 'UNICLOUD_OBJECT') { + const uniObj = uniCloud.importObject(apiWho) + try { + result = await uniObj[apiTodo](apiWhat) + }catch(error){ + result = { _state: 'CLINET_BASEND_EXCEPTION', error } + } + }else if (basendType === 'UNICLOUD') { let { /* success, header, requestedId, */ result: resultCloud = {} } = await uniCloud .callFunction({ name: apiWho, @@ -183,14 +190,14 @@ export default { // {errMsg, stack} = error if (/request:fail/.test(error.errMsg)) { // 后台云服务无法连接 - return { _state: 'CLIENT_BACKEND_BROKEN', error } + return { _state: 'CLIENT_BASEND_BROKEN', error } } else { // 后台云服务返回异常 - return { _state: 'CLIENT_BACKEND_EXCEPTION', error } + return { _state: 'CLIENT_BASEND_EXCEPTION', error } } }) result = resultCloud - } else { + } else if (basendType === 'SERVER') { if (httpMethod === 'GET') { // 如果不是 POST 方法,要额外把参数JSON化 for (let key in apiWhat) { @@ -207,17 +214,19 @@ export default { if (error) { if (error.errMsg === 'request:fail') { // 后台服务器无法连接 - result = { _state: 'CLIENT_BACKEND_BROKEN', error } + result = { _state: 'CLIENT_BASEND_BROKEN', error } } else if (error.errMsg === 'request:fail timeout') { // 后台服务器超时 - result = { _state: 'CLIENT_BACKEND_TIMEOUT', error } + result = { _state: 'CLIENT_BASEND_TIMEOUT', error } } else { // 后台服务器返回异常 - result = { _state: 'CLIENT_BACKEND_EXCEPTION', error } + result = { _state: 'CLIENT_BASEND_EXCEPTION', error } } } else { result = resultServer } + }else { + result = { _state: 'CLIENT_BASEND_TYPE_UNKNOWN' } } // 注意1,resultServer 和 resultCloud 推荐遵循同样的格式 { _state, error | data },这样方便前端做统一判断。 // 注意2,虽然预设了 resultServer 和 resultCloud = {},但如果后台返回了 null,那么 resultServer/resultCloud 也是 null。 @@ -226,7 +235,7 @@ export default { '%c ' + JSON.stringify({ startTime: startTime, page: thisRoute, endTime: new Date().toJSON() }) + ' %c ' + - JSON.stringify({ backend, apiWho, apiTodo, apiWhat, url }) + + JSON.stringify({ basendType, apiWho, apiTodo, apiWhat, url }) + ' %c ' + JSON.stringify(result), 'color:blue', @@ -359,7 +368,7 @@ export default { }, async pickupFile ({ - backend = this.envar?.Backend_Default || wo?.envar?.Backend_Default || this.BACKEND_DEFAULT, + basendType = this.envar?.Basend_Type_Default || wo?.envar?.Basend_Type_Default || this.BASE_TYPE_DEFAULT, mediaType = 'image', count = 1, sizeType = ['original', 'compressed'], @@ -370,14 +379,14 @@ export default { formData = {}, name = 'file', } = {}) { - if (backend === 'UNICLOUD') { + if (/^UNICLOUD/.test(basendType)) { const resultCloud = await this.pickupFile2Cloud({ mediaType, count, sizeType, sourceType, maxDuration }) return resultCloud - } else if (backend === 'SERVER') { + } else if (basendType === 'SERVER') { const resultServer = await this.pickupFile2Server({ mediaType, count, sizeType, sourceType, maxDuration, url, header, formData, name }) return resultServer } else { - return { _state: 'CLEINT_FAIL_UNKNOWN_BACKEND_TYPE', backend } + return { _state: 'CLEINT_FAIL_UNKNOWN_BASEND_TYPE', basendType } } }, @@ -437,7 +446,7 @@ export default { type=info (by default)/success/error/warning|loading, position:top/bottom }) - * u-toast.show({ + * uToptips.show({ type=default (by default)/primary/success/error/warning/info, position:center/top/bottom, callback // 发生在 toast 之后 @@ -445,16 +454,20 @@ export default { */ showToast ({ tool, type, image, title, duration = 2000, ...rest }) { const pageNow = this.thisPage() - if (tool === 'uni' || !pageNow?.$refs?.toast) { + const toast = pageNow?.$refs?.toast || getApp().globalData.toast || wo.toast + const popupMessage = pageNow?.$refs?.popupMessage || getApp().globalData.popupMessage || wo.popupMessage + if (tool!=='uni' && toast) { // 来自 + toast.show({ type, title, duration, ...rest }) + } else if (tool!=='uni' && popupMessage) { // 来自 + popupMessage.popmsg = title + popupMessage.open() + } else { // #ifdef APP-PLUS uni.showToast({ icon: 'none', title, duration, ...rest }) // #endif // #ifdef H5 uni.showToast({ icon: 'none', image, title, duration, ...rest }) // #endif - } else { - // 根据 html 中不同的组件 而不同。 - pageNow.$refs.toast.show({ type, title, duration, ...rest }) } },