This commit is contained in:
陆柯 2022-05-03 12:23:03 +08:00
parent a12226c4e2
commit bb777ea128

View File

@ -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' }
}
// 注意1resultServer 和 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 })
}
},