useHttp.ts 2.7 KB

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