单应用项目,可以创建很多独立工具类页面 ,不用登录 初始化的页面
06229acbfca7ed6f7b192577cf65afbbebba89d5..aa0aba6f52399779899c78677617c90a95961e86
2025-08-04 zhangchen
Merge branch 'ID1918-患者姓名脱敏' into test
aa0aba 对比 | 目录
2025-08-04 zhangchen
ID1918-患者姓名根据配置脱敏
2a1221 对比 | 目录
2025-08-04 zhangchen
ID1918-添加自定义配置项
ee5ec5 对比 | 目录
5个文件已修改
114 ■■■■■ 已修改文件
package-lock.json 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/store/type/bedsideAuxiliaryScreen.type.ts 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/utils.ts 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mobile/bedsideAuxiliaryScreen/components/Header.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
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",
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",
src/store/type/bedsideAuxiliaryScreen.type.ts
@@ -176,6 +176,11 @@
  推送类型: PushType;
  透析状态: DialysisStatus | null;
  床旁血压结果?: any;
  自定义配置项: Customconfiguration;
}
interface Customconfiguration {
  患者信息是否加密显示: number;
}
export interface Sphygmomanometer {
@@ -202,6 +207,7 @@
  signedIn: SignedIn;
  underTreatment: UnderTreatment;
  sphygmomanometer: Sphygmomanometer;
  customConfiguration: Customconfiguration;
}
export const defaultSphygmomanometer = () :Sphygmomanometer => {
@@ -422,6 +428,7 @@
    gender: "", // 性别
    patForm: EPatForm.OUTPATIENT_SERVICE, // 患者来源
    patFormNumber: "", // 住院门诊号
    customConfiguration: defaultCustomconfiguration(), // 自定义配置项
    // @ts-ignore
    pageType, // 当前要展示的页面
    treatmentStatus: EMedStatus.NOT_CHECKED_IN, // 透析状态
@@ -432,6 +439,12 @@
    sphygmomanometer: defaultSphygmomanometer(), // 血压计传过来的数据
  };
};
export const defaultCustomconfiguration = (): Customconfiguration => {
  return {
    患者信息是否加密显示: 0
  }
}
export const formatDeviceData = (
  data: BedsideAuxiliaryScreen,
@@ -445,6 +458,9 @@
  result.devicdeNo = seeMsg.IOT信息?.床号;
  result.deviceCode = seeMsg.IOT信息?.设备唯一编号;
  // 自定义配置项
  result.customConfiguration = seeMsg.自定义配置项 ?? defaultCustomconfiguration();
  if (seeMsg.推送类型 === EPushType.SPHYGMOMANOMETR) {
    result.pageType = EPageType.SPHYGMOMANOMETER;
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('')
}
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,