feat: UI清爽紫蓝风全面改造 + 对话卡片重构 + 配色体系升级

- 新增 AppColors 统一配色方案(清爽紫蓝,参考蚂蚁阿福风格)
- 新增 common_widgets(GradientBorderButton / CardActionButton / IconBox)
- AgentWelcomeCard 美化:渐变 header + AI标签 + 核心功能区 + 快捷操作区
- DataConfirmCard 统一:三合一(健康/药品/运动),可编辑字段列表
- 删除死代码:medicationConfirm/dietAnalysis/reportAnalysis/quickOptions 卡片
- 删除死路由:doctors/profileEdit/editProfile
- AI 对话去除 Markdown 符号(_stripMd),统一行间距 1.5
- 逐字淡入动画修复:key 改用 stableId 避免重复触发
- 健康概览时间修复:前端发送 UTC 避免时区歧义
- PG 数据目录迁入项目 backend/pgdata/,加入 .gitignore
- 新增欧姆龙血压计实施方案文档
This commit is contained in:
MingNian
2026-06-09 17:04:11 +08:00
parent 5f8964e03f
commit f01fc9268d
14 changed files with 1228 additions and 866 deletions

View File

@@ -1,31 +1,32 @@
import 'package:flutter/material.dart';
import 'package:shadcn_ui/shadcn_ui.dart';
import 'app_colors.dart';
/// 健康管家 — 淡紫清新
/// 健康管家 — 清爽紫蓝
class AppTheme {
AppTheme._();
// ── 主色调:柔和紫 ──
static const Color primary = Color(0xFF7C6FF7); // 柔紫
static const Color primaryLight = Color(0xFFEDEAFF); // 浅薰衣草
static const Color primaryDark = Color(0xFF4A3FBE); // 深紫
static const Color primaryGlow = Color(0xFFD9D4FF); // 发光紫
// ── 主色调 ──
static const Color primary = AppColors.primaryPurple;
static const Color primaryLight = AppColors.iconBackground;
static const Color primaryDark = AppColors.iconColor;
static const Color primaryGlow = AppColors.purpleGradientStart;
// ── 中性色 ──
static const Color bg = Color(0xFFFAF9FF); // 淡紫白
static const Color surface = Color(0xFFFFFFFF);
static const Color text = Color(0xFF1E1B2E); // 紫黑
static const Color textSub = Color(0xFF6E6B82); // 灰紫
static const Color textHint = Color(0xFFB5B2C8); // 浅灰紫
static const Color border = Color(0xFFE8E6F0);
static const Color divider = Color(0xFFF4F2FA);
static const Color bg = AppColors.backgroundSecondary;
static const Color surface = AppColors.cardBackground;
static const Color text = AppColors.textPrimary;
static const Color textSub = AppColors.textSecondary;
static const Color textHint = AppColors.textHint;
static const Color border = AppColors.border;
static const Color divider = AppColors.borderLight;
// ── 语义色 ──
static const Color success = Color(0xFF52B788); // 翠绿
static const Color error = Color(0xFFE85D75); // 柔红
static const Color warning = Color(0xFFF5B041); // 暖琥珀
static const Color accent = Color(0xFFA78BFA); // 中紫
static const Color info = Color(0xFF7C6FF7); // 柔紫
static const Color success = AppColors.success;
static const Color error = AppColors.error;
static const Color warning = AppColors.warning;
static const Color accent = AppColors.primaryBlue;
static const Color info = AppColors.primaryBlue;
// ── 圆角 ──
static const double rXs = 6;
@@ -53,13 +54,13 @@ class AppTheme {
// ── 智能体配色 ──
static const Map<String, Color> agentColors = {
'default': Color(0xFFEDEAFF), // 淡紫
'consultation': Color(0xFFE0F0FF), // 淡天蓝
'health': Color(0xFFE8FFE8), // 淡翠绿
'diet': Color(0xFFFFF0E0), // 淡杏
'medication': Color(0xFFFFE8EC), // 淡粉
'report': Color(0xFFE8F0FF), // 淡水蓝
'exercise': Color(0xFFF0E8FF), // 淡紫
'default': AppColors.iconBackground,
'consultation': Color(0xFFE0F0FF),
'health': Color(0xFFE8FFE8),
'diet': Color(0xFFFFF0E0),
'medication': Color(0xFFFFE8EC),
'report': Color(0xFFE8F0FF),
'exercise': Color(0xFFF0E8FF),
};
static Color agentLight(String? name) => agentColors[name] ?? primaryLight;
@@ -141,9 +142,9 @@ class AppTheme {
popoverForeground: text,
primary: primary,
primaryForeground: Colors.white,
secondary: Color(0xFFF4F2FA),
secondary: divider,
secondaryForeground: text,
muted: Color(0xFFF4F2FA),
muted: divider,
mutedForeground: textSub,
accent: accent,
accentForeground: Colors.white,
@@ -152,7 +153,7 @@ class AppTheme {
border: border,
input: border,
ring: primary,
selection: Color(0xFFD9D4FF),
selection: primaryGlow,
),
radius: BorderRadius.circular(rMd),
);