request.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. // +----------------------------------------------------------------------
  2. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  3. // +----------------------------------------------------------------------
  4. // | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
  5. // +----------------------------------------------------------------------
  6. // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
  7. // +----------------------------------------------------------------------
  8. // | Author: CRMEB Team <admin@crmeb.com>
  9. // +----------------------------------------------------------------------
  10. import {
  11. HTTP_REQUEST_URL,
  12. HEADER,
  13. TOKENNAME,
  14. HEADERPARAMS
  15. } from '@/config/app';
  16. import {
  17. toLogin,
  18. checkLogin
  19. } from '../libs/login';
  20. import store from '../store';
  21. // 获取对应的token
  22. const getToken = (url) => {
  23. // 工单登录 - staff相关接口(优先级最高)
  24. if (url.includes('staff') && !url.includes('employee/service/staff/list') && store.state.app.workOrderToken) {
  25. return store.state.app.workOrderToken;
  26. }
  27. // 管理员登录 - employee相关接口
  28. // 包含employee关键字,但排除特殊接口
  29. if (url.includes('employee') &&
  30. !url.includes('employee/merchant/belong/List') &&
  31. !url.includes('employee/merchant/active') &&
  32. store.state.app.managerToken) {
  33. return store.state.app.managerToken;
  34. }
  35. // 普通用户登录 - 其他所有接口
  36. if (store.state.app.token) {
  37. return store.state.app.token;
  38. }
  39. };
  40. /**
  41. * 发送请求
  42. */
  43. function baseRequest(url, method, data, {
  44. noAuth = false,
  45. noVerify = false
  46. }, params) {
  47. let Url = HTTP_REQUEST_URL,
  48. header = HEADER
  49. if (params != undefined) {
  50. header = HEADERPARAMS;
  51. }
  52. if (!noAuth) {
  53. //登录过期自动登录
  54. if (!store.state.app.token && !checkLogin()) {
  55. toLogin();
  56. return Promise.reject({
  57. msg: '未登录'
  58. });
  59. }
  60. }
  61. // 设置token到header
  62. const token = getToken(url);
  63. if (token) {
  64. header[TOKENNAME] = token;
  65. }
  66. return new Promise((reslove, reject) => {
  67. uni.request({
  68. url: Url + '/api/front/' + url,
  69. method: method || 'GET',
  70. header: header,
  71. data: data || {},
  72. success: (res) => {
  73. if (noVerify)
  74. reslove(res.data, res);
  75. else if (res.data.code == 200)
  76. reslove(res.data, res);
  77. else if ([410000, 410001, 410002, 401, 402].indexOf(res.data.code) !== -1) {
  78. let routes = getCurrentPages();
  79. //获取当前页面路由
  80. let curRoute = routes[routes.length - 1].route
  81. //工作台内页面跳转登录前,先跳转到个人中心,防止双token陷入登录循环
  82. if(curRoute.split('/')[1]==='admin'){
  83. uni.switchTab({
  84. url:'/pages/user/index'
  85. })
  86. }
  87. store.commit("LOGOUT");
  88. toLogin();
  89. reject(res.data);
  90. } else if (res.data.code == 500) {
  91. if (res.data.message && res.data.message.indexOf('登录信息已过期') != -1) {
  92. store.commit("LOGOUT");
  93. }
  94. reject(res.data.message || '系统异常');
  95. } else if (res.data.code == 400) {
  96. reject(res.data.message || '参数校验失败');
  97. } else if (res.data.code == 404) {
  98. reject(res.data.message || '没有找到相关数据');
  99. } else if (res.data.code == 403) {
  100. reject(res.data.message || '没有相关权限');
  101. } else
  102. reject(res.data.message || '系统错误');
  103. },
  104. fail: (msg) => {
  105. reject('请求失败');
  106. }
  107. })
  108. });
  109. }
  110. const request = {};
  111. ['options', 'get', 'post', 'put', 'head', 'delete', 'trace', 'connect'].forEach((method) => {
  112. request[method] = (api, data, opt, params) => baseRequest(api, method, data, opt || {}, params)
  113. });
  114. export default request;