单应用项目,可以创建很多独立工具类页面 ,不用登录 初始化的页面
zhangchen
2025-09-09 0c994fd068adf276a3f7216dee0a843e78ae0a8c
src/utils/utils.ts
@@ -1,3 +1,5 @@
import pinyin from 'pinyin';
/**
 * 计算某个类名元素的可用高度(视口高度 - 元素顶部距离)
 * @param className 元素类名(不带.)
@@ -28,4 +30,51 @@
  }
  return value;
}
/**
 * 深拷贝
 * @param obj
 * @returns
 */
export function deepClone<T>(obj: T): T {
  if (obj === null || typeof obj !== "object") return obj;
  if (Array.isArray(obj)) {
    return obj.map(item => deepClone(item)) as unknown as T;
  }
  const result: any = {};
  for (const key in obj) {
    if (Object.prototype.hasOwnProperty.call(obj, key)) {
      result[key] = deepClone(obj[key]);
    }
  }
  return result;
}
/**
 * 姓名脱敏:第二个字变成首字母大写
 * @param name 患者姓名
 * @returns 脱敏后的姓名
 */
export function maskName(name: string): string {
  if (!name) return ''
  const chars = Array.from(name)
  if (chars.length < 2) return name
  const secondChar = chars[1]
  const [pinyinArr] = pinyin(secondChar, { style: pinyin.STYLE_FIRST_LETTER })
  const masked = pinyinArr[0]?.toUpperCase?.() || '*'
  chars[1] = masked
  return chars.join('')
}
/**
 * 延时函数
 * @param {number} ms - 延时时间,单位毫秒
 */
export function delay(ms: number) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}