request.js 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. import config from '../ver.config';
  2. import { getToken, Toast } from './tool';
  3. import { getStorage, setStorage } from "./storage"
  4. import { useUserStore, useLoadingStore, useSystemStore } from '@/store';
  5. import { storeToRefs } from "pinia";
  6. let useUser = null;
  7. let loadingStore = null;
  8. let useSystem = null
  9. export const BaseUrl = config.newUrl;
  10. let pendingRequests = 0;
  11. function openLoading(isLoading) {
  12. useUser = useUserStore()
  13. loadingStore = useLoadingStore()
  14. if (isLoading == undefined || isLoading == false) {
  15. if (pendingRequests == 0) {
  16. loadingStore.show()
  17. }
  18. pendingRequests++;
  19. useUser.setloadingNum(pendingRequests);
  20. }
  21. }
  22. function hideLoading() {
  23. useUser = useUserStore()
  24. loadingStore = useLoadingStore()
  25. if (pendingRequests > 0) {
  26. pendingRequests--;
  27. }
  28. if (pendingRequests == 0) {
  29. loadingStore.hide();
  30. }
  31. }
  32. const request = (url, method, { header, data }) => new Promise((resolve, reject) => {
  33. const { isLoading, ...newheader } = header;
  34. openLoading(isLoading);
  35. useUser = useUserStore()
  36. uni.request({
  37. url: BaseUrl + '/api' + url,
  38. header: {
  39. 'Access-Control-Allow-Origin': '*',
  40. 'Content-Type': 'application/json;charset=UTF-8',
  41. 'X-Requested-With': 'XMLHttpRequest',
  42. "authId": useUser.getAuthId,
  43. ...newheader,
  44. },
  45. data: { ...data },
  46. method,
  47. timeout: 600000,
  48. responseType: 'json',
  49. success: res => {
  50. hideLoading();
  51. if (res.statusCode == 200) {
  52. const { ret } = res.data;
  53. if (ret === -1) {
  54. const pages = getCurrentPages();
  55. const currentPage = pages[pages.length - 1];
  56. const path = currentPage.route;
  57. if (path === 'pages/login/login') {
  58. return;
  59. }
  60. const query = currentPage.options || {};
  61. const queryStr = Object.keys(query).map(key => `${key}=${query[key]}`).join('&');
  62. const fullPath = queryStr ? `/${path}?${queryStr}` : `/${path}`;
  63. setStorage('beforeLoginPage', fullPath);
  64. uni.navigateTo({
  65. url: "/pages/login/login"
  66. })
  67. return
  68. }
  69. useUser.setloadingNum(pendingRequests);
  70. resolve(res)
  71. }
  72. },
  73. fail: err => {
  74. hideLoading();
  75. useUser.setloadingNum(pendingRequests);
  76. useSystem = useSystemStore()
  77. const { isConnected } = storeToRefs(useSystem);
  78. isConnected.value && Toast(err.errMsg);
  79. }
  80. });
  81. })
  82. export const $get = (url, params, other) => {
  83. return request(url, "GET", {
  84. data: params,
  85. header: {
  86. 'token': getToken(),
  87. "lang": getStorage(config.langName) || config.lang,
  88. ...other,
  89. }
  90. })
  91. }
  92. export const $post = (url, data, other) => {
  93. return request(url, 'POST', {
  94. data,
  95. header: {
  96. 'token': getToken(),
  97. "lang": getStorage(config.langName) || config.lang,
  98. ...other
  99. }
  100. });
  101. }
  102. export const $upload = (filePath, option = {}) => new Promise((resolve, reject) => {
  103. openLoading();
  104. let { ...formData } = option
  105. const url = BaseUrl + '/api/users/upload';
  106. return uni.uploadFile({
  107. url,
  108. filePath,
  109. name: 'image',
  110. header: {
  111. 'token': getToken(),
  112. "lang": getStorage(config.langName) || config.lang,
  113. },
  114. success: (e) => {
  115. hideLoading()
  116. let res = JSON.parse(e.data);
  117. const { ret } = res;
  118. if (ret == 1) {
  119. resolve(res)
  120. } else {
  121. if (ret === -1) {
  122. const pages = getCurrentPages();
  123. const currentPage = pages[pages.length - 1];
  124. const path = currentPage.route;
  125. if (path === 'pages/login/login') {
  126. return;
  127. }
  128. const query = currentPage.options || {};
  129. const queryStr = Object.keys(query).map(key => `${key}=${query[key]}`).join('&');
  130. const fullPath = queryStr ? `/${path}?${queryStr}` : `/${path}`;
  131. setStorage('beforeLoginPage', fullPath);
  132. uni.navigateTo({
  133. url: "/pages/login/login"
  134. })
  135. return
  136. }
  137. Toast(res.msg);
  138. }
  139. reject(res)
  140. }, fail: (err) => {
  141. hideLoading()
  142. reject(err)
  143. }
  144. })
  145. })
  146. export function $uploadFile({ filePath, name, onProgress }) {
  147. openLoading();
  148. return new Promise((resolve, reject) => {
  149. const url = BaseUrl + '/api/users/video';
  150. const uploadTask = uni.uploadFile({
  151. url,
  152. filePath,
  153. name,
  154. header: {
  155. 'token': getToken(),
  156. "lang": getStorage(config.langName) || config.lang,
  157. },
  158. success: (e) => {
  159. hideLoading()
  160. let res = JSON.parse(e.data);
  161. const { ret } = res;
  162. if (ret == 1) {
  163. resolve(res)
  164. } else {
  165. if (ret === -1) {
  166. const pages = getCurrentPages();
  167. const currentPage = pages[pages.length - 1];
  168. const path = currentPage.route;
  169. if (path === 'pages/login/login') {
  170. return;
  171. }
  172. const query = currentPage.options || {};
  173. const queryStr = Object.keys(query).map(key => `${key}=${query[key]}`).join('&');
  174. const fullPath = queryStr ? `/${path}?${queryStr}` : `/${path}`;
  175. setStorage('beforeLoginPage', fullPath);
  176. uni.navigateTo({
  177. url: "/pages/login/login"
  178. })
  179. return
  180. }
  181. Toast(res.msg);
  182. }
  183. reject(res)
  184. }, fail: (err) => {
  185. hideLoading()
  186. reject(err)
  187. }
  188. })
  189. // 监听进度
  190. uploadTask.onProgressUpdate((e) => {
  191. onProgress && onProgress(e)
  192. })
  193. })
  194. }