u
This commit is contained in:
parent
a12226c4e2
commit
bb777ea128
59
usertool.js
59
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) { // 来自 <ucToast> 或 <u-toast> 或 <u-top-tips>
|
||||
toast.show({ type, title, duration, ...rest })
|
||||
} else if (tool!=='uni' && popupMessage) { // 来自 <uni-popup><uni-popup-message></uni-popup-message></uni-popup>
|
||||
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 中不同的组件 <ucToast/> 或 <toast/> 而不同。
|
||||
pageNow.$refs.toast.show({ type, title, duration, ...rest })
|
||||
}
|
||||
},
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user