ts
// utils/api.ts
interface UserInfo {
nickName: string;
avatarUrl: string;
gender: number;
country: string;
province: string;
city: string;
}
import { BASE_URL } from '../../config';
interface RequestOptions {
url: string;
method?: 'GET' | 'POST' | 'PUT' | 'DELETE';
data?: any;
header?: Record<string, string>;
complete?: () => void;
}
/**
* 封装 wx.request 请求,自动拼接根路径
* @param {RequestOptions} options 请求参数
* @returns {Promise<any>}
*/
const request = (options: RequestOptions): Promise<any> => {
return new Promise((resolve, reject) => {
// 拼接完整的URL
const url = `${BASE_URL}${options.url}`;
wx.request({
url,
method: options.method || 'GET',
data: options.data || {},
header: options.header || {},
success: (res) => {
if (res.statusCode === 200) {
resolve(res.data);
} else {
reject(`请求失败,状态码: ${res.statusCode}`);
}
},
fail: (error) => {
reject(error);
},
complete: options.complete || (() => {}),
});
});
};
/**
* 封装 wx.getUserInfo 获取用户信息
* @returns {Promise<UserInfo>}
*/
const getUserInfo = (): Promise<UserInfo> => {
return new Promise((resolve, reject) => {
wx.getUserInfo({
success: (res) => resolve(res.userInfo),
fail: (error) => reject(error),
});
});
};
/**
* 封装 wx.showToast 弹出提示框
* @param {string} title 提示内容
* @param {string} icon 提示框图标类型
*/
const showToast = (title: string, icon: 'none' | 'success' | 'loading' = 'none') => {
wx.showToast({
title,
icon,
duration: 2000,
});
};
/**
* 封装 wx.navigateTo 页面跳转
* @param {string} url 跳转路径
*/
const navigateTo = (url: string) => {
wx.navigateTo({
url,
});
};
/**
* 封装 wx.setStorage 设置缓存
* @param {string} key 键名
* @param {any} value 值
*/
const setStorage = (key: string, value: any) => {
wx.setStorage({
key,
data: value,
});
};
/**
* 封装 wx.getStorage 获取缓存
* @param {string} key 键名
* @returns {Promise<any>}
*/
const getStorage = (key: string): Promise<any> => {
return new Promise((resolve, reject) => {
wx.getStorage({
key,
success: (res) => resolve(res.data),
fail: (error) => reject(error),
});
});
};
export { request, getUserInfo, showToast, navigateTo, setStorage, getStorage };