123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- // +----------------------------------------------------------------------
- // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
- // +----------------------------------------------------------------------
- // | Copyright (c) 2016~2024 https://www.crmeb.com All rights reserved.
- // +----------------------------------------------------------------------
- // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
- // +----------------------------------------------------------------------
- // | Author: CRMEB Team <admin@crmeb.com>
- // +----------------------------------------------------------------------
- import {
- HTTP_REQUEST_URL,
- HEADER,
- TOKENNAME
- } from '@/config/app';
- import { checkLogin } from '../libs/login';
- import store from '../store';
- import pako from '../plugin/pako/pako.es5.min.js'
- function toLogin(){
- store.commit("LOGOUT");
- uni.showToast({
- title: '请登录',
- icon: 'none',
- duration: 1000
- });
- }
- function decompress(str) {
- return pako.inflateRaw(base64ToUint8Array(str), {
- to: 'string'
- });
- }
- function base64ToUint8Array(base64String) {
- let padding = '='.repeat((4 - base64String.length % 4) % 4);
- let base64 = (base64String + padding)
- .replace(/\-/g, '+')
- .replace(/_/g, '/');
- let rawData = atob(base64);
- let outputArray = new Uint8Array(rawData.length);
- for (var i = 0; i < rawData.length; ++i) {
- outputArray[i] = rawData.charCodeAt(i);
- }
- return outputArray;
- }
- function atob(input) {
- const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
- let str = input.replace(/=+$/, '');
- let output = '';
- if (str.length % 4 === 1) {
- throw new Error('InvalidLengthError');
- }
- for (let i = 0, len = str.length; i < len; i += 4) {
- const a = chars.indexOf(str.charAt(i));
- const b = chars.indexOf(str.charAt(i + 1));
- const c = chars.indexOf(str.charAt(i + 2));
- const d = chars.indexOf(str.charAt(i + 3));
- const sum = (a << 18) | (b << 12) | (c << 6) | d;
- output += String.fromCharCode((sum >> 16) & 0xFF, (sum >> 8) & 0xFF, sum & 0xFF);
- }
-
- return output;
- }
- /**
- * 发送请求
- */
- function baseRequest(url, method, data, {
- noAuth = false,
- noVerify = false
- }) {
- let Url = HTTP_REQUEST_URL,
- header = HEADER;
- if (!noAuth) {
- //登录过期自动登录
- if (!store.state.app.token && !checkLogin()) {
- toLogin();
- return Promise.reject({
- msg: '未登录'
- });
- }
- }
- if (store.state.app.token) header[TOKENNAME] = 'Bearer ' + store.state.app.token;
- if(store.state.app.uuid)header['uuid'] = store.state.app.uuid
- return new Promise((reslove, reject) => {
- uni.request({
- url: Url + '/api/' + url,
- method: method || 'GET',
- header: header,
- data: data || {},
- success: (res) => {
- if (res.data && res.data.encode) {
- try
- {
- res.data = JSON.parse(decompress(res.data.data));
- }catch(e){
- res.data = decompress(decodeURI(res.data.data));
- }
- }
- if (noVerify)
- reslove(res.data, res);
- else if (res.data.status == 200)
- reslove(res.data, res);
- else if ([410000, 410001, 410002, 40000].indexOf(res.data.status) !== -1) {
- toLogin();
- reject(res.data);
- } else if (res.data.status == 501) {
- uni.reLaunch({
- url: '/pages/error/index'
- })
- reject(res.data);
- } else
- reject(res.data.message || '系统错误');
- },
- fail: (message) => {
- reject('请求失败');
- }
- })
- });
- }
- const request = {};
- ['options', 'get', 'post', 'put', 'head', 'delete', 'trace', 'connect'].forEach((method) => {
- request[method] = (api, data, opt) => baseRequest(api, method, data, opt || {})
- });
- export default request;
|