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
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;
|
|
}
|
|
} |