mirror of
https://gitee.com/niucloud-team/niucloud-admin.git
synced 2025-12-14 19:52:48 +00:00
181 lines
5.5 KiB
TypeScript
181 lines
5.5 KiB
TypeScript
import useMemberStore from '@/stores/member'
|
|
import {t} from '@/locale'
|
|
import {getToken, getAppChannel} from './common'
|
|
import qs from 'qs';
|
|
|
|
|
|
interface RequestConfig {
|
|
showSuccessMessage?: boolean
|
|
}
|
|
|
|
interface RequestOptions extends UniNamespace.RequestOptions, RequestOptions {
|
|
}
|
|
|
|
class Request {
|
|
private baseUrl: string
|
|
|
|
private config: RequestOptions = {
|
|
url: '',
|
|
header: {}
|
|
}
|
|
|
|
constructor() {
|
|
// #ifdef H5
|
|
this.baseUrl = import.meta.env.VITE_APP_BASE_URL || `${location.origin}/api/`
|
|
// #endif
|
|
// #ifndef H5
|
|
this.baseUrl = import.meta.env.VITE_APP_BASE_URL
|
|
// #endif
|
|
this.baseUrl.substr(-1) != '/' && (this.baseUrl += '/')
|
|
|
|
try {
|
|
this.config.header[import.meta.env.VITE_REQUEST_HEADER_CHANNEL_KEY] = getAppChannel()
|
|
} catch (e) {
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* 请求拦截器
|
|
*/
|
|
private requestInterceptors() {
|
|
// 携带token
|
|
try {
|
|
getToken() && (this.config.header[import.meta.env.VITE_REQUEST_HEADER_TOKEN_KEY] = getToken())
|
|
this.config.header[import.meta.env.VITE_REQUEST_HEADER_CHANNEL_KEY] = getAppChannel()
|
|
} catch (e) {
|
|
}
|
|
}
|
|
|
|
public get(url: string, data: AnyObject = {}, config: RequestConfig = {}) {
|
|
config.showSuccessMessage == undefined && (config.showSuccessMessage = false)
|
|
Object.assign(this.config, config)
|
|
console.log('get request', url, data)
|
|
return this.request('GET', url, data)
|
|
}
|
|
|
|
public post(url: string, data: AnyObject = {}, config: RequestConfig = {}) {
|
|
config.showSuccessMessage == undefined && (config.showSuccessMessage = false)
|
|
Object.assign(this.config, config)
|
|
return this.request('POST', url, data)
|
|
}
|
|
|
|
public put(url: string, data: AnyObject = {}, config: RequestConfig = {}) {
|
|
config.showSuccessMessage == undefined && (config.showSuccessMessage = false)
|
|
Object.assign(this.config, config)
|
|
return this.request('PUT', url, data)
|
|
}
|
|
|
|
public delete(url: string, config: RequestConfig = {}) {
|
|
config.showSuccessMessage == undefined && (config.showSuccessMessage = false)
|
|
Object.assign(this.config, config)
|
|
return this.request('DELETE', url)
|
|
}
|
|
|
|
/**
|
|
* 发送上传请求
|
|
*/
|
|
public upload(url: string, data: AnyObject = {}, config: RequestConfig = {}) {
|
|
this.requestInterceptors()
|
|
|
|
const params = Object.assign(uni.$u.deepClone(this.config), {
|
|
url: this.baseUrl + url,
|
|
...data
|
|
})
|
|
|
|
return new Promise((resolve, reject) => {
|
|
uni.uploadFile({
|
|
...params,
|
|
success: res => {
|
|
const data = JSON.parse(res.data)
|
|
if (data.code == 1) {
|
|
this.config.showSuccessMessage && uni.showToast({title: data.msg, icon: 'none'})
|
|
resolve(data)
|
|
} else {
|
|
if (data.code == 0) {
|
|
uni.showToast({title: data.msg, icon: 'none'})
|
|
} else {
|
|
this.handleAuthError(data.code)
|
|
}
|
|
reject(data)
|
|
}
|
|
},
|
|
fail: res => {
|
|
reject(res)
|
|
}
|
|
})
|
|
})
|
|
}
|
|
|
|
/**
|
|
* 发送请求
|
|
*/
|
|
private request(method: string, url: string, data ?: AnyObject) {
|
|
this.requestInterceptors()
|
|
|
|
let source = {
|
|
url: this.baseUrl + url,
|
|
method,
|
|
};
|
|
if (source.method.toUpperCase() == 'GET') {
|
|
source.url += '?' + qs.stringify(data);
|
|
} else {
|
|
source.data = data;
|
|
}
|
|
const params = Object.assign(uni.$u.deepClone(this.config), source)
|
|
|
|
return new Promise((resolve, reject) => {
|
|
uni.request({
|
|
...params,
|
|
success: res => {
|
|
const data = res.data
|
|
if (data.code == 1) {
|
|
this.config.showSuccessMessage && uni.showToast({title: data.msg, icon: 'none'})
|
|
resolve(data)
|
|
} else {
|
|
if (data.code == 0) {
|
|
uni.showToast({title: data.msg, icon: 'none'})
|
|
} else {
|
|
this.handleAuthError(data.code)
|
|
}
|
|
reject(data)
|
|
}
|
|
},
|
|
fail: res => {
|
|
reject(res)
|
|
},
|
|
complete: (res) => {
|
|
this.handleRequestFail(res)
|
|
}
|
|
})
|
|
})
|
|
}
|
|
|
|
private handleAuthError(code: number) {
|
|
switch (code) {
|
|
case 401:
|
|
useMemberStore().logout()
|
|
break;
|
|
}
|
|
}
|
|
|
|
private handleRequestFail(res) {
|
|
if (res.errMsg && res.errMsg == "request:ok") {
|
|
if (typeof res.data == 'string') {
|
|
uni.showToast({icon: 'none', title: this.baseUrl + t('requestFail')})
|
|
return
|
|
}
|
|
}
|
|
if (res.errMsg == 'request:fail') {
|
|
uni.showToast({icon: 'none', title: this.baseUrl + t('requestFail')})
|
|
return
|
|
}
|
|
if (res.errMsg && res.errMsg == 'request:fail url not in domain list') {
|
|
uni.showToast({icon: 'none', title: this.baseUrl + t('notInDomainList')});
|
|
return
|
|
}
|
|
}
|
|
}
|
|
|
|
export default new Request()
|