194 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			194 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import config from '../config/common' // 配置文件
 | 
						||
import handle401 from './handle401'
 | 
						||
// import MD5 from 'md5'
 | 
						||
 | 
						||
export default {
 | 
						||
	domain() {
 | 
						||
		// return config.uni_app_web_api_url.replace('api', '')
 | 
						||
		return config.uni_app_web_local_api_url.replace('api', '')
 | 
						||
	},
 | 
						||
	getRequestHeaders(url, type = 'post', isIgnoreTenant) {
 | 
						||
		const auth = 'Bearer ' + uni.getStorageSync('accessToken')
 | 
						||
		// const user = uni.getStorageSync('loginUserVerify')
 | 
						||
		// const RootOrgId = uni.getStorageSync('RootOrgId')
 | 
						||
		const appInfoData = uni.getStorageSync('appInfo')
 | 
						||
		const tenant = '01'//uni.getStorageSync('Tenant') || 
 | 
						||
		const userId = appInfoData?.User?.ID || ''
 | 
						||
		const userName = appInfoData?.User?.NAME || ''
 | 
						||
		const orgId = appInfoData?.User?.ORG_ID || ''
 | 
						||
		const dataRule = appInfoData?.DataRule ? appInfoData?.DataRule.join(',') : ''
 | 
						||
		const departmentId = appInfoData?.User?.DEPARTMENT_ID || ''
 | 
						||
		const mineType = appInfoData?.User?.MineType || ''
 | 
						||
		const headers = {
 | 
						||
			'Content-Type': type === 'post' ? 'application/json' : 'application/x-www-form-urlencoded',
 | 
						||
			Authorization: auth,
 | 
						||
			Tenant: tenant,
 | 
						||
			userid: userId,
 | 
						||
			// username: userName,  // username不能使用中文放在header
 | 
						||
			departmentId,
 | 
						||
			MineType: mineType,
 | 
						||
			orgId,
 | 
						||
			DataRule: dataRule,
 | 
						||
			RequestType: '2'
 | 
						||
		}
 | 
						||
		// 非 OP 路径接口,header 需要添加 Tenant
 | 
						||
		// const Tenant = uni.getStorageSync('Tenant')
 | 
						||
		// url.indexOf('OP') != 0 && !isIgnoreTenant && (headers.Tenant = Tenant)
 | 
						||
		return headers
 | 
						||
	},
 | 
						||
	send(options = {}, onlyData, isShowLoading) {
 | 
						||
		const u = config.serviceHost(options.url)
 | 
						||
		// loading加载
 | 
						||
		if (isShowLoading) {
 | 
						||
			uni.showLoading({
 | 
						||
				title: '加载中',
 | 
						||
				mask: true
 | 
						||
			})
 | 
						||
		}
 | 
						||
 | 
						||
		// options.url = config.uni_app_web_api_url + '' + options.url
 | 
						||
		options.url = u
 | 
						||
		// 请求方式
 | 
						||
		options.method = options.method || 'GET'
 | 
						||
		// TODO:
 | 
						||
		// let users = uni.getStorage("users");
 | 
						||
		// if(users != null){
 | 
						||
		//   options.header = { "Auth-Token" : users.token };
 | 
						||
		// }
 | 
						||
		// options.header = options.header
 | 
						||
 | 
						||
		// 发起Promise请求
 | 
						||
		return new Promise((resolve, reject) => {
 | 
						||
			uni.request(options).then(async (res, err) => {
 | 
						||
				uni.hideLoading()
 | 
						||
				let {
 | 
						||
					errMsg,
 | 
						||
					data,
 | 
						||
					statusCode
 | 
						||
				} = res
 | 
						||
				// 登陆过期
 | 
						||
				if (statusCode === 401) {
 | 
						||
					const refreshData = await handle401(options)
 | 
						||
					errMsg = refreshData.errMsg
 | 
						||
					data = refreshData.data
 | 
						||
					statusCode = refreshData.statusCode
 | 
						||
				}
 | 
						||
 | 
						||
				if (statusCode !== 200) {
 | 
						||
					if (statusCode === 400) {
 | 
						||
						uni.removeStorageSync('accessToken')
 | 
						||
						uni.removeStorageSync('refreshToken')
 | 
						||
 | 
						||
						let pages = getCurrentPages()
 | 
						||
						if(pages.length > 0) {
 | 
						||
							let prevPage = pages[pages.length - 1]
 | 
						||
							if (prevPage.route !== 'pages/login/index') {
 | 
						||
								uni.navigateTo({
 | 
						||
									url: '/pages/login/index'
 | 
						||
								})
 | 
						||
							} else {
 | 
						||
								uni.showModal({
 | 
						||
									title: "400:没有访问权限",
 | 
						||
									showCancel: false,
 | 
						||
									content: data.error_description
 | 
						||
								})
 | 
						||
							}
 | 
						||
						}
 | 
						||
 | 
						||
					} else {
 | 
						||
						uni.showToast({
 | 
						||
							title: '请求错误: ' + statusCode,
 | 
						||
							icon: 'error'
 | 
						||
						})
 | 
						||
					}
 | 
						||
					return
 | 
						||
				}
 | 
						||
 | 
						||
				if (errMsg !== 'request:ok') {
 | 
						||
					reject(errMsg)
 | 
						||
				} else {
 | 
						||
					uni.hideLoading()
 | 
						||
					// 相应拦截、根据后端的状态码来写,可以自行判断和封装
 | 
						||
					if (!data.IsSuccessful && onlyData) {
 | 
						||
						// wyw api 调用错误提示  需要用户确认 再消失
 | 
						||
						uni.showModal({
 | 
						||
							title: '错误提示',
 | 
						||
							content: data.ErrorMessage,
 | 
						||
							showCancel: false,
 | 
						||
						})
 | 
						||
						reject(data.ErrorMessage)
 | 
						||
					} else {
 | 
						||
						resolve(data)
 | 
						||
					}
 | 
						||
				}
 | 
						||
			})
 | 
						||
		})
 | 
						||
	},
 | 
						||
	upload(url = '', filePath) {
 | 
						||
		// return this.send({
 | 
						||
		// 	url: url,
 | 
						||
		// 	data: data,
 | 
						||
		// 	header: this.getRequestHeaders(url, 'post')
 | 
						||
		// }, onlyData)
 | 
						||
		const appInfoData = uni.getStorageSync('appInfo')
 | 
						||
		const tenant = uni.getStorageSync('Tenant') || ''
 | 
						||
		const userId = appInfoData?.User?.ID || ''
 | 
						||
		const orgId = appInfoData?.User?.ORG_ID || ''
 | 
						||
		return new Promise((resolve, reject) => {
 | 
						||
			uni.showLoading()
 | 
						||
			uni.uploadFile({
 | 
						||
				url: url,
 | 
						||
				filePath: filePath[0],
 | 
						||
				name: 'file',
 | 
						||
				formData: {
 | 
						||
					OrgId: orgId,
 | 
						||
					userID: userId
 | 
						||
				},
 | 
						||
				header: {
 | 
						||
					Tenant: tenant,
 | 
						||
					userid: userId
 | 
						||
				},
 | 
						||
				success: (res) => {
 | 
						||
					if (res.statusCode === 200) {
 | 
						||
						uni.hideLoading()
 | 
						||
						resolve(JSON.parse(res.data))
 | 
						||
						const uploadResult = JSON.parse(res.data)
 | 
						||
						if (uploadResult.IsSuccessful) {
 | 
						||
							resolve(uploadResult.Data)
 | 
						||
						} else {
 | 
						||
							reject(uploadResult.ErrorMessage)
 | 
						||
						}
 | 
						||
					}
 | 
						||
				},
 | 
						||
				fail: (err) => {
 | 
						||
					console.log(err)
 | 
						||
				}
 | 
						||
			})
 | 
						||
		})
 | 
						||
	},
 | 
						||
	get(url = '', data = {}, onlyData = true) {
 | 
						||
		return this.send({
 | 
						||
			url: url,
 | 
						||
			data: data,
 | 
						||
			header: this.getRequestHeaders(url, 'get')
 | 
						||
		}, onlyData)
 | 
						||
	},
 | 
						||
	post(url = '', data = {}, onlyData = true, isShowLoading = true) {
 | 
						||
		const DataRule = uni.getStorageSync('DataRule')
 | 
						||
		const dataStr = JSON.stringify(Object.assign({}, data, {
 | 
						||
			DataRule
 | 
						||
		}))
 | 
						||
		// const requestKey = url + '_' + MD5(dataStr) + '_requestKey'
 | 
						||
		// TODO: 节流
 | 
						||
		// const loaded = uni.getStorageSync(requestKey)
 | 
						||
		// if (loaded) return null
 | 
						||
		// uni.setStorageSync(requestKey, true)
 | 
						||
		return this.send({
 | 
						||
			url: url,
 | 
						||
			data: data,
 | 
						||
			header: this.getRequestHeaders(url, 'post'),
 | 
						||
			method: 'POST'
 | 
						||
		}, onlyData, isShowLoading)
 | 
						||
	}
 | 
						||
}
 |