uniapp 封装request请求

request.js

import store from '@/store'
import config from '@/config'
import { getToken, getImei } from '@/utils/auth'
import errorCode from '@/utils/errorCode'
import { toast, showConfirm, tansParams } from '@/utils/common'

let timeout = 1000 * 60
// const baseUrl = config.baseUrl

// 是否显示重新登录
let isRelogin = { show: false };

const request = config => {
    // 是否需要设置 token
    const isToken = (config.headers || {}).isToken === false
    config.header = config.header || {}
    if (getToken() && !isToken) {
        config.header['Authorization'] = 'Bearer ' + getToken()
    }
    // get请求映射params参数
    if (config.params) {
        let url = config.url + '?' + tansParams(config.params)
        url = url.slice(0, -1)
        config.url = url
    }
    return new Promise((resolve, reject) => {
        const baseUrl = store.state.baseUrl.baseUrl
        uni.request({
                method: config.method || 'get',
                timeout: config.timeout || timeout,
                url: config.baseUrl || baseUrl + config.url,
                data: config.data,
                header: config.header,
                dataType: 'json'
            }).then(response => {
                let [error, res] = response
                if (error) {
                    // z-paging组件处理错误状态列表显示
                    uni.$emit('z-paging-error-emit')
                    if(!config.notoast) toast('网络异常')
                    reject('网络异常')
                    return
                }
                const code = res.data.code || 200
                const msg = errorCode[code] || res.data.message || errorCode['default']
                // 过期
                if (code === 401) {
                    const imei = getImei()
                    // 如果记住密码
                    if(imei){
                        // 用生成的码自动登录
                        store.dispatch('loginImei',imei).then(res=>{
                            store.dispatch('GetInfo').then(res => {
                                uni.reLaunch({ url: "/pages/index" })
                            })
                        }).catch(err=>{
                            // 自动登录出错,手动登录
                            if(!isRelogin.show){
                                isRelogin.show = true;
                                showConfirm('登录状态已过期,您可以继续留在该页面,或者重新登录?').then(res => {
                                    isRelogin.show = false;
                                    store.dispatch('FedLogOut').then(res => {
                                        uni.reLaunch({ url: '/pages/login' })
                                    })
                                })
                            }
                        })
                    }else{
                        if(!isRelogin.show){
                            isRelogin.show = true;
                            showConfirm('登录状态已过期,您可以继续留在该页面,或者重新登录?').then(res => {
                                isRelogin.show = false;
                                store.dispatch('FedLogOut').then(res => {
                                    uni.reLaunch({ url: '/pages/login' })
                                })
                            })
                        }
                    }
                    reject('无效的会话,或者会话已过期,请重新登录。')
                } else if (code === 500) {
                    uni.$emit('z-paging-error-emit')
                    if(!config.notoast) toast(msg)
                    reject('500')
                } else if (code !== 200) {
                    uni.$emit('z-paging-error-emit')
                    if(code === 601){
                        reject(res.data)
                    }else{
                        if(!config.notoast) toast(msg)
                        reject(code)
                    }
                    
                }
                resolve(res.data)
            })
            .catch(error => {
                uni.$emit('z-paging-error-emit')
                let { message } = error
                if (message === 'Network Error') {
                    message = '网络错误'
                } else if (message.includes('timeout')) {
                    message = '请求超时'
                } else if (message.includes('Request failed with status code')) {
                    message = '系统接口' + message.substr(message.length - 3) + '异常'
                }
                if(!config.notoast) toast(message)
                reject(error)
            })
    })
}

export default request

store文件查看socket博客

调用

import request from '@/utils/request'
import { security } from '@/api/config'

// 新增违章上报
export function addViolation(data) {
  return request({
    url: security + '/violation/addViolation',
    method: 'post',
    data
  })
}

 

posted on 2024-06-27 14:40  小虾米吖~  阅读(5)  评论(0编辑  收藏  举报