useHttp.ts 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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. baseURL = baseURL.replace('https://driveintelresearch.com', requestURL.origin)
  30. }
  31. const newOptions: UseFetchOptions<T> = {
  32. baseURL: baseURL,
  33. // baseURL: "https://www.DRIVEINTEL.com/api/js/a/api",
  34. method: method,
  35. key: url + JSON.stringify(data),
  36. headers: {
  37. 'website-token': userStore.getToken || '',
  38. },
  39. ...options,
  40. };
  41. if (method === "GET") {
  42. newOptions.key = url + JSON.stringify(data),
  43. data.params.lang = userStore.getLang;
  44. newOptions.params = data?.params;
  45. }
  46. if (method === "POST") {
  47. data.lang = userStore.getLang;
  48. newOptions.body = data
  49. }
  50. useFetch(url, newOptions)
  51. .then((res: any) => {
  52. if (!res.data.value?.code || res.data.value.code == 200) {
  53. resolve(JSON.parse(JSON.stringify(res.data.value)));
  54. } else {
  55. reject(JSON.parse(JSON.stringify(res.data.value)));
  56. switch (res.data.value.code) {
  57. case -400:
  58. case 5001:
  59. const userStore = useUserStore();
  60. NMessage.message.error("登录状态过期,请重新登陆");
  61. userStore.resetState()
  62. // navigateTo(userStore.getLang=="en-US"?'/en':'/');
  63. return;
  64. case 500:
  65. case 5002:
  66. return NMessage.message.error(
  67. res.data.value.msg || "服务端错误"
  68. );
  69. default:
  70. return NMessage.message.error(res.data.value.msg);
  71. }
  72. }
  73. })
  74. .catch((error) => {
  75. reject(error);
  76. });
  77. });
  78. }
  79. // 封装常用方法
  80. get<T = any> (url: string, params?: any, options?: UseFetchOptions<T>) {
  81. return this.request(url, "GET", params, options);
  82. }
  83. post<T = any> (url: string, data: any, options?: UseFetchOptions<T>) {
  84. return this.request(url, "POST", data, options);
  85. }
  86. }
  87. const httpRequest = new HttpRequest();
  88. export default httpRequest;