request.js 4.5 KB

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