request.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. import {
  2. config
  3. } from './config.js'
  4. import {
  5. tansParams
  6. } from "./util.js";
  7. import {
  8. hex_md5
  9. } from '@/utils/md5.js';
  10. export const apiResquest = (prams) => {
  11. return new Promise((resolve, reject) => {
  12. const timestamp = Date.now().toString();
  13. const sign = generateSign(config.APP_ID, config.APP_SECRET, timestamp, prams.data);
  14. let url = config.base_url + prams.url;
  15. uni.showLoading({
  16. title: '加载中',
  17. mask: true
  18. });
  19. // get请求映射params参数
  20. if (prams.method === 'GET' && prams.data) {
  21. url = url + '?' + tansParams(prams.data);
  22. url = url.slice(0, -1);
  23. prams.data = {};
  24. }
  25. return uni.request({
  26. timeout:10000,
  27. url: url,
  28. data: {
  29. ...prams.data
  30. },
  31. method: prams.method,
  32. header: {
  33. 'content-type': 'application/json;charset=utf-8',
  34. // 'Authorization': uni.getStorageSync('token'),
  35. 'timestamp': timestamp,
  36. 'sign': sign
  37. },
  38. success: (res) => {
  39. // 成功
  40. uni.hideLoading()
  41. if (res.statusCode == 200) {
  42. if (res.data.code == 200) {
  43. resolve(res);
  44. } else if (res.data.code == 401) {
  45. loginTimeout();
  46. } else {
  47. uni.showToast({
  48. mask: true,
  49. icon: "none",
  50. position: "center",
  51. title: res.data.message,
  52. duration: 2000
  53. });
  54. resolve(res);
  55. }
  56. } else if (res.statusCode == 401) {
  57. loginTimeout();
  58. } else {
  59. uni.showToast({
  60. mask: true,
  61. icon: "none",
  62. position: "center",
  63. title: '连接异常,请联系管理员.',
  64. duration: 2000
  65. });
  66. resolve(res);
  67. }
  68. },
  69. fail: (err) => {
  70. // 失败
  71. uni.hideLoading()
  72. uni.showToast({
  73. mask: true,
  74. icon: "none",
  75. position: "center",
  76. title: '出错啦~请联系管理员!',
  77. duration: 2000
  78. });
  79. },
  80. complete: () => {
  81. // 完成
  82. }
  83. });
  84. })
  85. }
  86. //登录超时-退出至登录页面
  87. export function loginTimeout(params) {
  88. uni.showToast({
  89. mask: true,
  90. icon: "none",
  91. position: "center",
  92. title: "登录超时,请重新登录~",
  93. duration: 2000
  94. });
  95. uni.removeStorageSync('token');
  96. uni.removeStorageSync('userId');
  97. uni.removeStorageSync('userType');
  98. setTimeout(function() {
  99. if(uni.getStorageSync('patrolLoginType')){
  100. uni.redirectTo({
  101. url: '/pages/views/login/patrolLogin',
  102. });
  103. }else{
  104. uni.redirectTo({
  105. url: '/pages/views/login/login',
  106. });
  107. }
  108. }, 2000);
  109. }
  110. // ========== 前端签名工具 ==========
  111. function generateSign(appId, appSecret, timestamp, params) {
  112. const sortedKeys = Object.keys(params).sort();
  113. let signStr = `appId=${appId}&timestamp=${timestamp}`;
  114. sortedKeys.forEach((key) => {
  115. const value = params[key];
  116. if (value !== null && value !== undefined && value !== '') {
  117. signStr += `&${key}=${value}`;
  118. }
  119. });
  120. signStr += `&appSecret=${appSecret}`;
  121. // MD5 加密,转大写
  122. return hex_md5(signStr).toUpperCase();
  123. }