request.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. import axios from 'axios'
  2. import qs from "qs";
  3. import {ElMessage} from 'element-plus'
  4. import { useFiltersStore } from '@/store/filter.js'
  5. const timeout = 10000
  6. const instance = axios.create({
  7. baseURL: apiUrl,
  8. // baseURL: 'http://localhost:8001/',
  9. timeout: timeout
  10. })
  11. export const get = async (url, data = {}) => {
  12. let res = await initRequestHeader('get', url, data);
  13. const filtersStore = useFiltersStore()
  14. data = res.data;
  15. return new Promise((resolve, reject) => {
  16. instance.get(res.url, { params: data, headers: res.headers }).then((response) => {
  17. if (response.data.state == 266) {
  18. // filtersStore.setLoginStatus(false);
  19. // filtersStore.setToken('');
  20. // filtersStore.setRefreshToken('')
  21. // // ElMessage.warning('请重新登录')
  22. // navigateTo('/login')
  23. } else {
  24. resolve(response.data)
  25. }
  26. }, err => {
  27. reject(err)
  28. })
  29. })
  30. }
  31. export const post = async (url, data = {}, timeout,type = 'urlencoded') => {
  32. let res = await initRequestHeader('post', url, data, type);
  33. return new Promise((resolve, reject) => {
  34. instance.post(res.url, res.data,{
  35. headers: res.headers,
  36. timeout:timeout
  37. } ).then((response) => {
  38. resolve(response.data)
  39. }, err => {
  40. console.log(err)
  41. if(err.code == 'ECONNABORTED'){
  42. ElMessage.warning('The request timed out. Please try again later')
  43. }
  44. reject(err)
  45. }).finally(()=>{
  46. resolve()
  47. })
  48. })
  49. }
  50. // const token = useCookie('token')
  51. /**
  52. * 初始化请求头和数据
  53. * @zjf-2020-12-25
  54. */
  55. const initRequestHeader = async (method, url, data = {}, type = 'urlencoded') => {
  56. let result = {};
  57. let headers = {};
  58. const filtersStore = useFiltersStore()
  59. //用户登录状态下,每次更新refresh_token58分钟之后需要更新access_token
  60. if (filtersStore.getToken) {
  61. let cur_time = new Date().getTime();
  62. if (cur_time - filtersStore.getTime * 1 > 58 * 60 * 1000) {
  63. let param = new FormData();
  64. param.append('grant_type', 'refresh_token');
  65. param.append('refresh_token', filtersStore.getRefreshToken);
  66. await instance.post('v3/frontLogin/oauth/token', param, {
  67. headers: {
  68. 'Content-Type': 'multipart/form-data',
  69. 'Authorization': 'Basic VVcxS2FsSnVTblppYmxFOTpVMjFHTWxsVlFrUmlNMEkxVlcxc2JtRklVa0ZWTW5oMldrYzVkUT09'
  70. }
  71. }).then((response) => {
  72. if (response.data.state == 200) {
  73. filtersStore.setToken(response.data.data.access_token);
  74. filtersStore.setTime(new Date().getTime().toString());//存储refresh_token更新时间
  75. }
  76. }, err => {
  77. console.log('更新access_token出错:', err);
  78. })
  79. }
  80. }
  81. if (method == 'post') {
  82. if (type == 'urlencoded') {
  83. headers = { 'Content-Type': 'application/x-www-form-urlencoded' };
  84. data = qs.stringify(data);
  85. } else if (type == 'json') {
  86. headers = { 'Content-Type': 'application/json' };
  87. data = JSON.parse(JSON.stringify(data));
  88. } else if (type == 'form') {//form-data
  89. headers = { 'Content-Type': 'multipart/form-data' };
  90. let tmp_data = new FormData();
  91. Object.keys(data).forEach((item) => {
  92. tmp_data.append(item, data[item])
  93. });
  94. data = tmp_data;
  95. }
  96. }
  97. if (url.indexOf('frontLogin/oauth/token') > -1) {
  98. headers.Authorization = 'Basic VVcxS2FsSnVTblppYmxFOTpVMjFHTWxsVlFrUmlNMEkxVlcxc2JtRklVa0ZWTW5oMldrYzVkUT09';
  99. } else {
  100. let token = filtersStore.getToken;
  101. headers.Authorization = 'Bearer ' + token;
  102. }
  103. result = { url, data, headers };
  104. return result;
  105. }