request.js 3.91 KB
import store from './../store'
// import { baseUrl } from './env'
// 统一错误输出 
const isTest = true // 是否是测试环境  PIP 部署请设置为false
function showTot(msg) {
	if (isTest) {
		uni.showToast({
			title: msg,
			duration: 3000,
			icon: 'error'
		});
		return
	}
}

// 参数: url:请求地址  param:请求参数  method:请求方式 callBack:回调函数
export function request({
	url = '',
	params = {},
	method = 'GET'
}) {
	// baseUrl改为可配置地址
	if (!uni.getStorageSync('baseUrl')) {
		uni.showToast({
			title: '请先配置,请求Url!',
			duration: 3000,
			icon: 'none'
		});
		uni.setStorageSync('baseUrl',
			'') // 测试环境 'http://slwl-geteway-t.itheima.net/driver'  默认配置地址:http://slwl-geteway.itheima.net/driver
			setTimeout(function() {
				uni.hideLoading();
			}, 500)
			clearTimeout(times)
	}
	let baseUrl = uni.getStorageSync('baseUrl')

	const storeInfo = store.state
	const token = uni.getStorageSync('token')
	let header = {}
	if (url == '/track/upload') {
		header['Authorization'] = token
		header['Content-Type'] = 'application/x-www-form-urlencoded'
	} else if (url == '/files/imageUpload') {
		header['Content-Type'] = 'multipart/form-data';
		header['Authorization'] = token
	} else {
		header['Content-Type'] = 'application/json;',
			header['Authorization'] = token
	}

	const requestRes = new Promise((resolve, reject) => {
		console.log(baseUrl + url)
		uni.request({
			url: baseUrl + url,
			data: params,
			header: header,
			method: method,
		}).then((res) => {
			const {
				data
			} = res
			// 清除loading
			const times = setTimeout(function() {
				uni.hideLoading();
			}, 500);
			clearTimeout(times)
			if (res.statusCode == 400) {
				// showTot(data.msg)
				uni.showToast({
					title: '权限不足,无法登录!',
					duration: 3000,
					icon: 'none'
				});
				uni.redirectTo({
					url: '/pages/login/index'
				});
				return false
			}
			if (res.statusCode == 401) {
				// showTot(data.msg)
				uni.showToast({
					title: '登录超时,请重新登录!',
					duration: 3000,
					icon: 'none'
				});
				uni.redirectTo({
					url: '/pages/login/index'
				});
				return false
			}
			if (data.code == 1) {
				showTot(data.msg)
				uni.showToast({
					title: data.msg,
					duration: 2000,
					icon: 'error'
				});
				return false
			}
			if (data.code == 0 || data.code == 200) {
				resolve(res.data)
			} else {
				console.log(5000)
				showTot(data.msg)
				uni.showToast({
					title: '请求出错了',
					duration: 1000,
					icon: 'error'
				});
			}
		}).catch((err) => {
			reject(err)
		});
	})
	return requestRes
}

// 图片上传 参数: url:请求地址  param:请求参数  method:请求方式 callBack:回调函数
export function requestUpload({
	url = '',
	params = {},
	method = 'post'
}) {
	// baseUrl改为可配置地址
	if (!uni.getStorageSync('baseUrl')) {
		uni.setStorageSync('baseUrl', 'http://slwl-geteway.itheima.net/driver')
	}
	let baseUrl = uni.getStorageSync('baseUrl')

	const token = uni.getStorageSync('token')
	let header = {
		'Authorization': token
	}
	const requestRes = new Promise((resolve, reject) => {
		uni.uploadFile({
			url: baseUrl + url,
			// files: file.tempFiles,  // 使用files 会将传参的数据改为 name: 文件名  : 二进制文件 - {xxx.png: {二进制文件}} 我们需要的是{file: {二进制文件}}
			filePath: params.tempFilePaths[0],
			name: 'file',
			header: {
				// Content-Type: multipart/form-data; boundary=----WebKitFormBoundarybf5YhYJ8fOBadphN  加上这个 会失败
				'Authorization': uni.getStorageSync('token')
			}
		}).then(res => {
			const data = JSON.parse(res.data)
			if (data.code == 0 || data.code == 200) {
				resolve(data)
			} else {
				showTot(data.msg)
				uni.showToast({
					title: '请求出错了!',
					duration: 1000,
					icon: 'error'
				});
			}
		}).catch((err) => {
			reject(err)
		});
	})
	return requestRes
}