Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 
 

154 lignes
4.2 KiB

  1. import axios from 'axios';
  2. import Vue from 'vue';
  3. import router from '../router';
  4. import { notify } from '@/utils/tool';
  5. axios.defaults.withCredentials = true
  6. /**
  7. * 请求拦截器:添加token
  8. */
  9. axios.interceptors.request.use(function (config) {
  10. // 在发送请求之前做些什么
  11. if (config.url.indexOf('api/') === 0) {
  12. config.url = `${process.env.API_HOST}${config.url.slice(4)}`;
  13. }
  14. //若token存在,则在每次请求头中加入token
  15. // if (sessionStorage.token) {
  16. // // config.headers.common['x-access-token'] = sessionStorage.token;
  17. // config.headers.common['Authorization'] = 'Bearer ' + sessionStorage.token;
  18. // }
  19. return config;
  20. }, function (error) {
  21. // 对请求错误做些什么
  22. return Promise.reject(error);
  23. });
  24. //拦截器,访问网络异常时的提示
  25. axios.interceptors.response.use(
  26. response => {
  27. return response;
  28. },
  29. error => {
  30. if (error.response) {
  31. switch (error.response.status) {
  32. case 401:
  33. if (router.currentRoute.fullPath != '/') {
  34. notify.error('登录超时,请重新登录');
  35. sessionStorage.clear();
  36. router.push({ path: "/" });
  37. }
  38. break;
  39. }
  40. }
  41. return Promise.reject(error); // 返回接口返回的错误信息
  42. }
  43. );
  44. export async function fetchApi(path, params, config) {
  45. const [method, fullpath] = mapApiPathToFullPath(path);
  46. try {
  47. const res = await (method === 'GET'
  48. ? axios.get(fullpath, { params }, config)
  49. : axios.post(fullpath, params, config)
  50. );
  51. return res.data;
  52. } catch (e) {
  53. if (e.response && e.response.status) {
  54. switch (e.response.status) {
  55. case 404:
  56. return {
  57. Code: 404,
  58. Msg: '找不到指定的服务。',
  59. };
  60. default:
  61. return {
  62. Code: 503,
  63. Msg: '服务异常,请稍后再试。',
  64. };
  65. }
  66. }
  67. console.error(e);
  68. return {
  69. Code: 503,
  70. Msg: '服务异常,请稍后再试。',
  71. };
  72. }
  73. }
  74. export function wrapErrorHint(response) {
  75. if (response.Code !== 0) {
  76. // notify.error(response.Msg);
  77. var title = response.Code ? (response.Code).toString() : '';
  78. var type ="error";
  79. if(response.Code === 404){
  80. type = "warning";
  81. }
  82. Vue.prototype.$notify({
  83. message:response.Msg,
  84. title:title + '错误',
  85. type: type
  86. })
  87. }
  88. return response;
  89. }
  90. export default axios;
  91. function mapApiPathToFullPath(path) {
  92. const [service] = path.split('/');
  93. const prefix = ['template', 'project', 'folder', 'file'].indexOf(service) !== -1 ? 'pms' : 'cms';
  94. const fullpath = `api/${prefix}/${service === 'authentication' ? '' : 'v1/'}${path}`;
  95. let method = 'GET';
  96. switch (path) {
  97. case 'authentication/login':
  98. case 'company/addCompany':
  99. case 'company/queryGeneralOverview':
  100. case 'company/queryProviceTree':
  101. case 'company/updateCompanyById':
  102. case 'dept/addDept':
  103. case 'dept/updateDept':
  104. case 'user/addUser':
  105. case 'user/resetPassWord':
  106. case 'user/updateUser':
  107. case 'template/createTemplate':
  108. case 'template/fileExchange':
  109. case 'template/updateTemplate':
  110. case 'template/uploadingXmind':
  111. case 'template/addTemplateNodeModelFile':
  112. case 'template/createNestedRelevance':
  113. case 'template/connectNestTemplateFolder':
  114. case "folder/createSubfolder":
  115. case "project/createProject":
  116. case "project/editProject":
  117. case "project/assignedWork":
  118. case "file/addArchMilesStone":
  119. case "file/addFile":
  120. case "file/updateFile":
  121. case "file/fileCoordinationChange":
  122. case "operation/record":
  123. // case 'template/deleteTemplateNodeModelFile':
  124. method = 'POST';
  125. break;
  126. // case 'authentication/loginOut':
  127. // case 'company/deleteCompanyById':
  128. // case 'company/disablEenableCompanyByCompanyId':
  129. // case 'company/queryCompanyById':
  130. // case 'company/queryCompanyByProviceIdAndIndustryId':
  131. // case 'dept/deleteDeptByDeptId':
  132. // case 'dept/queryDeptByDeptId':
  133. // case 'dept/queryDeptsByDeptId':
  134. // case 'user/deleteUser':
  135. // case 'user/queryUserByUserId':
  136. // case 'user/queryUsersByDeptId':
  137. default:
  138. method = 'GET';
  139. break;
  140. }
  141. return [method, fullpath];
  142. }