| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- /**
- * uni-app 网络请求封装
- * @author steelwei
- */
- import { BASE_URL, CLIENT_ID, PLATFORM_CODE, TENANT_ID } from './config'
- import { getToken, clearAuth } from './auth'
- /**
- * 通用请求方法
- * @param {Object} options - 请求配置
- * @param {string} options.url - 请求路径(不含 BASE_URL)
- * @param {string} [options.method='GET'] - 请求方法
- * @param {Object} [options.data] - 请求数据
- * @param {Object} [options.header] - 额外请求头
- * @param {boolean} [options.needToken=true] - 是否需要携带 Token
- * @returns {Promise}
- */
- export default function request(options = {}) {
- const {
- url,
- method = 'GET',
- data,
- header = {},
- needToken = true
- } = options
- // 构建请求头
- const headers = {
- 'Content-Type': 'application/json;charset=utf-8',
- 'clientid': CLIENT_ID,
- 'X-Platform-Code': PLATFORM_CODE,
- ...header
- }
- // 携带 Token
- if (needToken) {
- const token = getToken()
- if (token) {
- headers['Authorization'] = 'Bearer ' + token
- }
- }
- return new Promise((resolve, reject) => {
- uni.request({
- url: BASE_URL + url,
- method: method.toUpperCase(),
- data,
- header: headers,
- success: (res) => {
- const statusCode = res.statusCode
- const result = res.data
- // HTTP 状态码错误
- if (statusCode === 401) {
- // Token 过期或未登录
- clearAuth()
- uni.showToast({ title: '登录已过期,请重新登录', icon: 'none' })
- setTimeout(() => {
- uni.reLaunch({ url: '/pages/login/login' })
- }, 1500)
- return reject(new Error('未授权'))
- }
- if (statusCode !== 200) {
- const msg = result?.msg || `请求失败(${statusCode})`
- uni.showToast({ title: msg, icon: 'none' })
- return reject(new Error(msg))
- }
- // 业务状态码
- if (result.code !== undefined && result.code !== 200) {
- const msg = result.msg || '操作失败'
- uni.showToast({ title: msg, icon: 'none' })
- return reject(new Error(msg))
- }
- resolve(result)
- },
- fail: (err) => {
- uni.showToast({ title: '网络异常,请稍后重试', icon: 'none' })
- reject(err)
- }
- })
- })
- }
|