js常用utils封装

1.1、下载excel方法

/**
 * @description: 下载excel
 * @param  res {Blob} 后台返回的Blob对象
 * @param suffix 文件后缀
 * @param name  文件名称
 */
export function downloadFile(res, suffix = 'xlsx', name = '') {
  const blob = new Blob([res], {
    type: 'application/vnd.ms-excel;charset=utf-8',
  })
  const downloadElement = document.createElement('a')
  const href = window.URL.createObjectURL(blob) // 创建下载的链接
  downloadElement.href = href
  downloadElement.download = name + +new Date() + '.' + suffix
  // downloadElement.download = +new Date() + '.xlsx' // 下载后文件名
  document.body.appendChild(downloadElement)
  downloadElement.click() // 点击下载
  document.body.removeChild(downloadElement) // 下载完成移除元素
  window.URL.revokeObjectURL(href) // 释放掉blob对象
}

1.2、使用

import { downloadFile} from '@/utils/util'
// ExportSaleRecordsData改为自己真实接口

...

methods: {
  // 文件导出
  async exportHandle() {
    ExportSaleRecordsData().then((res) => {
      downloadFile(res, 'xlsx', '某某表')
    })
  },
}

2.1、数组对象中查找所需对象方法

/**
 * @description: 查找数组对象某项值
 * @param objArray 目标对象数据
 * @param key      某项属性
 * @param value    值
 */
export function parseArray(objArray, key, value) {
  for (let i in objArray) {
    let element = objArray[i]
    if (typeof element === 'object') {
      let result = parseArray(element, key, value)
      if (result) return result
    } else {
      if (i === key) {
        if (element === value) return objArray
      }
    }
  }
}

2.2、使用

import { parseArray } from '@/utils/util'
// objArr = [
// 	{id: 111, name: '111', age: '111', sex: '111'},
// 	{id: 222, name: '222', age: '222', sex: '222'},
// 	{id: 333, name: '333', age: '333', sex: '333'},
// 	{id: 444, name: '444', age: '444', sex: '444'}
// ]

let aaa = parseArray(objArr, 'id', 111)
// aaa 打印出为 {id: 111, name: '111', age: '111', sex: '111'}

3.1、返回数组第一项值方法

/**
 * @description:  获取数组的第一项值,若空返回相应值
 * @param arr  目标数组
 * @param key  属性
 * @param val  数组为空时希望返回的值(默认undefined)
 */
export function getFirstValue(arr, key, val = undefined) {
  if (arr.length !== 0) {
    if (typeof arr[0] === 'object') {
      return arr[0][key]
    } else {
      return arr[0]
    }
  } else {
    return val
  }
}

3.2、使用

import { getFirstValue } from '@/utils/util'
// objArr1 = [
// 	{id: 111, name: '111', age: '111', sex: '111'},
// 	{id: 222, name: '222', age: '222', sex: '222'},
// ]
let aaa = getFirstValue(objArr1 , 'id')
// aaa 打印出为 111

// objArr2 = []
let bbb = getFirstValue(objArr2 , 'id', null)
// bbb 打印出为 null

4.1、数组对象相同项合并处理方法

/**
 * @description:  将数组对象中相同项合并处理
 * @param arr  目标数组
 */
export function repArr(arr) {
  let map = {}
  let dest = []
  for (let i = 0; i < arr.length; i++) {
    let ai = arr[i]
    if (!map[ai.name]) {
      dest.push({ name: ai.name, data: ai.data })
      map[ai.name] = ai
    } else {
      for (let j = 0; j < dest.length; j++) {
        let dj = dest[j]
        if (dj.name == ai.name) {
          dj.data = dj.data.concat(ai.data)
          break
        }
      }
    }
  }
  return dest
},

4.2、使用

import { repArr } from '@/utils/util'
// objArr =[
//  {name: '测试1', data: ['10']}, 
//  {name: '测试2', data: ['15']}, 
//  {name: '测试1', data: ['20']}, 
//  {name: '测试2', data: ['25']}
//]

let aaa = repArr (objArr)
// aaa 打印出为
// [
//  {name: '测试1', data: ['10', '20']}, 
//  {name: '测试2', data: ['15', '25']}
// ]

5.1、复制方法

/**
 * @description:    复制文本信息
 * @param text      复制的文字信息
 * @param callback  回调函数 
 */
export function copyText(text, callback) {
  var tag = document.createElement('input')
  tag.setAttribute('id', 'cp_hgz_input')
  tag.value = text
  document.getElementsByTagName('body')[0].appendChild(tag)
  document.getElementById('cp_hgz_input').select()
  document.execCommand('copy')
  document.getElementById('cp_hgz_input').remove()
  if (callback) {
    callback(text)
  } else {
    Vue.prototype.$message.success('复制成功')
  }
}

5.2、使用

import { copyText } from '@/utils/util'
...
// 点击触发事件方法,弹出 复制成功
copyText('123456')

6.1、正则方法

/**
 * 邮箱
 * @param {*} s
 */
export function isEmail (s) {
  return /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/.test(s)
}

/**
 * 手机号码
 * @param {*} s
 */
export function isMobile (s) {
  return /^(13[0-9]|14[4579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\d{8}$/.test(s)
}

/**
 * 电话号码
 * @param {*} s
 */
export function isPhone (s) {
  return /^([0-9]{3,4}-)?[0-9]{7,8}$/.test(s)
}

/**
 * 金额
 * @param {*} s
 */
export function isMoney (s) {
  // 金额 只允许正数
  var exp = /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/
  // 金额 允许正(+)负数
  // var exp = /(^([+-]?)[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^([+-]?)(0){1}$)|(^([+-]?)[0-9]\.[0-9]([0-9])?$)/

  // 金额 允许正负数
  // var exp = /(^([-]?)[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^([-]?)(0){1}$)|(^([-]?)[0-9]\.[0-9]([0-9])?$)/
  if (exp.test(s)) {
    return true
  } else {
    return false
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值