117 lines
3.8 KiB
JavaScript
117 lines
3.8 KiB
JavaScript
|
|
import fetch from 'dva/fetch'
|
|||
|
|
import { message } from 'antd'
|
|||
|
|
import MD5 from 'md5'
|
|||
|
|
import queryString from 'query-string'
|
|||
|
|
import config from '../config'
|
|||
|
|
import { history } from './history'
|
|||
|
|
import storage from './storage'
|
|||
|
|
|
|||
|
|
export function request(url, options, onlyData, requestKey, onException) {
|
|||
|
|
return fetch(
|
|||
|
|
config.serviceHost('api/' + url),
|
|||
|
|
options || {}
|
|||
|
|
).then(response => {
|
|||
|
|
// 登陆过期
|
|||
|
|
if (response.status === 401) {
|
|||
|
|
window.localStorage.removeItem('accessToken')
|
|||
|
|
history.replace({ pathname: '/login' })
|
|||
|
|
throw new Error('token过期')
|
|||
|
|
}
|
|||
|
|
requestKey && window.localStorage.removeItem(requestKey)
|
|||
|
|
return response.json()
|
|||
|
|
}).then(data => {
|
|||
|
|
data.IsSuccessful !== undefined && !data.IsSuccessful && message.error(data.ErrorMessage)
|
|||
|
|
return onlyData ? data.Data : data
|
|||
|
|
}).catch(err => {
|
|||
|
|
requestKey && window.localStorage.removeItem(requestKey)
|
|||
|
|
onException instanceof Function && onException(err)
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 获取请求 headers
|
|||
|
|
* @param {*} url
|
|||
|
|
* @param {*} type
|
|||
|
|
* @param {*} isIgnoreTenant
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
export function getRequestHeaders(url, type = 'post', isIgnoreTenant) {
|
|||
|
|
// 请求参数
|
|||
|
|
const addHeader = 'Bearer ' + storage('lacal').getItem('accessToken').val
|
|||
|
|
const userId = storage('lacal').getItem('userid').val
|
|||
|
|
if (!userId) {
|
|||
|
|
history.replace({ pathname: '/login' })
|
|||
|
|
}
|
|||
|
|
const user = storage('lacal').getItem('loginUserVerify').val
|
|||
|
|
const RootOrgId = storage('lacal').getItem('RootOrgId').val
|
|||
|
|
const orgId = storage('lacal').getItem('webOrgId').val
|
|||
|
|
const depId = storage('lacal').getItem('departmentId').val
|
|||
|
|
const mineType = storage('lacal').getItem('MineType').val
|
|||
|
|
const DataRule = storage('lacal').getItem('DataRule').val
|
|||
|
|
const headers = {
|
|||
|
|
'Content-Type': type === 'post' ? 'application/json' : 'application/x-www-form-urlencoded',
|
|||
|
|
Authorization: addHeader,
|
|||
|
|
userid: userId,
|
|||
|
|
username: user ? user.username : '',
|
|||
|
|
departmentId: depId,
|
|||
|
|
MineType: mineType,
|
|||
|
|
RootOrgId,
|
|||
|
|
orgId,
|
|||
|
|
DataRule
|
|||
|
|
}
|
|||
|
|
// 非 OP 路径接口,header 需要添加 Tenant
|
|||
|
|
const Tenant = storage('lacal').getItem('Tenant').val
|
|||
|
|
url.indexOf('OP') != 0 && !isIgnoreTenant && (headers.Tenant = Tenant)
|
|||
|
|
return headers
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* post 请求
|
|||
|
|
* @param {*} url
|
|||
|
|
* @param {*} data
|
|||
|
|
* @param {*} onlyData
|
|||
|
|
* @param {*} ignoreThrottle
|
|||
|
|
* @param {*} onException
|
|||
|
|
* @param {*} isIgnoreTenant
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
export function httpPost(url, data, onlyData = true, ignoreThrottle, onException, isIgnoreTenant) {
|
|||
|
|
//const DataRule = storage('lacal').getItem('DataRule').val
|
|||
|
|
const OrgRule = storage('lacal').getItem('OrgRule').val
|
|||
|
|
// 与 isIgnoreTenant 相关配套的逻辑
|
|||
|
|
const extraData = isIgnoreTenant ? { OrgId: '', IgnoreOrgRule: true } : {}
|
|||
|
|
//const dataStr = JSON.stringify(Object.assign({}, data, { DataRule, OrgRule, ...extraData }))
|
|||
|
|
const dataStr = JSON.stringify(Object.assign({}, data, { OrgRule, ...extraData }))
|
|||
|
|
// 请求节流
|
|||
|
|
const requestKey = url + '_' + MD5(dataStr) + '_requestKey'
|
|||
|
|
const loaded = storage('lacal').getItem(requestKey).val
|
|||
|
|
if (loaded && !ignoreThrottle) return null
|
|||
|
|
storage('lacal').setItem(requestKey, true)
|
|||
|
|
|
|||
|
|
// 发起请求
|
|||
|
|
return request(url, {
|
|||
|
|
method: 'POST',
|
|||
|
|
headers: getRequestHeaders(url, 'post', isIgnoreTenant),
|
|||
|
|
body: dataStr,
|
|||
|
|
}, onlyData, requestKey, onException)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* get 请求
|
|||
|
|
* @param {*} url
|
|||
|
|
* @param {*} data
|
|||
|
|
* @param {*} onlyData
|
|||
|
|
* @param {*} onException
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
export function httpGet(url, data, onlyData = true, onException) {
|
|||
|
|
const formParams = queryString.stringify(data)
|
|||
|
|
const searchMark = url.indexOf('?') !== -1
|
|||
|
|
const formUrl = `${url}${searchMark ? '&' : '?'}${formParams}`
|
|||
|
|
url = formParams ? formUrl : url
|
|||
|
|
return request(url, {
|
|||
|
|
method: 'GET',
|
|||
|
|
headers: getRequestHeaders(url, 'get'),
|
|||
|
|
}, onlyData, null, onException)
|
|||
|
|
}
|