// utils/uuid.js export function generateUUIDv4() { // 优先使用 crypto(更安全),MiniProgram / H5 / Node 环境可能都支持 if (typeof crypto !== 'undefined' && crypto.getRandomValues) { const buf = new Uint8Array(16); crypto.getRandomValues(buf); // Per RFC4122 v4 buf[6] = (buf[6] & 0x0f) | 0x40; buf[8] = (buf[8] & 0x3f) | 0x80; const hex = Array.from(buf).map(b => b.toString(16).padStart(2, '0')).join(''); return `${hex.substr(0,8)}-${hex.substr(8,4)}-${hex.substr(12,4)}-${hex.substr(16,4)}-${hex.substr(20,12)}`; } else { // 备用(兼容性):Math.random 实现(伪随机,注意安全性) let d = new Date().getTime(); if (typeof performance !== 'undefined' && typeof performance.now === 'function'){ d += performance.now(); // 更好的熵 } return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => { const r = (d + Math.random()*16) % 16 | 0; d = Math.floor(d/16); return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16); }); } }