From 3b2e941a83ad49d3167df864a5a06a81ef944470 Mon Sep 17 00:00:00 2001
From: zhangchen <1652267879@qq.com>
Date: 星期三, 24 九月 2025 23:55:45 +0800
Subject: [PATCH] Merge branch 'ID2130-未签到页面优化' into test

---
 src/utils/utils.ts |   49 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 49 insertions(+), 0 deletions(-)

diff --git a/src/utils/utils.ts b/src/utils/utils.ts
index 4081f1e..76d82bc 100644
--- a/src/utils/utils.ts
+++ b/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));
 }
\ No newline at end of file

--
Gitblit v1.8.0