mh_jy_safe_web/src/utils/request.js

117 lines
3.8 KiB
JavaScript
Raw Normal View History

2025-08-25 10:08:30 +08:00
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)
}