// ============================================= // 全局 App 逻辑 - H5 原型工具函数层 // ============================================= /** * 获取 token */ function getToken() { return localStorage.getItem('token'); } /** * 设置 token * @param {string} token */ function setToken(token) { localStorage.setItem('token', token); } /** * 清除 token */ function clearToken() { localStorage.removeItem('token'); } /** * 检查是否已登录 * @returns {boolean} */ function isLoggedIn() { return !!getToken(); } /** * 检查登录状态,未登录则跳转登录页 * @returns {boolean} */ function requireAuth() { if (!isLoggedIn()) { location.href = 'login.html'; return false; } return true; } /** * 显示 Toast 消息 * @param {string} message - 消息内容 * @param {number} duration - 显示时长(ms),默认 2000 */ function showToast(message, duration = 2000) { // 移除已有 toast const existing = document.querySelector('.toast'); if (existing) { existing.remove(); } const toast = document.createElement('div'); toast.className = 'toast'; toast.textContent = message; document.body.appendChild(toast); setTimeout(() => { toast.remove(); }, duration); } /** * 初始化 TabBar 高亮 */ function initTabBar() { const pathname = location.pathname; const tabItems = document.querySelectorAll('.tab-item'); tabItems.forEach(item => { const href = item.getAttribute('href'); if (href && pathname.endsWith(href)) { item.classList.add('active'); } }); } /** * 从 URL 解析查询参数 * @param {string} key - 参数名 * @returns {string|null} */ function getQueryParam(key) { const params = new URLSearchParams(location.search); return params.get(key); } /** * 格式化时间 * @param {string} dateStr - 日期字符串 '2026-04-14 10:30:00' * @returns {string} - '04-14 10:30' */ function formatTime(dateStr) { if (!dateStr) return ''; const d = new Date(dateStr); const month = String(d.getMonth() + 1).padStart(2, '0'); const day = String(d.getDate()).padStart(2, '0'); const hours = String(d.getHours()).padStart(2, '0'); const minutes = String(d.getMinutes()).padStart(2, '0'); return `${month}-${day} ${hours}:${minutes}`; } /** * 格式化日期 * @param {string} dateStr - 日期字符串 * @returns {string} - 'YYYY-MM-DD' */ function formatDate(dateStr) { if (!dateStr) return ''; const d = new Date(dateStr); const year = d.getFullYear(); const month = String(d.getMonth() + 1).padStart(2, '0'); const day = String(d.getDate()).padStart(2, '0'); return `${year}-${month}-${day}`; } /** * 获取设备图标 * @param {string} type - 设备类型 * @returns {string} */ function getDeviceIcon(type) { if (type === 'tower_crane') { return '🏗️'; } return '🛗'; } /** * 获取告警图标 * @param {string} level - 告警级别 * @returns {string} */ function getAlertIcon(level) { if (level === 'danger') { return '🔴'; } if (level === 'warning') { return '🟡'; } return '⚫'; } /** * 获取状态 CSS 类名 * @param {string} status - 状态 * @returns {string} */ function getStatusClass(status) { return status === 'online' ? 'online' : 'offline'; } /** * 获取状态文本 * @param {string} status - 状态 * @returns {string} */ function getStatusText(status) { return status === 'online' ? '在线' : '离线'; }