Skip to content
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 };

✨ 网站运行时间: 3年11月15天 ❤️ 道阻且长,行则将至 - 微信号: heikedreamer