164 lines
4.5 KiB
JavaScript
164 lines
4.5 KiB
JavaScript
/*
|
|
表单验证
|
|
form为表单
|
|
rules为需要验证的表单
|
|
rules:{ name: '请输入名称' } name为需要验证的字段
|
|
*/
|
|
export function rulesFun(form, rules) {
|
|
console.log('-------------------------------')
|
|
let flage = true
|
|
let JSONrules = JSON.stringify(rules)
|
|
if (JSONrules !== JSON.stringify({})) {
|
|
for (let key in rules) {
|
|
if (Array.isArray(form[key]) && form[key].length == 0) {
|
|
uni.showToast({
|
|
title: rules[key],
|
|
})
|
|
flage = false
|
|
break;
|
|
} else if (!form[key] && form[key] !== 0) {
|
|
uni.showToast({
|
|
title: rules[key],
|
|
})
|
|
flage = false
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return flage
|
|
}
|
|
|
|
/* 手机号验证 */
|
|
export function rulesPhone(phoneVal) {
|
|
let phoneReg = /(^1\d{10}$)|(^[0-9]\d{7}$)/;
|
|
if (!phoneReg.test(phoneVal)) {
|
|
uni.showToast({
|
|
title: '请输入正确的手机号',
|
|
})
|
|
return false;
|
|
} else {
|
|
return true
|
|
}
|
|
}
|
|
|
|
/* 身份证验证 */
|
|
export function rulesIdCard(IdcardVal) {
|
|
var idCardReg = /^(\d{15}$|^\d{18}$|^\d{17}(\d|X|x))$/;
|
|
if (!idCardReg.test(IdcardVal)) {
|
|
uni.showToast({
|
|
title: '身份证号码格式错误!',
|
|
})
|
|
return false;
|
|
} else {
|
|
return true
|
|
}
|
|
}
|
|
|
|
// 计算
|
|
export function calculator(startNum, endNum, operator = '+') {
|
|
if (operator == '+') {
|
|
return (Number(startNum * 1000) + Number(endNum * 1000)) / 1000
|
|
} else if (operator == '-') {
|
|
return (Number(startNum * 1000) - Number(endNum * 1000)) / 1000
|
|
} else if (operator == '/') {
|
|
return (Number(startNum * 1000) / Number(endNum * 1000)) / 1000
|
|
} else if (operator == '*') {
|
|
return (Number(startNum * 1000) * Number(endNum * 1000)) / 1000
|
|
}
|
|
}
|
|
// timeStr表示时间 separator表示分隔符 type == yaer表示只返回年月日
|
|
export function formatDate(timeStr = (new Date()), separator = '-', type) {
|
|
const date = new Date(timeStr)
|
|
let yaer = date.getFullYear()
|
|
let month = date.getMonth() + 1
|
|
let day = date.getDate()
|
|
let hour = date.getHours()
|
|
let minute = date.getMinutes()
|
|
let second = date.getSeconds()
|
|
if (type == 'year') {
|
|
return yaer + separator + month + separator + day
|
|
} else {
|
|
return yaer + separator + month + separator + day + ' ' + hour + ':' + minute + ':' + second
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
// 从解析jwt token里面的信息
|
|
|
|
function base64Decode(input) {
|
|
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
|
|
let str = input.replace(/=+$/, '');
|
|
let output = '';
|
|
|
|
if (str.length % 4 === 1) {
|
|
throw new Error("'atob' failed: The string to be decoded is not correctly encoded.");
|
|
}
|
|
|
|
for (let bc = 0, bs, buffer, i = 0; (buffer = str.charAt(i++)); ~buffer &&
|
|
(bs = bc % 4 ? bs * 64 + buffer : buffer,
|
|
bc++ % 4) ?
|
|
output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0) {
|
|
buffer = chars.indexOf(buffer);
|
|
}
|
|
|
|
return output;
|
|
}
|
|
|
|
export function parseJWT(token) {
|
|
const parts = token.split('.');
|
|
if (parts.length !== 3) {
|
|
throw new Error('Invalid JWT token');
|
|
}
|
|
const payload = parts[1];
|
|
const decoded = JSON.parse(
|
|
decodeURIComponent(
|
|
base64Decode(payload.replace(/-/g, '+').replace(/_/g, '/').replace(/\s/g, ''))
|
|
.split('')
|
|
.map(c =>
|
|
`%${('00' + c.charCodeAt(0).toString(16)).slice(-2)}`
|
|
)
|
|
.join('')
|
|
)
|
|
);
|
|
return decoded;
|
|
}
|
|
|
|
// 防抖函数确保在一定时间内只触发一次点击事件
|
|
// fn: 要执行的函数
|
|
// delay: 防抖的时间间隔(单位为毫秒,默认为500ms)
|
|
export function debounce(fn, delay = 500, immediate = false) {
|
|
let timer = null;
|
|
return function (...args) {
|
|
const context = this;
|
|
if (timer) clearTimeout(timer);
|
|
if (immediate) {
|
|
// 如果立即执行,那么只在第一次触发时执行
|
|
const callNow = !timer;
|
|
if (callNow) fn.apply(context, args);
|
|
// 设置一个延迟的定时器,后续的触发将被防抖处理
|
|
timer = setTimeout(() => {
|
|
timer = null;
|
|
}, delay);
|
|
} else {
|
|
// 非立即执行模式,按普通防抖逻辑
|
|
timer = setTimeout(() => {
|
|
fn.apply(context, args);
|
|
}, delay);
|
|
}
|
|
};
|
|
}
|
|
|
|
// 节流函数限制按钮在一段时间内只触发一次(而不是点击结束后再延时执行)
|
|
// 节流函数
|
|
export function throttle(fn, delay = 1000) {
|
|
let last = 0;
|
|
return function (...args) {
|
|
const now = Date.now();
|
|
if (now - last > delay) {
|
|
last = now;
|
|
fn.apply(this, args);
|
|
}
|
|
};
|
|
} |