使用AI从零打造炫酷医疗数据可视化大屏,源码免费拿!

在智慧医疗时代,数据可视化大屏已成为医院指挥中心、急诊监控室的核心工具。今天分享一套完整的医疗数据可视化大屏解决方案,带你深入了解从架构设计到动效实现的全流程。


🎯 项目概览

这是一个面向医疗场景的数据可视化大屏,涵盖患者就诊统计、科室床位管理、医生接诊分析、设备使用监控、全国患者流向等核心业务模块。

技术栈:

  • React 19.2.3 + TypeScript 5.9.3
  • Vite 7.2.4 极速构建
  • Tailwind CSS 4.1.17 原子化样式
  • ECharts 中国地图可视化
  • Recharts React 原生图表库
  • date-fns 日期处理
  • lucide-react 图标库

📊 功能模块详解

🔷 头部区域(Header)

scss 复制代码
typescript
const [time, setTime] = useState(new Date());

useEffect(() => {
  const timer = setInterval(() => setTime(new Date()), 1000);
  return () => clearInterval(timer);
}, []);
  • 实时时钟 :秒级刷新,date-fns 格式化,支持中文星期显示
  • 渐变标题bg-clip-text + drop-shadow 实现发光效果
  • 滚动公告 :CSS marquee 动画,无限循环

🔷 左侧面板(LeftPanel)

1. 疾病关键词搜索

ini 复制代码
typescript
const activeKeywordIndex = useHighlightCarousel(diseaseKeywords.length, 2500);
  • 6 个关键词按钮,自动轮播高亮
  • 高亮时放大 + 橙色边框 + 发光阴影

2. 患者年龄分布(柱状图)

ini 复制代码
typescript
const animatedAgeData = useChartDataRefresh(ageData, 4000, 0.12);
  • Recharts BarChart,4 个年龄段分组对比
  • 数据每 4 秒自动波动,模拟实时更新

3. 每周人流量分布(面积图)

ini 复制代码
typescript
<linearGradient id="colorFlow" x1="0" y1="0" x2="0" y2="1">
  <stop offset="5%" stopColor="#4fc3f7" stopOpacity={0.3}/>
  <stop offset="95%" stopColor="#4fc3f7" stopOpacity={0}/>
</linearGradient>
  • Recharts AreaChart,渐变填充
  • 双曲线对比展示两种类型数据

4. 就诊人数统计(翻牌器)

javascript 复制代码
typescript
function useCountUp(targetValue: number, duration = 2000) {
  // easeOutQuart 缓动函数
  const easeProgress = 1 - Math.pow(1 - progress, 4);
  // ...
}
  • 自定义 FlipClock 组件
  • 数字从 0 递增到目标值,缓动动画更自然
  • 上月/本月分组展示婴幼儿、青少年、中壮年、老年人数据

🔷 中间面板(CenterPanel)

1. 全国患者流向图

ini 复制代码
typescript
useEffect(() => {
  fetch('https://geo.datav.aliyun.com/areas_v3/bound/100000_full.json')
    .then(response => response.json())
    .then(geoJson => {
      echarts.registerMap('china', geoJson);
      setMapLoaded(true);
    });
}, []);

核心配置:

yaml 复制代码
typescript
series: [
  // 飞线动画
  { type: 'lines', effect: { show: true, trailLength: 0.7, color: '#ffb74d' } },
  // 涟漪散点
  { type: 'effectScatter', rippleEffect: { brushType: 'stroke' } }
]
  • 动态加载阿里云 GeoJSON 地图数据
  • 飞线展示北京、上海、广州、深圳、成都、西安患者流向
  • 涟漪散点标注城市,支持缩放拖拽

2. 学历占比(SVG 圆环)

ini 复制代码
typescript
<circle
  cx="60" cy="60" r="54"
  stroke="#4fc3f7"
  strokeDasharray="339"
  strokeDashoffset={339 - (339 * educationStats.bachelor / 100)}
/>
  • 纯 SVG 实现进度圆环
  • strokeDashoffset 控制进度

3. 设备使用情况统计

ini 复制代码
typescript
const activeEquipmentIndex = useHighlightCarousel(equipmentStats.length, 1500);
  • 7 个设备卡片,轮播高亮
  • 显示设备数量、涨跌百分比、趋势迷你折线图
  • 提示语:"设备一、设备四应考虑进货"

🔷 右侧面板(RightPanel)

1. 患者就诊登记(表格轮播)

scss 复制代码
typescript
const { visibleItems: visibleRecords } = useListCarousel(patientRecords, 4, 2500);
  • 10 条记录,每次显示 4 条
  • 每 2.5 秒自动滚动,循环展示
  • 状态高亮:已治愈(绿色)/ 治疗中(橙色)

2. 科室床位使用情况(面积图)

  • Recharts AreaChart,5 个科室对比
  • 双色渐变填充

3. 医生接诊情况分析(组合图)

ini 复制代码
typescript
<ComposedChart data={animatedDoctorData}>
  <Bar dataKey="接诊数" barSize={4} fill="#29b6f6" />
  <Line dataKey="目标" stroke="#ff9800" strokeDasharray="5 5" />
