184 lines
4.8 KiB
JavaScript
184 lines
4.8 KiB
JavaScript
/**
|
|
* 工具类导出文件
|
|
* 统一导出所有工具类,方便在项目中使用
|
|
*/
|
|
|
|
// 网络管理
|
|
export { default as networkManager } from './network-manager.js';
|
|
export { NetworkManager } from './network-manager.js';
|
|
|
|
// WebSocket客户端
|
|
export { default as wsClient } from './websocket-client.js';
|
|
export { WebSocketClient } from './websocket-client.js';
|
|
|
|
// 设备连接管理
|
|
export { default as deviceConnectionManager } from './device-connection-manager.js';
|
|
export { DeviceConnectionManager } from './device-connection-manager.js';
|
|
|
|
// 通知管理
|
|
export { default as notificationManager } from './notification-manager.js';
|
|
export { NotificationManager } from './notification-manager.js';
|
|
|
|
// 日志管理
|
|
export { default as logger, log } from './logger.js';
|
|
export { Logger } from './logger.js';
|
|
|
|
// 系统检测
|
|
export {
|
|
checkNetworkConnectionState,
|
|
checkSystemHostName,
|
|
checkSystemFirewallStatus,
|
|
checkCoreProgramFiles,
|
|
checkSystemCertificate,
|
|
checkSystemTestMode,
|
|
checkSystemDriver,
|
|
checkSystemAdminRights,
|
|
checkPortService,
|
|
performSystemCheck
|
|
} from './system-check.js';
|
|
|
|
// 重新导出现有的工具
|
|
export { default as request } from './request.js';
|
|
export { validateForm } from './validation.js';
|
|
export { encrypt, decrypt } from './crypto.js';
|
|
export { getDeviceMacAddress } from './device.js';
|
|
|
|
// 工具函数集合
|
|
export const utils = {
|
|
// 延迟函数
|
|
delay: (ms) => new Promise(resolve => setTimeout(resolve, ms)),
|
|
|
|
// 防抖函数
|
|
debounce: (func, wait) => {
|
|
let timeout;
|
|
return function executedFunction(...args) {
|
|
const later = () => {
|
|
clearTimeout(timeout);
|
|
func(...args);
|
|
};
|
|
clearTimeout(timeout);
|
|
timeout = setTimeout(later, wait);
|
|
};
|
|
},
|
|
|
|
// 节流函数
|
|
throttle: (func, limit) => {
|
|
let inThrottle;
|
|
return function() {
|
|
const args = arguments;
|
|
const context = this;
|
|
if (!inThrottle) {
|
|
func.apply(context, args);
|
|
inThrottle = true;
|
|
setTimeout(() => inThrottle = false, limit);
|
|
}
|
|
};
|
|
},
|
|
|
|
// 深拷贝
|
|
deepClone: (obj) => {
|
|
if (obj === null || typeof obj !== 'object') return obj;
|
|
if (obj instanceof Date) return new Date(obj.getTime());
|
|
if (obj instanceof Array) return obj.map(item => utils.deepClone(item));
|
|
if (typeof obj === 'object') {
|
|
const clonedObj = {};
|
|
for (const key in obj) {
|
|
if (obj.hasOwnProperty(key)) {
|
|
clonedObj[key] = utils.deepClone(obj[key]);
|
|
}
|
|
}
|
|
return clonedObj;
|
|
}
|
|
},
|
|
|
|
// 生成唯一ID
|
|
generateId: (prefix = '') => {
|
|
const timestamp = Date.now().toString(36);
|
|
const random = Math.random().toString(36).substr(2, 9);
|
|
return prefix ? `${prefix}_${timestamp}_${random}` : `${timestamp}_${random}`;
|
|
},
|
|
|
|
// 格式化文件大小
|
|
formatFileSize: (bytes) => {
|
|
if (bytes === 0) return '0 Bytes';
|
|
const k = 1024;
|
|
const sizes = ['Bytes', 'KB', 'MB', 'GB'];
|
|
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
|
|
},
|
|
|
|
// 格式化时间
|
|
formatDuration: (ms) => {
|
|
const seconds = Math.floor(ms / 1000);
|
|
const minutes = Math.floor(seconds / 60);
|
|
const hours = Math.floor(minutes / 60);
|
|
|
|
if (hours > 0) {
|
|
return `${hours}小时${minutes % 60}分钟`;
|
|
} else if (minutes > 0) {
|
|
return `${minutes}分钟${seconds % 60}秒`;
|
|
} else {
|
|
return `${seconds}秒`;
|
|
}
|
|
},
|
|
|
|
// 判断是否为移动设备
|
|
isMobile: () => {
|
|
return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(
|
|
navigator.userAgent
|
|
);
|
|
},
|
|
|
|
// 判断是否为Electron环境
|
|
isElectron: () => {
|
|
return typeof window !== 'undefined' &&
|
|
window.process &&
|
|
window.process.type === 'renderer';
|
|
},
|
|
|
|
// 安全地解析JSON
|
|
safeParseJSON: (str, defaultValue = {}) => {
|
|
try {
|
|
return JSON.parse(str);
|
|
} catch {
|
|
return defaultValue;
|
|
}
|
|
},
|
|
|
|
// 获取URL参数
|
|
getQueryParam: (name) => {
|
|
const url = new URL(window.location.href);
|
|
return url.searchParams.get(name);
|
|
},
|
|
|
|
// 设置URL参数
|
|
setQueryParam: (name, value) => {
|
|
const url = new URL(window.location.href);
|
|
url.searchParams.set(name, value);
|
|
window.history.replaceState({}, '', url);
|
|
},
|
|
|
|
// 下载文件
|
|
downloadFile: (content, filename, type = 'text/plain') => {
|
|
const blob = new Blob([content], { type });
|
|
const url = URL.createObjectURL(blob);
|
|
const a = document.createElement('a');
|
|
a.href = url;
|
|
a.download = filename;
|
|
document.body.appendChild(a);
|
|
a.click();
|
|
document.body.removeChild(a);
|
|
URL.revokeObjectURL(url);
|
|
}
|
|
};
|
|
|
|
// 默认导出所有工具
|
|
export default {
|
|
networkManager,
|
|
wsClient,
|
|
deviceConnectionManager,
|
|
notificationManager,
|
|
logger,
|
|
log,
|
|
...utils
|
|
}; |