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