152 lines
4.9 KiB
JavaScript
152 lines
4.9 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)
|
||
throw err; // 重新抛出错误,确保错误被正确传播
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 获取请求 headers
|
||
* @param {*} url
|
||
* @param {*} type
|
||
* @param {*} isIgnoreTenant
|
||
* @returns
|
||
*/
|
||
export function getRequestHeaders(url, type = 'post', data, 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 ? user.username : '',
|
||
departmentId: depId,
|
||
MineType: mineType,
|
||
RootOrgId,
|
||
orgId,
|
||
DataRule
|
||
}
|
||
// 非 OP 路径接口,header 需要添加 Tenant
|
||
const Tenant = storage('lacal').getItem('Tenant').val
|
||
if (url.indexOf('PF/Login/Login') !== -1) {
|
||
// Login接口使用最新的Tenant、Orgid、userid、Username值
|
||
const latestTenant = storage('lacal').getItem('Tenant').val
|
||
const latestOrgid = storage('lacal').getItem('Orgid').val
|
||
const latestUserid = storage('lacal').getItem('Userid').val
|
||
const latestUsername = storage('lacal').getItem('Username').val
|
||
if (latestTenant) {
|
||
headers.Tenant = latestTenant
|
||
}
|
||
if (latestOrgid) {
|
||
// 覆盖原有的orgId字段,使用最新值
|
||
headers.orgId = latestOrgid
|
||
}
|
||
if (latestUserid) {
|
||
// 覆盖原有的userid字段,使用最新值
|
||
headers.userid = latestUserid
|
||
}
|
||
if (latestUsername) {
|
||
// 覆盖原有的username字段,使用最新值
|
||
headers.username = latestUsername
|
||
}
|
||
} else if (url.indexOf('OP') != 0 && !isIgnoreTenant) {
|
||
headers.Tenant = Tenant
|
||
}
|
||
|
||
//wyw
|
||
if (Tenant && Tenant == '003' && data && data.Parameter22 && data.Parameter22.length > 20) {
|
||
//总公司 Parameter22 存入子公司的ORG_ID 自动切换数据库链接
|
||
headers.Tenant = data.Parameter22.substring(0, 3)
|
||
}
|
||
|
||
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', data, 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', data),
|
||
}, onlyData, null, onException)
|
||
}
|