flyio.ts 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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: 30000,
  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 (request.headers['TempToken']) {
  22. request.headers['Authorization'] = `Bearer ${request.headers['TempToken']}`;
  23. } else if (token) {
  24. request.headers['Authorization'] = 'Bearer ' + token;
  25. }
  26. const examType = userStore.getExamType;
  27. const location = userStore.getLocation;
  28. if (examType) {
  29. request.headers['examType'] = examType;
  30. }
  31. if (location) {
  32. request.headers['location'] = encodeURIComponent(location);
  33. }
  34. return request;
  35. });
  36. fly.interceptors.response.use(
  37. function (this: { lock: () => void; unlock: () => void }, response: any) { // 不要使用箭头函数,否则调用this.lock时this指向不对
  38. const result = response.data;
  39. try {
  40. const { code, msg } = result;
  41. if (code === 401) {
  42. logout();
  43. } else {
  44. if (code !== 200) {
  45. uni.$ie.showToast(msg);
  46. return Promise.reject(result);
  47. } else {
  48. return Promise.resolve(result);
  49. }
  50. }
  51. } catch (err) {
  52. return Promise.reject(result);
  53. }
  54. },
  55. function (err: Error, promise: Promise<any>) {
  56. return Promise.reject(err);
  57. }
  58. );
  59. function logout() {
  60. const userStore = useUserStore();
  61. userStore.logout();
  62. uni.reLaunch({
  63. url: '/pagesSystem/pages/login/login'
  64. });
  65. }
  66. export default fly;