VUE 工具类一

记录自己遇到的问题,以备查询。

http.js

import axios from 'axios'
import router from '../router'
//自己写的工具类
import utils from './utils'

//具体配置参数参考https://github.com/axios/axios
// `timeout` 指定请求超时的毫秒数(0 表示无超时时间)
// 如果请求话费了超过 `timeout` 的时间,请求将被中断
axios.defaults.timeout = 15000
// `baseURL` 将自动加在 `url` 前面,除非 `url` 是一个绝对 URL。
// 它可以通过设置一个 `baseURL` 便于为 axios 实例的方法传递相对 URL
axios.defaults.baseURL = '/api'

//router.beforeEach 注册一个全局前置守卫
router.beforeEach((to, from, next) => {
  let userinfo = Cookies.get('KEY_USERINFO')
  // 如果存在用户信息 或 路由不需要登录验证、放行,否则跳转登录路由
  if (userinfo || to.meta.requireAuth == false) {
    next()
  } else {
    next({
      path: '/login'
    })
  }
})

// http request 拦截器
axios.interceptors.request.use(
  config => {
    config.data = JSON.stringify(config.data)
    config.headers = {
      'Content-Type': 'application/json;charset=utf-8'
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

// http response 拦截器
axios.interceptors.response.use(
  response => {
    console.log(response)
    return response
  },
  error => {
    return Promise.reject(error)
  }
)

/**
 * 封装get方法
 * @param url 请求路径
 * @param data 请求参数
 * @param encrypt 参数是否加密,默认加密
 * @returns {Promise}
 */
export function fetch (url, params = {}, encrypt = true) {
	if (encrypt) {
		//参数加密
		utils.paramsEncrypt(params)
	}
	return new Promise((resolve, reject) => {
		axios.get(url, {params})
		.then(response => {
			resolve(response.data)
		})
		.catch(err => {
			console.log(response)
			reject(err)
		})
	})
}

/**
 * 封装post请求
 * @param url 请求路径
 * @param data 请求参数
 * @param encrypt 参数是否加密,默认加密
 * @returns {Promise}
 */
export function post (url, params = {}, encrypt = true) {
  if (encrypt) {
    utils.paramsEncrypt(params)
  }
  return new Promise((resolve, reject) => {
    axios.post(url, params)
      .then(response => {
        resolve(response.data)
      }, err => {
        reject(err)
      })
  })
}
/**
main.js
import {post,fetch} from './utils/http'
Vue.prototype.$post = post;
Vue.prototype.$fetch = fetch;
**/

utils.js

import Cookies from 'js-cookie'
import CryptoJS from 'crypto-js/crypto-js'

export const key = CryptoJS.enc.Utf8.parse('xxxxx') // 十六位十六进制数作为密钥
export const iv = CryptoJS.enc.Utf8.parse('xxxxxxxxxxx') // 十六位十六进制数作为密钥偏移量
/** g工具JS */
export default {
  /** 加密 */
  encrypt (word) {
    let encrypted = CryptoJS.AES.encrypt(word.toString(), key,//  AES加密
      {
        iv: iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7   // 后台用的是pad.Pkcs5,前台对应为Pkcs7
      })
    return encrypted.toString()
  },
  /** 解密 */
  decrypt (word) {
    let decrypted = CryptoJS.AES.decrypt(word, key,//  AES解密
      {
        iv: iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
      })
    return CryptoJS.enc.Utf8.stringify(decrypted)
  },
  /** 参数加密 */
  paramsEncrypt (params = {}) {
    for (let prop in params) {
      if (params[prop] != null) {
        params[prop] = this.encrypt(params[prop])
      }
    }
  },

  goTop(){
    document.body.scrollTop = 0
    document.documentElement.scrollTop = 0
  },
  openUrl(url){
    let reg = /(http|https):\/\/([\w.]+\/?)\S*/
    if(!reg.test(url)){
      url = '//'+url
    }
    window.open(url, '_blank')
  },
  download(url){
    window.open(url, '_blank')
  },
  //将对象的所有属性至为null
  objectSetNull(obj){
    for (let item in obj){
      obj[item] = null
    }
    return obj
  },
}

发布了12 篇原创文章 · 获赞 0 · 访问量 3245

猜你喜欢

转载自blog.csdn.net/qq_28077333/article/details/88971460
今日推荐