使用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 #智慧城市 #大屏设计

相关推荐
凌云拓界1 小时前
前端开发的“平衡木”:在取舍之间找到最优解
前端·性能优化·架构·前端框架·代码规范·设计规范
zhengfei6112 小时前
【XSS payload 】一个经典的XSS payload
前端·xss
简单Janeee2 小时前
[Vue 3 从零到上线]-第四篇:组件化思维——把网页像积木一样拆解
javascript·vue.js·ecmascript
全栈老石3 小时前
手写一个无限画布 #1:坐标系的谎言
前端·canvas
XW01059993 小时前
4-11判断素数
前端·python·算法·素数
J2虾虾3 小时前
Spring Boot中使用@Scheduled做定时任务
java·前端·spring boot
Heo3 小时前
深入React19任务调度器Scheduler
前端·javascript·面试
一枚前端小姐姐4 小时前
Vue3 + Pinia 状态管理,从入门到模块化
前端·vue.js
boooooooom4 小时前
Vue3 nextTick 实现大变化:微任务优先,彻底搞懂渲染时机!
javascript·vue.js·面试