flyio.ts 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. // @ts-ignore
  2. import Fly from "flyio/dist/npm/wx"
  3. import config from "@/config";
  4. import { useUserStore } from '@/store/userStore';
  5. const { serverBaseUrl } = config;
  6. const requestConfig = {
  7. baseURL: serverBaseUrl,
  8. timeout: 10000,
  9. headers: {
  10. "Content-Type": "application/json",
  11. },
  12. withCredentials: false,
  13. };
  14. const fly = new Fly();
  15. fly.config = requestConfig;
  16. const refreshFly = new Fly();
  17. refreshFly.config = requestConfig;
  18. fly.interceptors.request.use((request: any) => {
  19. const userStore = useUserStore();
  20. const token = userStore.accessToken;
  21. if (token) {
  22. request.headers['Authorization'] = 'Bearer ' + token;
  23. }
  24. const examType = userStore.getExamType;
  25. const location = userStore.getLocation;
  26. if (examType) {
  27. request.headers['examType'] = examType;
  28. }
  29. if (location) {
  30. request.headers['location'] = encodeURIComponent(location);
  31. }
  32. return request;
  33. });
  34. fly.interceptors.response.use(
  35. function (this: { lock: () => void; unlock: () => void }, response: any) { // 不要使用箭头函数,否则调用this.lock时this指向不对
  36. const result = response.data;
  37. try {
  38. const { code, msg } = result;
  39. if (code === 401) {
  40. logout();
  41. } else {
  42. if (code !== 200) {
  43. uni.$ie.showToast(msg);
  44. return Promise.reject(result);
  45. } else {
  46. return Promise.resolve(result);
  47. }
  48. }
  49. } catch (err) {
  50. return Promise.reject(result);
  51. }
  52. },
  53. function (err: Error, promise: Promise<any>) {
  54. return Promise.reject(err);
  55. }
  56. );
  57. function logout() {
  58. const userStore = useUserStore();
  59. userStore.logout();
  60. uni.reLaunch({
  61. url: '/pagesSystem/pages/login/login'
  62. });
  63. }
  64. export default fly;