fix: 管理员系统 + 注册流程重构 + UI改版 + 全链路修复

- 新增管理员角色(手机号12345678910),管理员可增删医生、查看患者
- 注册页重构:去掉角色选择+审核码,改为选医生+填姓名
- 医生端点按DoctorId过滤患者,Patient↔Doctor关系建立
- Doctor/DoctorProfile/User实体新增关联字段
- JSON循环引用修复(IgnoreCycles)
- /api/doctors改为公开接口
- 登录闪屏修复+原生Android启动页
- 输入框全局白底+灰框
- 蓝牙重连同步修复
- Web端(doctor_web+health_app/web)全部删除
- 全局UI改版:白底企业风,新配色和组件系统
- 新品牌图标和启动图
This commit is contained in:
MingNian
2026-06-16 15:16:44 +08:00
parent b635e9d25f
commit c70d5d4be6
103 changed files with 12284 additions and 13049 deletions

View File

@@ -1,8 +1,7 @@
import 'package:flutter/material.dart';
import 'package:shadcn_ui/shadcn_ui.dart';
import '../core/app_colors.dart';
import '../core/app_theme.dart';
/// 统一样式的清新卡片
class AppCard extends StatelessWidget {
final Widget child;
final EdgeInsetsGeometry? padding;
@@ -10,6 +9,7 @@ class AppCard extends StatelessWidget {
final VoidCallback? onTap;
final Color? backgroundColor;
final BorderRadius? borderRadius;
final Border? border;
const AppCard({
super.key,
@@ -19,28 +19,30 @@ class AppCard extends StatelessWidget {
this.onTap,
this.backgroundColor,
this.borderRadius,
this.border,
});
@override
Widget build(BuildContext context) {
final theme = ShadTheme.of(context);
final radius = borderRadius ?? BorderRadius.circular(AppTheme.rLg);
final card = Container(
margin: margin ?? const EdgeInsets.symmetric(horizontal: AppTheme.sLg, vertical: AppTheme.sSm),
margin:
margin ??
const EdgeInsets.symmetric(
horizontal: AppTheme.sLg,
vertical: AppTheme.sSm,
),
padding: padding,
decoration: BoxDecoration(
color: backgroundColor ?? theme.colorScheme.card,
borderRadius: borderRadius ?? BorderRadius.circular(AppTheme.rMd),
boxShadow: [AppTheme.shadowLight],
color: backgroundColor ?? AppColors.cardBackground,
borderRadius: radius,
border: border ?? Border.all(color: AppColors.border),
boxShadow: AppColors.cardShadowLight,
),
child: child,
);
if (onTap != null) {
return GestureDetector(
onTap: onTap,
child: card,
);
}
return card;
if (onTap == null) return card;
return InkWell(onTap: onTap, borderRadius: radius, child: card);
}
}