From 006b5f0d5c9d867e6474443905f4e25fcfed6a9c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=86=AF=E6=99=AE?= <18691763612@163.com>
Date: Thu, 9 Apr 2026 11:23:54 +0800
Subject: [PATCH 1/5] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=BB=9F=E4=B8=80?=
=?UTF-8?q?=E7=9A=84=E5=AF=BC=E8=88=AA=E5=85=A5=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
index.html | 333 ++++++++++++++++++++++++++++++++++++++++++++++++++++
项目背景.md | 12 +-
2 files changed, 344 insertions(+), 1 deletion(-)
create mode 100644 index.html
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..5553b65
--- /dev/null
+++ b/index.html
@@ -0,0 +1,333 @@
+
+
+
+
+
+健康长庆升级 - 高保真交互原型导航
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/项目背景.md b/项目背景.md
index 272b05d..83fce46 100644
--- a/项目背景.md
+++ b/项目背景.md
@@ -12,6 +12,7 @@
```
prototype-user-app/
+├── index.html # 全局导航页(项目入口)
├── web-admin/ # Web 管理端原型
├── employee-app/ # 员工端 APP 原型
├── emergency-app/ # 健康应急 APP 原型
@@ -23,7 +24,16 @@ prototype-user-app/
└── README.md # 项目说明
```
-### 1.2 各端内部按核心功能模块分目录
+### 1.2 全局导航页(index.html)
+
+根目录 `index.html` 作为项目统一入口,部署到服务器后供研发人员浏览所有原型页面。
+
+- 通过 Tab 切换三大终端(Web 管理端 / 员工端 APP / 健康应急 APP)
+- 以模块卡片展示各业务模块,卡片内列出该模块所有原型页面的跳转链接
+- 数据驱动:所有模块和页面信息维护在 `SITE_MAP` JS 对象中
+- **新增原型页面时,必须同步在 `index.html` 的 `SITE_MAP` 中添加对应条目**
+
+### 1.3 各端内部按核心功能模块分目录
**员工端 APP(employee-app/)17 个模块**
```
From fd39307aaf1f277d036b9af9808c3ac48d909353 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=86=AF=E6=99=AE?= <18691763612@163.com>
Date: Thu, 9 Apr 2026 12:39:47 +0800
Subject: [PATCH 2/5] =?UTF-8?q?refactor:=20=E4=BC=98=E5=8C=96=E5=AF=BC?=
=?UTF-8?q?=E8=88=AA=E9=A1=B5UI=E4=BA=A4=E4=BA=92=EF=BC=8C=E5=8D=A1?=
=?UTF-8?q?=E7=89=87=E7=82=B9=E5=87=BB=E8=B7=B3=E8=BD=AC=E4=B8=BB=E9=A1=B5?=
=?UTF-8?q?+=E5=BE=BD=E7=AB=A0=E6=82=AC=E6=B5=AE=E9=A1=B5=E9=9D=A2?=
=?UTF-8?q?=E5=88=97=E8=A1=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 去掉顶部冗余统计徽章,Tab导航移入Header居中显示
- 模块卡片改为点击跳转主页,点击页数徽章弹出悬浮页面列表
- 已完成模块卡片添加绿色边框呼吸灯动画
- 健康应急APP角色分组标题与卡片居中对齐
- 同步更新项目背景.md导航页交互说明
Co-Authored-By: Claude Opus 4.6
---
index.html | 386 +++++++++++++++++++++++++++-------------------------
项目背景.md | 4 +-
2 files changed, 201 insertions(+), 189 deletions(-)
diff --git a/index.html b/index.html
index 5553b65..82bf4be 100644
--- a/index.html
+++ b/index.html
@@ -13,6 +13,9 @@
--warning: #FAAD14;
--danger: #FF4D4F;
--purple: #722ED1;
+ --green: #52C41A;
+ --green-light: #f6ffed;
+ --green-border: #b7eb8f;
--text-primary: #1a1a2e;
--text-secondary: #5a607f;
--text-placeholder: #999999;
@@ -22,7 +25,6 @@
--radius-sm: 6px;
--radius-md: 10px;
--radius-lg: 16px;
- --radius-xl: 20px;
--shadow-sm: 0 1px 3px rgba(0,0,0,0.04), 0 1px 2px rgba(0,0,0,0.06);
--shadow-md: 0 4px 16px rgba(22,119,255,0.10), 0 2px 6px rgba(0,0,0,0.06);
--shadow-lg: 0 10px 30px rgba(22,119,255,0.15), 0 4px 10px rgba(0,0,0,0.06);
@@ -31,27 +33,20 @@
body { background: var(--background); font-family: -apple-system, BlinkMacSystemFont, 'PingFang SC', 'Helvetica Neue', 'Segoe UI', sans-serif; color: var(--text-primary); min-height: 100vh; }
/* ===== Header ===== */
-.header { position: relative; background: linear-gradient(135deg, #0b3d91 0%, var(--primary) 40%, #4facfe 100%); color: #fff; padding: 44px 48px 28px; overflow: hidden; }
+.header { position: relative; background: linear-gradient(135deg, #0b3d91 0%, var(--primary) 40%, #4facfe 100%); color: #fff; padding: 40px 48px 20px; overflow: hidden; }
.header::before { content: ''; position: absolute; top: -60px; right: -40px; width: 260px; height: 260px; background: radial-gradient(circle, rgba(255,255,255,0.12) 0%, transparent 70%); border-radius: 50%; }
.header::after { content: ''; position: absolute; bottom: -80px; left: 20%; width: 360px; height: 360px; background: radial-gradient(circle, rgba(255,255,255,0.06) 0%, transparent 70%); border-radius: 50%; }
-.header__inner { position: relative; z-index: 1; max-width: 1400px; margin: 0 auto; }
-.header__top { display: flex; align-items: flex-start; justify-content: space-between; }
+.header__inner { position: relative; z-index: 1; max-width: 1400px; margin: 0 auto; text-align: center; }
.header__title { font-size: 28px; font-weight: 800; letter-spacing: 1px; text-shadow: 0 2px 8px rgba(0,0,0,0.15); }
-.header__sub { font-size: 14px; color: rgba(255,255,255,0.7); margin-top: 8px; font-weight: 400; }
-.header__stats { display: flex; gap: 14px; margin-top: 22px; flex-wrap: wrap; }
-.stat-badge { background: rgba(255,255,255,0.15); backdrop-filter: blur(10px); border: 1px solid rgba(255,255,255,0.2); border-radius: 24px; padding: 8px 20px; font-size: 13px; font-weight: 500; display: flex; align-items: center; gap: 8px; transition: background .2s; }
-.stat-badge:hover { background: rgba(255,255,255,0.25); }
-.stat-badge__dot { width: 10px; height: 10px; border-radius: 50%; box-shadow: 0 0 6px currentColor; }
-.stat-badge__dot--web { background: #69b1ff; color: #69b1ff; }
-.stat-badge__dot--app { background: #95de64; color: #95de64; }
-.stat-badge__dot--emergency { background: #ffc069; color: #ffc069; }
-/* ===== Tab 导航 ===== */
-.tab-nav { display: flex; align-items: center; gap: 6px; background: var(--card-bg); padding: 12px 48px; position: sticky; top: 0; z-index: 10; box-shadow: 0 2px 12px rgba(0,0,0,0.06); }
-.tab-nav__item { padding: 9px 22px; font-size: 14px; font-weight: 500; color: var(--text-secondary); cursor: pointer; border-radius: 24px; transition: all .25s ease; user-select: none; display: flex; align-items: center; gap: 8px; border: 1.5px solid transparent; }
-.tab-nav__item:hover { color: var(--primary); background: var(--primary-light); }
-.tab-nav__item--active { color: #fff; background: var(--primary); border-color: var(--primary); box-shadow: 0 2px 8px rgba(22,119,255,0.3); }
-.tab-nav__item--active .tab-nav__badge { background: rgba(255,255,255,0.25); color: #fff; }
-.tab-nav__badge { font-size: 11px; padding: 2px 8px; border-radius: 10px; background: var(--primary-light); color: var(--primary); font-weight: 600; transition: all .25s; }
+.header__sub { font-size: 14px; color: rgba(255,255,255,0.7); margin-top: 8px; }
+
+/* ===== Tab 导航(嵌入 Header 底部) ===== */
+.tab-nav { display: flex; align-items: center; justify-content: center; gap: 8px; padding: 20px 48px 0; position: relative; z-index: 1; }
+.tab-nav__item { padding: 10px 28px; font-size: 15px; font-weight: 600; color: rgba(255,255,255,0.7); cursor: pointer; border-radius: 28px; transition: all .25s ease; user-select: none; display: flex; align-items: center; gap: 8px; border: 1.5px solid rgba(255,255,255,0.25); background: rgba(255,255,255,0.08); backdrop-filter: blur(6px); }
+.tab-nav__item:hover { color: #fff; background: rgba(255,255,255,0.18); border-color: rgba(255,255,255,0.4); }
+.tab-nav__item--active { color: var(--primary-dark); background: #fff; border-color: #fff; box-shadow: 0 4px 16px rgba(0,0,0,0.15); }
+.tab-nav__item--active .tab-nav__badge { background: var(--primary); color: #fff; }
+.tab-nav__badge { font-size: 11px; padding: 2px 9px; border-radius: 10px; background: rgba(255,255,255,0.2); color: rgba(255,255,255,0.9); font-weight: 700; transition: all .25s; }
.tab-nav__icon { width: 18px; height: 18px; flex-shrink: 0; }
/* ===== 内容区 ===== */
@@ -61,13 +56,14 @@ body { background: var(--background); font-family: -apple-system, BlinkMacSystem
@keyframes fadeUp { from { opacity: 0; transform: translateY(12px); } to { opacity: 1; transform: translateY(0); } }
/* ===== 模块网格 ===== */
-.module-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(360px, 1fr)); gap: 20px; }
+.module-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 20px; }
+.module-grid--center { justify-content: center; display: flex; flex-wrap: wrap; gap: 20px; }
+.module-grid--center .module-card { width: 320px; flex-shrink: 0; }
/* ===== 角色分组 ===== */
-.role-group { margin-bottom: 28px; }
+.role-group { margin-bottom: 28px; text-align: center; }
.role-group:last-child { margin-bottom: 0; }
.role-group__title { display: inline-flex; align-items: center; gap: 8px; font-size: 15px; font-weight: 600; color: var(--text-primary); margin-bottom: 16px; padding: 6px 16px 6px 12px; background: var(--card-bg); border-radius: var(--radius-md); box-shadow: var(--shadow-sm); }
-.role-group__title:first-child { margin-top: 0; }
.role-icon { width: 22px; height: 22px; border-radius: 6px; display: flex; align-items: center; justify-content: center; font-size: 13px; color: #fff; flex-shrink: 0; }
.role-icon--expert { background: linear-gradient(135deg, #1677FF, #4facfe); }
.role-icon--assistant { background: linear-gradient(135deg, #722ED1, #b37feb); }
@@ -77,185 +73,173 @@ body { background: var(--background); font-family: -apple-system, BlinkMacSystem
.role-icon--admin { background: linear-gradient(135deg, #eb2f96, #ff85c0); }
.role-icon--shared { background: linear-gradient(135deg, #13c2c2, #5cdbd3); }
-/* ===== 模块卡片 ===== */
-.module-card { position: relative; background: var(--card-bg); border-radius: var(--radius-lg); box-shadow: var(--shadow-sm); padding: 22px 22px 22px 26px; transition: all .25s ease; border: 1px solid var(--border); overflow: hidden; }
-.module-card::before { content: ''; position: absolute; left: 0; top: 0; bottom: 0; width: 4px; border-radius: 4px 0 0 4px; background: var(--primary); transition: width .2s; }
-.module-card:hover { box-shadow: var(--shadow-lg); transform: translateY(-3px); border-color: rgba(22,119,255,0.2); }
-.module-card:hover::before { width: 5px; }
-.module-card--empty { opacity: 0.6; border-style: dashed; border-color: #d0d5dd; }
-.module-card--empty::before { background: #d0d5dd; }
-.module-card--empty:hover { opacity: 0.75; transform: translateY(-1px); box-shadow: var(--shadow-md); border-color: #d0d5dd; }
-.module-card__header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 14px; }
-.module-card__name { font-size: 15px; font-weight: 700; color: var(--text-primary); }
-.module-card__count { font-size: 12px; color: var(--text-secondary); margin-left: 8px; font-weight: 400; }
-.module-card__tag { font-size: 11px; padding: 3px 10px; border-radius: 12px; font-weight: 600; letter-spacing: 0.3px; }
-.module-card__tag--ready { background: #f6ffed; color: #389e0d; border: 1px solid #b7eb8f; }
-.module-card__tag--pending { background: #fffbe6; color: #d48806; border: 1px solid #ffe58f; }
-.module-card__empty-hint { display: flex; align-items: center; gap: 6px; font-size: 13px; color: var(--text-placeholder); }
-.module-card__empty-hint svg { flex-shrink: 0; }
+/* ===== 呼吸灯动画 ===== */
+@keyframes breathe {
+ 0%, 100% { border-color: rgba(82,196,26,0.35); box-shadow: 0 0 0 0 rgba(82,196,26,0); }
+ 50% { border-color: rgba(82,196,26,0.7); box-shadow: 0 0 12px 2px rgba(82,196,26,0.18); }
+}
-/* ===== 页面链接 ===== */
-.page-links { display: flex; flex-wrap: wrap; gap: 8px; }
-.page-link { display: inline-flex; align-items: center; gap: 5px; font-size: 13px; font-weight: 500; color: var(--primary-dark); background: linear-gradient(135deg, #e8f4ff, #f0f7ff); padding: 5px 14px; border-radius: 16px; text-decoration: none; transition: all .2s ease; border: 1px solid rgba(22,119,255,0.12); }
-.page-link:hover { background: linear-gradient(135deg, #bae0ff, #d6ebff); border-color: rgba(22,119,255,0.25); transform: translateY(-1px); box-shadow: 0 2px 6px rgba(22,119,255,0.12); }
-.page-link svg { flex-shrink: 0; }
-.page-link--dialog { color: #ad4e00; background: linear-gradient(135deg, #fff7e6, #fff9ed); border-color: rgba(250,173,20,0.2); }
-.page-link--dialog:hover { background: linear-gradient(135deg, #ffe7ba, #fff1cc); border-color: rgba(250,173,20,0.35); box-shadow: 0 2px 6px rgba(250,173,20,0.15); }
+/* ===== 模块卡片 ===== */
+.module-card { position: relative; background: var(--card-bg); border-radius: var(--radius-lg); box-shadow: var(--shadow-sm); padding: 20px; transition: all .25s ease; border: 1.5px solid var(--border); cursor: pointer; z-index: 1; }
+.module-card--pop-open { z-index: 200; }
+.module-card:hover { box-shadow: var(--shadow-lg); transform: translateY(-3px); }
+.module-card--ready { border-color: var(--green-border); animation: breathe 3s ease-in-out infinite; }
+.module-card--ready:hover { border-color: var(--green); animation: none; box-shadow: 0 8px 24px rgba(82,196,26,0.2); }
+.module-card--empty { opacity: 0.55; border-style: dashed; border-color: #d0d5dd; cursor: default; }
+.module-card--empty:hover { transform: none; box-shadow: var(--shadow-sm); }
+.module-card__header { display: flex; align-items: center; justify-content: space-between; }
+.module-card__name { font-size: 15px; font-weight: 700; color: var(--text-primary); }
+.module-card__tag { position: relative; font-size: 11px; padding: 3px 10px; border-radius: 12px; font-weight: 600; letter-spacing: 0.3px; }
+.module-card__tag--ready { background: var(--green-light); color: #389e0d; border: 1px solid var(--green-border); cursor: pointer; transition: all .15s; }
+.module-card__tag--ready:hover { background: #d9f7be; transform: scale(1.05); }
+.module-card__tag--pending { background: #fffbe6; color: #d48806; border: 1px solid #ffe58f; }
+.module-card__empty-hint { display: flex; align-items: center; gap: 6px; font-size: 13px; color: var(--text-placeholder); margin-top: 10px; }
+
+/* ===== 悬浮页面列表 ===== */
+.page-popover { display: none; position: absolute; top: 100%; right: 0; margin-top: 6px; background: var(--card-bg); border: 1px solid var(--border); border-radius: var(--radius-md); box-shadow: 0 8px 30px rgba(0,0,0,0.15); padding: 8px 0; z-index: 100; min-width: 200px; max-height: 320px; overflow-y: auto; animation: popIn .2s ease; }
+.page-popover--visible { display: block; }
+@keyframes popIn { from { opacity: 0; transform: translateY(-6px); } to { opacity: 1; transform: translateY(0); } }
+.page-popover__title { font-size: 12px; color: var(--text-placeholder); padding: 4px 14px 8px; border-bottom: 1px solid var(--border); margin-bottom: 4px; }
+.page-popover__item { display: flex; align-items: center; gap: 8px; padding: 7px 14px; font-size: 13px; color: var(--text-primary); text-decoration: none; transition: background .15s; }
+.page-popover__item:hover { background: var(--primary-light); color: var(--primary-dark); }
+.page-popover__item svg { flex-shrink: 0; }
+.page-popover__item--dialog { color: #ad4e00; }
+.page-popover__item--dialog:hover { background: #fff7e6; color: #ad4e00; }
-
-
-