Advertisement
Guest User

Untitled

a guest
Jun 21st, 2018
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /**
  2.  * @description Html 5 與後端程序溝通的程序
  3.  * @export
  4.  * @param [param={Action: '後端方法名稱', Requirement: 後端所需Json Data],[true:要顯示等待畫面,false:不顯示等待畫面]
  5.  * @returns {msg: 'ajax錯誤如:網路數據解析錯誤',json: '後端傳回來的Json資料'}
  6.  * Ajax 傳入參數:
  7.  * body : 傳回後端的Json data
  8.  * Ajax 傳回參數:json 封包
  9.  */
  10. import { MMCBetInit } from '../service/lottery/alg'
  11. var I = window.filterXSS.whiteList
  12. for (var T in I) { I[T].push('style') }
  13. export default function _fetch (param = {Action: '', Requirement: ''}) {
  14.   param = r(param)
  15.   param = param[0]
  16.  
  17.   // let s
  18.   // let i = []
  19.   // for (var paramItem in param) {
  20.   //   s = param[paramItem]
  21.   //   typeof s === 'undefined' ? 'undefined' : s === 'object' && (s = encodeURIComponent(s))
  22.   //   i.push(paramItem + '=' + s)
  23.   // }
  24.   // i = i.join('&')
  25.   // for (var l = (new Date()).getTime(), o = 0; o < L.length; o++) {
  26.   //   if (L[o][0] + 300 < l) {
  27.   //     L.length = o
  28.   //     break
  29.   //   }
  30.   //   if (L[o][1] === i) {
  31.   //     return {
  32.   //       then: function () {
  33.   //         console.log('重复发送')
  34.   //       }
  35.   //     }
  36.   //   }
  37.   // }
  38.   // L.unshift([l, i])
  39.   // 使用Promise包裝api
  40.  
  41.   return new Promise((resolve, reject) => {
  42.     // 當是在compent建立時,呼叫的ajax,其turning會是ture,會執行timeout動作在10秒內無回應時,就會
  43.     let u = window.store.state.common.turning && setTimeout(function () {
  44.       var msg = '网络请求超时,请重试'
  45.       sysAlert({
  46.         msg: msg
  47.       }, resolve)
  48.       // reject()
  49.     }, 1e4)
  50.  
  51.     let loadtime = ''
  52.     let load = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : false
  53.     if (load) {
  54.       loadtime = setTimeout(function () {
  55.         window.layer.load()
  56.       }, 500)
  57.     }
  58.     let ajaxUrl = '/tools/_ajax/' + param.Action
  59.     fetch(ajaxUrl, {
  60.       credentials: 'same-origin',
  61.       method: 'POST',
  62.       cache: 'no-store',
  63.       headers: {
  64.         'Content-Type': 'application/json'
  65.       },
  66.       body: JSON.stringify(param.Requirement)
  67.     }).then(function (data) {
  68.       clearTimeout(loadtime)
  69.       if (param.closeAll === true) {
  70.         window.layer.closeAll()
  71.       }
  72.  
  73.       if (data.status !== 200) {
  74.         if (data.status === 999) {
  75.           // MMC 訪問過多 初始化
  76.           MMCBetInit()
  77.           window.store.state.canSendReq = true
  78.           let wrongMsg = '您的访问频率过高,请稍后再试'
  79.           return sysAlert({
  80.             msg: wrongMsg
  81.           })
  82.         } else if (data.status === 998) {
  83.           let wrongMsg = '超过访问限制 请稍后再试!'
  84.           window.router.replace({path: '/'})
  85.           return sysAlert({
  86.             msg: wrongMsg
  87.           })
  88.         } else {
  89.           let wrongMsg = '网络不给力,请重新再试。'
  90.           return sysAlert({
  91.             msg: wrongMsg
  92.           })
  93.         }
  94.       }
  95.  
  96.       data.text().then(function (response) {
  97.         try { response = JSON.parse(response) } catch (error) {
  98.           if (error[0] === '<') {
  99.             window._fetch(param).then(function (trdata) {
  100.               resolve(trdata)
  101.             })
  102.           } else {
  103.             let wrongMsg = '数据解析错误' + response
  104.             sysAlert({
  105.               msg: wrongMsg
  106.             })
  107.           }
  108.         }
  109.         var go = 0
  110.         try {
  111.           if (typeof response !== 'string') {
  112.             response = r(response)
  113.             response = response[0]
  114.             clearTimeout(u)
  115.           } else {
  116.             return
  117.           }
  118.         } catch (error) {
  119.           var msg = '请求中含有敏感字符'
  120.           sysAlert({
  121.             msg: msg,
  122.             error: error
  123.           })
  124.         }
  125.         var data = response.data
  126.         try {
  127.           !(function () {
  128.             switch (response.code) {
  129.               case 'maintain':
  130.                 window.store.state.site.servicePath = data.servicePath
  131.                 window.store.state.site.isShowMaintain = data.isShowMaintain
  132.                 window.router.replace({path: '/maintain', query: {msg: response.msg, memberEndTime: data.maintainEndTime}})
  133.                 go = !go
  134.                 break
  135.               case 'nologin':
  136.                 window.store.dispatch('user.personalInfo.logout.action', false)
  137.                 window.router.replace({path: '/login'})
  138.                 break
  139.               case 'duplicateLogin':
  140.                 window.store.dispatch('user.personalInfo.logout.action', false)
  141.                 window.router.replace({path: '/login'})
  142.                 sysAlert({
  143.                   msg: response.msg
  144.                 })
  145.                 break
  146.               default:
  147.                 break
  148.             }
  149.           }())
  150.         } catch (error) {
  151.           var s = '返回数据拦截处理错误'
  152.           sysAlert({
  153.             msg: s,
  154.             error: error
  155.           })
  156.         }
  157.  
  158.         // 開雙視窗登入不同帳號,另一個視窗資料同步更新
  159.         let state = window.store.state.user
  160.         let local = localStorage.getItem('user.loginName')
  161.         if (state.loginName !== local) {
  162.           window.store.commit('data.local.to.state')
  163.         }
  164.  
  165.         go || resolve(response)
  166.       }).catch(function (error) {
  167.         sysAlert({
  168.           msg: '数据错误',
  169.           error: error
  170.         })
  171.         reject(error)
  172.       })
  173.     }).catch(function (error) {
  174.       clearTimeout(loadtime)
  175.  
  176.       let e = ''
  177.       if (error.toString() !== 'TypeError: Type error') {
  178.         e = error.message === 'Failed to fetch' ? '网络传输吃力,请重新刷新。' : '网络不给力,请检查网络状态。'
  179.         sysAlert({
  180.           msg: e,
  181.           error: error
  182.         })
  183.       }
  184.       reject(error)
  185.     })
  186.   })
  187. }
  188.  
  189. function sysAlert (param) {
  190.   let msg = param.msg
  191.   let errorObject = param.error
  192.   window.layer.closeAll()
  193.   errorObject && (errorObject = errorObject.toString(),
  194.         msg += '<br/>' + errorObject)
  195.   window.layer.alert(msg)
  196.   window.store.state.common.turning && (window.store.dispatch('commitTurning', false))
  197.   // todo: error 要傳回後端的
  198. }
  199. // var L = []
  200. function r (t) {
  201.   var e, a, n, o
  202.   for (var s in t) {
  203.     e = t[s]
  204.     n = typeof e === 'undefined' ? 'undefined' : typeof e
  205.     n === 'object' && (e = r(e),
  206.             e[1] && (o = o || {},
  207.             o[s] = e[1]),
  208.             e = e[0])
  209.     n === 'string' && (a = window.filterXSS(e),
  210.             e !== a && (o = o || {},
  211.             o[s] = {
  212.               old: e,
  213.               new: a
  214.             }),
  215.             e = a)
  216.     t[s] = e
  217.   }
  218.   return [t, o]
  219. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement