uni-app工具类

在main.js中引入

import {
    
    msg,isLogin,debounce,throttle,prePage,date} from '@/common/js/util'

Vue.prototype.$util = {
    
    msg,isLogin,debounce,throttle,prePage,date}

在common下建一个js文件夹=》包含一个util.js

let _debounceTimeout = null,
	_throttleRunning = false

/**
 * 防抖  在一段时间中,再次触发会重新计时
 * @param {Function} 执行函数
 * @param {Number} delay 延时ms   
 */
export const debounce = (fn, delay=500) => {
    
    
	clearTimeout(_debounceTimeout);
	_debounceTimeout = setTimeout(() => {
    
    
		fn();
	}, delay);
}
/**
 * 节流  一段时间中,只会执行一次
 * @param {Function} 执行函数
 * @param {Number} delay 延时ms  
 */
export const throttle = (fn, delay=500) => {
    
    
	if(_throttleRunning){
    
    
		return;
	}
	_throttleRunning = true;
	fn();
	setTimeout(() => {
    
    
	    _throttleRunning = false;
	}, delay);
}
/**
 * toast
 */
export const msg = (title = '', param={
    
    }) => {
    
    
	if(!title) return;
	uni.showToast({
    
    
		title,
		duration: param.duration || 1500,
		mask: param.mask || false,
		icon: param.icon || 'none'
	});
}
/**
 * 检查登录
 * @return {Boolean}
 */
export const isLogin = (options={
    
    }) => {
    
    
	const token = uni.getStorageSync('uniIdToken');
	if(token){
    
    
		return true;
	}
	if(options.nav !== false){
    
    
		uni.navigateTo({
    
    
			url: '/pages/auth/login'
		})
	}
	return false;
}
/**
 * 获取页面栈
 * @param {Number} preIndex为1时获取上一页
 * @return {Object} 
 */
export const prePage = (preIndex = 1) => {
    
    
	const pages = getCurrentPages();
	const prePage = pages[pages.length - (preIndex + 1)];

	return prePage.$vm;
}
/**
 * 格式化时间戳 Y-m-d H:i:s
 * @param {String} format Y-m-d H:i:s
 * @param {Number} timestamp 时间戳   
 * @return {String}
 */
export const date = (format, timeStamp) => {
    
    
	if('' + timeStamp.length <= 10){
    
    
		timeStamp = + timeStamp * 1000;
	}else{
    
    
		timeStamp = + timeStamp;
	}
	let _date = new Date(timeStamp),
		Y = _date.getFullYear(),
		m = _date.getMonth() + 1,
		d = _date.getDate(),
		H = _date.getHours(),
		i = _date.getMinutes(),
		s = _date.getSeconds();
	
	m = m < 10 ? '0' + m : m;
	d = d < 10 ? '0' + d : d;
	H = H < 10 ? '0' + H : H;
	i = i < 10 ? '0' + i : i;
	s = s < 10 ? '0' + s : s;

	return format.replace(/[YmdHis]/g, key=>{
    
    
		return {
    
    Y,m,d,H,i,s}[key];
	});
}
//二维数组去重
export const getUnique = array => {
    
    
	let obj = {
    
    }
    return array.filter((item, index) => {
    
    
		let newItem = item + JSON.stringify(item)
		return obj.hasOwnProperty(newItem) ? false : obj[newItem] = true
	})
}
// 判断类型集合
export const checkStr = (str, type) => {
    
    
	switch (type) {
    
    
		case 'mobile': //手机号码
			return /^1[3|4|5|6|7|8|9][0-9]{
    
    9}$/.test(str);
		case 'tel': //座机
			return /^(0\d{
    
    2,3}-\d{
    
    7,8})(-\d{
    
    1,4})?$/.test(str);
		case 'card': //身份证
			return /(^\d{
    
    15}$)|(^\d{
    
    18}$)|(^\d{
    
    17}(\d|X|x)$)/.test(str);
		case 'mobileCode': //6位数字验证码
			return /^[0-9]{
    
    6}$/.test(str)
		case 'pwd': //密码以字母开头,长度在6~18之间,只能包含字母、数字和下划线
			return /^([a-zA-Z0-9_]){
    
    6,18}$/.test(str)
		case 'payPwd': //支付密码 6位纯数字
			return /^[0-9]{
    
    6}$/.test(str)
		case 'postal': //邮政编码
			return /[1-9]\d{
    
    5}(?!\d)/.test(str);
		case 'QQ': //QQ号
			return /^[1-9][0-9]{
    
    4,9}$/.test(str);
		case 'email': //邮箱
			return /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/.test(str);
		case 'money': //金额(小数点2位)
			return /^\d*(?:\.\d{
    
    0,2})?$/.test(str);
		case 'URL': //网址
			return /(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/.test(str)
		case 'IP': //IP
			return /((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){
    
    3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))/.test(str);
		case 'date': //日期时间
			return /^(\d{
    
    4})\-(\d{
    
    2})\-(\d{
    
    2}) (\d{
    
    2})(?:\:\d{
    
    2}|:(\d{
    
    2}):(\d{
    
    2}))$/.test(str) || /^(\d{4})\-(\d{2})\-(\d{2})$/
				.test(str)
		case 'number': //数字
			return /^[0-9]$/.test(str);
		case 'english': //英文
			return /^[a-zA-Z]+$/.test(str);
		case 'chinese': //中文
			return /^[\\u4E00-\\u9FA5]+$/.test(str);
		case 'lower': //小写
			return /^[a-z]+$/.test(str);
		case 'upper': //大写
			return /^[A-Z]+$/.test(str);
		case 'HTML': //HTML标记
			return /<("[^"]*"|'[^']*'|[^'">])*>/.test(str);
		default:
			return true;
	}
}

页面上使用

debounce

//数量修改
			onNumberChange(e){
    
    
				this.$util.debounce(async ()=>{
    
    
					const res = await this.$request('cart', 'updateNumber', {
    
    
						id: this.list[e.index]._id,
						number: e.number
					})
					if(res.status == 1){
    
    
						this.list[e.index].number = e.number
						this.calcTotalPrice();
					}else{
    
    
						this.$util.msg('数量更新失败');
					}
				}, 500)
			},

throttle

//选择回调
			confirm(item){
    
    
				this.$util.throttle(()=>{
    
    
					this.$emit('onConfirm', item)
				})
				this.close();
			},

mes

this.$util.msg('手机号码格式不正确');

isLogin

//跳转登录
if(!this.$util.isLogin()){
    
    
	return;
}
//不跳转登录
if(!this.$util.isLogin({
    
    nav:false})){
    
    
	return;
}

prePage

if(this.$util.prePage().refreshList){
    
    
	this.$util.prePage().refreshList(false);
}else{
    
    
	this.$util.prePage().loadData();
}

date


Vue.filter('date', (timeStamp, format='Y-m-d H:i')=>{
    
    
	if(!timeStamp) return '';
	return date(format, timeStamp);
})

checkStr

import {
    
    checkStr} from '@/common/js/util'
if(!checkStr(mobile, 'mobile')){
    
    
	this.$util.msg('手机号码格式不正确');
	return;
}

猜你喜欢

转载自blog.csdn.net/weCat_s/article/details/116145103
今日推荐