From 2a122106c080eb0a8b0ec82903e785087c6d3b49 Mon Sep 17 00:00:00 2001
From: zhangchen <1652267879@qq.com>
Date: 星期一, 04 八月 2025 16:40:15 +0800
Subject: [PATCH] ID1918-患者姓名根据配置脱敏
---
package-lock.json | 72 ++++++++++++++++++++++++++++++++++++
src/utils/utils.ts | 21 ++++++++++
src/views/mobile/bedsideAuxiliaryScreen/components/Header.vue | 4 +
package.json | 1
4 files changed, 97 insertions(+), 1 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index da5de25..0ad23e7 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -16,6 +16,7 @@
"element-plus": "^2.9.2",
"event-source-polyfill": "^1.0.31",
"pinia": "^3.0.3",
+ "pinyin": "^4.0.0",
"qs": "^6.14.0",
"speak-tts": "^2.0.8",
"vant": "^3.4.3",
@@ -1821,6 +1822,12 @@
"resolved": "https://registry.npmmirror.com/is-what/-/is-what-3.14.1.tgz",
"integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==",
"dev": true,
+ "license": "MIT"
+ },
+ "node_modules/keypress": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/keypress/-/keypress-0.1.0.tgz",
+ "integrity": "sha512-x0yf9PL/nx9Nw9oLL8ZVErFAk85/lslwEP7Vz7s5SI1ODXZIgit3C5qyWjw4DxOuO/3Hb4866SQh28a1V1d+WA==",
"license": "MIT"
},
"node_modules/less": {
@@ -4773,6 +4780,48 @@
"@vue/devtools-kit": "^7.7.7"
}
},
+ "node_modules/pinyin": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/pinyin/-/pinyin-4.0.0.tgz",
+ "integrity": "sha512-vHpV5K+vpp6XUUpZNGRDuHoN+1xcmieM3EWlH4QjSX2kkpG/gVOwpqwV9EOJ9x9c9UERFKeLml5XVSukE/PLgQ==",
+ "license": "MIT",
+ "dependencies": {
+ "commander": "~1.1.1"
+ },
+ "bin": {
+ "pinyin": "bin/pinyin"
+ },
+ "engines": {
+ "install-node": "^18.0.0"
+ },
+ "peerDependencies": {
+ "@node-rs/jieba": "^1.6.0",
+ "nodejieba": "^3.4.4",
+ "segmentit": "^2.0.3"
+ },
+ "peerDependenciesMeta": {
+ "@node-rs/jieba": {
+ "optional": true
+ },
+ "nodejieba": {
+ "optional": true
+ },
+ "segmentit": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/pinyin/node_modules/commander": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-1.1.1.tgz",
+ "integrity": "sha512-71Rod2AhcH3JhkBikVpNd0pA+fWsmAaVoti6OR38T76chA7vE3pSerS0Jor4wDw+tOueD2zLVvFOw5H0Rcj7rA==",
+ "dependencies": {
+ "keypress": "0.1.x"
+ },
+ "engines": {
+ "node": ">= 0.6.x"
+ }
+ },
"node_modules/postcss": {
"version": "8.4.49",
"resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.49.tgz",
@@ -6401,6 +6450,11 @@
"resolved": "https://registry.npmmirror.com/is-what/-/is-what-3.14.1.tgz",
"integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==",
"dev": true
+ },
+ "keypress": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/keypress/-/keypress-0.1.0.tgz",
+ "integrity": "sha512-x0yf9PL/nx9Nw9oLL8ZVErFAk85/lslwEP7Vz7s5SI1ODXZIgit3C5qyWjw4DxOuO/3Hb4866SQh28a1V1d+WA=="
},
"less": {
"version": "4.2.1",
@@ -8355,6 +8409,24 @@
}
}
},
+ "pinyin": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/pinyin/-/pinyin-4.0.0.tgz",
+ "integrity": "sha512-vHpV5K+vpp6XUUpZNGRDuHoN+1xcmieM3EWlH4QjSX2kkpG/gVOwpqwV9EOJ9x9c9UERFKeLml5XVSukE/PLgQ==",
+ "requires": {
+ "commander": "~1.1.1"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-1.1.1.tgz",
+ "integrity": "sha512-71Rod2AhcH3JhkBikVpNd0pA+fWsmAaVoti6OR38T76chA7vE3pSerS0Jor4wDw+tOueD2zLVvFOw5H0Rcj7rA==",
+ "requires": {
+ "keypress": "0.1.x"
+ }
+ }
+ }
+ },
"postcss": {
"version": "8.4.49",
"resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.49.tgz",
diff --git a/package.json b/package.json
index a432161..1c21545 100644
--- a/package.json
+++ b/package.json
@@ -20,6 +20,7 @@
"element-plus": "^2.9.2",
"event-source-polyfill": "^1.0.31",
"pinia": "^3.0.3",
+ "pinyin": "^4.0.0",
"qs": "^6.14.0",
"speak-tts": "^2.0.8",
"vant": "^3.4.3",
diff --git a/src/utils/utils.ts b/src/utils/utils.ts
index deeee91..d419c94 100644
--- a/src/utils/utils.ts
+++ b/src/utils/utils.ts
@@ -1,3 +1,5 @@
+import pinyin from 'pinyin';
+
/**
* 计算某个类名元素的可用高度(视口高度 - 元素顶部距离)
* @param className 元素类名(不带.)
@@ -49,3 +51,22 @@
}
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('')
+}
\ No newline at end of file
diff --git a/src/views/mobile/bedsideAuxiliaryScreen/components/Header.vue b/src/views/mobile/bedsideAuxiliaryScreen/components/Header.vue
index 4df3652..da82b86 100644
--- a/src/views/mobile/bedsideAuxiliaryScreen/components/Header.vue
+++ b/src/views/mobile/bedsideAuxiliaryScreen/components/Header.vue
@@ -101,6 +101,7 @@
import { useBedsideAuxiliaryScreenStore } from "@/store/bedsideAuxiliaryScreen";
import { EPatForm, EPageType } from "@/store/type/bedsideAuxiliaryScreen.type";
import { ElMessage } from "element-plus";
+import { maskName } from '@/utils/utils';
const bedsideAuxiliaryScreenStore = useBedsideAuxiliaryScreenStore();
@@ -118,9 +119,10 @@
return bedsideAuxiliaryScreenStore.deviceData.pageType;
});
+
const patientInfo = computed(() => {
return {
- patientName: bedsideAuxiliaryScreenStore.deviceData.patientName,
+ patientName: bedsideAuxiliaryScreenStore.deviceData.customConfiguration.患者信息是否加密显示 === 1 ? maskName(bedsideAuxiliaryScreenStore.deviceData.patientName) : bedsideAuxiliaryScreenStore.deviceData.patientName,
patientPhone: bedsideAuxiliaryScreenStore.deviceData.patientPhone,
age: bedsideAuxiliaryScreenStore.deviceData.age,
gender: bedsideAuxiliaryScreenStore.deviceData.gender,
--
Gitblit v1.8.0