index.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. import api from './request';
  2. import { message, Spin } from 'antd'
  3. import ReactDOM from 'react-dom';
  4. import '../common/common.less'
  5. const axios=require('axios');
  6. //axios.defaults.baseURL = 'http://192.168.3.184:8871';//'http://192.168.2.237:8871/';
  7. // 当前正在请求的数量
  8. let requestCount = 0
  9. // 显示loading
  10. function showLoading () {
  11. if (requestCount === 0) {
  12. var dom = document.createElement('div')
  13. dom.setAttribute('id', 'loading')
  14. document.body.appendChild(dom)
  15. ReactDOM.render(<Spin tip="加载中..." size="large"/>, dom)
  16. }
  17. requestCount++
  18. }
  19. // 隐藏loading
  20. function hideLoading () {
  21. requestCount--
  22. if (requestCount === 0) {
  23. document.body.removeChild(document.getElementById('loading'))
  24. }
  25. }
  26. const post=(url,data)=>{
  27. return axios({
  28. method:'post',
  29. url:url,
  30. data
  31. });
  32. };
  33. // 表单 form封装接口
  34. const xPost=(url,data)=>{
  35. let param = new URLSearchParams();
  36. for(let i in data){
  37. param.append(i,data[i]);
  38. }
  39. return axios({
  40. method:'post',
  41. contentType:'application/x-www-form-urlencoded',
  42. url:url,
  43. data:param
  44. });
  45. };
  46. // 导出
  47. const expJson = (url,data) =>{
  48. return axios({
  49. method:'post',
  50. url,
  51. data,
  52. contentType: "application/vnd.ms-excel;charset=UTF-8" ,
  53. responseType: 'blob' //必须添加,否则会乱码
  54. });
  55. }
  56. const get=(url,data)=>{
  57. return axios({
  58. method:'get',
  59. url:url,
  60. data
  61. });
  62. };
  63. function interceptors(){
  64. //拦截所有请求添加token
  65. axios.interceptors.request.use(function (req) {
  66. const tokenStr = localStorage.getItem('token');
  67. const sysId = localStorage.getItem('systemId');
  68. const hisId = localStorage.getItem('hospitalId');
  69. if (tokenStr && req.headers.isLoading !== false) {
  70. (req.headers.Authorization = `Bearer ${tokenStr}`);
  71. sysId&&(req.headers.softwareId=sysId);
  72. hisId&&(req.headers.hospitalId=hisId);
  73. showLoading()
  74. return req;
  75. } else {
  76. showLoading()
  77. return req;
  78. }
  79. }, function (error) {
  80. if(error.config.headers.isLoading !== false){
  81. hideLoading()
  82. }
  83. return Promise.reject(error);
  84. });
  85. //拦截响应
  86. axios.interceptors.response.use(function (res) {
  87. const code = res.data.code;
  88. if (code===401 || code === 403 && res.config.headers.isLoading !== false) { //401/403返回登录
  89. localStorage.removeItem("token");
  90. localStorage.removeItem("systemId");
  91. localStorage.removeItem("hospitalId");
  92. message.error("登录信息失效,请重新登录");
  93. window.location = '/';
  94. hideLoading()
  95. }else{
  96. hideLoading()
  97. return res;
  98. }
  99. }, function (error) {
  100. if(error.config.headers.isLoading !== false){
  101. hideLoading()
  102. }
  103. return Promise.reject(error);
  104. });
  105. }
  106. const obj = {
  107. post,
  108. xPost,
  109. get,
  110. api,
  111. interceptors
  112. };
  113. export default obj;