chore: 初始化项目 — uni-app + Vue3 + TypeScript 脚手架
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
interface RequestOptions {
|
||||
url: string
|
||||
method?: 'GET' | 'POST' | 'PUT' | 'DELETE'
|
||||
data?: any
|
||||
header?: any
|
||||
needToken?: boolean
|
||||
}
|
||||
|
||||
interface ResponseData<T = any> {
|
||||
code: number
|
||||
message: string
|
||||
data: T
|
||||
}
|
||||
|
||||
const BASE_URL = ''
|
||||
const TOKEN_KEY = 'app_token'
|
||||
|
||||
function getToken(): string {
|
||||
return uni.getStorageSync(TOKEN_KEY) || ''
|
||||
}
|
||||
|
||||
function setToken(token: string): void {
|
||||
uni.setStorageSync(TOKEN_KEY, token)
|
||||
}
|
||||
|
||||
function removeToken(): void {
|
||||
uni.removeStorageSync(TOKEN_KEY)
|
||||
}
|
||||
|
||||
function request<T = any>(options: RequestOptions): Promise<T> {
|
||||
return new Promise((resolve, reject) => {
|
||||
const { url, method = 'GET', data, needToken = true } = options
|
||||
|
||||
const header: any = {
|
||||
'Content-Type': 'application/json',
|
||||
...options.header
|
||||
}
|
||||
|
||||
if (needToken) {
|
||||
const token = getToken()
|
||||
if (token) {
|
||||
header['Authorization'] = `Bearer ${token}`
|
||||
}
|
||||
}
|
||||
|
||||
uni.request({
|
||||
url: BASE_URL + url,
|
||||
method,
|
||||
data,
|
||||
header,
|
||||
success: (res: any) => {
|
||||
const result = res.data as ResponseData<T>
|
||||
if (res.statusCode === 200) {
|
||||
if (result.code === 0 || result.code === 200) {
|
||||
resolve(result.data as T)
|
||||
} else if (result.code === 401) {
|
||||
removeToken()
|
||||
uni.showToast({ title: '请先登录', icon: 'none' })
|
||||
reject(new Error(result.message || '未授权'))
|
||||
} else {
|
||||
uni.showToast({ title: result.message || '请求失败', icon: 'none' })
|
||||
reject(new Error(result.message || '请求失败'))
|
||||
}
|
||||
} else {
|
||||
uni.showToast({ title: '网络错误', icon: 'none' })
|
||||
reject(new Error('网络错误'))
|
||||
}
|
||||
},
|
||||
fail: (err: any) => {
|
||||
uni.showToast({ title: '网络连接失败', icon: 'none' })
|
||||
reject(err)
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function get<T = any>(url: string, data?: any, needToken: boolean = true): Promise<T> {
|
||||
return request<T>({ url, method: 'GET', data, needToken })
|
||||
}
|
||||
|
||||
function post<T = any>(url: string, data?: any, needToken: boolean = true): Promise<T> {
|
||||
return request<T>({ url, method: 'POST', data, needToken })
|
||||
}
|
||||
|
||||
function put<T = any>(url: string, data?: any, needToken: boolean = true): Promise<T> {
|
||||
return request<T>({ url, method: 'PUT', data, needToken })
|
||||
}
|
||||
|
||||
function del<T = any>(url: string, data?: any, needToken: boolean = true): Promise<T> {
|
||||
return request<T>({ url, method: 'DELETE', data, needToken })
|
||||
}
|
||||
|
||||
export {
|
||||
request,
|
||||
get,
|
||||
post,
|
||||
put,
|
||||
del,
|
||||
getToken,
|
||||
setToken,
|
||||
removeToken,
|
||||
BASE_URL
|
||||
}
|
||||
Reference in New Issue
Block a user