Files
bodyWeight/miniprogram/utils/request/index.ts
T
17792275749andClaude Sonnet 4.6 e5f76fc0a9 fix(request): 接口响应字段由 data 统一为 result 并调整成功码判断
ApiResponse 业务数据字段由 data 改为 result,成功码由字符串 '00000' 改为数字 200,
登录与补充资料页面同步改为读取 res.result。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-08-20 11:19:03 +08:00

75 lines
2.2 KiB
TypeScript

import type { ApiResponse, HttpMethod, RequestOptions } from './types'
import { BASE_URL, TIMEOUT } from './config'
export type { ApiResponse, RequestOptions }
let _loadingCount = 0
const _showLoading = (title: string): void => {
if (_loadingCount === 0) wx.showLoading({ title, mask: true })
_loadingCount++
}
const _hideLoading = (): void => {
if (_loadingCount > 0) _loadingCount--
if (_loadingCount === 0) wx.hideLoading()
}
const request = <T = any>(
url: string,
data?: Record<string, any>,
method: HttpMethod = 'GET',
options: RequestOptions = {},
): Promise<ApiResponse<T>> => {
const { loading = true, loadingTitle = '加载中...', contentType = 'application/json' } = options
if (loading) _showLoading(loadingTitle)
const header: Record<string, string> = { 'content-type': contentType }
const token = wx.getStorageSync('token') as string
if (token) header['abtoken'] = token
return new Promise((resolve, reject) => {
wx.request({
url: BASE_URL + url,
data,
method,
header,
timeout: TIMEOUT,
success: (res) => {
if (loading) _hideLoading()
const body = res.data as ApiResponse<T>
if (body.code === 200) {
resolve(body)
} else {
wx.showToast({ title: body.msg || '请求失败', icon: 'none' })
reject(body)
}
},
fail: (err) => {
if (loading) _hideLoading()
wx.showToast({ title: '网络异常,请重试', icon: 'none' })
reject(err)
},
})
})
}
export const get = <T = any>(
url: string,
data?: Record<string, any>,
options?: RequestOptions,
): Promise<ApiResponse<T>> => request<T>(url, data, 'GET', options)
export const post = <T = any>(
url: string,
data?: Record<string, any>,
options?: RequestOptions,
): Promise<ApiResponse<T>> => request<T>(url, data, 'POST', options)
export const put = <T = any>(
url: string,
data?: Record<string, any>,
options?: RequestOptions,
): Promise<ApiResponse<T>> => request<T>(url, data, 'PUT', options)