chore: 初始化项目 — uni-app + Vue3 + TypeScript 脚手架

This commit is contained in:
jacobxu666
2026-06-14 17:16:18 +08:00
commit 046e84a564
37 changed files with 13763 additions and 0 deletions
+103
View File
@@ -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
}