167 lines
3.4 KiB
JavaScript
167 lines
3.4 KiB
JavaScript
// =============================================
|
|
// 全局 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' ? '在线' : '离线';
|
|
}
|