/* * 公共方法 * */ 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'; }, getAgeFromId(idNumber) { if (!idNumber || idNumber.length !== 18) { return '' } 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--; } 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}`; } } // 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 }