You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

120 lines
3.0 KiB
TypeScript

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, string> | 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<string, string> = {};
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;
}
}