diff --git a/--full-page b/--full-page new file mode 100644 index 0000000..73c43a1 Binary files /dev/null and b/--full-page differ diff --git a/employee-app/health-monitor/doc/PRD.md b/employee-app/health-monitor/doc/PRD.md index e67be98..bb9845f 100644 --- a/employee-app/health-monitor/doc/PRD.md +++ b/employee-app/health-monitor/doc/PRD.md @@ -33,7 +33,7 @@ │ ├── 水质监测(达标/未达标 · 6项指标) │ └── 花粉监测(5级评价 · 8种花粉+总数) ├── 设备详情(依 Tab 切换指标下拉、阈值线与等级文案) - └── 报警数据(依 Tab 切换可选报警类型与阈值范围) + └── 报警数据(依 Tab 切换展示不同类型报警,支持按年月筛选) ``` ## 页面清单 @@ -225,17 +225,17 @@ **功能说明:** 穿戴设备监测数据的主页,展示设备连接状态和各项健康指标的最新数据卡片网格。 **主要UI元素:** -- 设备连接状态栏(设备图标、设备名称如"华为 WATCH GT5 Pro"、设备序列号、连接状态) +- 设备连接状态栏(手表图标、设备名称如"华为 WATCH GT5 Pro"、设备序列号如"SF55996622586") - 监测卡片网格(2列布局,共9张卡片): - - 步数卡片(当前步数、距离换算、同步时间) - - 睡眠卡片(睡眠时长、平均睡眠参考、同步时间) - - 心率卡片(当前心率、范围值、同步时间) - - 体温卡片(当前体温、范围值、同步时间) - - 血氧卡片(当前血氧、范围值、同步时间) - - 压力卡片(当前压力值、范围值、同步时间) - - 血压卡片(收缩压/舒张压、状态标签、同步时间。手表不支持时,隐藏该模块) - - 心电图卡片(心率值、分类结果标签、同步时间。手表不支持时,隐藏该模块) - - 锻炼卡片(锻炼次数/时长/消耗统计、同步时间) + - 步数卡片(当前步数 8,562、距离换算"相当于步行5.2公里"、同步时间) + - 睡眠卡片(睡眠时长 7h 32min、平均睡眠参考"平均睡眠8小时57分"、同步时间) + - 心率卡片(当前心率 72 bpm、范围值 89~120、同步时间) + - 体温卡片(当前体温 36.5℃、范围值 36.2~37.1℃、同步时间) + - 血氧卡片(当前血氧 98%、范围值 95~99%、同步时间) + - 压力卡片(当前压力值 42、范围值 18~82、同步时间) + - 血压卡片(收缩压/舒张压 120/78 mmHg、状态标签"正常"、同步时间) + - 心电图卡片(心率 75 次/分钟、分类结果标签"窦性心律"、同步时间) + - 锻炼卡片(消耗 680 千卡、锻炼时长 52 分钟、同步时间) **交互说明:** - 点击各卡片进入对应详情页面 @@ -269,18 +269,17 @@ **功能说明:** 展示心率预警记录列表,支持按年份和月份筛选。 **主要UI元素:** -- 预警记录列表标题(含总条数) -- 筛选按钮 -- 预警记录卡片(时间、等级、数值、持续时长、触发原因、右侧阈值范围显示) -- 时间筛选弹窗(年份/月份下拉) +- 预警记录列表标题(含总条数,如"预警记录(共 3 条)") +- 筛选按钮(显示当前筛选年月,如"2026-4") +- 预警记录卡片: + - 预警时间(如"2026-04-28 16:32") + - 预警数值(如"142 bpm") +- 时间筛选弹窗(年份/月份下拉选择,取消/确定按钮) -**业务规则:** -- 预警等级:严重(红色)、警告(橙色) -- 每条预警卡片右侧显示正常阈值范围参考 **交互说明:** - 点击筛选按钮打开时间筛选弹窗 -- 选择年份和月份后点击"确定"应用筛选 +- 选择年份和月份后点击"确定"应用筛选,卡片列表按所选年月过滤 --- @@ -288,7 +287,7 @@ **血氧详情(wearable/blood-oxygen.html):** 展示血氧监测数据,图表采用柱状图形式,支持日/周/月/年多时间维度查看,底部时间轴滑块可交互选择具体时间点。 -**血氧预警历史(wearable/blood-oxygen-alerts.html):** 页面结构与心率预警历史一致,展示血氧预警记录列表,每条卡片右侧显示正常阈值范围。 +**血氧预警历史(wearable/blood-oxygen-alerts.html):** 展示血氧预警记录列表,支持按年月筛选。页面结构与心率预警历史一致,区别在于确定按钮为绿色主题。示例数据:1条记录(2026年3月),93%(严重)。 ![血氧详情](screenshots/wearable/blood-oxygen.jpg) ![血氧预警](screenshots/wearable/blood-oxygen-alerts.jpg) @@ -302,13 +301,13 @@ **血压详情(wearable/blood-pressure.html):** 展示收缩压/舒张压双线图表,统计卡片分别显示收缩压和舒张压的最高/最低值。 -**血压预警历史(wearable/blood-pressure-alerts.html):** 预警记录卡片同时显示收缩压和舒张压数值,右侧显示正常阈值范围。 +**血压预警历史(wearable/blood-pressure-alerts.html):** 预警记录以"收缩压/舒张压"格式显示(如"158/98 mmHg"),支持按年月筛选。示例数据:4条记录(2026年5月) --- ### 14-15. 体温详情与预警历史 -**体温详情(wearable/temperature.html)** 和 **体温预警历史(wearable/temperature-alerts.html)** 的页面结构与心率一致,预警历史页面每条卡片右侧显示正常阈值范围。 +**体温详情(wearable/temperature.html)** 和 **体温预警历史(wearable/temperature-alerts.html)** 的页面结构与心率一致。 ![体温详情](screenshots/wearable/temperature.jpg) ![体温预警](screenshots/wearable/temperature-alerts.jpg) @@ -317,7 +316,7 @@ ### 16-17. 压力详情与预警历史 -**压力详情(wearable/stress.html)** 和 **压力预警历史(wearable/stress-alerts.html)** 的页面结构与心率一致,额外显示压力等级评估徽章,预警历史页面每条卡片右侧显示正常阈值范围。 +**压力详情(wearable/stress.html)** 和 **压力预警历史(wearable/stress-alerts.html)** 的页面结构与心率一致。压力详情额外显示压力等级评估徽章。 ![压力详情](screenshots/wearable/stress.jpg) ![压力预警](screenshots/wearable/stress-alerts.jpg) @@ -452,9 +451,6 @@ **典型设备:** 空气质量监测站、PM10检测仪、臭氧检测仪、气象参数监测仪、VOC检测仪(共6台示例) -**等级描述(示例):** -- 优:空气质量令人满意,基本无污染 -- 严重污染:健康人群运动耐受力降低,有明显强烈症状,提前出现某些疾病 ##### 23.1.1 设备底部弹窗 @@ -609,47 +605,47 @@ ![页面截图](screenshots/environment/alarm-data.jpg) -**功能说明:** 展示环境监测设备的报警记录,支持按日期范围和报警类型筛选。页面根据 URL 参数 `tab` 决定可选报警类型与展示的报警列表。 +**功能说明:** 展示环境监测设备的报警记录,支持按时间筛选。页面根据 URL 参数 `tab`(outdoor/indoor/water/pollen)决定展示的报警类型与数据列表。 **通用 UI 元素:** -- 筛选区:日期范围(起始/结束日期选择器)、类型下拉、重置按钮、查询按钮 - 统计条:报警总条数(红色突出) -- 报警卡片列表:左侧红色边条,顶部"{指标} 超标报警" + 时间,中部报警值(红底)→ 阈值范围(灰底),底部设备名称/位置 +- 筛选按钮(显示当前年月,如"2026-5") +- 报警卡片列表:左侧红色边条,顶部"{指标} 超标报警" + 时间,中部"报警值(数值+单位)› 阈值范围(min~max+单位)" +- 数据通过 JavaScript 动态渲染 **通用交互说明:** -- 设置日期范围和类型后点击"查询"筛选 -- 点击"重置"恢复默认日期与类型筛选条件 +- 点击筛选按钮打开时间筛选弹窗,选择年月后确定 - 列表为空时显示"暂无报警数据"占位 **业务规则:** - 报警值高于阈值上限或低于阈值下限时进入报警列表 -- 报警卡片同时呈现实际值与允许阈值范围(min~max),便于直观判断超标幅度 +- 报警卡片同时呈现实际值与允许阈值范围(min~max),直观判断超标幅度 #### 25.1 室外空气 ![室外空气报警数据](screenshots/environment/alarm-data-outdoor.jpg) -**可选报警类型:** PM2.5、PM10、温度、湿度、风速、太阳辐射、照度 +**示例数据(8条,2026年5月):** PM2.5(156 μg/m³,阈值 0~75)、PM10(218 μg/m³,阈值 0~150)、风速(13.5 m/s,阈值 0~10)、太阳辐射(1180 W/m²,阈值 0~1000)、温度(42.3℃,阈值 -10~40)、PM2.5(195 μg/m³)、PM10(285 μg/m³)、照度(98500 lm/m²,阈值 0~95000) #### 25.2 室内空气 ![室内空气报警数据](screenshots/environment/alarm-data-indoor.jpg) -**可选报警类型:** PM2.5、PM10、CO₂、甲醛、温度、湿度 +**示例数据(6条,2026年5月):** CO₂(1250 ppm,阈值 400~1000)、甲醛(0.15 mg/m³,阈值 0~0.10)、PM2.5(135 μg/m³,阈值 0~75)、CO₂(980 ppm,敏感场所阈值 400~800)、湿度(85%,阈值 30~80)、甲醛(0.12 mg/m³) #### 25.3 水质监测 ![水质监测报警数据](screenshots/environment/alarm-data-water.jpg) -**可选报警类型:** PH、电导率、盐度、TDS、电阻率、温度 +**示例数据(6条,2026年5月):** 电导率(1250 μS/cm,阈值 50~1000)、PH(8.5,阈值 6.5~8.0)、TDS(840 mg/L,阈值 0~500)、盐度(920 mg/L,阈值 0~500)、电导率(1680 μS/cm)、PH(9.2) #### 25.4 花粉监测 ![花粉监测报警数据](screenshots/environment/alarm-data-pollen.jpg) -**可选报警类型:** 花粉总数 +**示例数据(3条,2026年5月):** 花粉总数(1098、924、860 粒/千mm²,阈值 0~800) > 备注:花粉监测仅对"花粉总数"设置统一报警阈值,各属/科单一指标暂不单独报警。 diff --git a/employee-app/health-monitor/doc/screenshots/environment/alarm-data-indoor.jpg b/employee-app/health-monitor/doc/screenshots/environment/alarm-data-indoor.jpg index eb23eb9..9aae140 100644 Binary files a/employee-app/health-monitor/doc/screenshots/environment/alarm-data-indoor.jpg and b/employee-app/health-monitor/doc/screenshots/environment/alarm-data-indoor.jpg differ diff --git a/employee-app/health-monitor/doc/screenshots/environment/alarm-data-outdoor.jpg b/employee-app/health-monitor/doc/screenshots/environment/alarm-data-outdoor.jpg index b189e28..a6f724c 100644 Binary files a/employee-app/health-monitor/doc/screenshots/environment/alarm-data-outdoor.jpg and b/employee-app/health-monitor/doc/screenshots/environment/alarm-data-outdoor.jpg differ diff --git a/employee-app/health-monitor/doc/screenshots/environment/alarm-data-pollen.jpg b/employee-app/health-monitor/doc/screenshots/environment/alarm-data-pollen.jpg index 255e073..a44d4db 100644 Binary files a/employee-app/health-monitor/doc/screenshots/environment/alarm-data-pollen.jpg and b/employee-app/health-monitor/doc/screenshots/environment/alarm-data-pollen.jpg differ diff --git a/employee-app/health-monitor/doc/screenshots/environment/alarm-data-water.jpg b/employee-app/health-monitor/doc/screenshots/environment/alarm-data-water.jpg index 7223bf6..695fe90 100644 Binary files a/employee-app/health-monitor/doc/screenshots/environment/alarm-data-water.jpg and b/employee-app/health-monitor/doc/screenshots/environment/alarm-data-water.jpg differ diff --git a/employee-app/health-monitor/doc/screenshots/environment/alarm-data.jpg b/employee-app/health-monitor/doc/screenshots/environment/alarm-data.jpg index b189e28..a6f724c 100644 Binary files a/employee-app/health-monitor/doc/screenshots/environment/alarm-data.jpg and b/employee-app/health-monitor/doc/screenshots/environment/alarm-data.jpg differ diff --git a/employee-app/health-monitor/doc/screenshots/wearable/blood-oxygen-alerts.jpg b/employee-app/health-monitor/doc/screenshots/wearable/blood-oxygen-alerts.jpg index efa6cfe..57f8877 100644 Binary files a/employee-app/health-monitor/doc/screenshots/wearable/blood-oxygen-alerts.jpg and b/employee-app/health-monitor/doc/screenshots/wearable/blood-oxygen-alerts.jpg differ diff --git a/employee-app/health-monitor/doc/screenshots/wearable/blood-pressure-alerts.jpg b/employee-app/health-monitor/doc/screenshots/wearable/blood-pressure-alerts.jpg index 14d7f94..4f58433 100644 Binary files a/employee-app/health-monitor/doc/screenshots/wearable/blood-pressure-alerts.jpg and b/employee-app/health-monitor/doc/screenshots/wearable/blood-pressure-alerts.jpg differ diff --git a/employee-app/health-monitor/doc/screenshots/wearable/heart-rate-alerts.jpg b/employee-app/health-monitor/doc/screenshots/wearable/heart-rate-alerts.jpg index 5462c02..1891b6b 100644 Binary files a/employee-app/health-monitor/doc/screenshots/wearable/heart-rate-alerts.jpg and b/employee-app/health-monitor/doc/screenshots/wearable/heart-rate-alerts.jpg differ diff --git a/employee-app/health-monitor/doc/screenshots/wearable/index.jpg b/employee-app/health-monitor/doc/screenshots/wearable/index.jpg index eadea7b..2d4bd01 100644 Binary files a/employee-app/health-monitor/doc/screenshots/wearable/index.jpg and b/employee-app/health-monitor/doc/screenshots/wearable/index.jpg differ diff --git a/employee-app/health-monitor/doc/screenshots/wearable/stress-alerts.jpg b/employee-app/health-monitor/doc/screenshots/wearable/stress-alerts.jpg index b4af856..fd1dd96 100644 Binary files a/employee-app/health-monitor/doc/screenshots/wearable/stress-alerts.jpg and b/employee-app/health-monitor/doc/screenshots/wearable/stress-alerts.jpg differ diff --git a/employee-app/health-monitor/doc/screenshots/wearable/temperature-alerts.jpg b/employee-app/health-monitor/doc/screenshots/wearable/temperature-alerts.jpg index 333aea2..2596259 100644 Binary files a/employee-app/health-monitor/doc/screenshots/wearable/temperature-alerts.jpg and b/employee-app/health-monitor/doc/screenshots/wearable/temperature-alerts.jpg differ diff --git a/employee-app/health-monitor/environment/alarm-data.html b/employee-app/health-monitor/environment/alarm-data.html index 6b1fcf6..43ea922 100644 --- a/employee-app/health-monitor/environment/alarm-data.html +++ b/employee-app/health-monitor/environment/alarm-data.html @@ -15,17 +15,159 @@ body { background: #f0f2f5; display: flex; justify-content: center; align-items: .nav-back { width: 28px; height: 28px; display: flex; align-items: center; justify-content: center; cursor: pointer; } .nav-title { flex: 1; text-align: center; font-size: 17px; font-weight: 600; color: #1a1a1a; margin-right: 28px; } -/* 筛选区 */ -.filter-bar { background: #fff; padding: 12px 16px; border-bottom: 1px solid #f0f0f0; flex-shrink: 0; display: flex; flex-direction: column; gap: 8px; } -.filter-row { display: flex; align-items: center; gap: 8px; } -.filter-label { font-size: 12px; color: #999; flex-shrink: 0; } -.filter-date-input { height: 32px; border: 1px solid #e8e8e8; border-radius: 8px; padding: 0 8px; font-size: 12px; color: #333; outline: none; background: #fff; flex: 1; min-width: 0; } -.filter-date-input:focus { border-color: #1aad8d; } -.filter-sep { font-size: 12px; color: #bbb; flex-shrink: 0; } -.filter-select { height: 32px; border: 1px solid #e8e8e8; border-radius: 8px; padding: 0 24px 0 10px; font-size: 12px; color: #333; background: #fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='5'%3E%3Cpath d='M0 0l4 5 4-5z' fill='%23999'/%3E%3C/svg%3E") no-repeat right 8px center; appearance: none; outline: none; cursor: pointer; flex: 1; } -.filter-btn { height: 32px; padding: 0 16px; border-radius: 8px; border: none; font-size: 12px; font-weight: 600; cursor: pointer; flex-shrink: 0; } -.filter-btn--primary { background: #1aad8d; color: #fff; } -.filter-btn--reset { background: #f5f5f5; color: #666; } +/* 筛选按钮 */ +.filter-btn { + display: flex; + align-items: center; + gap: 4px; + padding: 4px 2px; + border: none; + background: transparent; + font-size: 13px; + color: #333; + font-weight: 600; + cursor: pointer; +} +.filter-btn__arrow { + font-size: 9px; + color: #999; +} + +/* 时间筛选弹窗 */ +.time-filter-modal { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + display: none; + z-index: 1000; +} +.time-filter-modal.active { + display: flex; + flex-direction: column; + align-items: center; + justify-content: flex-end; +} + +.time-filter-overlay { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0, 0, 0, 0.4); +} + +.time-filter-panel { + position: relative; + width: 100%; + max-width: 390px; + background: #fff; + border-radius: 16px 16px 0 0; + box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.1); + animation: slideUp 0.3s ease-out; +} + +@keyframes slideUp { + from { transform: translateY(100%); } + to { transform: translateY(0); } +} + +.time-filter-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: 16px; + border-bottom: 1px solid #f0f0f0; + font-size: 16px; + font-weight: 600; + color: #1a1a1a; +} + +.time-filter-close { + width: 28px; + height: 28px; + display: flex; + align-items: center; + justify-content: center; + border: none; + background: none; + font-size: 20px; + color: #999; + cursor: pointer; +} + +.time-filter-content { + padding: 16px; + display: flex; + flex-direction: column; + gap: 16px; +} + +.filter-section { + display: flex; + flex-direction: column; + gap: 8px; +} + +.filter-label { + font-size: 13px; + font-weight: 600; + color: #333; +} + +.filter-select { + padding: 10px 12px; + border: 1px solid #ddd; + border-radius: 8px; + font-size: 14px; + color: #333; + background: #fff; + cursor: pointer; + appearance: none; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath fill='%23666' d='M1 1l5 5 5-5'/%3E%3C/svg%3E"); + background-repeat: no-repeat; + background-position: right 10px center; + padding-right: 32px; +} + +.time-filter-footer { + display: flex; + gap: 12px; + padding: 16px; + border-top: 1px solid #f0f0f0; +} + +.filter-btn-cancel, +.filter-btn-confirm { + flex: 1; + padding: 12px; + border: none; + border-radius: 8px; + font-size: 14px; + font-weight: 600; + cursor: pointer; + transition: all 0.2s; +} + +.filter-btn-cancel { + background: #f5f5f5; + color: #666; +} + +.filter-btn-cancel:active { + background: #e8e8e8; +} + +.filter-btn-confirm { + background: #ff7a8a; + color: #fff; +} + +.filter-btn-confirm:active { + background: #ff5a7a; +} /* 统计条 */ .stat-bar { padding: 10px 16px; display: flex; align-items: center; justify-content: space-between; } @@ -70,42 +212,67 @@ body { background: #f0f2f5; display: flex; justify-content: center; align-items: - -
-
- 日期 - - - -
-
- 类型 - - - -
-
- - +
0 条报警 +
+ + +
+
+
+
+ 选择时间 + +
+ +
+ +
+ + +
+ + +
+ + +
+
+ + +
+
diff --git a/employee-app/health-monitor/screenshots/environment/alarm-data-indoor.jpg b/employee-app/health-monitor/screenshots/environment/alarm-data-indoor.jpg new file mode 100644 index 0000000..2f80b17 Binary files /dev/null and b/employee-app/health-monitor/screenshots/environment/alarm-data-indoor.jpg differ diff --git a/employee-app/health-monitor/screenshots/environment/alarm-data-outdoor.jpg b/employee-app/health-monitor/screenshots/environment/alarm-data-outdoor.jpg new file mode 100644 index 0000000..cab7a94 Binary files /dev/null and b/employee-app/health-monitor/screenshots/environment/alarm-data-outdoor.jpg differ diff --git a/employee-app/health-monitor/screenshots/environment/alarm-data-pollen.jpg b/employee-app/health-monitor/screenshots/environment/alarm-data-pollen.jpg new file mode 100644 index 0000000..594c4cb Binary files /dev/null and b/employee-app/health-monitor/screenshots/environment/alarm-data-pollen.jpg differ diff --git a/employee-app/health-monitor/screenshots/environment/alarm-data-water.jpg b/employee-app/health-monitor/screenshots/environment/alarm-data-water.jpg new file mode 100644 index 0000000..0795f5a Binary files /dev/null and b/employee-app/health-monitor/screenshots/environment/alarm-data-water.jpg differ diff --git a/employee-app/health-monitor/screenshots/environment/alarm-data.jpg b/employee-app/health-monitor/screenshots/environment/alarm-data.jpg new file mode 100644 index 0000000..cab7a94 Binary files /dev/null and b/employee-app/health-monitor/screenshots/environment/alarm-data.jpg differ diff --git a/employee-app/health-monitor/screenshots/wearable/blood-oxygen-alerts.jpg b/employee-app/health-monitor/screenshots/wearable/blood-oxygen-alerts.jpg new file mode 100644 index 0000000..3b05f39 Binary files /dev/null and b/employee-app/health-monitor/screenshots/wearable/blood-oxygen-alerts.jpg differ diff --git a/employee-app/health-monitor/screenshots/wearable/blood-pressure-alerts.jpg b/employee-app/health-monitor/screenshots/wearable/blood-pressure-alerts.jpg new file mode 100644 index 0000000..66a290a Binary files /dev/null and b/employee-app/health-monitor/screenshots/wearable/blood-pressure-alerts.jpg differ diff --git a/employee-app/health-monitor/screenshots/wearable/heart-rate-alerts.jpg b/employee-app/health-monitor/screenshots/wearable/heart-rate-alerts.jpg new file mode 100644 index 0000000..9ee9a23 Binary files /dev/null and b/employee-app/health-monitor/screenshots/wearable/heart-rate-alerts.jpg differ diff --git a/employee-app/health-monitor/screenshots/wearable/index.jpg b/employee-app/health-monitor/screenshots/wearable/index.jpg new file mode 100644 index 0000000..859d41f Binary files /dev/null and b/employee-app/health-monitor/screenshots/wearable/index.jpg differ diff --git a/employee-app/health-monitor/screenshots/wearable/stress-alerts.jpg b/employee-app/health-monitor/screenshots/wearable/stress-alerts.jpg new file mode 100644 index 0000000..bdcf2e2 Binary files /dev/null and b/employee-app/health-monitor/screenshots/wearable/stress-alerts.jpg differ diff --git a/employee-app/health-monitor/screenshots/wearable/temperature-alerts.jpg b/employee-app/health-monitor/screenshots/wearable/temperature-alerts.jpg new file mode 100644 index 0000000..90679ab Binary files /dev/null and b/employee-app/health-monitor/screenshots/wearable/temperature-alerts.jpg differ diff --git a/employee-app/health-monitor/wearable/blood-oxygen-alerts.html b/employee-app/health-monitor/wearable/blood-oxygen-alerts.html index 6702728..ba410b5 100644 --- a/employee-app/health-monitor/wearable/blood-oxygen-alerts.html +++ b/employee-app/health-monitor/wearable/blood-oxygen-alerts.html @@ -205,41 +205,22 @@ body { /* 底部安全区 */ .bottom-safe { height: 20px; flex-shrink: 0; } -/* 右侧阈值范围 */ -.alert-card__threshold { - display: flex; - flex-direction: column; - align-items: flex-end; - gap: 4px; - flex-shrink: 0; - padding-top: 4px; -} -.alert-card__threshold-item { - font-size: 11px; - color: #bbb; -} -.alert-card__threshold-item span { - font-weight: 600; - color: #666; -} - /* 筛选按钮 */ .filter-btn { display: flex; align-items: center; gap: 4px; - padding: 6px 12px; - border: 1px solid #ddd; - border-radius: 6px; - background: #fff; - font-size: 12px; - color: #666; + padding: 4px 2px; + border: none; + background: transparent; + font-size: 13px; + color: #333; + font-weight: 600; cursor: pointer; - transition: all 0.2s; } -.filter-btn:active { - background: #f5f5f5; - border-color: #bbb; +.filter-btn__arrow { + font-size: 9px; + color: #999; } /* 时间筛选弹窗 */ @@ -422,12 +403,9 @@ body {
预警记录(共 1 条)
-
@@ -448,11 +426,6 @@ body { % - -
-
上限 100%
-
下限 95%
-
@@ -483,7 +456,6 @@ body {
- @@ -558,7 +520,12 @@ body { - - diff --git a/web-admin/health-monitor/health-checkup/survey-edit.html b/web-admin/health-monitor/health-checkup/survey-edit.html index 2b306fb..b968df2 100644 --- a/web-admin/health-monitor/health-checkup/survey-edit.html +++ b/web-admin/health-monitor/health-checkup/survey-edit.html @@ -251,7 +251,6 @@ 问卷管理 活动管理 - 活动统计
diff --git a/web-admin/health-monitor/health-checkup/survey-manage.html b/web-admin/health-monitor/health-checkup/survey-manage.html index 82af996..40dfd0f 100644 --- a/web-admin/health-monitor/health-checkup/survey-manage.html +++ b/web-admin/health-monitor/health-checkup/survey-manage.html @@ -161,7 +161,6 @@ 问卷管理 活动管理 - 活动统计
diff --git a/web-admin/health-monitor/wearable/tool-manage.html b/web-admin/health-monitor/wearable/tool-manage.html index 3ca64a4..9ea13df 100644 --- a/web-admin/health-monitor/wearable/tool-manage.html +++ b/web-admin/health-monitor/wearable/tool-manage.html @@ -318,6 +318,9 @@ + @@ -570,7 +573,7 @@
- +
+
+ + +

点击或拖拽文件到此区域上传

@@ -693,10 +707,6 @@
设备编码:WD-2024-001
-
@@ -877,6 +887,10 @@ function openBindModal(code, name) { document.getElementById('bindEmpSearch').value = ''; document.getElementById('empDropdown').classList.remove('show'); document.getElementById('empCard').style.display = 'none'; + // 绑定日期默认当前时间 + var now = new Date(); + var pad = function(n){ return n < 10 ? '0' + n : n; }; + document.getElementById('bindDate').value = now.getFullYear() + '-' + pad(now.getMonth()+1) + '-' + pad(now.getDate()) + 'T' + pad(now.getHours()) + ':' + pad(now.getMinutes()); document.getElementById('bindModal').classList.add('show'); } var selectedEmp = null; diff --git a/web-admin/health-monitor/wearable/user-data.html b/web-admin/health-monitor/wearable/user-data.html index 027b635..4ae86aa 100644 --- a/web-admin/health-monitor/wearable/user-data.html +++ b/web-admin/health-monitor/wearable/user-data.html @@ -632,6 +632,65 @@
+ + @@ -675,12 +734,20 @@ function switchMainTab(el, tab) { document.getElementById('panel-metric').style.display = 'none'; document.getElementById('panel-exercise').style.display = 'none'; document.getElementById('panel-ecg').style.display = 'none'; + document.getElementById('panel-bp').style.display = 'none'; if (tab === 'overview') { document.getElementById('panel-overview').style.display = ''; } else if (tab === 'exercise') { document.getElementById('panel-exercise').style.display = ''; } else if (tab === 'ecg') { document.getElementById('panel-ecg').style.display = ''; + } else if (tab === 'bp') { + document.getElementById('panel-bp').style.display = ''; + bpListView = false; + document.getElementById('btnToggleBpList').innerHTML = ' 列表展示'; + document.getElementById('bp-chart-view').style.display = ''; + document.getElementById('bp-table-view').style.display = 'none'; + renderBpTrendChart(); } else { document.getElementById('panel-metric').style.display = ''; isListView = false; @@ -760,8 +827,71 @@ function renderTrendChart() { + '' + xLabels + ''; -} -function openEcgDetail(time, result, value) { + } + /* ===== 血压面板专用 ===== */ + var bpListView = false; + function toggleBpView() { + bpListView = !bpListView; + var btn = document.getElementById('btnToggleBpList'); + if (bpListView) { + document.getElementById('bp-chart-view').style.display = 'none'; + document.getElementById('bp-table-view').style.display = ''; + btn.innerHTML = ' 趋势图展示'; + } else { + document.getElementById('bp-chart-view').style.display = ''; + document.getElementById('bp-table-view').style.display = 'none'; + btn.innerHTML = ' 列表展示'; + renderBpTrendChart(); + } + } + function switchGranularityBp(el) { + document.querySelectorAll('#panel-bp .time-granularity .time-btn').forEach(function(b){ b.classList.remove('active'); }); + el.classList.add('active'); + renderBpTrendChart(); + } + function renderBpTrendChart() { + var c = document.getElementById('bpTrendChart'); + if (!c) return; + var W = c.offsetWidth || 880, H = 280; + var pad = {t:20,r:20,b:40,l:50}; + var cw = W - pad.l - pad.r, ch = H - pad.t - pad.b; + // 24小时数据点 + var n = 25; + // 收缩压数据 (systolic) + var sysData = [118,116,114,112,115,118,120,122,125,128,130,128,124,122,120,124,128,132,135,130,126,122,120,118,116]; + // 舒张压数据 (diastolic) + var diaData = [75,74,72,73,74,76,78,78,80,82,84,82,80,78,76,78,80,84,86,82,80,78,76,74,72]; + var minV = 60, maxV = 150; + function px(i){ return pad.l + i/(n-1)*cw; } + function py(v){ return pad.t + ch - (v-minV)/(maxV-minV)*ch; } + // 网格线 + var yLines = [60,80,100,120,140]; + var gridLines = yLines.map(function(v){ + return '' + + ''+v+''; + }).join(''); + // X轴标签 + var xTicks = [0,4,8,12,16,20,24]; + var xLabels = xTicks.map(function(h){ + var label = (h<10?'0':'')+h+':00'; + return ''+label+''; + }).join(''); + // 收缩压折线 + var sysPts = sysData.map(function(v,i){ return px(i)+','+py(v); }).join(' '); + // 舒张压折线 + var diaPts = diaData.map(function(v,i){ return px(i)+','+py(v); }).join(' '); + c.innerHTML = '' + + gridLines + xLabels + // 舒张压(蓝色) + + '' + // 收缩压(粉色) + + '' + // 图例 + + '收缩压' + + '舒张压' + + ''; + } + function openEcgDetail(time, result, value) { document.getElementById('ecgTime').textContent = time; document.getElementById('ecgResult').textContent = result; document.getElementById('ecgValue').textContent = value;