This commit is contained in:
2026-09-24 16:25:22 +08:00
commit 7428184f01
1198 changed files with 314515 additions and 0 deletions
+549
View File
@@ -0,0 +1,549 @@
/**
* 医院救援管理平台 · 移动端 Mock 数据
* ------------------------------------------------------------
* 所有页面数据均从本文件读取,后续对接接口时只需替换本文件的取数实现,
* 页面层无需改动(保持低耦合)。
*/
import {
HrUser, HrTodoTask, HrActivity, HrToolBox,
HrCatalog, HrGroup, HrSubject, HrMaterial,
HrExamRecord, HrCert, HrExamPlan, HrQuestion, HrOption, HrPracticeMeta,
HrInjuryMark, HrVital, HrTimelineNode, HrVictim,
HrEventMember, HrEventItem, HrEventDetail,
HrScanFeedback, HrScanRecord, HrStockItem, HrGoods, HrDevice, HrDeviceCheck,
HrMsg, HrMsgGroup, HrContact, HrContactGroup, HrOfflineTask,
HrSettingSwitch, HrSettingRow, HrDesignSection, HrSwatch, HrTokenRow
} from './types.uts'
/* ============================ 用户 ============================ */
export const rescuerUser : HrUser = {
name: '张明远', avatar: '张', title: '主治医师', dept: '急诊科', jobNo: '1247',
role: 'rescuer', roleLabel: '救援人员 · 急救中心',
tags: ['ACLS 认证', 'BLS 认证', '创伤急救', '培训等级 B'],
hours: 42.5, courseCount: 12, certCount: 3
} as HrUser
export const keeperUser : HrUser = {
name: '陈志强', avatar: '陈', title: '物资管理员', dept: '后勤保障科', jobNo: '2083',
role: 'keeper', roleLabel: '仓管人员 · 后勤保障科',
tags: ['仓储管理', '设备维保', '危化品资质', '培训等级 A'],
hours: 26.0, courseCount: 8, certCount: 2
} as HrUser
/* ============================ 学员首页 ============================ */
export const todoTasks : HrTodoTask[] = [
{ icon: '⚑', iconTheme: 'amb', title: '成人 CPR 课题 · 还剩 2 份资料', sub: '09-30 截止 · 已学 68%', action: '继续 ' } as HrTodoTask,
{ icon: '✓', iconTheme: 'red', title: '年度急救复训 · 报名确认', sub: '09-30 截止 · 未开始', action: '去完成 ' } as HrTodoTask
]
export const activities : HrActivity[] = [
{ icon: '▦', iconTheme: 'pri', title: '完成「创伤评估」资料学习', sub: '今天 09:20 · 学习 38 分钟' } as HrActivity,
{ icon: '✗', iconTheme: 'red', title: '错题 +2(已复习 1', sub: '昨天 21:12 · 心肺复苏' } as HrActivity,
{ icon: '▤', iconTheme: 'grn', title: '获得「AED 操作」证书', sub: '2 天前 · 有效期至 2028-09' } as HrActivity
]
export const toolBox : HrToolBox[] = [
{ icon: 'book-2-line', name: '课程库', iconBg: '#EFF6FF', iconColor: '#2563EB' } as HrToolBox,
{ icon: 'file-edit-line', name: '我的考试', iconBg: '#FEF3C7', iconColor: '#B45309' } as HrToolBox,
{ icon: 'award-line', name: '我的证书', iconBg: '#ECFDF5', iconColor: '#059669' } as HrToolBox,
{ icon: 'file-warning-line', name: '错题本', iconBg: '#FEF2F2', iconColor: '#DC2626' } as HrToolBox
]
/* ============================ 课程库 ============================ */
export const catalogList : HrCatalog[] = [
{ id: 'c1', name: '急救基础', count: 11, icon: '', iconBg: '#FEF2F2', iconColor: '#DC2626' } as HrCatalog,
{ id: 'c2', name: '创伤急救', count: 9, icon: '⚡', iconBg: '#FEF3C7', iconColor: '#B45309' } as HrCatalog,
{ id: 'c3', name: 'ACLS / BLS', count: 8, icon: '✓', iconBg: '#ECFDF5', iconColor: '#059669' } as HrCatalog,
{ id: 'c4', name: '检伤分类', count: 6, icon: '♡', iconBg: '#EFF6FF', iconColor: '#2563EB' } as HrCatalog,
{ id: 'c5', name: '设备操作', count: 5, icon: '⚙', iconBg: '#F5F3FF', iconColor: '#7C3AED' } as HrCatalog,
{ id: 'c6', name: '心理干预', count: 4, icon: '◈', iconBg: '#FFFBEB', iconColor: '#92400E' } as HrCatalog,
{ id: 'c7', name: '中毒急救', count: 3, icon: '☣', iconBg: '#FEF2F2', iconColor: '#B91C1C' } as HrCatalog,
{ id: 'c8', name: '应急指挥', count: 3, icon: '⚠', iconBg: '#ECFEFF', iconColor: '#0E7490' } as HrCatalog
]
/** 每个一级分类下的二级分组(三级课题为唯一可点项) */
export const courseGroups : HrGroup[] = [
{
name: '心肺复苏', count: 4,
items: [
{ no: '01', name: '成人 CPR(高级生命支持)', meta: '资料 6 份 · 题库 50 · 必修' } as HrSubject,
{ no: '02', name: '儿童 CPR', meta: '资料 4 份 · 题库 32 · 必修' } as HrSubject,
{ no: '03', name: '婴儿 CPR', meta: '资料 4 份 · 题库 28 · 必修' } as HrSubject,
{ no: '04', name: '溺水者心肺复苏', meta: '资料 3 份 · 题库 18 · 选修' } as HrSubject
]
} as HrGroup,
{
name: 'AED 操作', count: 3,
items: [
{ no: '01', name: 'AED 设备认知与自检', meta: '资料 3 份 · 题库 20 · 必修' } as HrSubject,
{ no: '02', name: 'AED 操作流程与除颤时机', meta: '资料 4 份 · 题库 26 · 必修' } as HrSubject,
{ no: '03', name: '特殊场景 AED(潮湿 / 儿童 / 起搏器)', meta: '资料 2 份 · 题库 15 · 选修' } as HrSubject
]
} as HrGroup,
{
name: '气道管理', count: 4,
items: [
{ no: '01', name: '气道开放与评估', meta: '资料 3 份 · 题库 22 · 必修' } as HrSubject,
{ no: '02', name: '球囊面罩通气', meta: '资料 3 份 · 题库 18 · 必修' } as HrSubject,
{ no: '03', name: '气管插管术', meta: '资料 5 份 · 题库 30 · 认证' } as HrSubject,
{ no: '04', name: '喉罩与声门上气道', meta: '资料 2 份 · 题库 16 · 选修' } as HrSubject
]
} as HrGroup
]
/** 课题详情对应的资料列表 */
export const subjectMaterials : HrMaterial[] = [
{ id: 'm1', kind: 'video', badge: '视频', badgeColor: '#7C3AED', icon: '▶', title: '高质量胸外按压操作示范', meta: '视频 · 时长 08:24 · 09-20 更新', summary: '由急诊科教学组录制,演示成人胸外按压的手位、深度、频率与胸廓回弹要点,并对比 3 处常见错误动作。', from: '成人 CPR(高级生命支持) · 急救基础 / 心肺复苏', progress: 62 } as HrMaterial,
{ id: 'm2', kind: 'doc', badge: 'PDF', badgeColor: '#DC2626', icon: 'PDF', title: '成人 CPR 操作流程(2025 版)', meta: '文档 · PDF · 2.4 MB · 12 页', summary: '依据《2025 心肺复苏与心血管急救指南》整理的操作流程速查手册,含成人基础生命支持流程图、除颤时机判定表与 3 个常见错误对照。', from: '成人 CPR(高级生命支持) · 急救基础 / 心肺复苏', progress: 0 } as HrMaterial,
{ id: 'm3', kind: 'doc', badge: 'DOC', badgeColor: '#2563EB', icon: 'DOC', title: '高质量胸外按压要点', meta: '文档 · Word · 860 KB · 6 页', summary: '按压深度 5~6cm、频率 100~120 次/分,每次按压后必须保证胸廓完全回弹,中断控制在 10 秒以内。', from: '成人 CPR(高级生命支持) · 急救基础 / 心肺复苏', progress: 100 } as HrMaterial,
{ id: 'm4', kind: 'doc', badge: 'PPT', badgeColor: '#D97706', icon: 'PPT', title: '心肺复苏教学课件', meta: '文档 · PPT · 5.6 MB · 38 页', summary: '急救基础课程配套课件,覆盖 BLS 全流程、团队分工与考核要点。', from: '成人 CPR(高级生命支持) · 急救基础 / 心肺复苏', progress: 0 } as HrMaterial,
{ id: 'm5', kind: 'doc', badge: 'XLS', badgeColor: '#059669', icon: 'XLS', title: 'CPR 考核评分表', meta: '文档 · Excel · 124 KB · 2 个工作表', summary: '实操考核使用评分表,包含操作步骤分值、扣分项与总评标准。', from: '成人 CPR(高级生命支持) · 急救基础 / 心肺复苏', progress: 0 } as HrMaterial,
{ id: 'm6', kind: 'video', badge: '视频', badgeColor: '#7C3AED', icon: '▶', title: '双人配合通气节律演示', meta: '视频 · 时长 06:12 · 09-12 更新', summary: '双人配合心肺复苏中通气节律与按压衔接的演示视频。', from: '成人 CPR(高级生命支持) · 急救基础 / 心肺复苏', progress: 0 } as HrMaterial
]
/* ============================ 练习 / 考试 / 证书 ============================ */
export const practiceMeta : HrPracticeMeta = {
subject: '成人 CPR(高级生命支持)',
total: 50,
minutes: 30,
goal: '80%',
lastTime: '09-21 21:08',
lastDone: 18,
lastRate: 72
} as HrPracticeMeta
export const quizQuestions : HrQuestion[] = [
{
id: 'q1', stem: '成人心肺复苏时,胸外按压的深度应达到多少?', answer: 1,
options: [
{ key: 'A', text: '3 ~ 4 cm' } as HrOption,
{ key: 'B', text: '5 ~ 6 cm' } as HrOption,
{ key: 'C', text: '6 ~ 8 cm' } as HrOption,
{ key: 'D', text: '按压至胸廓完全塌陷即可' } as HrOption
],
analysis: '成人胸外按压深度为 5~6 cm,过浅无法产生有效心排血量,过深易造成肋骨骨折等损伤。',
from: '成人 CPR'
} as HrQuestion,
{
id: 'q2', stem: '成人胸外按压的频率应保持在每分钟多少次?', answer: 1,
options: [
{ key: 'A', text: '60 ~ 80 次' } as HrOption,
{ key: 'B', text: '100 ~ 120 次' } as HrOption,
{ key: 'C', text: '120 ~ 140 次' } as HrOption,
{ key: 'D', text: '越快越好' } as HrOption
],
analysis: '指南推荐成人胸外按压频率为 100~120 次/分,过快会降低按压深度与回弹质量。',
from: '成人 CPR'
} as HrQuestion,
{
id: 'q3', stem: '球囊面罩通气时,成人推荐的通气频率是?', answer: 0,
options: [
{ key: 'A', text: '每 6 秒 1 次(10 次/分)' } as HrOption,
{ key: 'B', text: '每 3 秒 1 次(20 次/分)' } as HrOption,
{ key: 'C', text: '每 10 秒 1 次(6 次/分)' } as HrOption,
{ key: 'D', text: '每 6 秒 1 次(6 次/分)' } as HrOption
],
analysis: '建立高级气道后,成人通气频率为每 6 秒 1 次,即 10 次/分,且不再与按压交替中断。',
from: '气道管理'
} as HrQuestion,
{
id: 'q4', stem: '发现有人倒地无反应、无呼吸,首先应当?', answer: 2,
options: [
{ key: 'A', text: '立即开始胸外按压' } as HrOption,
{ key: 'B', text: '先寻找 AED' } as HrOption,
{ key: 'C', text: '判断环境安全并呼救、启动应急系统' } as HrOption,
{ key: 'D', text: '掐人中并等待家属到来' } as HrOption
],
analysis: '施救前必须先确认现场环境安全,随后判断反应与呼吸,呼救并启动应急反应系统,再开始 CPR。',
from: '成人 CPR'
} as HrQuestion,
{
id: 'q5', stem: 'AED 到达后,正确做法是?', answer: 1,
options: [
{ key: 'A', text: '先停止按压擦干胸部再贴电极片' } as HrOption,
{ key: 'B', text: '尽量不中断按压,开机贴片后按提示操作' } as HrOption,
{ key: 'C', text: '等专业医护到场再使用' } as HrOption,
{ key: 'D', text: '除颤后不需要继续按压' } as HrOption
],
analysis: 'AED 到达应尽快使用,尽量缩短按压中断;电击后立即恢复胸外按压。',
from: 'AED 操作'
} as HrQuestion
]
export const examPlans : HrExamPlan[] = [
{ name: 'BLS 基础生命支持 · 年度复训', priority: 0, countdown: '距开考 02 天 04 小时 12 分', time: '2026-09-24 14:00', place: '临床技能中心 3F' } as HrExamPlan
]
export const examRecords : HrExamRecord[] = [
{ name: '心肺复苏理论测验', date: '09-18', score: 92, passed: true } as HrExamRecord,
{ name: 'AED 操作规范考核', date: '08-30', score: 88, passed: true } as HrExamRecord,
{ name: '创伤急救理论测验', date: '08-12', score: 71, passed: false } as HrExamRecord
]
export const certList : HrCert[] = [
{ name: 'AED 操作证书', gotAt: '2025-09', expireAt: '2028-09', status: '有效', statusTheme: 'grn' } as HrCert,
{ name: '成人心肺复苏(CPR)证书', gotAt: '2025-06', expireAt: '2028-06', status: '有效', statusTheme: 'grn' } as HrCert,
{ name: 'BLS 基础生命支持证书', gotAt: '2024-10', expireAt: '2026-10-15', status: '即将到期', statusTheme: 'amb' } as HrCert
]
/** 错题本 / 学习中心共用 */
export const wrongQuestions : HrQuestion[] = [
{
id: 'w1', stem: '成人心肺复苏时,胸外按压的深度应达到多少?', answer: 1,
options: [ { key: 'A', text: '3 ~ 4 cm' } as HrOption, { key: 'B', text: '5 ~ 6 cm' } as HrOption ],
analysis: '成人胸外按压深度为 5~6 cm。', from: '成人 CPR'
} as HrQuestion,
{
id: 'w2', stem: '成人胸外按压的频率应保持在每分钟多少次?', answer: 1,
options: [ { key: 'A', text: '60 ~ 80 次' } as HrOption, { key: 'B', text: '100 ~ 120 次' } as HrOption ],
analysis: '推荐频率为 100~120 次/分。', from: '成人 CPR'
} as HrQuestion,
{
id: 'w3', stem: '球囊面罩通气时,成人推荐的通气频率是?', answer: 0,
options: [ { key: 'A', text: '每 6 秒 1 次(10 次/分)' } as HrOption, { key: 'D', text: '每 6 秒 1 次' } as HrOption ],
analysis: '建立高级气道后每 6 秒 1 次,即 10 次/分。', from: '气道管理'
} as HrQuestion
]
/* ============================ 伤员 ============================ */
export const victimList : HrVictim[] = [
{ id: 'v1', name: '王建国', gender: '男', age: 52, code: 'TRIAGE-20260922-0001', level: 1, injury: '开放性颅脑损伤、左股骨骨折 · 意识模糊,GCS 9 分', status: '已转运 · 协和医院急诊', statusTheme: 'pri', createdAt: '14:21 建档' } as HrVictim,
{ id: 'v2', name: '李华', gender: '男', age: 35, code: 'TRIAGE-20260922-0003', level: 2, injury: '头部开放性外伤、右前臂疑似骨折、左小腿挤压伤', status: '转运中 · 平车 → 创伤外科', statusTheme: 'amb', createdAt: '14:23 建档' } as HrVictim,
{ id: 'v3', name: '陈小梅', gender: '女', age: 28, code: 'TRIAGE-20260922-0006', level: 3, injury: '右膝软组织挫伤 · 可自行行走,生命体征平稳', status: '待转运 · 轻症观察区', statusTheme: 'grn', createdAt: '14:31 建档' } as HrVictim,
{ id: 'v4', name: '赵国强', gender: '男', age: 41, code: 'TRIAGE-20260922-0008', level: 2, injury: '胸部挤压伤、多发肋骨骨折(4-7 肋) · 呼吸 26 次/分', status: '未转运 · 现场待命', statusTheme: 'gray', createdAt: '14:38 建档' } as HrVictim,
{ id: 'v5', name: '吴长胜', gender: '男', age: 61, code: 'TRIAGE-20260922-0012', level: 4, injury: '重度颅脑损伤 · 无呼吸无脉搏,经确认已无生命体征', status: '已确认 · 待移交', statusTheme: 'gray', createdAt: '14:45 建档' } as HrVictim
]
/** 检伤分级(一行四级) */
export const gradeList : string[] = ['轻伤', '重伤', '危重', '死亡']
/** 2D 人体图鉴标记 */
export const injuryMarks : HrInjuryMark[] = [
{ no: '1', title: '头部 · 开放性外伤', sub: '顶枕部裂伤约 4cm · 出血中', theme: 'red' } as HrInjuryMark,
{ no: '2', title: '右前臂 · 疑似骨折', sub: '肿胀畸形 · 触痛明显', theme: 'amb' } as HrInjuryMark,
{ no: '3', title: '左小腿 · 挤压伤', sub: '皮肤瘀斑 · 局部压痛', theme: 'amb' } as HrInjuryMark
]
/** 生命体征 */
export const vitalSigns : HrVital[] = [
{ value: '37.8', unit: 'T ℃', abnormal: false } as HrVital,
{ value: '102', unit: 'P 次/分', abnormal: true } as HrVital,
{ value: '22', unit: 'R 次/分', abnormal: false } as HrVital,
{ value: '95/60', unit: 'BP mmHg', abnormal: true } as HrVital,
{ value: '88', unit: 'SpO₂ %', abnormal: true } as HrVital
]
/** 检伤评估下拉 */
export const triagePickList : string[] = ['行走能力', '呼吸', '循环', '意识 AVPU']
export const triagePickValues : string[] = ['不可走', '受限', '出血', '声音']
export const triagePickOptions : string[][] = [
['可走', '不可走'],
['正常', '受限', '无呼吸'],
['循环正常', '出血', '脉搏消失'],
['清醒', '声音', '疼痛', '无反应']
]
/** 伤员详情:流转时间线 */
export const victimTimeline : HrTimelineNode[] = [
{ time: '14:23', title: '现场检伤建档', sub: '张明 于坍塌现场完成建档,标记 3 处伤情,判定「重伤」', theme: 'normal' } as HrTimelineNode,
{ time: '14:28', title: '分级确认', sub: '现场检伤组 3 组复核,维持「重伤」· 操作人 张明', theme: 'ok' } as HrTimelineNode,
{ time: '14:35', title: '转运交接', sub: '平车送达 协和医院 创伤外科,转出方 张明 / 接收方 刘伟 电子签字', theme: 'normal' } as HrTimelineNode,
{ time: '15:10', title: '院内处置', sub: '创伤外科接诊,建立静脉通路 + 持续心电监护,清创缝合待执行', theme: 'warn' } as HrTimelineNode
]
/** 处置记录时间线 */
export const treatRecords : HrTimelineNode[] = [
{ time: '15:25', title: '分级调整:重伤 → 危重', sub: 'BP 88/56 mmHg · 判断失血性休克进展', theme: 'warn' } as HrTimelineNode,
{ time: '15:10', title: '建立静脉通路', sub: '左上肢 · 16G · 生理盐水 500 ml 快滴', theme: 'normal' } as HrTimelineNode,
{ time: '15:02', title: '止血包扎', sub: '右前臂加压包扎 + 额部敷料', theme: 'ok' } as HrTimelineNode,
{ time: '14:55', title: '检伤分级', sub: '判定「重伤」· START 协议', theme: 'normal' } as HrTimelineNode
]
/* ============================ 转运 ============================ */
export const hospitalList : string[] = ['协和医院 · 急诊创伤中心', '市第一人民医院 · 急诊', '同仁医院 · 急诊']
export const hospitalMeta : string[] = ['距现场 6.2 km · 约 14 分钟', '距现场 8.9 km · 约 21 分钟', '距现场 4.1 km · 但急诊已满']
export const hospitalBed : string[] = ['床位 2', '床位 5', '满员 ✕']
export const hospitalAvail : boolean[] = [true, true, false]
/* ============================ 离线队列 ============================ */
export const offlineTasks : HrOfflineTask[] = [
{ icon: '⇅', theme: 'amb', title: '检伤建档 · 李华(含 3 个附件)', sub: '15:32 暂存 · 等待上传', status: '待传', statusColor: '#D97706' } as HrOfflineTask,
{ icon: '⇅', theme: 'amb', title: '检伤建档 · 赵国强', sub: '15:28 暂存 · 等待上传', status: '待传', statusColor: '#D97706' } as HrOfflineTask,
{ icon: '✓', theme: 'grn', title: '处置记录 · 李华止血包扎', sub: '15:02 提交成功', status: '已同步', statusColor: '#059669' } as HrOfflineTask
]
/* ============================ 事件 ============================ */
export const eventList : HrEventItem[] = [
{
id: 'e1', name: '京港澳高速 K120 多车追尾', kind: '大型交通事故', place: '京港澳高速 K120', distance: '距您 3.2 km',
priority: 0, dotColor: '#DC2626', stage: 'ongoing', urgent: false,
members: [
{ name: '张', avatar: '张', theme: 'blue' } as HrEventMember,
{ name: '李', avatar: '李', theme: 'gn' } as HrEventMember,
{ name: '王', avatar: '王', theme: 'ag' } as HrEventMember
]
} as HrEventItem,
{
id: 'e2', name: '阳光养老院 · 老人跌倒', kind: '一般救援', place: '阳光养老院 3 号楼', distance: '距您 1.1 km',
priority: 2, dotColor: '#10B981', stage: 'ongoing', urgent: false,
members: [ { name: '陈', avatar: '陈', theme: 'gn' } as HrEventMember ]
} as HrEventItem,
{
id: 'e3', name: '城东工业园区 · 化学品泄漏', kind: '危化品事故', place: '城东工业园 B 区', distance: '距您 9.6 km',
priority: 0, dotColor: '#DC2626', stage: 'pending', urgent: true, members: [] as HrEventMember[]
} as HrEventItem,
{
id: 'e4', name: '城南小学 · 学生集体腹痛', kind: '群体性事件', place: '城南小学食堂', distance: '距您 4.3 km',
priority: 1, dotColor: '#F59E0B', stage: 'pending', urgent: true, members: [] as HrEventMember[]
} as HrEventItem,
{
id: 'e5', name: '幸福小区 · 老人心梗', kind: '一般救援', place: '幸福小区 6 号楼', distance: '距您 2.4 km',
priority: 1, dotColor: '#F59E0B', stage: 'history', urgent: false,
members: [ { name: '张', avatar: '张', theme: 'blue' } as HrEventMember ]
} as HrEventItem,
{
id: 'e6', name: '滨江路 · 电动车相撞', kind: '交通事故', place: '滨江路与建设街路口', distance: '已完成',
priority: 2, dotColor: '#9CA3AF', stage: 'history', urgent: false,
members: [ { name: '李', avatar: '李', theme: 'gn' } as HrEventMember ]
} as HrEventItem,
{
id: 'e7', name: '第一中学 · 学生运动损伤', kind: '一般救援', place: '第一中学操场', distance: '已完成',
priority: 2, dotColor: '#9CA3AF', stage: 'history', urgent: false,
members: [ { name: '陈', avatar: '陈', theme: 'gy' } as HrEventMember ]
} as HrEventItem,
{
id: 'e8', name: '老城街区 · 煤气泄漏排查', kind: '危化品事故', place: '老城街区 12 巷', distance: '已完成',
priority: 1, dotColor: '#9CA3AF', stage: 'history', urgent: false,
members: [ { name: '王', avatar: '王', theme: 'ag' } as HrEventMember ]
} as HrEventItem,
{
id: 'e9', name: '火车站 · 旅客突发晕厥', kind: '一般救援', place: '火车站候车大厅', distance: '已完成',
priority: 2, dotColor: '#9CA3AF', stage: 'history', urgent: false,
members: [ { name: '赵', avatar: '赵', theme: 'blue' } as HrEventMember ]
} as HrEventItem
]
export const eventDetail : HrEventDetail = {
id: 'e1',
name: '京港澳高速 K120 多车追尾',
sub: '大型交通事故 · 京港澳高速 K120 · 距您 3.2 km',
teamKey: '小组类型',
teamValue: '现场搜救组 · 组长 张明远',
tags: ['P0 紧急', '已抵达现场'],
victimTotal: 8, transferred: 5, pending: 3,
redCount: 3, amberCount: 2, greenCount: 1, blackCount: 2,
members: [
{ name: '张', avatar: '张', theme: 'blue' } as HrEventMember,
{ name: '李', avatar: '李', theme: 'gn' } as HrEventMember,
{ name: '王', avatar: '王', theme: 'ag' } as HrEventMember,
{ name: '陈', avatar: '陈', theme: 'gy' } as HrEventMember,
{ name: '赵', avatar: '赵', theme: 'blue' } as HrEventMember
],
timeline: [
{ time: '15:20', title: '已完成首轮检伤', sub: '8 人全部分级 · 红 3 / 黄 2 / 绿 1 / 黑 2', theme: 'normal' } as HrTimelineNode,
{ time: '14:50', title: '抵达现场 · 建立临时指挥点', sub: '现场 A 区 · 已设置警戒', theme: 'ok' } as HrTimelineNode,
{ time: '14:35', title: '接收派单并出发', sub: '响应耗时 3 分钟', theme: 'normal' } as HrTimelineNode,
{ time: '14:32', title: '后台调度派单', sub: 'P0 紧急 · 已推送全屏告警', theme: 'normal' } as HrTimelineNode
]
} as HrEventDetail
/* ============================ 扫码作业(批量处置 / 转运) ============================ */
export const scanVictims : HrVictim[] = [
{ id: 'v1', name: '王建国', gender: '男', age: 52, code: 'TRIAGE-20260922-0001', level: 1, injury: '开放性颅脑损伤', status: '', statusTheme: '', createdAt: '' } as HrVictim,
{ id: 'v2', name: '李华', gender: '男', age: 35, code: 'TRIAGE-20260922-0003', level: 2, injury: '头部外伤 / 右前臂骨折', status: '', statusTheme: '', createdAt: '' } as HrVictim,
{ id: 'v3', name: '陈小梅', gender: '女', age: 28, code: 'TRIAGE-20260922-0006', level: 3, injury: '右膝软组织挫伤', status: '', statusTheme: '', createdAt: '' } as HrVictim,
{ id: 'v4', name: '赵国强', gender: '男', age: 41, code: 'TRIAGE-20260922-0008', level: 2, injury: '胸部挤压伤 / 多发肋骨骨折', status: '', statusTheme: '', createdAt: '' } as HrVictim,
{ id: 'v5', name: '吴长胜', gender: '男', age: 61, code: 'TRIAGE-20260922-0012', level: 4, injury: '重度颅脑损伤', status: '', statusTheme: '', createdAt: '' } as HrVictim
]
/** 批量处置 · 处置类型 */
export const treatTypes : string[] = ['止血包扎', '固定制动', '静脉通路', '清创消毒', '给氧']
/* ============================ 仓管 · 扫码 ============================ */
export const scanFeedbacks : HrScanFeedback[] = [
{ theme: 'ok', icon: '✓', title: '一次性医用口罩 · 入库成功', sub: '规格 50 只/盒 · 现存 320 盒 · 张明远' } as HrScanFeedback,
{ theme: 'warn', icon: '!', title: 'N95 防护口罩 · 库存不足', sub: '当前仅 8 盒,低于预警线 20 盒,请及时补货' } as HrScanFeedback,
{ theme: 'err', icon: '✕', title: '条码未登记 · 无法识别', sub: '该编码不在物资台账中,请先建档或联系管理员' } as HrScanFeedback
]
export const scanRecords : HrScanRecord[] = [
{ name: '一次性医用口罩', time: '15:41', delta: '+20 盒', status: '已入库', theme: 'grn', icon: '✓' } as HrScanRecord,
{ name: '医用无菌纱布', time: '15:40', delta: '+12 包', status: '已入库', theme: 'grn', icon: '✓' } as HrScanRecord,
{ name: 'N95 防护口罩', time: '15:39', delta: '库存不足未入库', status: '待处理', theme: 'amb', icon: '!' } as HrScanRecord
]
/* ============================ 仓管 · 库存 ============================ */
export const stockWarn : HrStockItem[] = [
{ name: 'N95 防护口罩', spec: '现存 8 盒 · 预警线 20 盒', value: '严重不足 ', valueTheme: 'red', low: true, icon: '!' } as HrStockItem,
{ name: '肾上腺素注射液', spec: '现存 12 支 · 预警线 30 支', value: '严重不足 ', valueTheme: 'red', low: true, icon: '!' } as HrStockItem,
{ name: '一次性输液器', spec: '现存 46 套 · 预警线 50 套', value: '接近预警 ', valueTheme: 'amb', low: false, icon: '!' } as HrStockItem
]
export const stockAll : HrStockItem[] = [
{ name: '一次性医用口罩', spec: '规格 50 只/盒 · 09-20 入库', value: '320', valueTheme: 't1', low: false, icon: '▦' } as HrStockItem,
{ name: '医用无菌纱布', spec: '规格 8×10cm · 09-18 入库', value: '186', valueTheme: 't1', low: false, icon: '▦' } as HrStockItem,
{ name: '一次性输液器', spec: '规格 1.2m · 09-15 入库', value: '46', valueTheme: 'amb', low: true, icon: '▦' } as HrStockItem,
{ name: '肾上腺素注射液', spec: '规格 1mg/1ml · 09-12 入库', value: '12', valueTheme: 'red', low: true, icon: '▦' } as HrStockItem
]
export const goodsDetail : HrGoods = {
id: 'g1', name: 'N95 防护口罩', code: 'MZ-0042', spec: '规格 20 只/盒',
stock: 8, unit: '盒', warnLine: 20, statusLabel: '库存告急',
out30: 72, dailyUse: '日均消耗 2.4 盒', lastIn: '09-12 · 供应商 XX 医疗', lastInQty: '+40 盒',
trend: [38, 52, 44, 68, 56, 84, 96]
} as HrGoods
/* ============================ 仓管 · 设备 ============================ */
export const deviceList : HrDevice[] = [
{ id: 'd1', name: '便携式除颤仪(AED', code: 'SB-0018', meta: '编码 SB-0018 · 电池 82% · 03-15 维护', status: '可借', theme: 'grn', icon: 'flashlight-line', iconBg: '#EFF6FF', iconColor: '#2563EB', checkList: [] as HrDeviceCheck[], maintain: [] as HrTimelineNode[] } as HrDevice,
{ id: 'd2', name: '折叠式担架', code: 'SB-0031', meta: '编码 SB-0031 · 承重 150kg · 06-20 维护', status: '借用中', theme: 'amb', icon: 'file-list-3-line', iconBg: '#FEF3C7', iconColor: '#B45309', checkList: [] as HrDeviceCheck[], maintain: [] as HrTimelineNode[] } as HrDevice,
{ id: 'd3', name: '便携式氧气瓶(2L', code: 'SB-0055', meta: '编码 SB-0055 · 压力正常 · 09-01 检查', status: '可借', theme: 'grn', icon: 'bubble-chart-line', iconBg: '#ECFDF5', iconColor: '#059669', checkList: [] as HrDeviceCheck[], maintain: [] as HrTimelineNode[] } as HrDevice,
{ id: 'd4', name: '多参数监护仪', code: 'SB-0063', meta: '编码 SB-0063 · 屏幕故障 · 待维修', status: '维修中', theme: 'red', icon: 'monitor-line', iconBg: '#FEF2F2', iconColor: '#DC2626', checkList: [] as HrDeviceCheck[], maintain: [] as HrTimelineNode[] } as HrDevice
]
export const deviceDetail : HrDevice = {
id: 'd1', name: '便携式除颤仪(AED', code: 'SB-0018', meta: '编码 SB-0018 · 型号 HeartSave PAD',
status: '可借用', theme: 'pri', icon: '⚡', iconBg: '#EFF6FF', iconColor: '#2563EB',
checkList: [
{ title: '电池电量 ≥ 50%', sub: '当前 82% · 满足', checked: true } as HrDeviceCheck,
{ title: '电极片在有效期内', sub: '有效期至 2027-03', checked: true } as HrDeviceCheck,
{ title: '设备外观无破损', sub: '外壳 / 按键 / 屏幕正常', checked: true } as HrDeviceCheck,
{ title: '自检指示正常', sub: '开机绿灯闪烁 · 待确认', checked: false } as HrDeviceCheck,
{ title: '附件齐全(剪刀 / 剃刀 / 手套)', sub: '待确认', checked: false } as HrDeviceCheck
],
maintain: [
{ time: '03-15', title: '季度维护完成', sub: '更换电极片 · 电池校准 · 设备科 陈工', theme: 'ok' } as HrTimelineNode,
{ time: '2025-12-08', title: '电池更换', sub: '更换原厂电池组', theme: 'normal' } as HrTimelineNode
]
} as HrDevice
/* ============================ 消息中心 ============================ */
export const keeperMsgGroups : HrMsgGroup[] = [
{
title: '库存预警', count: 4, danger: true,
items: [
{ icon: '!', theme: 'red', title: 'N95 防护口罩库存告急', sub: '现存 8 盒,低于预警线 · 10 分钟前', action: '', unread: 1 } as HrMsg,
{ icon: '!', theme: 'red', title: '肾上腺素注射液库存告急', sub: '现存 12 支,低于预警线 · 1 小时前', action: '', unread: 1 } as HrMsg
]
} as HrMsgGroup,
{
title: '借用审批', count: 3, danger: false,
items: [
{ icon: '⚑', theme: 'amb', title: '张明远 申请借用「便携式除颤仪」', sub: '用途:院前急救 · 2 小时前', action: '去审批 ', unread: 0 } as HrMsg,
{ icon: '✓', theme: 'grn', title: '李承志 借用「折叠担架」已通过', sub: '预计 09-24 归还 · 昨天', action: '', unread: 0 } as HrMsg
]
} as HrMsgGroup,
{
title: '系统通知', count: 0, danger: false,
items: [
{ icon: '⚙', theme: 'gray', title: '9 月物资盘点任务已下发', sub: '09-30 前完成 · 3 天前', action: '', unread: 0 } as HrMsg
]
} as HrMsgGroup
]
export const rescuerMsgGroups : HrMsgGroup[] = [
{
title: '派单通知', count: 2, danger: true,
items: [
{ icon: '⚠', theme: 'red', title: 'P0 派单 · 城东工业园区化学品泄漏', sub: '15:38 · 距您 9.6 km · 待接收', action: '去接收 ', unread: 0 } as HrMsg,
{ icon: '⚠', theme: 'amb', title: '事件已归档 · 幸福小区老人心梗', sub: '09-21 08:12 · 系统自动归档', action: '', unread: 0 } as HrMsg
]
} as HrMsgGroup,
{
title: '系统消息', count: 3, danger: false,
items: [
{ icon: '▤', theme: 'amb', title: 'BLS 证书即将到期提醒', sub: '2026-10-15 到期 · 请完成复训', action: '', unread: 0 } as HrMsg,
{ icon: '▦', theme: 'pri', title: '新课题已上线:溺水者心肺复苏', sub: '昨天 · 急救基础 / 心肺复苏', action: '', unread: 0 } as HrMsg,
{ icon: '⚙', theme: 'gray', title: '系统将于本周日凌晨维护', sub: '09-19 · 预计 2 小时', action: '', unread: 0 } as HrMsg
]
} as HrMsgGroup
]
/* ============================ 通讯录 ============================ */
export const contactGroups : HrContactGroup[] = [
{
title: '指挥调度',
items: [
{ name: '刘建国 · 调度室主任', duty: '', phone: '值班室 8801 · 手机 138****2201', avatar: '刘', theme: 'blue', useAvatar: true, icon: '' } as HrContact,
{ name: '陈静 · 现场指挥', duty: '', phone: '值班室 8802 · 手机 139****3387', avatar: '陈', theme: 'blue', useAvatar: true, icon: '' } as HrContact
]
} as HrContactGroup,
{
title: '协作医院',
items: [
{ name: '协和医院 · 急诊创伤中心', duty: '', phone: '急诊台 010-6688 0001', avatar: '', theme: 'pri', useAvatar: false, icon: '▤' } as HrContact,
{ name: '市第一人民医院 · 急诊', duty: '', phone: '急诊台 010-6688 0022', avatar: '', theme: 'pri', useAvatar: false, icon: '▤' } as HrContact
]
} as HrContactGroup,
{
title: '本队同事',
items: [
{ name: '李承志 · 主治医师', duty: '', phone: '急诊科 · 工号 1248', avatar: '李', theme: 'gn', useAvatar: true, icon: '' } as HrContact,
{ name: '王志远 · 主管护师', duty: '', phone: '急诊科 · 工号 1252', avatar: '王', theme: 'ag', useAvatar: true, icon: '' } as HrContact
]
} as HrContactGroup
]
/* ============================ 设置 ============================ */
export const settingSwitches : HrSettingSwitch[] = [
{ title: 'P0 派单强提醒', sub: '全屏告警 + 强制震动', on: true } as HrSettingSwitch,
{ title: '任务推送', sub: '跟随调度后台的派单通知', on: true } as HrSettingSwitch,
{ title: '学习提醒', sub: '课程与考试到期提醒', on: true } as HrSettingSwitch
]
export const offlineSettingRows : HrSettingRow[] = [
{ title: '离线队列', sub: '3 条待上传', value: '' } as HrSettingRow,
{ title: '已下载学习资料', sub: '占用 8.6 MB', value: '清理 ' } as HrSettingRow
]
export const commonSettingRows : HrSettingRow[] = [
{ title: '清理缓存', sub: '当前 24.3 MB', value: '清理 ' } as HrSettingRow,
{ title: '关于我们', sub: '版本 v2.0.0', value: '' } as HrSettingRow,
{ title: '隐私政策', sub: '', value: '' } as HrSettingRow
]
/* ============================ 设计系统 ============================ */
export const designSections : HrDesignSection[] = [
{
title: '主色 / 语义色',
swatches: [
{ label: '主色', color: '#2563EB', hex: '#2563EB' } as HrSwatch,
{ label: '主色深', color: '#1D4ED8', hex: '#1D4ED8' } as HrSwatch,
{ label: '浅底', color: '#EFF6FF', hex: '#EFF6FF' } as HrSwatch,
{ label: '页面底', color: '#F3F4F6', hex: '#F3F4F6' } as HrSwatch
],
rows: [] as HrTokenRow[]
} as HrDesignSection,
{
title: '四色腕带分级(颜色 + 文字双重编码)',
swatches: [
{ label: 'I 级 红', color: '#DC2626', hex: '#DC2626' } as HrSwatch,
{ label: 'II 级 黄', color: '#F59E0B', hex: '#F59E0B' } as HrSwatch,
{ label: 'III 级 绿', color: '#10B981', hex: '#10B981' } as HrSwatch,
{ label: 'IV 级 黑', color: '#1F2937', hex: '#1F2937' } as HrSwatch
],
rows: [] as HrTokenRow[]
} as HrDesignSection,
{
title: '字号梯度',
swatches: [] as HrSwatch[],
rows: [
{ key: '标题 / 32', value: '救援事件' } as HrTokenRow,
{ key: '小标题 / 20', value: '伤员查询' } as HrTokenRow,
{ key: '正文 / 14', value: '创伤性失血' } as HrTokenRow,
{ key: '辅助 / 12', value: '14:55 建档' } as HrTokenRow,
{ key: '角标 / 10', value: 'I 级 · 红' } as HrTokenRow
]
} as HrDesignSection,
{
title: '圆角 / 间距 / 触控',
swatches: [] as HrSwatch[],
rows: [
{ key: '圆角', value: '8 / 12 / 16 / 24' } as HrTokenRow,
{ key: '间距', value: '8 点网格' } as HrTokenRow,
{ key: '主按钮高度', value: '≥ 56pt' } as HrTokenRow,
{ key: '其他可点高度', value: '≥ 44pt' } as HrTokenRow,
{ key: '正文对比度', value: '≥ 4.5:1WCAG AA' } as HrTokenRow
]
} as HrDesignSection
]
+380
View File
@@ -0,0 +1,380 @@
/**
* 医院救援管理平台 · 移动端 数据模型定义
* ------------------------------------------------------------
* 说明:本文件只放类型定义,不放数据。
* 后续对接接口时,仅需保证后端返回结构与此处类型一致(或在此处做一层适配)。
*/
/** 角色:救护人员端 / 仓管人员端 */
export type HrRole = 'rescuer' | 'keeper'
/** 伤情腕带分级:1 危重(红) / 2 重伤(黄) / 3 轻伤(绿) / 4 死亡(黑) */
export type HrLevel = 1 | 2 | 3 | 4
/** 优先级 */
export type HrPriority = 0 | 1 | 2
/* ============================ 用户 ============================ */
export type HrUser = {
/** 姓名 */
name : string
/** 头像文字 */
avatar : string
/** 职称 */
title : string
/** 科室 */
dept : string
/** 工号(角色由后台按工号识别) */
jobNo : string
/** 角色 */
role : HrRole
/** 角色中文名 */
roleLabel : string
/** 能力标签 */
tags : string[]
/** 累计学时 */
hours : number
/** 完成课程数 */
courseCount : number
/** 有效证书数 */
certCount : number
}
/* ============================ 培训学习 ============================ */
export type HrTodoTask = {
icon : string
iconTheme : string
title : string
sub : string
action : string
}
export type HrActivity = {
icon : string
iconTheme : string
title : string
sub : string
}
export type HrToolBox = {
icon : string
name : string
iconBg : string
iconColor : string
}
/** 课程库一级分类 */
export type HrCatalog = {
id : string
name : string
count : number
icon : string
iconBg : string
iconColor : string
}
/** 课程库二级分组(仅作分组标题,不可点) */
export type HrGroup = {
name : string
count : number
items : HrSubject[]
}
/** 课程库三级课题(唯一可点) */
export type HrSubject = {
no : string
name : string
meta : string
}
/** 学习资料(视频 / 各类文档共用) */
export type HrMaterial = {
id : string
/** video | doc */
kind : string
/** PDF / DOC / PPT / XLS / 视频 */
badge : string
badgeColor : string
icon : string
title : string
meta : string
/** 资料简介 */
summary : string
/** 关联课题 */
from : string
/** 学习/观看进度 0~100 */
progress : number
}
/** 考试记录 */
export type HrExamRecord = {
name : string
date : string
score : number
passed : boolean
}
/** 证书 */
export type HrCert = {
name : string
gotAt : string
expireAt : string
status : string
statusTheme : string
}
/** 待考安排 */
export type HrExamPlan = {
name : string
priority : HrPriority
countdown : string
time : string
place : string
}
/** 顺序练习信息 */
export type HrPracticeMeta = {
subject : string
total : number
minutes : number
goal : string
lastTime : string
lastDone : number
lastRate : number
}
/** 题目选项 */
export type HrOption = {
key : string
text : string
}
/** 题目 */
export type HrQuestion = {
id : string
stem : string
options : HrOption[]
/** 正确选项下标 */
answer : number
analysis : string
/** 所属课题 */
from : string
}
/* ============================ 检伤 / 伤员 ============================ */
export type HrInjuryMark = {
no : string
title : string
sub : string
/** 标记点色:red / amb */
theme : string
}
export type HrVital = {
/** 数值,如 37.8 / 95/60 */
value : string
/** 指标名 + 单位,如 T ℃ */
unit : string
/** 是否异常(异常高亮为红) */
abnormal : boolean
}
export type HrTimelineNode = {
time : string
title : string
sub : string
/** normal | ok | warn */
theme : string
}
export type HrVictim = {
id : string
name : string
gender : string
age : number
code : string
level : HrLevel
/** 伤情摘要 */
injury : string
/** 转运/处置状态文案 */
status : string
statusTheme : string
createdAt : string
}
/* ============================ 应急事件 ============================ */
export type HrEventMember = {
name : string
avatar : string
theme : string
}
export type HrEventItem = {
id : string
name : string
kind : string
place : string
distance : string
priority : HrPriority
dotColor : string
/**进行中 / 待接收 / 历史 */
stage : string
urgent : boolean
members : HrEventMember[]
}
export type HrEventDetail = {
id : string
name : string
sub : string
teamKey : string
teamValue : string
tags : string[]
victimTotal : number
transferred : number
pending : number
redCount : number
amberCount : number
greenCount : number
blackCount : number
members : HrEventMember[]
timeline : HrTimelineNode[]
}
/* ============================ 仓管 ============================ */
export type HrScanFeedback = {
/** ok | warn | err */
theme : string
icon : string
title : string
sub : string
}
export type HrScanRecord = {
name : string
time : string
delta : string
status : string
theme : string
icon : string
}
export type HrStockItem = {
name : string
spec : string
value : string
valueTheme : string
low : boolean
icon : string
}
export type HrGoods = {
id : string
name : string
code : string
spec : string
stock : number
unit : string
warnLine : number
statusLabel : string
out30 : number
dailyUse : string
lastIn : string
lastInQty : string
/** 趋势柱高百分比 */
trend : number[]
}
export type HrDevice = {
id : string
name : string
code : string
meta : string
status : string
theme : string
icon : string
iconBg : string
iconColor : string
checkList : HrDeviceCheck[]
maintain : HrTimelineNode[]
}
export type HrDeviceCheck = {
title : string
sub : string
checked : boolean
}
/* ============================ 消息 / 通讯录 ============================ */
export type HrMsg = {
icon : string
theme : string
title : string
sub : string
action : string
unread : number
}
export type HrMsgGroup = {
title : string
count : number
danger : boolean
items : HrMsg[]
}
export type HrContact = {
name : string
duty : string
phone : string
avatar : string
theme : string
/** true 用图标,false 用文字头像 */
useAvatar : boolean
icon : string
}
export type HrContactGroup = {
title : string
items : HrContact[]
}
/* ============================ 离线队列 ============================ */
export type HrOfflineTask = {
icon : string
theme : string
title : string
sub : string
status : string
statusColor : string
}
/* ============================ 设置 ============================ */
export type HrSettingSwitch = {
title : string
sub : string
on : boolean
}
export type HrSettingRow = {
title : string
sub : string
value : string
}
/* ============================ 设计系统 ============================ */
export type HrSwatch = {
label : string
color : string
hex : string
}
export type HrTokenRow = {
key : string
value : string
}
export type HrDesignSection = {
title : string
swatches : HrSwatch[]
rows : HrTokenRow[]
}