fix: 穿戴监测 - 告警记录页字段优化 & 事件监听菜单展开箭头修复

- exception-event.html: 工号→员工编号,新增员工编号筛选,手机号脱敏去除
- 8个顶层页面: 修复运维中心下'事件监听'菜单无展开箭头,改为sidebar-subgroup结构
- 更新CHANGELOG

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
liuyunqin
2026-06-24 17:01:40 +08:00
co-authored by Claude Opus 4.8
parent ebc6a8204d
commit 239fd01229
15 changed files with 296 additions and 98 deletions
+1 -1
View File
@@ -1,4 +1,4 @@
_Last synced: 2026-06-24 | Base commit: `f20cea5`_
_Last synced: 2026-06-24 | Base commit: `aa93392`_
# 记忆索引
| 文件 | 描述 | 类型 | 最后更新 |
+18 -31
View File
@@ -1,20 +1,18 @@
---
name: 记忆健康检查报告
description: memory-lint 最新一次执行的检查结果与待处理项
type: lint
last_updated: 2026-06-24
---
# 记忆健康检查报告
> _执行时间: 2026-06-23 | Base commit: `dbf1920` | Last synced: 2026-06-23_
> _执行时间: 2026-06-24 | Base commit: `aa93392` | Last synced: 2026-06-24_
## 健康概览
| 检查项 | 状态 | AUTO-FIX | NEED-HUMAN |
|--------|------|----------|------------|
| 孤儿检测 | ✅ | — | — |
| 幽灵检测 | ✅ | — | — |
| 引用存在性检测(3A) | ✅ | — | — |
| 双链对称性检测(3B) | ✅ | — | — |
| 内容矛盾检测 | ✅ | — | — |
| 过期检测 | ⚠ | — | 2 待处理 |
| 可推断内容污染 | ✅ | — | — |
| 孤儿检测 | ✅ | 0 | — |
| 幽灵检测 | ✅ | 0 | — |
| 引用存在性检测(3A) | ✅ | 0 | 0 |
@@ -23,12 +21,13 @@
| 过期检测 | ⚠ | — | 2 待处理 |
| 可推断内容污染 | ✅ | — | 0 |
**AUTO-FIX 已执行 0 项 | NEED-HUMAN 待处理 2 项**
**AUTO-FIX 已执行 1 项 | NEED-HUMAN 待处理 2 项**
---
## AUTO-FIX 已执行清单
本次执行无需 AUTO-FIX。
- [x] 从 MEMORY.md 移除重复条目:`project_progress.md` 出现两次(2026-06-22 / 2026-06-23),已合并为单条(2026-06-24
---
@@ -50,11 +49,10 @@
### 内容矛盾检测
- 未发现 decisions vs feedback / 架构文件之间的内容矛盾
- 未发现 synthesis vs decisions 之间的抵触
### 过期检测
- `user_profile.md` (last_updated: 2026-04-21) — 距今 63 天,超过 30 天 WARN 阈值
- `project_overview.md` (last_updated: 2026-05-14) — 距今 40 天,超过 30 天 WARN 阈值
- `project_overview.md`last_updated: 2026-05-14距今 41 天,超过 30 天 WARN 阈值
- `user_profile.md`last_updated: 2026-04-21距今 64 天,超过 30 天 WARN 阈值
### 可推断内容污染
- `project_progress.md` 列出具体 HTML 文件名为模块进度记录所需,非代码污染
@@ -66,24 +64,13 @@
### [WARN] 过期记忆(2 项)
- **文件**`project_overview.md`last_updated: 2026-05-14,已过期 38 天)
- 涉及模块数与「设计中/已完成」标签可能与近期实际进展不一致(如营养模块、健康监测模块的进度推进
- **建议**:核对三端架构表中各模块状态,执行 `/memory-update` 刷新进度描述
- **文件**`user_profile.md`last_updated: 2026-04-21,已过期 62 天)
- 本次会话未涉及用户画像变化,可在下次会话有相关线索时更新
- **建议**:核对用户角色与偏好是否仍准确
- **文件**`project_overview.md`last_updated: 2026-05-14,距今 41 天)
- 建议:核对三端架构表中各模块状态是否仍准确
- **文件**`user_profile.md`last_updated: 2026-04-21,距今 64 天
- 建议:核对用户角色与偏好是否仍准确;本次会话未涉及用户画像变化
---
## 本次执行检查到的双链
## 双链索引
- `decisions.md#餐厅终端设备 PAD 居中外壳设计模式``feedback.md#PAD 终端页面内禁止可见滚动条`(已闭环)
- **文件**`user_profile.md`last_updated: 2026-04-21,距今 63 天)
- **建议**:核对用户角色与偏好是否仍准确;本次会话未涉及用户画像变化,可在有相关线索时更新
- **文件**`project_overview.md`last_updated: 2026-05-14,距今 40 天)
- **建议**:核对技术栈与架构描述是否仍准确;本次新增的 emergency-screen 模块在已有 other-module 框架下,未改变整体架构
+2 -2
View File
@@ -51,7 +51,6 @@
- `health-checkup/` — 健康体检管理 ✅
- `nutrition/` — 营养管理(70+ 页:溯源双菜单、档案、种采、供应、生产、用餐、异常、食堂、数据、模型、终端、字典)🔨 设计中
- 溯源模块重构:食材溯源/餐品溯源双菜单分离(trace-timeline 双维度搜索区独立)
- 边缘服务管理补齐:新增边缘服务器管理/详情、数据上报管理、数据下发管理/详情、异常告警中心 6 个页面,并在导航页挂载项目资料入口
- `weight-management/` — 体重管理(39 页)🔨 设计中
- 档案:`archive-personal-weight-data.html``archive-personal-weight-detail.html``archive-unit-report.html``archive-algorithm-model.html`
- 计划管理:`plan-list.html``plan-edit.html``registration-tracking.html``target-weight-review.html`
@@ -78,7 +77,7 @@
- 父级 `canteen-device/index.html` 已恢复员工登录入口卡片并同步菜单状态
- 其余设备页仍有部分占位,待继续补齐
- `emergency-screen/` — 应急大屏(西安/标准版/九厂)🔨 设计中
- `xian-center/index.html` — 西安应急中心大屏(应急指挥大屏,含 KPI 指标/穿戴告警/心脑血管 AI 预警/地理地图/资源调度/急救路线)
- `xian-center/index.html` — 西安应急中心大屏(应急指挥大屏,含 KPI 指标/穿戴告警/心脑血管 AI 预警/地理地图/资源调度/急救路线;新增穿戴告警/心脑血管预警/应急求助三个业务记录弹窗含筛选与分页,地图资源标记弹窗,告警弹窗红色闪烁边框
- `medical-pad/` — 医疗点PAD端 ⏳ 待开发
## 待开发模块
@@ -90,6 +89,7 @@ Web 管理端和员工端 APP 的其余模块(系统管理、运动管理、
## 近期里程碑
- 2026-06-24:营养管理边缘服务原型补齐——新增 `edge-server-management.html``edge-server-detail.html``edge-report-management.html``edge-dispatch-management.html``edge-dispatch-detail.html``edge-alert-center.html` 6 个页面;`index.html` SITE_MAP 同步新增边缘服务入口并增加项目资料入口;`_templates/md-viewer.html` 支持 Mermaid 文档预览;`web-admin/nutrition/doc/CHANGELOG.md` 已补充记录。
- 2026-06-24:西安应急中心大屏业务弹窗与地图交互增强——三个业务记录弹窗(穿戴告警/心脑血管预警/应急求助)各含6项筛选条件(类型/日期/姓名/编号等)与分页列表(28条Mock数据);右上角告警弹窗红色脉冲闪烁边框动画;地图资源标记点击弹窗(11个资源信息卡片),普通Tab模式与急救路线模式点击分发;`emergency-screen/doc/CHANGELOG.md` 同步更新
- 2026-06-22:营养小程序就餐记录与 web-admin 营养模块字段完善——小程序 `eat-home.html` 今日就餐记录列表移除食物图标、加序号徽标、副信息改为重量/热量、新增就餐时间;数据来源扩展为员工食堂/补充记录/拍照记录三种;底部"自记餐品"按钮拆为"手动补录"+"拍照记录"双按钮;新增 `eat-photo-record.html` 拍照记录页(餐品名称 + 拍照上传多条)。Web 管理端:`din-dish-add/din-dish-all` 食材"是否主料"字段改为"食材类型"(主材/辅材/调料);`prod-proc-combo/sup-in-cleanin/sup-in-raw/sup-pkg-label` 新增"终端设备"列展示设备名与编号;`din-recipe-mgmt` 新增"同步至生产任务"按钮与"已同步"标签。
- 2026-06-18:营养模块净菜联动与小程序登录优化——小程序新增 `me-login.html` 微信授权登录页,并将“我”入口统一先跳转登录页;Web 管理端营养模块补强餐品/食材、净菜订单、净菜内供/外售、净菜入库、净菜包装等页面的“食材名称 + 净菜类型”联动与包装规格整数输入,对应模块 CHANGELOG 已补充记录。
- 2026-06-23:应急大屏模块启动——新增西安应急中心大屏原型 `xian-center/index.html`(应急指挥大屏,深色科技风,含 KPI 指标卡/穿戴告警分布与事件滚动/心脑血管 AI 预警/地理地图多资源标记/急救路线与资源调度/急救提示书/应急求助事件滚动列表),`index.html` SITE_MAP 同步更新,`emergency-screen/doc/CHANGELOG.md` 初始化
+1 -14
View File
@@ -7,19 +7,7 @@
<value>
<TabSessionState>
<option name="provider" value="claude" />
<option name="sessionId" value="eafa762f-e1c9-43d9-bcb0-bdcbaf8a558e" />
<option name="cwd" value="$PROJECT_DIR$" />
<option name="model" value="claude-sonnet-4-6" />
<option name="permissionMode" value="bypassPermissions" />
<option name="reasoningEffort" value="high" />
</TabSessionState>
</value>
</entry>
<entry key="1">
<value>
<TabSessionState>
<option name="provider" value="claude" />
<option name="sessionId" value="c093ac97-b314-4135-8140-d28789bec779" />
<option name="sessionId" value="a46dc855-7865-4821-88fd-63a8406103b5" />
<option name="cwd" value="$PROJECT_DIR$" />
<option name="model" value="claude-sonnet-4-6" />
<option name="permissionMode" value="bypassPermissions" />
@@ -29,6 +17,5 @@
</entry>
</map>
</option>
<option name="tabCount" value="2" />
</component>
</project>
+1 -1
View File
@@ -1,4 +1,4 @@
<!-- Last updated: 2026-06-23 | Commit: dbf1920 -->
<!-- Last updated: 2026-06-24 | Commit: aa93392 -->
# 项目约束
@@ -162,6 +162,14 @@
.panel__header-tab:hover{color:var(--text-main);}
.panel__header-tab.active{background:var(--primary);color:#fff;}
.panel__header-link{font-size:10px;color:var(--primary);cursor:pointer;margin-left:auto;flex-shrink:0;transition:all .2s;}
.panel__header-select{height:26px;padding:0 24px 0 10px;margin-left:auto;font-size:11px;
background:rgba(10,20,44,0.8);border:1px solid var(--panel-border);border-radius:13px;
color:var(--text-sub);outline:none;cursor:pointer;appearance:none;
background-image: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='%234A6B8A'/%3E%3C/svg%3E");
background-repeat:no-repeat;background-position:right 8px center;transition:all .2s;}
.panel__header-select:hover{border-color:rgba(24,144,255,0.4);color:var(--text-main);}
.panel__header-select:focus{border-color:var(--primary);}
.panel__header-select option{background:#0f2847;color:var(--text-main);}
.panel__header-link:hover{color:#40a9ff;text-decoration:underline;}
.panel__body{flex:1;padding:12px;overflow-y:auto;}
.panel__body::-webkit-scrollbar{width:4px;}
@@ -558,6 +566,49 @@
.marker-popup__label{font-size:10px;color:var(--text-dim);margin-bottom:2px;letter-spacing:0.5px;}
.marker-popup__addr{font-size:11px;color:var(--text-sub);line-height:1.5;}
/* ========== 地图右下角:接听状态控制面板 ========== */
.map-ctrl{position:absolute;bottom:12px;right:12px;z-index:12;
background:rgba(10,22,48,0.88);border:1px solid var(--panel-border);border-radius:8px;
padding:12px 16px;display:flex;flex-direction:column;gap:12px;
backdrop-filter:blur(6px);min-width:150px;}
.map-ctrl::before{content:'';position:absolute;top:0;left:0;width:10px;height:10px;
border-top:1.5px solid rgba(24,144,255,0.35);border-left:1.5px solid rgba(24,144,255,0.35);border-radius:8px 0 0 0;pointer-events:none;}
.map-ctrl::after{content:'';position:absolute;bottom:0;right:0;width:10px;height:10px;
border-bottom:1.5px solid rgba(24,144,255,0.35);border-right:1.5px solid rgba(24,144,255,0.35);border-radius:0 0 8px 0;pointer-events:none;}
.map-ctrl__row{display:flex;align-items:center;gap:10px;}
.map-ctrl__label{font-size:12px;color:var(--text-sub);white-space:nowrap;}
/* Switch 开关 */
.map-ctrl__switch{position:relative;width:40px;height:22px;flex-shrink:0;cursor:pointer;}
.map-ctrl__switch input{display:none;}
.map-ctrl__switch-track{position:absolute;inset:0;border-radius:11px;background:rgba(74,107,138,0.4);
border:1px solid rgba(74,107,138,0.5);transition:all .25s;}
.map-ctrl__switch-thumb{position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;
background:var(--text-sub);transition:all .25s;box-shadow:0 1px 3px rgba(0,0,0,0.3);}
.map-ctrl__switch input:checked + .map-ctrl__switch-track{background:rgba(82,196,26,0.25);border-color:rgba(82,196,26,0.5);}
.map-ctrl__switch input:checked ~ .map-ctrl__switch-thumb{left:20px;background:var(--success);
box-shadow:0 0 8px rgba(82,196,26,0.5);}
/* 视频通话按钮 */
.map-ctrl__btn{display:flex;align-items:center;gap:6px;height:32px;padding:0 14px;
border-radius:6px;font-size:12px;cursor:pointer;transition:all .2s;white-space:nowrap;
background:rgba(24,144,255,0.12);color:var(--primary);border:1px solid rgba(24,144,255,0.3);}
.map-ctrl__btn:hover{background:rgba(24,144,255,0.22);border-color:rgba(24,144,255,0.5);
box-shadow:0 0 12px rgba(24,144,255,0.2);}
.map-ctrl__btn svg{width:16px;height:16px;flex-shrink:0;}
/* ========== 地图右下角:图层切换 ========== */
.map-layer{position:absolute;bottom:12px;right:178px;z-index:12;
background:rgba(10,22,48,0.88);border:1px solid var(--panel-border);border-radius:8px;
padding:8px 10px;display:flex;flex-direction:column;gap:2px;
backdrop-filter:blur(6px);}
.map-layer::before{content:'';position:absolute;top:0;left:0;width:10px;height:10px;
border-top:1.5px solid rgba(24,144,255,0.35);border-left:1.5px solid rgba(24,144,255,0.35);border-radius:8px 0 0 0;pointer-events:none;}
.map-layer::after{content:'';position:absolute;bottom:0;right:0;width:10px;height:10px;
border-bottom:1.5px solid rgba(24,144,255,0.35);border-right:1.5px solid rgba(24,144,255,0.35);border-radius:0 0 8px 0;pointer-events:none;}
.map-layer__item{font-size:11px;color:var(--text-dim);padding:5px 10px;border-radius:4px;
cursor:pointer;transition:all .2s;white-space:nowrap;text-align:center;}
.map-layer__item:hover{color:var(--text-main);background:rgba(24,144,255,0.08);}
.map-layer__item.active{color:var(--primary);background:rgba(24,144,255,0.15);}
/* ========== 响应式/小屏幕 ========== */
@media(max-width:1440px){.side{width:260px;}.main{padding:0 8px 8px;gap:8px;}}
</style>
@@ -598,12 +649,13 @@
<div class="panel__header">
<div class="panel__header-diamond"></div>
<span class="panel__header-title">穿戴告警分布</span>
<!-- [交互] 时间段切换:近一周/近一月/近一年 -->
<div class="panel__header-tabs">
<span class="panel__header-tab active" onclick="switchPeriod(this,'week')">近一周</span>
<span class="panel__header-tab" onclick="switchPeriod(this,'month')">近一</span>
<span class="panel__header-tab" onclick="switchPeriod(this,'year')">近一</span>
</div>
<!-- [交互] 时间段切换:今日/近一周/近一月/近一年 -->
<select class="panel__header-select" onchange="switchPeriod(this.value)">
<option value="today" selected>今日</option>
<option value="week">近一</option>
<option value="month">近一</option>
<option value="year">近一年</option>
</select>
</div>
<div class="panel__body">
<div class="alarm-bars">
@@ -761,7 +813,7 @@
<div class="panel__header-diamond"></div>
<span class="panel__header-title">心脑血管预警(AI)</span>
<!-- [交互] 点击查看更多,打开心脑血管预警记录弹窗 -->
<span class="panel__header-link" onclick="openCvRecordModal();event.stopPropagation();">查看更多</span>
<span class="panel__header-link" onclick="openCvRecordModal();event.stopPropagation();">历史记录</span>
</div>
<div class="panel__body" style="padding:8px 12px;">
<!-- [内容] AI预警摘要 -->
@@ -1019,12 +1071,12 @@
<!-- 地图图例 -->
<div class="map-legend">
<div class="map-legend__item"><div class="map-legend__dot" style="background:#1890FF;"></div>油田医院</div>
<div class="map-legend__item"><div class="map-legend__dot" style="background:#722ED1;"></div>合作医院</div>
<div class="map-legend__item"><div class="map-legend__dot" style="background:#1890FF;border:1.5px dashed #1890FF;background:transparent;"></div>地方医院</div>
<div class="map-legend__item"><div class="map-legend__dot" style="background:#13C2C2;"></div>医疗点</div>
<div class="map-legend__item"><div class="map-legend__dot" style="background:#FAAD14;"></div>救护车</div>
<div class="map-legend__item"><div class="map-legend__dot" style="background:#FF4D4F;"></div>AED</div>
<div class="map-legend__item"><div class="map-legend__dot" style="background:#1890FF;"></div>油田医院(1)</div>
<div class="map-legend__item"><div class="map-legend__dot" style="background:#722ED1;"></div>合作医院(1)</div>
<div class="map-legend__item"><div class="map-legend__dot" style="background:#1890FF;border:1.5px dashed #1890FF;background:transparent;"></div>地方医院(2)</div>
<div class="map-legend__item"><div class="map-legend__dot" style="background:#13C2C2;"></div>医疗点(3)</div>
<div class="map-legend__item"><div class="map-legend__dot" style="background:#FAAD14;"></div>救护车(2)</div>
<div class="map-legend__item"><div class="map-legend__dot" style="background:#FF4D4F;"></div>AED(2)</div>
</div>
<!-- [急救路线] 员工当前位置标记 -->
@@ -1161,6 +1213,30 @@
</ol>
</div>
</div>
<!-- 地图右下角:图层切换 -->
<div class="map-layer">
<span class="map-layer__item active" onclick="switchMapLayer(this,'default')">默认地图</span>
<span class="map-layer__item" onclick="switchMapLayer(this,'satellite')">卫星地图</span>
<span class="map-layer__item" onclick="switchMapLayer(this,'standard')">标准地图</span>
</div>
<!-- 地图右下角:接听状态控制 -->
<div class="map-ctrl">
<div class="map-ctrl__row">
<span class="map-ctrl__label">++++++++++++++++++++++++++++++++++++++++++++</span>
<label class="map-ctrl__switch" title="切换接听状态">
<input type="checkbox" id="acceptSwitch" checked onchange="onAcceptSwitch(this.checked)">
<div class="map-ctrl__switch-track"></div>
<div class="map-ctrl__switch-thumb"></div>
</label>
</div>
<!-- [交互] 点击发起视频通话 -->
<button class="map-ctrl__btn" onclick="onVideoCall();event.stopPropagation();" title="视频通话">
<svg viewBox="0 0 16 16" fill="none"><path d="M1 4.5A1.5 1.5 0 012.5 3h7A1.5 1.5 0 0111 4.5v2.8l3.2-2.4a.5.5 0 01.8.4v5.4a.5.5 0 01-.8.4L11 8.7v2.8a1.5 1.5 0 01-1.5 1.5h-7A1.5 1.5 0 011 11.5v-7z" fill="currentColor"/></svg>
视频通话
</button>
</div>
</div>
</div>
@@ -1171,12 +1247,13 @@
<div class="panel__header">
<div class="panel__header-diamond"></div>
<span class="panel__header-title">应急服务数据</span>
<!-- [交互] 时间段切换:近一周/近一月/近一年 -->
<div class="panel__header-tabs">
<span class="panel__header-tab active" onclick="switchPeriod(this,'week')">近一周</span>
<span class="panel__header-tab" onclick="switchPeriod(this,'month')">近一</span>
<span class="panel__header-tab" onclick="switchPeriod(this,'year')">近一</span>
</div>
<!-- [交互] 时间段切换:今日/近一周/近一月/近一年 -->
<select class="panel__header-select" onchange="switchPeriod(this.value)">
<option value="today" selected>今日</option>
<option value="week">近一</option>
<option value="month">近一</option>
<option value="year">近一年</option>
</select>
</div>
<div class="panel__body">
<div class="stat-grid">
@@ -1206,7 +1283,7 @@
<div class="panel__header-diamond"></div>
<span class="panel__header-title">应急求助事件</span>
<!-- [交互] 点击查看更多,打开应急求助记录弹窗 -->
<span class="panel__header-link" onclick="openHelpRecordModal();event.stopPropagation();">查看更多</span>
<span class="panel__header-link" onclick="openHelpRecordModal();event.stopPropagation();">历史记录</span>
</div>
<div class="panel__body" style="overflow:hidden;padding:0;">
<div class="alarm-list">
@@ -1322,11 +1399,12 @@
<div class="panel__header">
<div class="panel__header-diamond"></div>
<span class="panel__header-title">应急重点人员</span>
<div class="panel__header-tabs">
<span class="panel__header-tab active" onclick="switchPeriod(this,'week')">近一周</span>
<span class="panel__header-tab" onclick="switchPeriod(this,'month')">近一</span>
<span class="panel__header-tab" onclick="switchPeriod(this,'year')">近一</span>
</div>
<select class="panel__header-select" onchange="switchPeriod(this.value)">
<option value="today" selected>今日</option>
<option value="week">近一</option>
<option value="month">近一</option>
<option value="year">近一年</option>
</select>
</div>
<div class="panel__body">
<div class="help-person-list">
@@ -2400,11 +2478,8 @@ document.getElementById('helpTrack').addEventListener('click',function(e){
});
/* ========== 应急服务数据 时间段切换 ========== */
function switchPeriod(el,period){
var tabs=el.parentElement.querySelectorAll('.panel__header-tab');
tabs.forEach(function(t){t.classList.remove('active');});
el.classList.add('active');
/* [交互] 根据 period('week'/'month'/'year') 异步刷新下方4项指标数据 */
function switchPeriod(period){
/* [交互] 根据 period('today'/'week'/'month'/'year') 异步刷新下方6项指标数据 */
}
/* ========== Tab切换 - 地图资源筛选 ========== */
@@ -2991,6 +3066,23 @@ function resetHelpRecordFilter(){
renderHelpRecordTable();
}
/* ========== 地图右下角控制面板交互 ========== */
function onAcceptSwitch(checked){
/* [交互] 切换接听状态:checked=true 表示接收中,checked=false 表示暂停接收,文案和颜色不变 */
}
function switchMapLayer(el, layer){
/* [交互] 切换地图图层:default/satellite/standard */
var items = el.parentElement.querySelectorAll('.map-layer__item');
items.forEach(function(t){t.classList.remove('active');});
el.classList.add('active');
}
function onVideoCall(){
/* [交互] 点击视频通话按钮,弹出确认或直接发起视频通话 */
alert('正在发起视频通话…');
}
</script>
</body>
</html>
+16
View File
@@ -1,5 +1,21 @@
# 健康监测管理端 CHANGELOG
## [2026-06-24]
### 修复 — 告警记录页面字段与筛选优化
- **`wearable/exception-event.html`**
- 列表表头"工号"改为"员工编号",详情弹窗同步修改
- 筛选条件新增"员工编号"输入框(位于"员工姓名"右侧)
- 手机号码去除脱敏,改为完整11位号码展示
### 修复 — 运维中心"事件监听"菜单无展开箭头(8个页面)
- **`wearable/bind-record.html``dept-report.html``dept-stat.html``exception-event.html``notification.html``personal-stat.html``tool-manage.html``user-data.html`**
- 左侧菜单"事件监听"从扁平链接改为三层可展开 `sidebar-subgroup` 结构
- 子项:事件监听 → 事件监听(watch5) → 心率异常/血氧异常/体温异常/压力异常
-`ops/terminal-default-config.html` 结构对齐
## [2026-06-09]
### 修复 — PRD 全量排查与一致性修复(91页逐一核对)
@@ -130,7 +130,21 @@
<a href="ops/monitor-activity.html" class="sidebar-item">活动信息</a>
</div>
</div>
<a href="ops/alarm-data.html" class="sidebar-item">事件监听</a>
<div class="sidebar-subgroup">
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 事件监听</div>
<div class="sidebar-subgroup__body">
<a href="ops/alarm-data.html" class="sidebar-item">事件监听</a>
<div class="sidebar-subgroup">
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 事件监听(watch5)</div>
<div class="sidebar-subgroup__body">
<a href="ops/alarm-heartrate.html" class="sidebar-item">心率异常</a>
<a href="ops/alarm-spo2.html" class="sidebar-item">血氧异常</a>
<a href="ops/alarm-temp.html" class="sidebar-item">体温异常</a>
<a href="ops/alarm-stress.html" class="sidebar-item">压力异常</a>
</div>
</div>
</div>
</div>
<div class="sidebar-subgroup">
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 日志管理</div>
<div class="sidebar-subgroup__body">
@@ -140,7 +140,21 @@
<a href="ops/monitor-activity.html" class="sidebar-item">活动信息</a>
</div>
</div>
<a href="ops/alarm-data.html" class="sidebar-item">事件监听</a>
<div class="sidebar-subgroup">
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 事件监听</div>
<div class="sidebar-subgroup__body">
<a href="ops/alarm-data.html" class="sidebar-item">事件监听</a>
<div class="sidebar-subgroup">
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 事件监听(watch5)</div>
<div class="sidebar-subgroup__body">
<a href="ops/alarm-heartrate.html" class="sidebar-item">心率异常</a>
<a href="ops/alarm-spo2.html" class="sidebar-item">血氧异常</a>
<a href="ops/alarm-temp.html" class="sidebar-item">体温异常</a>
<a href="ops/alarm-stress.html" class="sidebar-item">压力异常</a>
</div>
</div>
</div>
</div>
<div class="sidebar-subgroup">
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 日志管理</div>
<div class="sidebar-subgroup__body">
@@ -179,7 +179,21 @@
<a href="ops/monitor-activity.html" class="sidebar-item">活动信息</a>
</div>
</div>
<a href="ops/alarm-data.html" class="sidebar-item">事件监听</a>
<div class="sidebar-subgroup">
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 事件监听</div>
<div class="sidebar-subgroup__body">
<a href="ops/alarm-data.html" class="sidebar-item">事件监听</a>
<div class="sidebar-subgroup">
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 事件监听(watch5)</div>
<div class="sidebar-subgroup__body">
<a href="ops/alarm-heartrate.html" class="sidebar-item">心率异常</a>
<a href="ops/alarm-spo2.html" class="sidebar-item">血氧异常</a>
<a href="ops/alarm-temp.html" class="sidebar-item">体温异常</a>
<a href="ops/alarm-stress.html" class="sidebar-item">压力异常</a>
</div>
</div>
</div>
</div>
<div class="sidebar-subgroup">
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 日志管理</div>
<div class="sidebar-subgroup__body">
@@ -151,7 +151,21 @@
<a href="ops/monitor-activity.html" class="sidebar-item">活动信息</a>
</div>
</div>
<a href="ops/alarm-data.html" class="sidebar-item">事件监听</a>
<div class="sidebar-subgroup">
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 事件监听</div>
<div class="sidebar-subgroup__body">
<a href="ops/alarm-data.html" class="sidebar-item">事件监听</a>
<div class="sidebar-subgroup">
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 事件监听(watch5)</div>
<div class="sidebar-subgroup__body">
<a href="ops/alarm-heartrate.html" class="sidebar-item">心率异常</a>
<a href="ops/alarm-spo2.html" class="sidebar-item">血氧异常</a>
<a href="ops/alarm-temp.html" class="sidebar-item">体温异常</a>
<a href="ops/alarm-stress.html" class="sidebar-item">压力异常</a>
</div>
</div>
</div>
</div>
<div class="sidebar-subgroup">
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 日志管理</div>
<div class="sidebar-subgroup__body">
@@ -173,6 +187,10 @@
<label>员工姓名</label>
<input class="filter-input" placeholder="请输入员工姓名">
</div>
<div class="filter-item">
<label>员工编号</label>
<input class="filter-input" placeholder="请输入员工编号">
</div>
<div class="filter-item">
<label>单位部门</label>
<select class="filter-select" style="min-width:150px;">
@@ -224,7 +242,7 @@
<thead>
<tr>
<th>员工姓名</th>
<th></th>
<th>员工编</th>
<th>所属单位</th>
<th>所属部门</th>
<th>手机号码</th>
@@ -243,7 +261,7 @@
<td>CQ001156</td>
<td>采油一厂</td>
<td>第二作业区</td>
<td>138****5621</td>
<td>13812345621</td>
<td><span style="font-family:monospace">WD-2024-002</span></td>
<td><span class="tag tag-red">一键告警</span></td>
<td style="font-weight:500">主动触发</td>
@@ -257,7 +275,7 @@
<td>CQ002301</td>
<td>采气一厂</td>
<td>第一作业区</td>
<td>139****8834</td>
<td>13912348834</td>
<td><span style="font-family:monospace">WD-2024-031</span></td>
<td><span class="tag tag-purple">血氧异常</span></td>
<td style="font-weight:500">88%</td>
@@ -271,7 +289,7 @@
<td>CQ004210</td>
<td>天然气处理厂</td>
<td>压缩作业区</td>
<td>137****2209</td>
<td>13712342209</td>
<td><span style="font-family:monospace">WD-2024-022</span></td>
<td><span class="tag tag-cyan">体温异常</span></td>
<td style="font-weight:500">37.6℃</td>
@@ -285,7 +303,7 @@
<td>CQ001234</td>
<td>采油一厂</td>
<td>第一作业区</td>
<td>136****7745</td>
<td>13612347745</td>
<td><span style="font-family:monospace">WD-2024-001</span></td>
<td><span class="tag tag-orange">心率异常</span></td>
<td style="font-weight:500">150 次/分钟</td>
@@ -299,7 +317,7 @@
<td>CQ001890</td>
<td>采油一厂</td>
<td>第二作业区</td>
<td>135****4412</td>
<td>13512344412</td>
<td><span style="font-family:monospace">WD-2024-008</span></td>
<td><span class="tag tag-red">一键告警</span></td>
<td style="font-weight:500">主动触发</td>
@@ -313,7 +331,7 @@
<td>CQ003102</td>
<td>采油二厂</td>
<td>第三作业区</td>
<td>158****3301</td>
<td>15812343301</td>
<td><span style="font-family:monospace">WD-2024-045</span></td>
<td><span class="tag tag-red">摔倒</span></td>
<td style="font-weight:500">检测到摔倒</td>
@@ -327,7 +345,7 @@
<td>CQ002078</td>
<td>采气一厂</td>
<td>第二作业区</td>
<td>186****7720</td>
<td>18612347720</td>
<td><span style="font-family:monospace">WD-2024-019</span></td>
<td><span class="tag tag-orange">定位服务开关修改</span></td>
<td style="font-weight:500">已关闭</td>
@@ -341,7 +359,7 @@
<td>CQ001567</td>
<td>采油一厂</td>
<td>第一作业区</td>
<td>133****9956</td>
<td>13312349956</td>
<td><span style="font-family:monospace">WD-2024-012</span></td>
<td><span class="tag tag-purple">血压异常</span></td>
<td style="font-weight:500">152/98 mmHg</td>
@@ -355,7 +373,7 @@
<td>CQ004501</td>
<td>天然气处理厂</td>
<td>净化作业区</td>
<td>159****6643</td>
<td>15912346643</td>
<td><span style="font-family:monospace">WD-2024-038</span></td>
<td><span class="tag tag-cyan">心电图异常</span></td>
<td style="font-weight:500">房颤 100</td>
@@ -395,7 +413,7 @@
</div>
<div class="detail-grid">
<div class="detail-item"><label>员工姓名</label><br><span id="dName"></span></div>
<div class="detail-item"><label></label><br><span id="dEmpId"></span></div>
<div class="detail-item"><label>员工编</label><br><span id="dEmpId"></span></div>
<div class="detail-item"><label>所属单位</label><br><span>采油一厂</span></div>
<div class="detail-item"><label>作业区</label><br><span>第二作业区</span></div>
<div class="detail-item"><label>设备编码</label><br><span style="font-family:monospace">WD-2024-002</span></div>
@@ -174,7 +174,21 @@
<a href="ops/monitor-activity.html" class="sidebar-item">活动信息</a>
</div>
</div>
<a href="ops/alarm-data.html" class="sidebar-item">事件监听</a>
<div class="sidebar-subgroup">
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 事件监听</div>
<div class="sidebar-subgroup__body">
<a href="ops/alarm-data.html" class="sidebar-item">事件监听</a>
<div class="sidebar-subgroup">
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 事件监听(watch5)</div>
<div class="sidebar-subgroup__body">
<a href="ops/alarm-heartrate.html" class="sidebar-item">心率异常</a>
<a href="ops/alarm-spo2.html" class="sidebar-item">血氧异常</a>
<a href="ops/alarm-temp.html" class="sidebar-item">体温异常</a>
<a href="ops/alarm-stress.html" class="sidebar-item">压力异常</a>
</div>
</div>
</div>
</div>
<div class="sidebar-subgroup">
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 日志管理</div>
<div class="sidebar-subgroup__body">
@@ -135,7 +135,21 @@
<a href="ops/monitor-activity.html" class="sidebar-item">活动信息</a>
</div>
</div>
<a href="ops/alarm-data.html" class="sidebar-item">事件监听</a>
<div class="sidebar-subgroup">
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 事件监听</div>
<div class="sidebar-subgroup__body">
<a href="ops/alarm-data.html" class="sidebar-item">事件监听</a>
<div class="sidebar-subgroup">
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 事件监听(watch5)</div>
<div class="sidebar-subgroup__body">
<a href="ops/alarm-heartrate.html" class="sidebar-item">心率异常</a>
<a href="ops/alarm-spo2.html" class="sidebar-item">血氧异常</a>
<a href="ops/alarm-temp.html" class="sidebar-item">体温异常</a>
<a href="ops/alarm-stress.html" class="sidebar-item">压力异常</a>
</div>
</div>
</div>
</div>
<div class="sidebar-subgroup">
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 日志管理</div>
<div class="sidebar-subgroup__body">
@@ -222,7 +222,21 @@
<a href="ops/monitor-activity.html" class="sidebar-item">活动信息</a>
</div>
</div>
<a href="ops/alarm-data.html" class="sidebar-item">事件监听</a>
<div class="sidebar-subgroup">
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 事件监听</div>
<div class="sidebar-subgroup__body">
<a href="ops/alarm-data.html" class="sidebar-item">事件监听</a>
<div class="sidebar-subgroup">
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 事件监听(watch5)</div>
<div class="sidebar-subgroup__body">
<a href="ops/alarm-heartrate.html" class="sidebar-item">心率异常</a>
<a href="ops/alarm-spo2.html" class="sidebar-item">血氧异常</a>
<a href="ops/alarm-temp.html" class="sidebar-item">体温异常</a>
<a href="ops/alarm-stress.html" class="sidebar-item">压力异常</a>
</div>
</div>
</div>
</div>
<div class="sidebar-subgroup">
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 日志管理</div>
<div class="sidebar-subgroup__body">
@@ -183,7 +183,21 @@
<a href="ops/monitor-activity.html" class="sidebar-item">活动信息</a>
</div>
</div>
<a href="ops/alarm-data.html" class="sidebar-item">事件监听</a>
<div class="sidebar-subgroup">
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 事件监听</div>
<div class="sidebar-subgroup__body">
<a href="ops/alarm-data.html" class="sidebar-item">事件监听</a>
<div class="sidebar-subgroup">
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 事件监听(watch5)</div>
<div class="sidebar-subgroup__body">
<a href="ops/alarm-heartrate.html" class="sidebar-item">心率异常</a>
<a href="ops/alarm-spo2.html" class="sidebar-item">血氧异常</a>
<a href="ops/alarm-temp.html" class="sidebar-item">体温异常</a>
<a href="ops/alarm-stress.html" class="sidebar-item">压力异常</a>
</div>
</div>
</div>
</div>
<div class="sidebar-subgroup">
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)"><svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg> 日志管理</div>
<div class="sidebar-subgroup__body">