2025-09-28

This commit is contained in:
2025-09-28 09:21:15 +08:00
parent d2a0584ee5
commit 5110537d73
24 changed files with 819 additions and 365 deletions

View File

@@ -6,15 +6,115 @@ export const validatePhone = (phone) => {
export const getImageUrl = (imagePath) => {
if (!imagePath ) return ''
if (!imagePath) return ''
if (imagePath.startsWith('http')) return imagePath
// const baseURL = "http://192.168.1.43:3000"
// const baseURL = "https://www.zrbjr.com"
const baseURL = "https://minio.zrbjr.com"
// 如果图片路径以/uploads开头直接返回原路径
if (imagePath.startsWith('/uploads')) {
return `${imagePath}`
return `${baseURL}/jurongquan${imagePath}`
}
return fullUrl
}
export const getUserInfo = () => {
return uni.getStorageSync("user")
}
/**
* 验证并脱敏电话号码
* @param {string} phone - 需要验证和脱敏的电话号码
* @returns {string|boolean} - 脱敏后的电话号码无效则返回false
*/
export function maskPhoneNumber(phone) {
// 检查是否为字符串
if (typeof phone !== 'string') {
return phone;
}
// 移除所有非数字字符
const cleaned = phone.replace(/\D/g, '');
// 验证常见的电话号码格式
// 支持: 11位手机号(中国大陆)、带区号的固定电话
const phoneRegex = /^(1[3-9]\d{9})$|^(\d{3,4}-\d{7,8})$|^(\d{3,4}\d{7,8})$/;
if (!phoneRegex.test(cleaned) && !phoneRegex.test(phone)) {
return phone; // 不是有效的电话号码
}
// 根据不同格式进行脱敏
if (cleaned.length === 11) {
// 手机号: 保留前3位和后4位中间4位用*代替
return cleaned.replace(/^(\d{3})(\d{4})(\d{4})$/, '$1****$3');
} else if (phone.includes('-')) {
// 带区号的固定电话: 区号不变,号码中间用*代替
const [areaCode, number] = phone.split('-');
if (number.length <= 4) {
return `${areaCode}-****`;
}
return `${areaCode}-${number.substr(0, 2)}****${number.substr(-2)}`;
} else {
// 不带区号的固定电话
if (cleaned.length <= 4) {
return '****';
}
return `${cleaned.substr(0, 2)}****${cleaned.substr(-2)}`;
}
}
/**
* 姓名脱敏处理
* @param {string} name - 需要脱敏的姓名
* @returns {string} - 脱敏后的姓名
*/
export function maskName(name) {
// 检查输入是否为有效字符串
if (!name || typeof name !== 'string') {
return '';
}
// 去除前后空格
const trimmedName = name.trim();
// 检查是否为英文姓名(包含空格)
if (trimmedName.includes(' ')) {
const parts = trimmedName.split(' ').filter(part => part);
// 处理英文名:名全显,姓只显首字母
if (parts.length >= 2) {
const firstName = parts.slice(0, -1).join(' ');
const lastName = parts[parts.length - 1];
return `${firstName} ${lastName.charAt(0)}*`;
}
}
// 处理中文姓名
const length = trimmedName.length;
switch (length) {
case 1:
// 单字名,不脱敏
return trimmedName;
case 2:
// 双字名,隐藏第二个字
return `${trimmedName[0]}*`;
case 3:
// 三字名,隐藏中间字
return `${trimmedName[0]}*${trimmedName[2]}`;
case 4:
// 四字名(如复姓),隐藏中间两个字
return `${trimmedName[0]}**${trimmedName[3]}`;
default:
// 更长的姓名,显示首尾各两个字,中间用*代替
if (length > 4) {
return `${trimmedName.substr(0, 2)}${'*'.repeat(length - 4)}${trimmedName.substr(-2)}`;
}
}
return trimmedName;
}