import dayjs from 'dayjs'; export type TargetContext = '_self' | '_parent' | '_blank' | '_top'; export interface OpenWindowOptions { target?: TargetContext; [key: string]: any; } // 新窗口打开处理函数 export function openWindow(url: string, opts?: OpenWindowOptions) { const { target = '_blank', ...others } = opts || {}; const queryString = Object.entries(others) .filter(([key, value]) => value !== undefined && value !== null) .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`) .join('&'); // 构造带查询参数的完整 URL const fullUrl = queryString ? `${url}${url.includes('?') ? '&' : '?'}${queryString}` : url; window.open(fullUrl, target); } /** * 从URL中获取查询参数 * @param url - 要解析的URL * @param key - 要获取的参数名,如果不传则返回所有参数 * @returns 返回指定参数的值或所有参数对象 */ export function getUrlParams(url: string, key?: string): Record | string | object | null { try { const urlObj = new URL(url, window.location.origin); const params = new URLSearchParams(urlObj.search); if (key) { return params.get(key); } const result: Record = {}; params.forEach((value, key) => { result[key] = value; }); return result; } catch (error) { console.error('解析URL失败:', error); return key ? null : {}; } } // 格式化实例类型 export function formatInstanceType(value: string): string { switch (value) { case 'MANUAL': return '运行应用'; default: return value; } } export function formatInstanceStatus(value: string): string { switch (value) { case 'RUNNING': return '运行中'; case 'STOPPED': return '已停止'; case 'STARTING': return '启动中'; case 'STOPPING': return '停止中'; case 'DELETING': return '删除中'; case 'DELETED': return '已删除'; case 'FAILED': return '失败'; default: return value; } } //格式化时间戳 export function formatTimestamp(timestamp: number): string { // 判断时间戳是秒级还是毫秒级 const isMillisecond = timestamp.toString().length >= 13; const millisecondTimestamp = isMillisecond ? timestamp : timestamp * 1000; return dayjs(millisecondTimestamp).format('YYYY-MM-DD HH:mm:ss'); } // 格式化数据类型 export function formatDataType(value: string): string { const dataTypeAbbr = new Map([ ['INTEGER', 'INT'], ['STRING', 'STR'], ['FLOAT', 'FLOAT'], ['DOUBLE', 'DOU'], ['ARRAY', 'ARR'], ['BOOLEAN', 'BOOL'], ['OBJECT', 'OBJECT'], ['DATE', 'DATE'], ['DATETIME', 'DT'], ['TIMESTAMP', 'TS'], ['JSON', 'JSON'] ]); return dataTypeAbbr.get(value) || value; } // 判断是否为JSON字符串 export function isJSON(str: any): boolean { if (typeof str !== 'string') return false; try { JSON.parse(str); return true; } catch (e) { return false; } }