Files
hiddenDangerWX/com/index.js
T
2025-03-28 09:19:45 +08:00

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);
}
};
}