mh_jy_safe_web/src/utils/request.js
wyw 3cc89f5861 待办弹窗修改
请求修改
2025-10-23 15:47:34 +08:00

152 lines
4.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)
}