89 lines
2.7 KiB
TypeScript
89 lines
2.7 KiB
TypeScript
import type { ApiResponse, HttpMethod, RequestOptions } from './types'
|
|
|
|
export type { ApiResponse, RequestOptions }
|
|
|
|
const BASE_URL = 'http://192.168.1.31:8889/' // 测试环境
|
|
// const BASE_URL = 'https://device.shuziweidao.com/gateway/' // 正式环境
|
|
|
|
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['X-Access-Token'] = token
|
|
|
|
return new Promise((resolve, reject) => {
|
|
wx.request({
|
|
url: BASE_URL + url,
|
|
data,
|
|
method,
|
|
header,
|
|
success: (res) => {
|
|
if (loading) _hideLoading()
|
|
const body = res.data as ApiResponse<T>
|
|
if (body.code === 200) {
|
|
resolve(body)
|
|
} else if (body.code === 401) {
|
|
wx.clearStorageSync()
|
|
wx.reLaunch({ url: '/pages/login/login' })
|
|
reject(body)
|
|
} else {
|
|
wx.showToast({ title: body.message || '请求失败', 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)
|
|
|
|
export const del = <T = any>(
|
|
url: string,
|
|
data?: Record<string, any>,
|
|
options?: RequestOptions,
|
|
): Promise<ApiResponse<T>> => request<T>(url, data, 'DELETE', {
|
|
contentType: 'application/x-www-form-urlencoded',
|
|
...options,
|
|
})
|