351 lines
18 KiB
HTML
351 lines
18 KiB
HTML
<!DOCTYPE html>
|
|
|
|
<html class="light" lang="zh-CN"><head>
|
|
<meta charset="utf-8"/>
|
|
<meta content="width=device-width, initial-scale=1.0" name="viewport"/>
|
|
<title>血糖管理</title>
|
|
<script src="https://cdn.tailwindcss.com?plugins=forms,container-queries"></script>
|
|
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:wght,FILL@100..700,0..1&display=swap" rel="stylesheet"/>
|
|
<link href="https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700;800&display=swap" rel="stylesheet"/>
|
|
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:wght,FILL@100..700,0..1&display=swap" rel="stylesheet"/>
|
|
<script id="tailwind-config">
|
|
tailwind.config = {
|
|
darkMode: "class",
|
|
theme: {
|
|
extend: {
|
|
"colors": {
|
|
"on-tertiary-fixed": "#410005",
|
|
"surface-bright": "#f4fbf4",
|
|
"on-primary-container": "#00422b",
|
|
"surface-container": "#e8f0e9",
|
|
"surface-container-high": "#e3eae3",
|
|
"surface-dim": "#d4dcd5",
|
|
"primary-container": "#10b981",
|
|
"on-secondary-fixed": "#131e19",
|
|
"surface": "#f4fbf4",
|
|
"on-surface": "#161d19",
|
|
"on-tertiary": "#ffffff",
|
|
"tertiary-container": "#fc7c78",
|
|
"secondary": "#55615a",
|
|
"on-error-container": "#93000a",
|
|
"on-background": "#161d19",
|
|
"secondary-fixed-dim": "#bdcac1",
|
|
"inverse-on-surface": "#ebf3eb",
|
|
"surface-container-highest": "#dde4dd",
|
|
"on-error": "#ffffff",
|
|
"on-surface-variant": "#3c4a42",
|
|
"secondary-fixed": "#d9e6dd",
|
|
"inverse-surface": "#2b322d",
|
|
"on-secondary": "#ffffff",
|
|
"on-tertiary-fixed-variant": "#842225",
|
|
"outline-variant": "#bbcabf",
|
|
"on-primary-fixed-variant": "#005236",
|
|
"on-secondary-container": "#5b6760",
|
|
"on-primary": "#ffffff",
|
|
"primary": "#006c49",
|
|
"outline": "#6c7a71",
|
|
"tertiary-fixed": "#ffdad7",
|
|
"error": "#ba1a1a",
|
|
"tertiary": "#a43a3a",
|
|
"surface-tint": "#006c49",
|
|
"inverse-primary": "#4edea3",
|
|
"on-tertiary-container": "#711419",
|
|
"primary-fixed-dim": "#4edea3",
|
|
"on-secondary-fixed-variant": "#3e4943",
|
|
"tertiary-fixed-dim": "#ffb3af",
|
|
"surface-container-low": "#eef6ee",
|
|
"error-container": "#ffdad6",
|
|
"on-primary-fixed": "#002113",
|
|
"background": "#f4fbf4",
|
|
"surface-container-lowest": "#ffffff",
|
|
"primary-fixed": "#6ffbbe",
|
|
"surface-variant": "#dde4dd",
|
|
"secondary-container": "#d9e6dd"
|
|
},
|
|
"borderRadius": {
|
|
"DEFAULT": "0.25rem",
|
|
"lg": "0.5rem",
|
|
"xl": "0.75rem",
|
|
"full": "9999px",
|
|
"2xl": "1.5rem"
|
|
},
|
|
"spacing": {
|
|
"section-margin": "32px",
|
|
"stack-gap": "16px",
|
|
"card-padding": "20px",
|
|
"inline-gap": "12px",
|
|
"container-margin": "20px"
|
|
},
|
|
"fontFamily": {
|
|
"headline-md": ["Manrope"],
|
|
"label-md": ["Manrope"],
|
|
"body-lg": ["Manrope"],
|
|
"headline-lg-mobile": ["Manrope"],
|
|
"headline-lg": ["Manrope"],
|
|
"display-lg": ["Manrope"],
|
|
"body-md": ["Manrope"]
|
|
},
|
|
"boxShadow": {
|
|
'ambient': '0 10px 30px -10px rgba(0, 108, 73, 0.08)',
|
|
}
|
|
},
|
|
},
|
|
}
|
|
</script>
|
|
<style>
|
|
.material-symbols-outlined {
|
|
font-variation-settings: 'FILL' 0, 'wght' 400, 'GRAD' 0, 'opsz' 24;
|
|
}
|
|
.material-symbols-outlined.fill-icon {
|
|
font-variation-settings: 'FILL' 1, 'wght' 400, 'GRAD' 0, 'opsz' 24;
|
|
}
|
|
</style>
|
|
<style>
|
|
body {
|
|
min-height: max(884px, 100dvh);
|
|
}
|
|
</style>
|
|
</head>
|
|
<body class="bg-surface text-on-surface font-body-md antialiased md:max-w-[600px] md:mx-auto pb-24">
|
|
<!-- TopAppBar -->
|
|
<header class="flex justify-between items-center px-container-margin py-4 w-full bg-surface top-0 sticky z-40">
|
|
<div class="flex items-center gap-3">
|
|
<div class="w-10 h-10 rounded-full bg-surface-container-high flex items-center justify-center overflow-hidden">
|
|
<span class="material-symbols-outlined text-outline">person</span>
|
|
</div>
|
|
<div>
|
|
<h1 class="text-headline-lg-mobile font-headline-lg-mobile text-on-surface">下午好,用户16295733</h1>
|
|
<p class="text-label-md font-label-md text-on-surface-variant">今日血糖已记录</p>
|
|
</div>
|
|
</div>
|
|
<button class="flex flex-col items-center justify-center bg-surface-container-low border border-outline-variant rounded-xl px-3 py-1.5 hover:bg-surface-container transition-colors">
|
|
<span class="material-symbols-outlined text-primary mb-0.5">volume_up</span>
|
|
<span class="text-[10px] font-label-md text-on-surface-variant">朗读血糖</span>
|
|
</button>
|
|
</header>
|
|
<main class="px-container-margin flex flex-col gap-section-margin mt-4">
|
|
<!-- Primary Action -->
|
|
<section>
|
|
<button class="w-full bg-primary text-on-primary rounded-full py-4 flex items-center justify-center gap-2 hover:bg-on-primary-fixed-variant transition-colors shadow-ambient active:scale-95 duration-150">
|
|
<span class="material-symbols-outlined">add</span>
|
|
<span class="text-body-lg font-body-lg font-bold">录入今日血糖</span>
|
|
</button>
|
|
</section>
|
|
<!-- Current Status Cards -->
|
|
<section class="flex flex-col gap-3">
|
|
<h2 class="text-headline-md font-headline-md">今日血糖</h2>
|
|
<div class="grid grid-cols-2 gap-3">
|
|
<!-- Fasting -->
|
|
<div class="bg-surface-container-lowest rounded-2xl p-card-padding shadow-ambient border border-error-container">
|
|
<div class="text-label-md font-label-md text-on-surface-variant mb-1">空腹</div>
|
|
<div class="flex items-baseline gap-1 mb-2">
|
|
<span class="text-display-lg font-display-lg text-error">18.00</span>
|
|
<span class="text-label-md font-label-md text-error">mmol/L</span>
|
|
</div>
|
|
<div class="flex items-center gap-1 text-error bg-error-container/30 px-2 py-1 rounded-md w-fit">
|
|
<span class="material-symbols-outlined text-[14px]">warning</span>
|
|
<span class="text-[10px] font-label-md">偏高,请遵医嘱</span>
|
|
</div>
|
|
</div>
|
|
<!-- Post-meal -->
|
|
<div class="bg-surface-container-lowest rounded-2xl p-card-padding shadow-ambient border border-error-container">
|
|
<div class="text-label-md font-label-md text-on-surface-variant mb-1">餐后</div>
|
|
<div class="flex items-baseline gap-1 mb-2">
|
|
<span class="text-display-lg font-display-lg text-error">20.00</span>
|
|
<span class="text-label-md font-label-md text-error">mmol/L</span>
|
|
</div>
|
|
<div class="flex items-center gap-1 text-error bg-error-container/30 px-2 py-1 rounded-md w-fit">
|
|
<span class="material-symbols-outlined text-[14px]">warning</span>
|
|
<span class="text-[10px] font-label-md">偏高,请遵医嘱</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<button class="w-full flex items-center justify-between bg-surface-container-lowest rounded-xl p-4 shadow-ambient mt-2">
|
|
<div>
|
|
<div class="text-body-md font-body-md font-bold">查看更多</div>
|
|
<div class="text-label-md font-label-md text-on-surface-variant">健康日历 · 运动 · 家人互动</div>
|
|
</div>
|
|
<span class="material-symbols-outlined text-outline">chevron_right</span>
|
|
</button>
|
|
</section>
|
|
<!-- Data Overview: Trend -->
|
|
<section class="bg-surface-container-lowest rounded-2xl p-card-padding shadow-ambient">
|
|
<div class="flex justify-between items-end mb-4">
|
|
<div>
|
|
<h2 class="text-headline-md font-headline-md">血糖趋势</h2>
|
|
<p class="text-label-md font-label-md text-on-surface-variant">最近 7 天 · mmol/L</p>
|
|
</div>
|
|
<div class="flex gap-3 text-label-md font-label-md">
|
|
<div class="flex items-center gap-1"><div class="w-2 h-2 rounded-full bg-primary"></div>空腹</div>
|
|
<div class="flex items-center gap-1"><div class="w-2 h-2 rounded-full bg-tertiary-container"></div>餐后</div>
|
|
</div>
|
|
</div>
|
|
<!-- Summary Stats -->
|
|
<div class="flex bg-surface-container-low rounded-xl p-3 mb-6 divide-x divide-outline-variant">
|
|
<div class="flex-1 flex flex-col items-center">
|
|
<span class="text-headline-md font-headline-md text-error">1</span>
|
|
<span class="text-label-md font-label-md text-on-surface-variant">天偏高</span>
|
|
</div>
|
|
<div class="flex-1 flex flex-col items-center">
|
|
<span class="text-headline-md font-headline-md text-primary">1</span>
|
|
<span class="text-label-md font-label-md text-on-surface-variant">天正常</span>
|
|
</div>
|
|
<div class="flex-1 flex flex-col items-center">
|
|
<span class="text-headline-md font-headline-md text-on-surface">2</span>
|
|
<span class="text-label-md font-label-md text-on-surface-variant">天有记录</span>
|
|
</div>
|
|
</div>
|
|
<!-- Chart Area Placeholder -->
|
|
<div class="relative h-48 w-full mb-6 border-b border-l border-outline-variant">
|
|
<!-- Y Axis Labels -->
|
|
<div class="absolute -left-6 top-0 bottom-0 flex flex-col justify-between text-[10px] text-on-surface-variant">
|
|
<span>23.0</span>
|
|
<span>18.0</span>
|
|
<span>13.0</span>
|
|
<span>8.0</span>
|
|
<span>3.0</span>
|
|
</div>
|
|
<!-- X Axis Labels -->
|
|
<div class="absolute -bottom-5 left-0 right-0 flex justify-between text-[10px] text-on-surface-variant">
|
|
<span>05-23</span>
|
|
<span>05-25</span>
|
|
<span>05-27</span>
|
|
<span>05-29</span>
|
|
</div>
|
|
<!-- Threshold Line -->
|
|
<div class="absolute bottom-[25%] w-full border-t border-dashed border-error opacity-50">
|
|
<span class="absolute -top-4 text-[10px] text-error">空腹阈值 7</span>
|
|
</div>
|
|
<!-- Abstract Chart representation -->
|
|
<svg class="absolute inset-0 h-full w-full" preserveaspectratio="none" viewbox="0 0 100 100">
|
|
<path d="M 80 80 L 95 30" fill="none" stroke="#006c49" stroke-width="2"></path>
|
|
<path d="M 85 85 L 95 15" fill="none" stroke="#fc7c78" stroke-width="2"></path>
|
|
<circle cx="80" cy="80" fill="#ffffff" r="2" stroke="#006c49" stroke-width="1.5"></circle>
|
|
<circle cx="95" cy="30" fill="#ffffff" r="2" stroke="#006c49" stroke-width="1.5"></circle>
|
|
<circle cx="85" cy="85" fill="#ffffff" r="2" stroke="#fc7c78" stroke-width="1.5"></circle>
|
|
<circle cx="95" cy="15" fill="#ffffff" r="2" stroke="#fc7c78" stroke-width="1.5"></circle>
|
|
</svg>
|
|
</div>
|
|
<!-- Time Toggles -->
|
|
<div class="flex bg-surface-container-low rounded-full p-1 w-full max-w-[240px] mx-auto mt-8">
|
|
<button class="flex-1 py-2 text-label-md font-label-md bg-primary text-on-primary rounded-full shadow-sm">最近 7 天</button>
|
|
<button class="flex-1 py-2 text-label-md font-label-md text-on-surface-variant rounded-full">最近 30 天</button>
|
|
</div>
|
|
</section>
|
|
<!-- AI Nutrition Section -->
|
|
<section class="bg-gradient-to-br from-primary-container/20 to-primary/10 rounded-2xl p-[2px] shadow-ambient overflow-hidden relative">
|
|
<div class="bg-surface-container-lowest rounded-2xl p-card-padding relative z-10">
|
|
<!-- Header -->
|
|
<div class="flex items-center justify-between mb-4">
|
|
<div class="flex items-center gap-2">
|
|
<div class="w-8 h-8 rounded-lg bg-primary flex items-center justify-center">
|
|
<span class="material-symbols-outlined text-on-primary text-[18px]">auto_awesome</span>
|
|
</div>
|
|
<div>
|
|
<div class="flex items-center gap-2">
|
|
<h3 class="text-body-lg font-body-lg font-bold">AI 饮食建议</h3>
|
|
<span class="text-[10px] bg-primary/10 text-primary px-2 py-0.5 rounded-full border border-primary/20">智能定制</span>
|
|
</div>
|
|
<p class="text-[10px] text-on-surface-variant mt-0.5">读您近 7 天 · 30 天血糖,定制今日三餐</p>
|
|
</div>
|
|
</div>
|
|
<button class="flex items-center gap-1 text-label-md font-label-md text-primary bg-primary/10 px-3 py-1.5 rounded-full">
|
|
<span class="material-symbols-outlined text-[14px]">refresh</span>换一换
|
|
</button>
|
|
</div>
|
|
<!-- Meals List -->
|
|
<div class="flex flex-col gap-3 mb-4">
|
|
<div class="text-label-md font-label-md text-primary font-bold flex items-center gap-1">
|
|
<div class="w-1 h-3 bg-primary rounded-full"></div> 今日三餐
|
|
</div>
|
|
<!-- Breakfast -->
|
|
<div class="bg-surface p-3 rounded-xl border border-surface-container-highest">
|
|
<div class="flex items-center gap-1.5 mb-1.5">
|
|
<span class="material-symbols-outlined text-tertiary-container text-[16px] fill-icon">wb_sunny</span>
|
|
<span class="text-label-md font-label-md font-bold">早餐</span>
|
|
</div>
|
|
<p class="text-body-md font-body-md">小米粥(少米多水)加煮鸡蛋一个</p>
|
|
</div>
|
|
<!-- Lunch -->
|
|
<div class="bg-primary/5 p-3 rounded-xl border-l-2 border-primary">
|
|
<div class="flex items-center gap-1.5 mb-1.5">
|
|
<span class="material-symbols-outlined text-primary text-[16px] fill-icon">wb_twilight</span>
|
|
<span class="text-label-md font-label-md font-bold text-primary">午餐</span>
|
|
</div>
|
|
<p class="text-body-md font-body-md">清蒸鱼块、蒜蓉炒苋菜、二米饭(小米掺大米)</p>
|
|
</div>
|
|
<!-- Dinner -->
|
|
<div class="bg-surface p-3 rounded-xl border border-surface-container-highest">
|
|
<div class="flex items-center gap-1.5 mb-1.5">
|
|
<span class="material-symbols-outlined text-[#7e85cc] text-[16px] fill-icon">dark_mode</span>
|
|
<span class="text-label-md font-label-md font-bold">晚餐</span>
|
|
</div>
|
|
<p class="text-body-md font-body-md">玉米糝粥(稀)配凉拌黄瓜</p>
|
|
</div>
|
|
</div>
|
|
<!-- Tips -->
|
|
<div class="bg-surface-container-low rounded-xl p-3 mb-4 text-body-md font-body-md text-on-surface-variant flex gap-2">
|
|
<span class="material-symbols-outlined text-primary text-[16px] mt-0.5">info</span>
|
|
<p>小贴士:先吃菜和肉再吃主食,每餐七分饱,血糖高就少喝粥汤。</p>
|
|
</div>
|
|
<!-- Avoid List -->
|
|
<div class="mb-6">
|
|
<div class="flex items-center gap-1 text-error text-label-md font-label-md mb-2">
|
|
<span class="material-symbols-outlined text-[14px]">warning</span> 今日尽量少碰
|
|
</div>
|
|
<div class="flex flex-wrap gap-2">
|
|
<span class="bg-error-container/30 text-error px-3 py-1 rounded-full text-[12px] border border-error-container">白馒头</span>
|
|
<span class="bg-error-container/30 text-error px-3 py-1 rounded-full text-[12px] border border-error-container">油条</span>
|
|
<span class="bg-error-container/30 text-error px-3 py-1 rounded-full text-[12px] border border-error-container">粘豆包</span>
|
|
<span class="bg-error-container/30 text-error px-3 py-1 rounded-full text-[12px] border border-error-container">糯米饭</span>
|
|
<span class="bg-error-container/30 text-error px-3 py-1 rounded-full text-[12px] border border-error-container">西瓜</span>
|
|
<span class="bg-error-container/30 text-error px-3 py-1 rounded-full text-[12px] border border-error-container">含糖饮料</span>
|
|
</div>
|
|
</div>
|
|
<!-- Actions -->
|
|
<div class="flex gap-3">
|
|
<button class="flex-1 bg-primary text-on-primary rounded-xl py-3 text-body-md font-body-md font-bold hover:bg-on-primary-fixed-variant transition-colors">填入今日饮食</button>
|
|
<button class="flex-1 bg-surface-container border border-outline-variant text-on-surface rounded-xl py-3 text-body-md font-body-md font-bold hover:bg-surface-container-high transition-colors">手动记录</button>
|
|
</div>
|
|
</div>
|
|
<!-- Decorative background elements -->
|
|
<div class="absolute top-0 right-0 w-32 h-32 bg-primary/10 rounded-full blur-2xl -mr-10 -mt-10 pointer-events-none"></div>
|
|
<div class="absolute bottom-0 left-0 w-24 h-24 bg-tertiary-container/10 rounded-full blur-xl -ml-10 -mb-10 pointer-events-none"></div>
|
|
</section>
|
|
<!-- Ask AI -->
|
|
<section class="bg-surface-container-lowest rounded-2xl p-4 shadow-ambient border border-surface-container-highest">
|
|
<h3 class="text-body-md font-body-md font-bold mb-1">能不能吃?</h3>
|
|
<p class="text-[10px] text-on-surface-variant mb-3">输入食物名称,结合您的档案判断</p>
|
|
<div class="flex gap-2">
|
|
<input class="flex-1 bg-surface rounded-xl border border-outline-variant px-3 py-2 text-body-md focus:ring-2 focus:ring-primary focus:border-primary outline-none" placeholder="如:白馒头、地瓜、粘豆包" type="text"/>
|
|
<button class="bg-primary text-on-primary px-4 py-2 rounded-xl flex items-center gap-1 hover:bg-on-primary-fixed-variant transition-colors">
|
|
<span class="material-symbols-outlined text-[18px]">auto_awesome</span>
|
|
<span class="text-body-md font-body-md font-bold">问 AI</span>
|
|
</button>
|
|
</div>
|
|
</section>
|
|
<!-- Disclaimer -->
|
|
<footer class="text-center py-6">
|
|
<p class="text-[10px] text-outline">数据仅供参考,请遵医嘱</p>
|
|
</footer>
|
|
</main>
|
|
<!-- BottomNavBar -->
|
|
<nav class="fixed bottom-0 w-full z-50 rounded-t-2xl shadow-[0_-4px_20px_0_rgba(0,0,0,0.05)] bg-surface-container-lowest md:hidden flex justify-around items-center h-16 px-4">
|
|
<button class="flex flex-col items-center justify-center text-primary font-bold w-16">
|
|
<span class="material-symbols-outlined fill-icon mb-1">home</span>
|
|
<span class="text-[10px] font-label-md">首页</span>
|
|
</button>
|
|
<button class="flex flex-col items-center justify-center text-on-surface-variant opacity-60 w-16 hover:bg-surface-container-high transition-all rounded-xl py-1">
|
|
<span class="material-symbols-outlined mb-1">add_circle</span>
|
|
<span class="text-[10px] font-label-md">记录</span>
|
|
</button>
|
|
<button class="flex flex-col items-center justify-center text-on-surface-variant opacity-60 w-16 hover:bg-surface-container-high transition-all rounded-xl py-1">
|
|
<span class="material-symbols-outlined mb-1">analytics</span>
|
|
<span class="text-[10px] font-label-md">动态</span>
|
|
</button>
|
|
<button class="flex flex-col items-center justify-center text-on-surface-variant opacity-60 w-16 hover:bg-surface-container-high transition-all rounded-xl py-1">
|
|
<span class="material-symbols-outlined mb-1">person</span>
|
|
<span class="text-[10px] font-label-md">我的</span>
|
|
</button>
|
|
</nav>
|
|
</body></html> |