| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- // 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<string, string>) : 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<any> {
- return new Promise<any>((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<string, string>()
- 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))
- }
- })
- })
- }
|