</ComposedChart>
  • 柱状图展示实际接诊数
  • 虚线折线展示目标值
  • 直观对比 5 位医生的 KPI 完成情况

4. 每日医疗使用情况

yaml 复制代码
typescript
const statCards = [
  { icon: Activity, label: '急诊人数', value: dailyStats.emergency },
  { icon: Users, label: '门诊人数', value: dailyStats.outpatient },
  { icon: PlusCircle, label: '住院人数', value: dailyStats.inpatient },
  { icon: ArrowUpRight, label: '出院人数', value: dailyStats.discharged },
];
  • 预约总人数翻牌器
  • 4 个统计卡片,轮播高亮
  • lucide-react 图标 + 数字递增动画

🎨 UI 设计亮点

1. 科技感卡片组件

css 复制代码
typescript
<div className="relative bg-[#06142a]/60 border border-[#135c9d]/60 
  backdrop-blur-sm shadow-[inset_0_0_30px_rgba(19,92,157,0.2)]">
  {/* 四角装饰 */}
  <div className="absolute -top-px -left-px w-3 h-3 
    border-t-2 border-l-2 border-[#4fc3f7]" />
  {/* 顶部发光线 */}
  <div className="absolute top-0 left-10 right-10 h-px 
    bg-gradient-to-r from-transparent via-[#4fc3f7]/50 to-transparent" />
</div>

2. autofit.js 大屏适配

yaml 复制代码
typescript
autofit.init({
  el: 'body',
  dw: 1920,  // 设计稿宽度
  dh: 1080,  // 设计稿高度
  resize: true
});
  • 一行代码适配任意分辨率
  • 自动监听窗口变化

3. 配色方案

元素 颜色值 用途
主背景 #020b18 深蓝科技感
边框 #135c9d 卡片边框
高亮 #4fc3f7 装饰、图表
强调 #ffb74d 高亮、警告
文字 #e0f7fa 主文字

🔧 自定义 Hooks 封装

Hook 功能 参数
useApiData<T> 泛型数据获取 fetcher, initialValue
useCountUp 数字递增动画 targetValue, duration
useListCarousel 列表轮播 items, visibleCount, interval
useHighlightCarousel 高亮轮播 itemCount, interval
useChartDataRefresh 图表数据波动 initialData, interval, range

📁 项目结构

bash 复制代码
src/
├── api/
│   ├── index.ts          # API 层(模拟延迟、响应包装)
│   └── mock/data.ts      # Mock 数据
├── components/
│   ├── Card.tsx          # 科技感卡片
│   ├── Header.tsx        # 头部(时钟 + 公告)
│   ├── LeftPanel.tsx     # 左侧(关键词 + 图表 + 翻牌器)
│   ├── CenterPanel.tsx   # 中间(地图 + 设备)
│   └── RightPanel.tsx    # 右侧(表格 + 图表 + 统计)
├── hooks/
│   ├── useData.ts        # 数据获取 Hooks
│   └── useCarousel.ts    # 动画效果 Hooks
└── utils/cn.ts           # 样式工具

🏥 适用场景

  • 医院运营指挥中心
  • 急诊科实时监控大屏
  • 卫健委数据展示平台
  • 智慧医疗解决方案演示

🌟 总结

这套方案的核心价值:

  1. 业务完整:覆盖医疗场景核心指标
  2. 动效丰富:翻牌器、轮播、飞线、涟漪
  3. 架构清晰:Hooks 封装,组件化设计
  4. 适配灵活:autofit.js 一键适配
  5. 开箱即用:Mock 数据层,快速切换生产环境

欢迎 Star ⭐,一起探索智慧医疗可视化的无限可能!


我放在公众号(柳杉前端) 回复 医疗数据可视化大屏 获取源码

#前端开发 #数据可视化 #React #智慧城市 #大屏设计

相关推荐
铁皮饭盒7 分钟前
用 Bun.cron 定时 7 月 7 日,为啥? 看图1
javascript
大圣编程1 小时前
Python中continue语句的用法是什么?
开发语言·前端·python
yuhaiqiang1 小时前
随手 vibecoding 的浏览器插件已经 6000 多次下载,聊聊他的产品设计
前端·后端·面试
之歆2 小时前
Vue商品详情与放大镜组件
前端·javascript·vue.js
再吃一根胡萝卜3 小时前
如何把小米 MiMo 接入 CodeBuddy,打造私有 Agent
前端
尘中远3 小时前
【Qwt 7.0 系列】坐标轴与刻度系统 —— 刻度引擎、网格、图例与刻度朝内
qt·数据可视化·qcustomplot·qwt·工业软件·科学绘图
负责的蛋挞4 小时前
异步HttpModule的实现方式
java·服务器·前端
丹宇码农6 小时前
把 HLS 字幕玩出花:zwPlayer 如何让 M3U8 视频支持全文搜索、翻译与码率自适应
前端·javascript·音视频·hls·视频播放器
2501_943782356 小时前
【共创季稿事节】猜数字游戏:二分法思维与交互式反馈
前端·游戏·microsoft·harmonyos·鸿蒙·鸿蒙系统