个人常用工具函数--总结中

176 阅读2分钟

1.dayjs

import dayjs from 'dayjs';

const DATE_TIME_FORMAT = 'YYYY-MM-DD HH:mm:ss';
const DATE_FORMAT = 'YYYY-MM-DD';

export function formatToDateTime(date?: dayjs.ConfigType, format = DATE_TIME_FORMAT): string {
  return dayjs(date).format(format);
}

export function formatToDate(date?: dayjs.ConfigType, format = DATE_FORMAT): string {
  return dayjs(date).format(format);
}

export const dateUtil = dayjs;

2.localstorage

import { reactive } from 'vue';

interface StorageOptions {
  namespace?: string;
  storage?: Storage;
}

const DEFAULT_NAMESPACE = 'app';
const DEFAULT_STORAGE = window.localStorage;
const DEFAULT_EXPIRES = 7 * 24 * 60 * 60 * 1000; // 7 天

export function createStorage(options: StorageOptions = {}) {
  const { namespace = DEFAULT_NAMESPACE, storage = DEFAULT_STORAGE } = options;
  const key = (name: string) => `${namespace}:${name}`;

  const set = <T>(name: string, value: T, expires: number | null = DEFAULT_EXPIRES) => {
    const data = {
      value,
      expires: typeof expires === 'number' ? Date.now() + expires : null,
    };
    storage.setItem(key(name), JSON.stringify(data));
  };

  const get = <T>(name: string): T => {
    const data = storage.getItem(key(name));
    if (data) {
      const { value, expires } = JSON.parse(data);
      if (!expires || Date.now() < expires) {
        return value;
      }
      remove(name);
    }
    return null as any;
  };

  const remove = (name: string) => {
    storage.removeItem(key(name));
  };

  const clear = () => {
    storage.clear();
  };

  return reactive({
    set,
    get,
    remove,
    clear,
  });
}

3.axios

import axios from 'axios';
import { responseSuccess, responseError } from './interceptors/response';
import { getToken } from '@/utils/auth';
const service = axios.create({
  baseURL: import.meta.env.VITE_APP_BASE_URL,
  timeout: 10000,
});
// 请求拦截
service.interceptors.request.use(
  (config) => {
    config.headers['X-Airdoc-Client'] = 'c10b3355-1667-4bfb-bd06-7e7494325c99';
    const token: string = getToken();
    if (token) {
      config.headers.Authorization = token;
    }
    return config;
  },
  (error) => {
    Promise.reject(error);
  },
);
// 响应拦截
service.interceptors.response.use(responseSuccess as any, responseError);

export default service;
import { AxiosResponse, AxiosError } from 'axios';
import { Code, ResponseData } from '../types';
// import { useLogout } from '@/hooks/useLogout';
import { showFailToast } from 'vant';

export function responseSuccess(response: AxiosResponse<ResponseData>) {
  if (response) {
    const { data, headers } = response;
    const { errorCode: code, message } = data;
    if (code === 0) {
      return data;
    } else {
      showFailToast(message);
    }
    // if (code === undefined || code === null || typeof code === 'string') {
    //   return data;
    // } else {
    //   if (successList.includes(code)) {
    //     return data;
    //   } else if (errorList.includes(code)) {
    //     showFailToast(message);
    //     return Promise.reject(message);
    //   } else if (tokenErrorList.includes(code)) {
    //     console.log(data, 'tokenErrorList');
    //   } else {
    //     return Promise.reject(data);
    //   }
    // }
  } else {
    return Promise.reject();
  }
}
export function responseError(error: AxiosError) {
  const { response, code, message: msg } = error || {};
  console.log(response, '-----response-----');
  console.log(code, '-----code-----');
  console.log(msg, '-----message-----');
  const err: string = error.toString();
  try {
    if (code === 'ECONNABORTED' && msg.includes('timeout')) {
      showFailToast('请求超时,请刷新页面后重试');
    }
    if (code === 'ERR_BAD_RESPONSE') {
      showFailToast('服务器错误,请稍后重试');
    }
    if (err && err.includes('Network Error')) {
      showFailToast('网络异常');
    }
  } catch (error) {
    throw new Error(error as any);
  }
  if (response) {
    const errRes: any = response.data;
    // if (tokenErrorList.includes(errRes.code)) {
    //   // Modal.warning({
    //   //   title: '提示',
    //   //   content: '您可能已经在其它页面退出,如需继续访问当前页面,请重新登录',
    //   //   okText: '重新登录',
    //   //   onOk() {
    //   //     console.log('退出登录逻辑');
    //   //     useLogout();
    //   //   },
    //   // });
    // } else {
    //   return Promise.reject();
    // }
  }
}

4. cryptojs

import CryptoJS from 'crypto-js';
import { LoginParams } from '@/api/model/userModel';
export const encryption = (loginForm: LoginParams) => {
  let key: any = '201603152020BABC';
  let iv: any = 'BABC202003152016';
  const encryptArr: string[] = ['password'];
  const type: any = '';
  const result = JSON.parse(JSON.stringify(loginForm));
  if (type === 'Base64') {
    encryptArr.forEach((ele) => {
      result[ele] = btoa(result[ele]);
    });
  } else {
    encryptArr.forEach((ele) => {
      const encryptStr = result[ele];
      key = CryptoJS.enc.Latin1.parse(key);
      iv = CryptoJS.enc.Latin1.parse(iv);
      // 加密
      const encrypted = CryptoJS.AES.encrypt(encryptStr, key, {
        iv: iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7,
      });
      result[ele] = encrypted.toString();
    });
  }
  return result;
};