You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

162 lines
4.0 KiB

/*
* 公共方法
*
*/
12 months ago
import moment from 'moment';
import { ROOTPATH } from "@/common/config.js"
const base = {
toast : (msg, time, callback) => {
uni.showToast({
icon: "none",
title: msg,
duration: time || 2000,
success: function(res) {
if (callback && typeof(callback) == 'function') {
console.log(callback)
callback()
}
}
})
},
// 验证是否为空
isNull : (p) => {
return p == '' || p == undefined || p == null || p == 'undefined' || p == 'null';
},
11 months ago
getAgeFromId(idNumber) {
if (!idNumber || idNumber.length !== 18) {
return ''
12 months ago
}
11 months ago
const today = new Date();
const birthDate = new Date(idNumber.substring(6, 10), idNumber.substring(10, 12) - 1, idNumber.substring(12, 14));
let age = today.getFullYear() - birthDate.getFullYear();
const m = today.getMonth() - birthDate.getMonth();
if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {
age--;
12 months ago
}
11 months ago
return age + '岁';
},
// 格式化中国日期兼容iOS
formatChinaDate : (dateStr) => {
if (!dateStr) return '';
// 处理iOS不支持的日期格式
let processedDateStr = dateStr;
if (typeof dateStr === 'string') {
// 将 "2025-06-25 01:31:10" 格式转换为 "2025-06-25T01:31:10"
if (dateStr.includes('-') && dateStr.includes(' ') && dateStr.includes(':')) {
processedDateStr = dateStr.replace(' ', 'T');
}
}
const date = new Date(processedDateStr);
// 检查日期是否有效
if (isNaN(date.getTime())) {
console.warn('Invalid date format:', dateStr);
return '';
}
const y = date.getFullYear();
const m = String(date.getMonth() + 1).padStart(2, '0');
const d = String(date.getDate()).padStart(2, '0');
return `${y}-${m}-${d}`;
12 months ago
}
}
// URL工具类
const urlUtils = {
// 处理敏感参数
handleSensitiveParams(url, sensitiveParams = ['code', 'state', 'access_token']) {
try {
const urlObj = new URL(url);
const params = new URLSearchParams(urlObj.search);
const storedParams = {};
// 检查并存储敏感参数
sensitiveParams.forEach(param => {
if (params.has(param)) {
storedParams[param] = params.get(param);
params.delete(param);
}
});
// 如果有敏感参数存储到localStorage
if (Object.keys(storedParams).length > 0) {
const storageKey = `sensitive_params_${Date.now()}`;
const storageData = {
params: storedParams,
timestamp: Date.now(),
expires: Date.now() + 5 * 60 * 1000 // 5分钟过期
};
localStorage.setItem(storageKey, JSON.stringify(storageData));
// 更新URL
urlObj.search = params.toString();
return {
url: urlObj.toString(),
storageKey: storageKey
};
}
return { url: url, storageKey: null };
} catch (error) {
console.warn('处理敏感参数时出错:', error);
return { url: url, storageKey: null };
}
},
// 生成安全的分享链接
generateSafeShareUrl(originalUrl, additionalParams = {}) {
try {
const result = this.handleSensitiveParams(originalUrl);
const urlObj = new URL(result.url);
// 添加额外参数
Object.keys(additionalParams).forEach(key => {
urlObj.searchParams.set(key, additionalParams[key]);
});
return urlObj.toString();
} catch (error) {
console.warn('生成安全分享链接时出错:', error);
return originalUrl;
}
},
// 恢复敏感参数
restoreSensitiveParams(url, storageKey) {
try {
if (!storageKey) return url;
const storedData = localStorage.getItem(storageKey);
if (!storedData) return url;
const data = JSON.parse(storedData);
// 检查是否过期
if (Date.now() > data.expires) {
localStorage.removeItem(storageKey);
return url;
}
const urlObj = new URL(url);
Object.keys(data.params).forEach(key => {
urlObj.searchParams.set(key, data.params[key]);
});
return urlObj.toString();
} catch (error) {
console.warn('恢复敏感参数时出错:', error);
return url;
}
}
};
export {
base,
urlUtils
12 months ago
}