Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * @description Html 5 與後端程序溝通的程序
- * @export
- * @param [param={Action: '後端方法名稱', Requirement: 後端所需Json Data],[true:要顯示等待畫面,false:不顯示等待畫面]
- * @returns {msg: 'ajax錯誤如:網路數據解析錯誤',json: '後端傳回來的Json資料'}
- * Ajax 傳入參數:
- * body : 傳回後端的Json data
- * Ajax 傳回參數:json 封包
- */
- import { MMCBetInit } from '../service/lottery/alg'
- var I = window.filterXSS.whiteList
- for (var T in I) { I[T].push('style') }
- export default function _fetch (param = {Action: '', Requirement: ''}) {
- param = r(param)
- param = param[0]
- // let s
- // let i = []
- // for (var paramItem in param) {
- // s = param[paramItem]
- // typeof s === 'undefined' ? 'undefined' : s === 'object' && (s = encodeURIComponent(s))
- // i.push(paramItem + '=' + s)
- // }
- // i = i.join('&')
- // for (var l = (new Date()).getTime(), o = 0; o < L.length; o++) {
- // if (L[o][0] + 300 < l) {
- // L.length = o
- // break
- // }
- // if (L[o][1] === i) {
- // return {
- // then: function () {
- // console.log('重复发送')
- // }
- // }
- // }
- // }
- // L.unshift([l, i])
- // 使用Promise包裝api
- return new Promise((resolve, reject) => {
- // 當是在compent建立時,呼叫的ajax,其turning會是ture,會執行timeout動作在10秒內無回應時,就會
- let u = window.store.state.common.turning && setTimeout(function () {
- var msg = '网络请求超时,请重试'
- sysAlert({
- msg: msg
- }, resolve)
- // reject()
- }, 1e4)
- let loadtime = ''
- let load = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : false
- if (load) {
- loadtime = setTimeout(function () {
- window.layer.load()
- }, 500)
- }
- let ajaxUrl = '/tools/_ajax/' + param.Action
- fetch(ajaxUrl, {
- credentials: 'same-origin',
- method: 'POST',
- cache: 'no-store',
- headers: {
- 'Content-Type': 'application/json'
- },
- body: JSON.stringify(param.Requirement)
- }).then(function (data) {
- clearTimeout(loadtime)
- if (param.closeAll === true) {
- window.layer.closeAll()
- }
- if (data.status !== 200) {
- if (data.status === 999) {
- // MMC 訪問過多 初始化
- MMCBetInit()
- window.store.state.canSendReq = true
- let wrongMsg = '您的访问频率过高,请稍后再试'
- return sysAlert({
- msg: wrongMsg
- })
- } else if (data.status === 998) {
- let wrongMsg = '超过访问限制 请稍后再试!'
- window.router.replace({path: '/'})
- return sysAlert({
- msg: wrongMsg
- })
- } else {
- let wrongMsg = '网络不给力,请重新再试。'
- return sysAlert({
- msg: wrongMsg
- })
- }
- }
- data.text().then(function (response) {
- try { response = JSON.parse(response) } catch (error) {
- if (error[0] === '<') {
- window._fetch(param).then(function (trdata) {
- resolve(trdata)
- })
- } else {
- let wrongMsg = '数据解析错误' + response
- sysAlert({
- msg: wrongMsg
- })
- }
- }
- var go = 0
- try {
- if (typeof response !== 'string') {
- response = r(response)
- response = response[0]
- clearTimeout(u)
- } else {
- return
- }
- } catch (error) {
- var msg = '请求中含有敏感字符'
- sysAlert({
- msg: msg,
- error: error
- })
- }
- var data = response.data
- try {
- !(function () {
- switch (response.code) {
- case 'maintain':
- window.store.state.site.servicePath = data.servicePath
- window.store.state.site.isShowMaintain = data.isShowMaintain
- window.router.replace({path: '/maintain', query: {msg: response.msg, memberEndTime: data.maintainEndTime}})
- go = !go
- break
- case 'nologin':
- window.store.dispatch('user.personalInfo.logout.action', false)
- window.router.replace({path: '/login'})
- break
- case 'duplicateLogin':
- window.store.dispatch('user.personalInfo.logout.action', false)
- window.router.replace({path: '/login'})
- sysAlert({
- msg: response.msg
- })
- break
- default:
- break
- }
- }())
- } catch (error) {
- var s = '返回数据拦截处理错误'
- sysAlert({
- msg: s,
- error: error
- })
- }
- // 開雙視窗登入不同帳號,另一個視窗資料同步更新
- let state = window.store.state.user
- let local = localStorage.getItem('user.loginName')
- if (state.loginName !== local) {
- window.store.commit('data.local.to.state')
- }
- go || resolve(response)
- }).catch(function (error) {
- sysAlert({
- msg: '数据错误',
- error: error
- })
- reject(error)
- })
- }).catch(function (error) {
- clearTimeout(loadtime)
- let e = ''
- if (error.toString() !== 'TypeError: Type error') {
- e = error.message === 'Failed to fetch' ? '网络传输吃力,请重新刷新。' : '网络不给力,请检查网络状态。'
- sysAlert({
- msg: e,
- error: error
- })
- }
- reject(error)
- })
- })
- }
- function sysAlert (param) {
- let msg = param.msg
- let errorObject = param.error
- window.layer.closeAll()
- errorObject && (errorObject = errorObject.toString(),
- msg += '<br/>' + errorObject)
- window.layer.alert(msg)
- window.store.state.common.turning && (window.store.dispatch('commitTurning', false))
- // todo: error 要傳回後端的
- }
- // var L = []
- function r (t) {
- var e, a, n, o
- for (var s in t) {
- e = t[s]
- n = typeof e === 'undefined' ? 'undefined' : typeof e
- n === 'object' && (e = r(e),
- e[1] && (o = o || {},
- o[s] = e[1]),
- e = e[0])
- n === 'string' && (a = window.filterXSS(e),
- e !== a && (o = o || {},
- o[s] = {
- old: e,
- new: a
- }),
- e = a)
- t[s] = e
- }
- return [t, o]
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement