94 lines
2.7 KiB
TypeScript
94 lines
2.7 KiB
TypeScript
import { user } from '@/store';
|
|
import { storeToRefs } from 'pinia';
|
|
import { getCache } from '@/utils';
|
|
|
|
const CONFIG = {
|
|
// host: import.meta.env.VITE_HOST || '',
|
|
// baseURL: 'http://127.0.0.1:9053/api/main',
|
|
baseURL: '/api/main',
|
|
timeout: 60000,
|
|
method: 'GET',
|
|
};
|
|
|
|
export class HttpError extends Error {
|
|
data: any;
|
|
constructor(message: string, data: Record<string, any>) {
|
|
super(message);
|
|
this.data = data;
|
|
}
|
|
}
|
|
|
|
const request = async (config: Record<string, any>): Promise<any> => {
|
|
const networkType = await uni.getNetworkType();
|
|
if (networkType.networkType === 'none') {
|
|
uni.showModal({
|
|
content: '暂无网络,请恢复网络后使用',
|
|
confirmText: '知道了',
|
|
showCancel: false,
|
|
confirmColor: '#ffe60f',
|
|
});
|
|
return Promise.reject(
|
|
new HttpError('暂无网络,请恢复网络后使用', {
|
|
code: '-1',
|
|
}),
|
|
);
|
|
}
|
|
|
|
return new Promise((resolve, reject) => {
|
|
const { clear } = user();
|
|
const { token } = storeToRefs(user());
|
|
const mergerToken = token.value || getCache('token');
|
|
const method = (config.method || CONFIG.method).toUpperCase();
|
|
|
|
uni.request({
|
|
method,
|
|
// url: (config.host || CONFIG.host) + (config.baseURL || CONFIG.baseURL) + config.url,
|
|
url: (config.baseURL || CONFIG.baseURL) + config.url,
|
|
data: method === 'GET' ? config.params : config.data,
|
|
timeout: config.timeout || CONFIG.timeout,
|
|
header: {
|
|
Authorization: mergerToken ? `Bearer ${mergerToken}` : '',
|
|
...config.headers,
|
|
},
|
|
complete(res: anyObj) {
|
|
if (res.statusCode === 200) {
|
|
if (res.data.code === 200) {
|
|
return resolve(res.data);
|
|
} else {
|
|
if (!config.showToast) {
|
|
uni.showToast({
|
|
title: res.data?.message,
|
|
icon: 'none',
|
|
duration: 3000,
|
|
});
|
|
}
|
|
return reject(new HttpError(res.data?.message, res.data));
|
|
}
|
|
} else {
|
|
res.href = (config.baseURL || CONFIG.baseURL) + config.url;
|
|
if (res.statusCode === 401) {
|
|
clear();
|
|
uni.reLaunch({
|
|
url: '/pages/login/index',
|
|
});
|
|
} else {
|
|
uni.showToast({
|
|
icon: 'none',
|
|
title:
|
|
res.statusCode === 500 ? '服务异常' : res?.data?.message || '服务异常,请稍后重试',
|
|
});
|
|
}
|
|
return reject(
|
|
new HttpError(res.data?.message, {
|
|
code: res.statusCode,
|
|
data: res.data,
|
|
}),
|
|
);
|
|
}
|
|
},
|
|
});
|
|
});
|
|
};
|
|
|
|
export default request;
|