request.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  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. showMessage({
  28. message: err.message,
  29. type: 'error'
  30. })
  31. reject(err)
  32. })
  33. })
  34. }
  35. export const post = async (url, data = {}, timeout,type = 'urlencoded') => {
  36. let res = await initRequestHeader('post', url, data, type);
  37. return new Promise((resolve, reject) => {
  38. instance.post(res.url, res.data,{
  39. headers: res.headers,
  40. timeout:timeout
  41. } ).then((response) => {
  42. resolve(response.data)
  43. }, err => {
  44. console.log(err)
  45. if(err.code == 'ECONNABORTED'){
  46. showMessage({
  47. message: 'The request timed out. Please try again later',
  48. type: 'error'
  49. })
  50. } else {
  51. showMessage({
  52. message: err.message,
  53. type: 'error'
  54. })
  55. }
  56. reject(err)
  57. }).finally(()=>{
  58. resolve()
  59. })
  60. })
  61. }
  62. // const token = useCookie('token')
  63. /**
  64. * 初始化请求头和数据
  65. * @zjf-2020-12-25
  66. */
  67. const initRequestHeader = async (method, url, data = {}, type = 'urlencoded') => {
  68. let result = {};
  69. let headers = {};
  70. const filtersStore = useFiltersStore()
  71. //用户登录状态下,每次更新refresh_token58分钟之后需要更新access_token
  72. if (filtersStore.getToken) {
  73. let cur_time = new Date().getTime();
  74. if (cur_time - filtersStore.getTime * 1 > 58 * 60 * 1000) {
  75. let param = new FormData();
  76. param.append('grant_type', 'refresh_token');
  77. param.append('refresh_token', filtersStore.getRefreshToken);
  78. await instance.post('v3/frontLogin/oauth/token', param, {
  79. headers: {
  80. 'Content-Type': 'multipart/form-data',
  81. 'Authorization': 'Basic VVcxS2FsSnVTblppYmxFOTpVMjFHTWxsVlFrUmlNMEkxVlcxc2JtRklVa0ZWTW5oMldrYzVkUT09'
  82. }
  83. }).then((response) => {
  84. if (response.data.state == 200) {
  85. filtersStore.setToken(response.data.data.access_token);
  86. filtersStore.setTime(new Date().getTime().toString());//存储refresh_token更新时间
  87. }
  88. }, err => {
  89. console.log('更新access_token出错:', err);
  90. })
  91. }
  92. }
  93. if (method == 'post') {
  94. if (type == 'urlencoded') {
  95. headers = { 'Content-Type': 'application/x-www-form-urlencoded' };
  96. data = qs.stringify(data);
  97. } else if (type == 'json') {
  98. headers = { 'Content-Type': 'application/json' };
  99. data = JSON.parse(JSON.stringify(data));
  100. } else if (type == 'form') {//form-data
  101. headers = { 'Content-Type': 'multipart/form-data' };
  102. let tmp_data = new FormData();
  103. Object.keys(data).forEach((item) => {
  104. tmp_data.append(item, data[item])
  105. });
  106. data = tmp_data;
  107. }
  108. }
  109. if (url.indexOf('frontLogin/oauth/token') > -1) {
  110. headers.Authorization = 'Basic VVcxS2FsSnVTblppYmxFOTpVMjFHTWxsVlFrUmlNMEkxVlcxc2JtRklVa0ZWTW5oMldrYzVkUT09';
  111. } else {
  112. let token = filtersStore.getToken;
  113. headers.Authorization = 'Bearer ' + token;
  114. }
  115. result = { url, data, headers };
  116. return result;
  117. }