useHttp.ts 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import { UseFetchOptions } from "nuxt/app";
  2. import { createDiscreteApi } from "naive-ui";
  3. import { useUserStore } from "~/store/user";
  4. const NMessage = createDiscreteApi(["message"]);
  5. type Methods = "GET" | "POST";
  6. // const BASE_URL = 'http://192.168.0.68:8390/';
  7. // const BASE_URL = process.env.NUXT_PUBLIC_API_BASE
  8. export interface IResultData<T> {
  9. code: number;
  10. data: T;
  11. msg: string;
  12. }
  13. class HttpRequest {
  14. request<T = any> (
  15. url: string,
  16. method: Methods,
  17. data = {},
  18. options?: UseFetchOptions<T>
  19. ) {
  20. return new Promise((resolve, reject) => {
  21. // 获取当前网站地址
  22. const requestURL = useRequestURL()
  23. const config = useRuntimeConfig();
  24. const userStore = useUserStore();
  25. let baseURL = config.public.apiBase;
  26. if (process.client && process.env.NODE_ENV == "development") {
  27. baseURL = "/api";
  28. } else {
  29. // 英文站
  30. // baseURL = baseURL.replace('https://driveintelresearch.com', requestURL.origin)
  31. // 中文站
  32. baseURL = baseURL.replace('https://www.driveintelresearch.com', requestURL.origin)
  33. }
  34. const newOptions: UseFetchOptions<T> = {
  35. baseURL: baseURL,
  36. // baseURL: "https://www.DRIVEINTEL.com/api/js/a/api",
  37. method: method,
  38. key: url + JSON.stringify(data),
  39. headers: {
  40. 'website-token': userStore.getToken || '',
  41. },
  42. ...options,
  43. };
  44. if (method === "GET") {
  45. newOptions.key = url + JSON.stringify(data),
  46. data.params.lang = userStore.getLang;
  47. newOptions.params = data?.params;
  48. }
  49. if (method === "POST") {
  50. data.lang = userStore.getLang;
  51. newOptions.body = data
  52. }
  53. useFetch(url, newOptions)
  54. .then((res: any) => {
  55. if (!res.data.value?.code || res.data.value.code == 200) {
  56. resolve(JSON.parse(JSON.stringify(res.data.value)));
  57. } else {
  58. reject(JSON.parse(JSON.stringify(res.data.value)));
  59. switch (res.data.value.code) {
  60. case -400:
  61. case 5001:
  62. const userStore = useUserStore();
  63. NMessage.message.error("登录状态过期,请重新登陆");
  64. userStore.resetState()
  65. // navigateTo(userStore.getLang=="en-US"?'/en':'/');
  66. return;
  67. case 500:
  68. case 5002:
  69. return NMessage.message.error(
  70. res.data.value.msg || "服务端错误"
  71. );
  72. default:
  73. return NMessage.message.error(res.data.value.msg);
  74. }
  75. }
  76. })
  77. .catch((error) => {
  78. reject(error);
  79. });
  80. });
  81. }
  82. // 封装常用方法
  83. get<T = any> (url: string, params?: any, options?: UseFetchOptions<T>) {
  84. return this.request(url, "GET", params, options);
  85. }
  86. post<T = any> (url: string, data: any, options?: UseFetchOptions<T>) {
  87. return this.request(url, "POST", data, options);
  88. }
  89. }
  90. const httpRequest = new HttpRequest();
  91. export default httpRequest;