import notification from '../components/Notification.ts';
import { useTimestamp } from '@vueuse/core';
/**
* ç”ŸæˆæŒ‡å®šé•¿åº¦çš„éšæœºåå…进制å—符串
*/
function getRandomHex(length: number): string {
const bytes = new Uint8Array(Math.ceil(length / 2));
window.crypto.getRandomValues(bytes);
return Array.from(bytes)
.map((byte) => byte.toString(16).padStart(2, '0'))
.join('')
.substring(0, length);
}
export function getResponse(
response:
| {
failed: boolean;
detailsMessage: string;
message: string;
description: unknown;
code: unknown;
requestMessage: string | number | boolean | null | undefined;
content: unknown;
type: unknown;
}
| null
| undefined,
errorCallback?: (arg0: unknown) => void,
) {
if (response && response.failed === true) {
if (errorCallback) {
errorCallback(response);
} else {
const msg = {
message: response.detailsMessage || response.message || 'æ“作失败',
};
switch (response.type) {
case 'info':
notification.info(msg);
break;
case 'warn':
notification.warning(msg);
break;
case 'error':
default:
notification.error(msg);
break;
}
}
} else {
return response;
}
}
/**
* æ ¹æ®ç»™å®šçš„键路径从对象ä¸èŽ·å–æ•°æ®
* @param obj æºæ•°æ®å¯¹è±¡
* @param key 键路径,å¯ä»¥æ˜¯ç®€å•å—符串或点分隔的路径,如 "data.items.list"
* @param defaultValue 如果找ä¸åˆ°å€¼æ—¶è¿”回的默认值
* @returns 找到的值或默认值
*/
export function getDataByKey<T = unknown>(
obj: object,
key: string,
defaultValue?: T,
): T | undefined | null {
if (obj === null || obj === undefined) {
return defaultValue;
}
// 支æŒç‚¹åˆ†éš”的键路径
const keys = key.split('.');
let result: unknown | Record<string, unknown | Record<string, unknown>> = obj;
for (const k of keys) {
if (result === null || result === undefined) {
return defaultValue;
}
if (typeof result !== 'object') {
return defaultValue;
} else {
// 使用类型æ–言确ä¿TypeScript知é“result是一个å¯ç´¢å¼•的对象
const resultObj = result as Record<string, unknown>;
if (!(k in resultObj)) {
return defaultValue;
} else {
result = resultObj[k];
}
}
}
return result === undefined || result === null ? defaultValue : (result as T);
}
/**
* 处ç†å“应数æ®
* @param item 原始数æ®é¡¹
* @param dataKey æ•°æ®é”®è·¯å¾„
* @returns 处ç†åŽçš„对象数组
*/
export function generateResponseData(item: unknown, dataKey?: string): object[] {
if (item) {
if (Array.isArray(item)) {
return item;
}
if (typeof item === 'object') {
if (dataKey) {
const result = getDataByKey<unknown>(item as Record<string, unknown>, dataKey);
if (result === undefined || result === null) {
return [item];
}
if (Array.isArray(result)) {
return result;
}
if (typeof result === 'object') {
return [result as object];
}
} else {
return [item];
}
}
}
return [];
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export function isPromise(obj: any): boolean {
return (
!!obj &&
(typeof obj === 'object' || typeof obj === 'function') &&
typeof obj.then === 'function'
);
}
|