Files
smartDriveEEUniApp/common/request.js

160 lines
3.3 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.

/**
* 统一的 HTTP 请求封装
* 自动添加 tenantId、token 等公共参数
*/
import { getApiUrl } from './config.js'
/**
* 获取 tenantId从本地存储
*/
function getTenantId() {
try {
return uni.getStorageSync('backend-tenant-id') || ''
} catch (e) {
console.error('获取 tenantId 失败:', e)
return ''
}
}
/**
* 获取 token从本地存储
*/
function getToken() {
try {
return uni.getStorageSync('backend-token') || ''
} catch (e) {
console.error('获取 token 失败:', e)
return ''
}
}
/**
* 统一的请求方法
* @param {Object} options - uni.request 的配置选项
* @param {string} options.url - 请求地址(会自动使用 getApiUrl 处理)
* @param {string} options.method - 请求方法,默认 'GET'
* @param {Object} options.data - 请求数据
* @param {Object} options.header - 请求头(会自动合并公共 header
* @param {number} options.timeout - 超时时间
* @param {boolean} options.needTenantId - 是否需要添加 tenantId默认 true
* @param {boolean} options.needToken - 是否需要添加 token默认 true
* @returns {Promise} 请求结果
*/
export function request(options = {}) {
const {
url,
method = 'GET',
data = {},
header = {},
timeout = 10000,
needTenantId = true,
needToken = true,
...restOptions
} = options
// 处理 URL自动添加 baseUrl
const fullUrl = url.startsWith('http') ? url : getApiUrl(url)
// 构建请求头
const requestHeader = {
'Content-Type': 'application/json',
...header
}
// 添加 token如果需要
if (needToken) {
const token = getToken()
if (token) {
requestHeader['Authorization'] = `Bearer ${token}`
// 或者使用其他 header 名称,根据后端要求调整
// requestHeader['X-Token'] = token
}
}
// 处理请求数据
let requestData = { ...data }
// 添加 tenantId 到 X-Tenant-Id header
// 技术方案:登录返回的 LoginResponse 中包含 tenantId前端保存后自动添加到所有请求的 header 中
if (needTenantId) {
const tenantId = getTenantId()
if (tenantId) {
// 将 tenantId 放入 X-Tenant-Id header适用于所有请求类型GET、POST、PUT、DELETE
requestHeader['X-Tenant-Id'] = tenantId
}
}
// 发起请求
return new Promise((resolve, reject) => {
uni.request({
url: finalUrl,
method: method.toUpperCase(),
data: requestData,
header: requestHeader,
timeout,
...restOptions,
success: (res) => {
resolve(res)
},
fail: (err) => {
console.error('[Request] 请求失败:', {
url: finalUrl,
method: method.toUpperCase(),
error: err
})
reject(err)
}
})
})
}
/**
* GET 请求快捷方法
*/
export function get(url, data = {}, options = {}) {
return request({
url,
method: 'GET',
data,
...options
})
}
/**
* POST 请求快捷方法
*/
export function post(url, data = {}, options = {}) {
return request({
url,
method: 'POST',
data,
...options
})
}
/**
* PUT 请求快捷方法
*/
export function put(url, data = {}, options = {}) {
return request({
url,
method: 'PUT',
data,
...options
})
}
/**
* DELETE 请求快捷方法
*/
export function del(url, data = {}, options = {}) {
return request({
url,
method: 'DELETE',
data,
...options
})
}