Files
soft/ui-mockup.html
MingNian d6a432aec4 feat: extract secrets to .env, remove hardcoded credentials
- Backend: .env file for DB/JWT/Redis/MinIO config, appsettings.json cleared
- Backend: Program.cs loads .env at startup (no extra NuGet packages)
- Frontend: .env files for VITE_API_URL, api-clients use import.meta.env
- Added vite-env.d.ts type declarations for both frontends
- All hardcoded localhost:5000 replaced with env variable
- Added .env.example template for onboarding
2026-05-22 22:02:08 +08:00

897 lines
54 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>健康管家 - UI 重设计预览</title>
<style>
:root {
--bg: #F0F4F8;
--card: #FFFFFF;
--primary: #4F6EF7;
--primary-light: #EEF1FE;
--primary-gradient: linear-gradient(135deg, #4F6EF7, #6C8CFF);
--accent-1: #FF6B6B;
--accent-2: #FFA94D;
--accent-3: #20C997;
--accent-4: #845EF7;
--accent-5: #339AF0;
--accent-6: #F06595;
--text-1: #1A1D28;
--text-2: #5A5F72;
--text-3: #9BA0B4;
--divider: #EDF0F5;
--radius-sm: 10px;
--radius: 16px;
--radius-lg: 20px;
--shadow-card: 0 2px 12px rgba(0,0,0,0.04);
--shadow-lg: 0 8px 30px rgba(0,0,0,0.08);
--tab-height: 64px;
--header-height: 50px;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: -apple-system, BlinkMacSystemFont, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif;
background: #E8ECF1;
display: flex;
justify-content: center;
align-items: flex-start;
min-height: 100vh;
padding: 30px 0;
-webkit-font-smoothing: antialiased;
}
/* SVG 图标通用 */
.icon { display: block; flex-shrink: 0; }
.icon-white { stroke: #fff; fill: none; }
.icon-colored { stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; fill: none; }
/* ====== 主容器 ====== */
.phone-frame {
width: 390px; height: 844px;
background: var(--bg);
border-radius: 36px;
overflow: hidden;
box-shadow: 0 20px 60px rgba(0,0,0,0.18), 0 0 0 3px #1a1a2e, 0 0 0 6px #222;
display: flex; flex-direction: column; position: relative;
}
.status-bar {
height: 48px; background: var(--card);
display: flex; justify-content: space-between; align-items: center;
padding: 0 24px; font-size: 12px; font-weight: 600; color: var(--text-1); flex-shrink: 0;
}
.status-icons { display: flex; align-items: center; gap: 6px; font-size: 11px; color: var(--text-2); }
.status-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--accent-3); }
.page-header {
height: var(--header-height); background: var(--card);
display: flex; align-items: center; justify-content: center;
padding: 0 16px; font-size: 17px; font-weight: 600; color: var(--text-1);
flex-shrink: 0; position: relative; border-bottom: 1px solid var(--divider);
}
.page-header .back-btn, .page-header .header-right {
position: absolute; top: 50%; transform: translateY(-50%);
width: 34px; height: 34px; border-radius: 10px;
border: none; background: none; cursor: pointer;
display: flex; align-items: center; justify-content: center;
transition: background 0.15s;
}
.page-header .back-btn { left: 12px; }
.page-header .back-btn:hover { background: var(--bg); }
.page-header .header-right { right: 12px; font-size: 13px; color: var(--primary); font-weight: 600; }
.scroll-area {
flex: 1; overflow-y: auto; padding: 16px 16px 0; scroll-behavior: smooth;
}
.scroll-area::-webkit-scrollbar { display: none; }
/* 底部导航 */
.tab-bar {
height: var(--tab-height); background: var(--card);
border-top: 1px solid var(--divider);
display: flex; align-items: center; padding: 0 8px; flex-shrink: 0;
}
.tab-item {
flex: 1; display: flex; flex-direction: column; align-items: center; gap: 3px;
border: none; background: none; cursor: pointer; padding: 6px 0;
transition: all 0.2s; position: relative;
}
.tab-item .tab-icon-wrap {
width: 44px; height: 44px; border-radius: 12px;
display: flex; align-items: center; justify-content: center;
transition: all 0.25s; position: relative;
}
.tab-item.active .tab-icon-wrap {
background: var(--primary-light); transform: translateY(-6px);
box-shadow: 0 4px 12px rgba(79,110,247,0.25);
}
.tab-item.active .tab-icon-wrap::after {
content: ''; position: absolute; bottom: -2px;
width: 20px; height: 3px; border-radius: 3px; background: var(--primary);
}
.tab-item .tab-label { font-size: 10px; font-weight: 500; color: var(--text-3); transition: color 0.2s; }
.tab-item.active .tab-label { color: var(--primary); font-weight: 600; }
/* 通用 */
.card {
background: var(--card); border-radius: var(--radius-lg);
padding: 18px; box-shadow: var(--shadow-card); margin-bottom: 14px;
transition: transform 0.2s, box-shadow 0.2s;
}
.card:active { transform: scale(0.985); box-shadow: var(--shadow-lg); }
.section-title {
font-size: 16px; font-weight: 700; color: var(--text-1);
margin-bottom: 12px; display: flex; align-items: center; gap: 8px;
}
.section-title .dot { width: 4px; height: 18px; border-radius: 2px; background: var(--primary); }
.tag {
display: inline-flex; align-items: center; padding: 3px 10px;
border-radius: 20px; font-size: 11px; font-weight: 600;
}
.tag-success { background: #E6F9F2; color: #0D8A5E; }
.tag-warning { background: #FFF4E5; color: #D67E0B; }
.tag-danger { background: #FEE9E9; color: #D53131; }
.tag-info { background: var(--primary-light); color: var(--primary); }
/* 问候 */
.greeting { display: flex; justify-content: space-between; align-items: center; padding: 4px 0 14px; }
.greeting-left .hi { font-size: 13px; color: var(--text-3); margin-bottom: 2px; display: flex; align-items: center; gap: 6px; }
.greeting-left .name { font-size: 22px; font-weight: 800; color: var(--text-1); }
.notify-btn {
width: 44px; height: 44px; border-radius: 14px;
background: var(--card); border: 1px solid var(--divider);
cursor: pointer; display: flex; align-items: center; justify-content: center;
position: relative; box-shadow: var(--shadow-card);
}
.notify-dot {
position: absolute; top: 8px; right: 8px;
width: 8px; height: 8px; border-radius: 50%;
background: var(--accent-1); border: 2px solid #fff;
}
/* 健康概览 */
.overview-card {
background: linear-gradient(145deg, #3A54E8 0%, #5B74F7 30%, #7D9AFF 100%);
border-radius: var(--radius-lg); padding: 20px 16px; color: #fff;
margin-bottom: 16px; position: relative; overflow: hidden;
box-shadow: 0 8px 25px rgba(58,84,232,0.3);
}
.overview-card::before {
content: ''; position: absolute; width: 200px; height: 200px;
border-radius: 50%; background: rgba(255,255,255,0.06); top: -60px; right: -60px;
}
.overview-card::after {
content: ''; position: absolute; width: 120px; height: 120px;
border-radius: 50%; background: rgba(255,255,255,0.04); bottom: -40px; left: -30px;
}
.overview-header {
display: flex; justify-content: space-between; align-items: center;
margin-bottom: 18px; position: relative; z-index: 1;
}
.overview-header .title {
font-size: 15px; font-weight: 600; opacity: 0.95;
display: flex; align-items: center; gap: 8px;
}
.overview-header .heart-icon {
width: 28px; height: 28px; background: rgba(255,255,255,0.2);
border-radius: 8px; display: flex; align-items: center; justify-content: center;
}
.overview-header .time {
font-size: 11px; opacity: 0.65; background: rgba(255,255,255,0.15);
padding: 4px 10px; border-radius: 12px; display: flex; align-items: center; gap: 4px;
}
.overview-metrics {
display: flex; align-items: center; justify-content: space-around; position: relative; z-index: 1;
}
.metric-item { display: flex; flex-direction: column; align-items: center; gap: 6px; }
.metric-icon-wrap {
width: 40px; height: 40px; border-radius: 12px;
background: rgba(255,255,255,0.2); display: flex; align-items: center; justify-content: center;
backdrop-filter: blur(4px);
}
.metric-value { font-size: 26px; font-weight: 800; line-height: 1; letter-spacing: -0.5px; }
.metric-sub { font-size: 13px; font-weight: 500; opacity: 0.8; }
.metric-unit { font-size: 10px; opacity: 0.55; font-weight: 500; margin-top: 2px; }
.metric-divider { width: 1px; height: 90px; background: rgba(255,255,255,0.15); }
/* 快捷操作 */
.quick-actions { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; margin-bottom: 16px; }
.quick-action {
display: flex; flex-direction: column; align-items: center; gap: 8px;
padding: 14px 4px; background: var(--card); border-radius: var(--radius);
border: none; cursor: pointer; box-shadow: var(--shadow-card);
transition: all 0.2s;
}
.quick-action:active { transform: scale(0.94); box-shadow: var(--shadow-lg); }
.quick-action .qa-icon {
width: 46px; height: 46px; border-radius: 14px;
display: flex; align-items: center; justify-content: center;
}
.qa-icon.bp { background: #FEE9E9; }
.qa-icon.med { background: #FFF4E5; }
.qa-icon.chat { background: #E6F0FF; }
.qa-icon.report { background: #F3E8FF; }
.qa-icon.calendar { background: #E6F9F2; }
.qa-icon.followup { background: #FFF0F5; }
.qa-icon.diet { background: #F0FDF4; }
.qa-icon.device { background: #EFF6FF; }
.quick-action .qa-label { font-size: 11px; color: var(--text-2); font-weight: 600; }
/* 小贴士 */
.tip-card {
background: linear-gradient(135deg, #FFFDF5, #FFF8EC);
border: 1px solid #FDE8B3; border-radius: var(--radius);
padding: 14px 16px; display: flex; align-items: flex-start; gap: 10px; margin-bottom: 16px;
}
.tip-card .tip-bulb { flex-shrink: 0; margin-top: 2px; }
.tip-card .tip-body { flex: 1; }
.tip-card .tip-label {
font-size: 11px; color: #B7791F; font-weight: 700; margin-bottom: 4px;
display: flex; align-items: center; gap: 8px;
}
.tip-card .tip-label .refresh { margin-left: auto; font-size: 11px; color: #D69E2E; font-weight: 500; cursor: pointer; display: flex; align-items: center; gap: 3px; }
.tip-card .tip-text { font-size: 13px; color: #7B3F00; line-height: 1.6; }
/* 健康中心网格 */
.health-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin-bottom: 16px; }
.health-card {
background: var(--card); border-radius: var(--radius); padding: 18px 12px;
border: none; cursor: pointer; box-shadow: var(--shadow-card);
display: flex; flex-direction: column; align-items: center; gap: 8px;
text-align: center; transition: all 0.2s; position: relative; overflow: hidden;
}
.health-card::after { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; opacity: 0.7; }
.health-card.bp::after { background: var(--accent-1); }
.health-card.hr::after { background: var(--accent-2); }
.health-card.sugar::after { background: var(--accent-4); }
.health-card.spo2::after { background: var(--accent-5); }
.health-card.weight::after { background: var(--accent-3); }
.health-card.steps::after { background: #6366F1; }
.health-card:active { transform: scale(0.95); }
.health-card .hc-icon { width: 50px; height: 50px; border-radius: 16px; display: flex; align-items: center; justify-content: center; }
.health-card .hc-title { font-size: 14px; font-weight: 700; color: var(--text-1); }
.health-card .hc-desc { font-size: 11px; color: var(--text-3); }
.health-card .hc-arrow {
width: 22px; height: 22px; border-radius: 50%; background: var(--bg);
display: flex; align-items: center; justify-content: center;
color: var(--text-3); margin-top: 2px;
}
.health-card .hc-arrow svg { width: 10px; height: 10px; }
/* 健康入口链接 */
.quick-links { display: flex; flex-direction: column; gap: 8px; margin-bottom: 16px; }
.quick-link {
display: flex; align-items: center; gap: 12px; padding: 14px 16px;
background: var(--card); border-radius: var(--radius); border: none;
cursor: pointer; box-shadow: var(--shadow-card); font-size: 14px;
font-weight: 600; color: var(--text-1); transition: all 0.15s;
}
.quick-link:active { background: #FAFBFC; transform: scale(0.99); }
.quick-link .ql-icon { width: 40px; height: 40px; border-radius: 12px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
.quick-link .ql-arrow { margin-left: auto; color: var(--text-3); }
/* 服务页 */
.services-grid { display: flex; flex-direction: column; gap: 12px; }
.service-card {
display: flex; align-items: center; gap: 16px; padding: 20px 18px;
background: var(--card); border-radius: var(--radius-lg); border: none;
cursor: pointer; box-shadow: var(--shadow-card); transition: all 0.2s; text-align: left;
}
.service-card:active { transform: scale(0.98); }
.service-card .sc-icon { width: 52px; height: 52px; border-radius: 16px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
.service-card .sc-info { flex: 1; }
.service-card .sc-title { font-size: 16px; font-weight: 700; color: var(--text-1); margin-bottom: 4px; }
.service-card .sc-desc { font-size: 12px; color: var(--text-3); }
.service-card .sc-arrow {
width: 34px; height: 34px; border-radius: 50%; background: var(--bg);
display: flex; align-items: center; justify-content: center; color: var(--text-3); flex-shrink: 0;
}
/* 个人中心 */
.profile-header-card {
background: var(--primary-gradient); border-radius: var(--radius-lg);
padding: 20px; display: flex; align-items: center; gap: 14px;
margin-bottom: 16px; box-shadow: 0 6px 24px rgba(79,110,247,0.3); cursor: pointer;
}
.profile-avatar {
width: 56px; height: 56px; border-radius: 18px;
background: rgba(255,255,255,0.25); display: flex; align-items: center; justify-content: center;
font-size: 24px; font-weight: 800; color: #fff; flex-shrink: 0; backdrop-filter: blur(4px);
}
.profile-info { flex: 1; }
.profile-info .pi-name { font-size: 18px; font-weight: 700; color: #fff; }
.profile-info .pi-phone { font-size: 12px; color: rgba(255,255,255,0.7); margin-top: 2px; }
.profile-header-card .pi-arrow { color: rgba(255,255,255,0.8); }
.stats-row {
display: flex; background: var(--card); border-radius: var(--radius);
box-shadow: var(--shadow-card); padding: 16px 0; margin-bottom: 16px;
}
.stat-col { flex: 1; display: flex; flex-direction: column; align-items: center; gap: 4px; }
.stat-col .stat-value { font-size: 18px; font-weight: 800; color: var(--text-1); }
.stat-col .stat-label { font-size: 11px; color: var(--text-3); font-weight: 500; }
.stat-sep { width: 1px; background: var(--divider); margin: 8px 0; }
.menu-list { background: var(--card); border-radius: var(--radius); box-shadow: var(--shadow-card); overflow: hidden; margin-bottom: 16px; }
.menu-item {
display: flex; align-items: center; padding: 15px 18px;
border: none; background: none; width: 100%; cursor: pointer;
font-size: 14px; font-weight: 500; color: var(--text-1);
transition: background 0.15s; text-align: left;
}
.menu-item:active { background: #FAFBFC; }
.menu-item+.menu-item { border-top: 1px solid var(--divider); }
.menu-item .mi-icon { width: 36px; height: 36px; border-radius: 10px; display: flex; align-items: center; justify-content: center; margin-right: 12px; flex-shrink: 0; }
.menu-item .mi-arrow { margin-left: auto; color: var(--text-3); }
.menu-item .mi-badge {
margin-left: 8px; background: var(--accent-1); color: #fff;
font-size: 10px; font-weight: 700; min-width: 20px; height: 20px;
border-radius: 10px; display: flex; align-items: center; justify-content: center; padding: 0 6px;
}
.logout-btn {
width: 100%; padding: 14px; border-radius: var(--radius);
border: 1.5px solid #FDD; background: #FFF; color: var(--accent-1);
font-size: 15px; font-weight: 600; cursor: pointer; transition: all 0.15s;
}
.logout-btn:active { background: #FFF5F5; }
/* 列表 */
.list-item {
display: flex; align-items: center; gap: 14px; padding: 16px;
background: var(--card); border-radius: var(--radius); box-shadow: var(--shadow-card);
margin-bottom: 10px; border: none; width: 100%; cursor: pointer;
text-align: left; transition: all 0.15s;
}
.list-item:active { transform: scale(0.99); }
.list-item .li-icon { width: 44px; height: 44px; border-radius: 14px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
.list-item .li-content { flex: 1; min-width: 0; }
.list-item .li-title { font-size: 15px; font-weight: 600; color: var(--text-1); margin-bottom: 3px; }
.list-item .li-sub { font-size: 12px; color: var(--text-3); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.list-item .li-right { display: flex; flex-direction: column; align-items: flex-end; gap: 4px; flex-shrink: 0; }
.list-item .li-time { font-size: 11px; color: var(--text-3); }
.list-item .li-value { font-size: 15px; font-weight: 700; color: var(--text-1); }
/* Tab 切换 */
.tab-content { display: none; }
.tab-content.active { display: block; }
/* 设备 */
.device-card {
display: flex; align-items: center; gap: 14px; padding: 16px;
background: var(--card); border-radius: var(--radius); box-shadow: var(--shadow-card); margin-bottom: 10px;
}
.device-card .dc-icon { width: 48px; height: 48px; border-radius: 14px; display: flex; align-items: center; justify-content: center; }
.device-card .dc-info { flex: 1; }
.device-card .dc-name { font-size: 15px; font-weight: 600; color: var(--text-1); margin-bottom: 3px; }
.device-card .dc-status { font-size: 12px; display: flex; align-items: center; gap: 4px; }
.connected-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--accent-3); display: inline-block; }
/* 页码 */
.page-tag {
position: absolute; bottom: 12px; left: 50%; transform: translateX(-50%);
font-size: 12px; color: var(--text-3); font-weight: 500;
background: var(--card); padding: 4px 14px; border-radius: 12px;
box-shadow: var(--shadow-card); z-index: 5;
}
/* 动画 */
@keyframes fadeInUp { from { opacity: 0; transform: translateY(16px); } to { opacity: 1; transform: translateY(0); } }
.animate-in { animation: fadeInUp 0.35s ease-out; }
@keyframes pulse { 0%,100% { transform: scale(1); } 50% { transform: scale(1.05); } }
.pulse { animation: pulse 2s ease-in-out infinite; }
/* 用药 */
.med-row { display: flex; align-items: center; justify-content: space-between; }
.med-row+.med-row { margin-top: 10px; padding-top: 10px; border-top: 1px solid var(--divider); }
.med-left { display: flex; align-items: center; gap: 10px; }
.med-icon { width: 40px; height: 40px; border-radius: 12px; display: flex; align-items: center; justify-content: center; }
.med-info-name { font-size: 14px; font-weight: 600; color: var(--text-1); }
.med-info-dose { font-size: 11px; color: var(--text-3); margin-top: 2px; }
/* 趋势柱状图 */
.trend-bars { display: flex; align-items: flex-end; gap: 8px; justify-content: center; height: 50px; }
.trend-bar { width: 20px; border-radius: 4px; background: rgba(255,255,255,0.3); }
.trend-bar.hi { background: rgba(255,255,255,0.45); }
</style>
</head>
<body>
<div class="phone-frame">
<div class="status-bar">
<span>9:41</span>
<div class="status-icons"><span>5G</span><span>▮▮▮▮</span><div class="status-dot"></div></div>
</div>
<!-- ==================== 首页 ==================== -->
<div class="tab-content active" id="page-home">
<div class="scroll-area animate-in">
<div class="greeting">
<div class="greeting-left">
<div class="hi">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#F59E0B" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><path d="M12 1v2M12 21v2M4.22 4.22l1.42 1.42M18.36 18.36l1.42 1.42M1 12h2M21 12h2M4.22 19.78l1.42-1.42M18.36 5.64l1.42-1.42"/></svg>
上午好
</div>
<div class="name">张建国</div>
</div>
<button class="notify-btn">
<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#5A5F72" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"/><path d="M13.73 21a2 2 0 0 1-3.46 0"/></svg>
<span class="notify-dot"></span>
</button>
</div>
<!-- 健康概览 -->
<div class="overview-card">
<div class="overview-header">
<span class="title">
<span class="heart-icon pulse">
<svg width="14" height="14" viewBox="0 0 24 24" fill="rgba(255,255,255,0.9)" stroke="none"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/></svg>
</span>
健康概览
</span>
<span class="time">
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="rgba(255,255,255,0.7)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"/><line x1="16" y1="2" x2="16" y2="6"/><line x1="8" y1="2" x2="8" y2="6"/><line x1="3" y1="10" x2="21" y2="10"/></svg>
今天 08:30
</span>
</div>
<div class="overview-metrics">
<div class="metric-item">
<div class="metric-icon-wrap">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#fff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/><polyline points="12 7 12 13 15 15"/></svg>
</div>
<div class="metric-value">128</div>
<div class="metric-sub">/82</div>
<div class="metric-unit">血压 mmHg</div>
</div>
<div class="metric-divider"></div>
<div class="metric-item">
<div class="metric-icon-wrap">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#fff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="22 12 18 12 15 21 9 3 6 12 2 12"/></svg>
</div>
<div class="metric-value">72</div>
<div class="metric-unit">心率 bpm</div>
</div>
<div class="metric-divider"></div>
<div class="metric-item">
<div class="metric-icon-wrap">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#fff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M12 6v6l4 2"/></svg>
</div>
<div class="metric-value">5.6</div>
<div class="metric-unit">血糖 mmol/L</div>
</div>
<div class="metric-divider"></div>
<div class="metric-item">
<div class="metric-icon-wrap">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#fff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="12" y1="8" x2="12" y2="12"/><line x1="12" y1="16" x2="12.01" y2="16"/></svg>
</div>
<div class="metric-value">98</div>
<div class="metric-unit">血氧 %</div>
</div>
</div>
</div>
<!-- 快捷功能 -->
<div class="section-title"><span class="dot"></span>快捷功能</div>
<div class="quick-actions">
<button class="quick-action" onclick="showPage('bp-list')">
<div class="qa-icon bp"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#EF4444" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/><polyline points="12 7 12 13 15 15"/></svg></div>
<span class="qa-label">血压</span>
</button>
<button class="quick-action">
<div class="qa-icon med"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#D67E0B" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="4" y="5" width="16" height="14" rx="4"/><path d="M10 9v6M14 9v6M8 12h8"/></svg></div>
<span class="qa-label">用药</span>
</button>
<button class="quick-action">
<div class="qa-icon chat"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#4F6EF7" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/><line x1="9" y1="10" x2="15" y2="10"/><line x1="12" y1="7" x2="12" y2="13"/></svg></div>
<span class="qa-label">问诊</span>
</button>
<button class="quick-action">
<div class="qa-icon report"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#845EF7" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="16" y1="13" x2="8" y2="13"/><line x1="16" y1="17" x2="8" y2="17"/></svg></div>
<span class="qa-label">报告</span>
</button>
<button class="quick-action">
<div class="qa-icon calendar"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#20C997" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"/><line x1="16" y1="2" x2="16" y2="6"/><line x1="8" y1="2" x2="8" y2="6"/><line x1="3" y1="10" x2="21" y2="10"/></svg></div>
<span class="qa-label">日历</span>
</button>
<button class="quick-action">
<div class="qa-icon followup"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#F06595" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 10h-2.5L14 13l-2-6-3 6.5L7 10H5"/><rect x="2" y="2" width="20" height="20" rx="3"/></svg></div>
<span class="qa-label">复查</span>
</button>
<button class="quick-action">
<div class="qa-icon diet"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#10B981" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M12 6v6l4 2"/></svg></div>
<span class="qa-label">饮食</span>
</button>
<button class="quick-action">
<div class="qa-icon device"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#339AF0" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="5" y="2" width="14" height="20" rx="2" ry="2"/><line x1="12" y1="18" x2="12.01" y2="18"/><path d="M9 6h6"/></svg></div>
<span class="qa-label">设备</span>
</button>
</div>
<!-- 健康小贴士 -->
<div class="tip-card">
<div class="tip-bulb">
<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#F59E0B" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 18h6"/><path d="M10 22h4"/><path d="M15.09 14c.18-.98.65-1.74 1.41-2.5A4.65 4.65 0 0 0 18 8 6 6 0 0 0 6 8c0 1 .23 2.23 1.5 3.5A4.61 4.61 0 0 1 8.91 14"/></svg>
</div>
<div class="tip-body">
<div class="tip-label">
每日健康提醒
<span class="refresh">
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="#D69E2E" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="23 4 23 10 17 10"/><polyline points="1 20 1 14 7 14"/><path d="M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15"/></svg>
换一条
</span>
</div>
<div class="tip-text">每天测量血压的最佳时间是早晨起床后1小时内、服药前。保持规律监测记录数据变化趋势。</div>
</div>
</div>
<!-- 今日用药 -->
<div class="card">
<div class="section-title" style="margin-bottom:8px;"><span class="dot"></span>今日用药</div>
<div class="med-row">
<div class="med-left">
<div class="med-icon" style="background:#FFF4E5;">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#D67E0B" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="4" y="5" width="16" height="14" rx="4"/><path d="M10 9v6M14 9v6M8 12h8"/></svg>
</div>
<div><div class="med-info-name">阿司匹林肠溶片</div><div class="med-info-dose">每日1次 · 100mg</div></div>
</div>
<span class="tag tag-success">
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="#0D8A5E" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>
&nbsp;已完成
</span>
</div>
<div class="med-row">
<div class="med-left">
<div class="med-icon" style="background:#E6F0FF;">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#4F6EF7" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="4" y="5" width="16" height="14" rx="4"/><path d="M10 9v6M14 9v6M8 12h8"/></svg>
</div>
<div><div class="med-info-name">氯吡格雷</div><div class="med-info-dose">每日1次 · 75mg</div></div>
</div>
<span class="tag tag-warning">
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="#D67E0B" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>
&nbsp;待服用
</span>
</div>
</div>
</div>
</div>
<!-- ==================== 健康中心 ==================== -->
<div class="tab-content" id="page-health">
<div class="page-header">健康中心</div>
<div class="scroll-area animate-in">
<div class="section-title" style="margin-top:4px;"><span class="dot"></span>健康指标</div>
<div class="health-grid">
<button class="health-card bp" onclick="showPage('bp-list')">
<div class="hc-icon" style="background:#FEE9E9;">
<svg width="26" height="26" viewBox="0 0 24 24" fill="none" stroke="#EF4444" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/><polyline points="12 7 12 13 15 15"/></svg>
</div>
<div class="hc-title">血压</div><div class="hc-desc">记录·趋势</div>
<div class="hc-arrow"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg></div>
</button>
<button class="health-card hr">
<div class="hc-icon" style="background:#FFF4E5;">
<svg width="26" height="26" viewBox="0 0 24 24" fill="none" stroke="#F59E0B" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="22 12 18 12 15 21 9 3 6 12 2 12"/></svg>
</div>
<div class="hc-title">心率</div><div class="hc-desc">记录·趋势</div>
<div class="hc-arrow"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg></div>
</button>
<button class="health-card sugar">
<div class="hc-icon" style="background:#F3E8FF;">
<svg width="26" height="26" viewBox="0 0 24 24" fill="none" stroke="#845EF7" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M12 6v6l4 2"/></svg>
</div>
<div class="hc-title">血糖</div><div class="hc-desc">记录·趋势</div>
<div class="hc-arrow"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg></div>
</button>
<button class="health-card spo2">
<div class="hc-icon" style="background:#E6F0FF;">
<svg width="26" height="26" viewBox="0 0 24 24" fill="none" stroke="#339AF0" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="12" y1="8" x2="12" y2="12"/><line x1="12" y1="16" x2="12.01" y2="16"/></svg>
</div>
<div class="hc-title">血氧</div><div class="hc-desc">记录·趋势</div>
<div class="hc-arrow"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg></div>
</button>
<button class="health-card weight">
<div class="hc-icon" style="background:#E6F9F2;">
<svg width="26" height="26" viewBox="0 0 24 24" fill="none" stroke="#20C997" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 20V10"/><path d="M18 20V4"/><path d="M6 20v-4"/></svg>
</div>
<div class="hc-title">体重</div><div class="hc-desc">记录·趋势</div>
<div class="hc-arrow"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg></div>
</button>
<button class="health-card steps">
<div class="hc-icon" style="background:#EEF2FF;">
<svg width="26" height="26" viewBox="0 0 24 24" fill="none" stroke="#6366F1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M13 4h3l3 7-4 2v7H9v-7l-4-2 3-7h3"/><circle cx="12" cy="4" r="2"/></svg>
</div>
<div class="hc-title">步数</div><div class="hc-desc">记录·趋势</div>
<div class="hc-arrow"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg></div>
</button>
</div>
<div class="section-title"><span class="dot"></span>健康工具</div>
<div class="quick-links">
<button class="quick-link">
<div class="ql-icon" style="background:#FFF0E0;">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#F59E0B" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"/><line x1="16" y1="2" x2="16" y2="6"/><line x1="8" y1="2" x2="8" y2="6"/><line x1="3" y1="10" x2="21" y2="10"/></svg>
</div>
健康日历
<span class="ql-arrow">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg>
</span>
</button>
<button class="quick-link">
<div class="ql-icon" style="background:#FFF4E5;">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#D67E0B" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="4" y="5" width="16" height="14" rx="4"/><path d="M10 9v6M14 9v6M8 12h8"/></svg>
</div>
服药管理
<span class="ql-arrow">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg>
</span>
</button>
<button class="quick-link">
<div class="ql-icon" style="background:#E6F9F2;">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#20C997" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M12 6v6l4 2"/></svg>
</div>
运动饮食
<span class="ql-arrow">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg>
</span>
</button>
</div>
</div>
</div>
<!-- ==================== 服务 ==================== -->
<div class="tab-content" id="page-services">
<div class="page-header">健康服务</div>
<div class="scroll-area animate-in">
<div class="services-grid" style="margin-top:4px;">
<button class="service-card">
<div class="sc-icon" style="background:#E6F0FF;">
<svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="#4F6EF7" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></svg>
</div>
<div class="sc-info"><div class="sc-title">在线问诊</div><div class="sc-desc">图文咨询专业医生,获得健康指导</div></div>
<div class="sc-arrow"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg></div>
</button>
<button class="service-card">
<div class="sc-icon" style="background:#F3E8FF;">
<svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="#845EF7" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="16" y1="13" x2="8" y2="13"/><line x1="16" y1="17" x2="8" y2="17"/></svg>
</div>
<div class="sc-info"><div class="sc-title">报告解读</div><div class="sc-desc">上传检查报告,权威医生解读</div></div>
<div class="sc-arrow"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg></div>
</button>
<button class="service-card">
<div class="sc-icon" style="background:#FEE9E9;">
<svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="#EF4444" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 10h-2.5L14 13l-2-6-3 6.5L7 10H5"/><rect x="2" y="2" width="20" height="20" rx="3"/></svg>
</div>
<div class="sc-info"><div class="sc-title">复查管理</div><div class="sc-desc">智能规划复查计划,准时提醒</div></div>
<div class="sc-arrow"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg></div>
</button>
</div>
<div class="section-title" style="margin-top:20px;"><span class="dot"></span>最近记录</div>
<button class="list-item">
<div class="li-icon" style="background:#E6F0FF;">
<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#4F6EF7" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></svg>
</div>
<div class="li-content"><div class="li-title">王医生 心血管内科</div><div class="li-sub">最近血压控制得怎么样?...</div></div>
<div class="li-right"><span class="li-time">今天 10:30</span><span class="tag tag-info">进行中</span></div>
</button>
<button class="list-item">
<div class="li-icon" style="background:#F3E8FF;">
<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#845EF7" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/></svg>
</div>
<div class="li-content"><div class="li-title">心电图报告</div><div class="li-sub">2024年5月15日 · 正常</div></div>
<div class="li-right"><span class="li-time">5月15日</span><span class="tag tag-success">已解读</span></div>
</button>
</div>
</div>
<!-- ==================== 我的 ==================== -->
<div class="tab-content" id="page-profile">
<div class="page-header">
我的
<button class="header-right" style="display:flex;align-items:center;gap:2px;">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#4F6EF7" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z"/></svg>
</button>
</div>
<div class="scroll-area animate-in">
<div class="profile-header-card">
<div class="profile-avatar"></div>
<div class="profile-info"><div class="pi-name">张建国</div><div class="pi-phone">138****8888</div></div>
<div class="pi-arrow">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="rgba(255,255,255,0.8)" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg>
</div>
</div>
<div class="stats-row">
<div class="stat-col">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#4F6EF7" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 20V10"/><path d="M18 20V4"/><path d="M6 20v-4"/></svg>
<div class="stat-value">172cm</div><div class="stat-label">身高</div>
</div>
<div class="stat-sep"></div>
<div class="stat-col">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#20C997" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="2"/><path d="M10 22V10l-4 4"/><path d="M14 22V10l4 4"/></svg>
<div class="stat-value">68kg</div><div class="stat-label">体重</div>
</div>
<div class="stat-sep"></div>
<div class="stat-col">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#F59E0B" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="16" y1="13" x2="8" y2="13"/></svg>
<div class="stat-value">冠心病</div><div class="stat-label">病史</div>
</div>
</div>
<div class="menu-list">
<button class="menu-item">
<div class="mi-icon" style="background:#FFF4E5;">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#D67E0B" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="4" y="5" width="16" height="14" rx="4"/><path d="M10 9v6M14 9v6M8 12h8"/></svg>
</div>
我的用药
<span class="mi-arrow"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg></span>
</button>
<button class="menu-item">
<div class="mi-icon" style="background:#EEF2FF;">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#6366F1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="5" y="2" width="14" height="20" rx="2" ry="2"/><line x1="12" y1="18" x2="12.01" y2="18"/></svg>
</div>
设备管理
<span class="mi-arrow"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg></span>
</button>
<button class="menu-item">
<div class="mi-icon" style="background:#F3E8FF;">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#845EF7" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z"/></svg>
</div>
设置
<span class="mi-arrow"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg></span>
</button>
<button class="menu-item">
<div class="mi-icon" style="background:#E6F9F2;">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#20C997" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="12" y1="16" x2="12" y2="12"/><line x1="12" y1="8" x2="12.01" y2="8"/></svg>
</div>
关于
<span class="mi-arrow"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg></span>
</button>
</div>
<button class="logout-btn">退出登录</button>
</div>
</div>
<!-- ==================== 设备绑定 ==================== -->
<div class="tab-content" id="page-device">
<div class="page-header">
<button class="back-btn" onclick="showPage('profile')">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="15 18 9 12 15 6"/></svg>
</button>
设备管理
<button class="header-right">+ 添加</button>
</div>
<div class="scroll-area animate-in">
<div class="device-card">
<div class="dc-icon" style="background:#EEF2FF;">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#6366F1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="3" width="20" height="14" rx="2" ry="2"/><line x1="8" y1="21" x2="16" y2="21"/><line x1="12" y1="17" x2="12" y2="21"/></svg>
</div>
<div class="dc-info"><div class="dc-name">智能血压计 BP-200</div><div class="dc-status"><span class="connected-dot"></span> 已连接 · 电量 85%</div></div>
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#9BA0B4" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg>
</div>
<div class="device-card">
<div class="dc-icon" style="background:#E6F9F2;">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#20C997" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="5" y="2" width="14" height="20" rx="2" ry="2"/><line x1="12" y1="18" x2="12.01" y2="18"/></svg>
</div>
<div class="dc-info"><div class="dc-name">心率监测手环 H3</div><div class="dc-status"><span class="connected-dot"></span> 已连接 · 电量 62%</div></div>
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#9BA0B4" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg>
</div>
<div class="device-card" style="opacity:0.6;">
<div class="dc-icon" style="background:#F3E8FF;">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#845EF7" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M12 6v6l4 2"/></svg>
</div>
<div class="dc-info"><div class="dc-name">血糖仪 G-100</div><div class="dc-status" style="color:#9BA0B4;">未绑定</div></div>
<span style="color:#4F6EF7;font-size:13px;font-weight:600;">绑定</span>
</div>
</div>
</div>
<!-- ==================== 血压记录列表 ==================== -->
<div class="tab-content" id="page-bp-list">
<div class="page-header">
<button class="back-btn" onclick="showPage('home')">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="15 18 9 12 15 6"/></svg>
</button>
血压记录
<button class="header-right">+ 记录</button>
</div>
<div class="scroll-area animate-in">
<div class="overview-card" style="background:linear-gradient(145deg,#4F6EF7,#6C8CFF);box-shadow:0 6px 20px rgba(79,110,247,0.25);">
<div style="display:flex;align-items:center;gap:12px;position:relative;z-index:1;">
<div style="text-align:center;">
<div style="font-size:11px;opacity:0.7;margin-bottom:4px;">本月平均</div>
<div style="font-size:28px;font-weight:800;">126/81</div>
<div style="font-size:10px;opacity:0.55;">mmHg</div>
</div>
<div style="width:1px;height:60px;background:rgba(255,255,255,0.2);"></div>
<div style="flex:1;text-align:center;">
<div style="font-size:11px;opacity:0.7;margin-bottom:8px;">近7天趋势</div>
<div class="trend-bars">
<div class="trend-bar" style="height:30px;"></div>
<div class="trend-bar" style="height:22px;"></div>
<div class="trend-bar hi" style="height:40px;"></div>
<div class="trend-bar" style="height:28px;"></div>
<div class="trend-bar" style="height:35px;"></div>
<div class="trend-bar" style="height:20px;"></div>
<div class="trend-bar" style="height:32px;"></div>
</div>
</div>
</div>
</div>
<div class="section-title"><span class="dot"></span>历史记录</div>
<button class="list-item">
<div class="li-icon" style="background:#FEE9E9;">
<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#EF4444" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/><polyline points="12 7 12 13 15 15"/></svg>
</div>
<div class="li-content"><div class="li-title">血压</div><div class="li-sub">早晨 · 服药前测量</div></div>
<div class="li-right"><span class="li-time">今天 08:30</span><span class="li-value">128/82</span><span class="tag tag-success">正常</span></div>
</button>
<button class="list-item">
<div class="li-icon" style="background:#FEE9E9;">
<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#EF4444" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/><polyline points="12 7 12 13 15 15"/></svg>
</div>
<div class="li-content"><div class="li-title">血压</div><div class="li-sub">晚上 · 服药后测量</div></div>
<div class="li-right"><span class="li-time">昨天 20:00</span><span class="li-value">135/85</span><span class="tag tag-warning">偏高</span></div>
</button>
<button class="list-item">
<div class="li-icon" style="background:#FEE9E9;">
<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#EF4444" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/><polyline points="12 7 12 13 15 15"/></svg>
</div>
<div class="li-content"><div class="li-title">血压</div><div class="li-sub">早晨 · 服药前测量</div></div>
<div class="li-right"><span class="li-time">5月20日</span><span class="li-value">125/79</span><span class="tag tag-success">正常</span></div>
</button>
</div>
</div>
<!-- 底部导航 -->
<div class="tab-bar">
<button class="tab-item active" onclick="showPage('home')">
<span class="tab-icon-wrap">
<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#5A5F72" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><polyline points="9 22 9 12 15 12 15 22"/></svg>
</span>
<span class="tab-label">首页</span>
</button>
<button class="tab-item" onclick="showPage('health')">
<span class="tab-icon-wrap">
<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#5A5F72" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/></svg>
</span>
<span class="tab-label">健康</span>
</button>
<button class="tab-item" onclick="showPage('services')">
<span class="tab-icon-wrap">
<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#5A5F72" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></svg>
</span>
<span class="tab-label">服务</span>
</button>
<button class="tab-item" onclick="showPage('profile')">
<span class="tab-icon-wrap">
<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#5A5F72" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></svg>
</span>
<span class="tab-label">我的</span>
</button>
</div>
<div class="page-tag">首页</div>
</div>
<script>
function showPage(pageName) {
document.querySelectorAll('.tab-content').forEach(el => el.classList.remove('active'));
var target = document.getElementById('page-' + pageName);
if (target) target.classList.add('active');
var tabMap = { home:0, health:1, services:2, profile:3 };
var idx = tabMap[pageName];
document.querySelectorAll('.tab-item').forEach(function(el, i) { el.classList.toggle('active', i===idx); });
var pageNames = { home:'首页', health:'健康中心', services:'健康服务', profile:'我的', 'bp-list':'血压记录', device:'设备管理' };
var tag = document.querySelector('.page-tag');
if (tag) tag.textContent = pageNames[pageName] || '';
var scrollArea = target ? target.querySelector('.scroll-area') : null;
if (scrollArea) scrollArea.scrollTop = 0;
}
document.querySelectorAll('.quick-action').forEach(function(btn, i) {
btn.addEventListener('click', function() { var a=['bp-list',null,null,null,null,null,null,'device']; if(a[i]) showPage(a[i]); });
});
</script>
</body>
</html>