// request.uts - 无警告 最终版 export class RequestOptions { url : string = '' method : string = 'GET' params : UTSJSONObject | null = null data : UTSJSONObject | null = null showLoading : boolean = true loadingMsg : string = '加载中' showError : boolean = true } // 修复:any → any | null 声明可空,消除null判断警告 function toUTSJSONObject(obj : any | null) : UTSJSONObject | null { if (obj == null) return null if (obj instanceof UTSJSONObject) return obj const result = new UTSJSONObject() const keys = UTSJSONObject.keys(obj as UTSJSONObject) for (let i = 0; i < keys.length; i++) { const key = keys[i] const val = (obj as UTSJSONObject).get(key) if (val != null) { result.set(key, val) } } return result } // Map 转 UTSJSONObject function mapToUTSJSONObject(map : Map) : UTSJSONObject { const obj = new UTSJSONObject() map.forEach((value : string, key : string) => { obj.set(key, value) }) return obj } // 修复:any → any | null function buildQueryString(params : any | null) : string { if (params == null) return '' const obj = toUTSJSONObject(params) if (obj == null) return '' const keys = UTSJSONObject.keys(obj) let query = '' for (let i = 0; i < keys.length; i++) { const key = keys[i] const val = obj.get(key) if (val != null) { if (query.length > 0) query += '&' query += key + '=' + encodeURIComponent(val.toString()) } } return query } export function request(options : any | null) : Promise { return new Promise((resolve, reject) => { if (options == null) { reject(new Error('请求参数不能为空')) return } const opts = toUTSJSONObject(options) if (opts == null) { reject(new Error('请求参数格式错误')) return } const baseURL = '/' const url = opts.getString('url') ?? '' const method = opts.getString('method') ?? 'GET' const params = opts.get('params') const data = opts.get('data') const showLoading = opts.getBoolean('showLoading') ?? true const loadingMsg = opts.getString('loadingMsg') ?? '加载中' // 拼接基础地址 + 接口地址 let finalUrl = baseURL + url.replace(/^\//, '') const upperMethod = method.toUpperCase() // GET 参数拼接 if (upperMethod === 'GET' && params != null) { const query = buildQueryString(params) if (query.length > 0) finalUrl += '?' + query } const headerMap = new Map() headerMap.set('Content-Type', 'application/json') const token = uni.getStorageSync('token') as string if (token.length > 0) headerMap.set('Authorization', 'Bearer ' + token) const tenantId = uni.getStorageSync('tenantId') as string | null headerMap.set('tenant-id', tenantId ?? 'default') headerMap.set('terminal', uni.getSystemInfoSync().platform) const header = mapToUTSJSONObject(headerMap) let requestData : string | null = null if (upperMethod !== 'GET' && data != null) { requestData = JSON.stringify(data) } if (showLoading) { uni.showLoading({ title: loadingMsg, mask: true }) } uni.request({ url: finalUrl, method: upperMethod, data: requestData, header: header, timeout: 15000, success: (res) => { uni.hideLoading() if (res.statusCode >= 200 && res.statusCode < 300) { resolve(res.data as any ?? {}) } else { reject(new Error('请求失败:HTTP ' + res.statusCode)) } }, fail: (err) => { uni.hideLoading() reject(new Error('网络错误:' + err.errMsg)) } }) }) }