diff --git a/.claude/memory/MEMORY.md b/.claude/memory/MEMORY.md
index 684c15e..7b30423 100644
--- a/.claude/memory/MEMORY.md
+++ b/.claude/memory/MEMORY.md
@@ -1,4 +1,4 @@
-_Last synced: 2026-06-24 | Base commit: `f20cea5`_
+_Last synced: 2026-06-24 | Base commit: `aa93392`_
# 记忆索引
| 文件 | 描述 | 类型 | 最后更新 |
diff --git a/.claude/memory/lint_report.md b/.claude/memory/lint_report.md
index 4eca799..5396def 100644
--- a/.claude/memory/lint_report.md
+++ b/.claude/memory/lint_report.md
@@ -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 框架下,未改变整体架构
-
diff --git a/.claude/memory/project_progress.md b/.claude/memory/project_progress.md
index 2ff2767..54629e1 100644
--- a/.claude/memory/project_progress.md
+++ b/.claude/memory/project_progress.md
@@ -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` 初始化
diff --git a/.idea/claudeCodeTabState.xml b/.idea/claudeCodeTabState.xml
index 47c8f63..e403395 100644
--- a/.idea/claudeCodeTabState.xml
+++ b/.idea/claudeCodeTabState.xml
@@ -7,19 +7,7 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -29,6 +17,5 @@
-
\ No newline at end of file
diff --git a/CLAUDE.md b/CLAUDE.md
index dfc216a..278c8e9 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -1,4 +1,4 @@
-
+
# 项目约束
diff --git a/other-module/emergency-screen/xian-center/index.html b/other-module/emergency-screen/xian-center/index.html
index 3e14b04..5842cec 100644
--- a/other-module/emergency-screen/xian-center/index.html
+++ b/other-module/emergency-screen/xian-center/index.html
@@ -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;}}
@@ -598,12 +649,13 @@
@@ -761,7 +813,7 @@
-
+
@@ -1019,12 +1071,12 @@
@@ -1161,6 +1213,30 @@
+
+
+
+ 默认地图
+ 卫星地图
+ 标准地图
+
+
+
+
+
+
++++++++++++++++++++++++++++++++++++++++++++
+
+
+
+
+
@@ -1171,12 +1247,13 @@
@@ -1206,7 +1283,7 @@
-
+
@@ -1322,11 +1399,12 @@
@@ -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('正在发起视频通话…');
+}
+