utils.ts 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import type { GlobalConfig } from '@/share/types';
  2. export function getEnumOptions<T extends string | number, M extends Record<T, string>>(enumObj: Record<string, T>, nameMap: M) {
  3. return Object.entries(enumObj)
  4. .filter(([_key, value]) => !isNaN(Number(value)) || typeof value === 'string') // 保留数字和字符串类型的值
  5. .filter(([key, _value]) => isNaN(Number(key))) // 过滤掉数字键(枚举的反向映射)
  6. .map(([_key, value]) => ({
  7. label: nameMap[value as T],
  8. value: value
  9. }));
  10. }
  11. /**
  12. * 获取全局配置项 (严格类型版本)
  13. * @param key 配置键名
  14. * @returns 配置值或undefined
  15. */
  16. export function getGlobalConfig<T extends keyof GlobalConfig>(key: T): GlobalConfig[T] | undefined {
  17. return (window as typeof window & { CONFIG?: GlobalConfig }).CONFIG?.[key];
  18. }
  19. /**
  20. * 验证URL格式
  21. * @param url 待验证URL
  22. * @returns 验证结果
  23. */
  24. export const validateUrl = (url: string): boolean => {
  25. try {
  26. new URL(url);
  27. return true;
  28. } catch {
  29. return false;
  30. }
  31. };
  32. /**
  33. * 验证Authorization头格式
  34. * @param auth 待验证字符串
  35. * @returns 验证结果
  36. */
  37. export const validateAuthHeader = (auth: string): boolean => {
  38. return /^Basic [A-Za-z0-9+/]+={0,2}$/.test(auth);
  39. };