/** * TraceXD 前端通用工具函数 */ (function(global) { /** * 格式化时间显示 * 当天 → HH:mm * 当年非当天 → M-d HH:mm * 非当年 → yy-M-d HH * * @param {string} isoString ISO 日期时间字符串 * @returns {string} 格式化后的时间文本 */ global.formatTime = function(isoString) { if (!isoString) return ''; var d = new Date(isoString); var pad = function(n) { return String(n).padStart(2, '0'); }; return (d.getMonth() + 1) + '-' + d.getDate() + ' ' + pad(d.getHours()) + ':' + pad(d.getMinutes()); }; /** * ??????? badge CSS ?? * ?????????????????????????? */ global.badgeClass = function(category) { if (!category) return 'badge-default'; var fixed = { '餐饮': 'badge-c1', '饮食': 'badge-c1', '交通': 'badge-c2', '出行': 'badge-c2', '购物': 'badge-c3', '娱乐': 'badge-c4', '医疗': 'badge-c5', '健康': 'badge-c5', '教育': 'badge-c6', '学习': 'badge-c6', '养老': 'badge-c7', '社交': 'badge-c8', '旅游': 'badge-c9', '居家': 'badge-c10' }; if (fixed[category]) return fixed[category]; // hash-based fallback var hash = 0; for (var i = 0; i < category.length; i++) { hash = ((hash << 5) - hash) + category.charCodeAt(i); hash |= 0; } var idx = (Math.abs(hash) % 12) + 1; return 'badge-c' + idx; }; global.logout = function() { fetch('/logout', { method: 'POST' }).then(function() { window.location.href = '/login?logout'; }); }; })(window);