feat(client): 登录/注册页照原型重建,ds 真相源组件族统一全部屏

- 登录/注册(login.html/register.html 1:1):两栏卡片+品牌渐变面板+主题小衣服
  pill(onSurface 变体)+记住我(记录并预填最近账号)+原型式 toast 校验;
  登录 fidelity 1.4–2.1% 三主题全绿;注册暂不入闸(少 门店编号/兑换券 字段,
  已记 CONTRACT,screens.mjs 留存根)
- ds 原子补齐:DsToast(.toast 单例)/DsCheck(.check/.agree)/DsButton lg 档/
  DsSelect 替换全部旧 DropdownButton/DsField label 在上/DsInput 后缀与密码形态
- 全屏统一:对话框按钮全 DsButton、盒式输入主题钉死(visualDensity.standard、
  h38、InputDecorationTheme 渗漏修复)、图标全 lucide、JetBrains Mono 三端同源、
  BrandMark 真相源 logo、只读模式写操作全量守卫(WriteGuard+DsToast)
- 出入库列表:版式对齐原型(卡片对齐+搜索框居中)、KPI 近30天滚动、结清后
  失效财务应收应付表;商品编辑抽屉介绍库改搜索下拉、图片双击全屏预览
- 删除旧 UI 死代码:DataTableCard/FormDialog/PageScaffold/SearchChip/
  SelectProductDialog/tabStateProvider
- golden/fidelity:stock-in/out 补注册(9%)、login 入册(8%)、goldens 全量重打;
  修复 pubspec flutter_web_plugins 非法声明(CI pub get 阻断)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
This commit is contained in:
wangjia
2026-07-03 09:58:14 +08:00
parent ca7595b113
commit 6238b86dcb
286 changed files with 16831 additions and 11136 deletions
+83
View File
@@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'app_dims.g.dart';
import 'app_tokens.g.dart';
ThemeData buildTheme(String key) {
@@ -18,6 +19,88 @@ ThemeData buildTheme(String key) {
brightness: brightness,
colorScheme: scheme,
scaffoldBackgroundColor: t.bg,
// 桌面端默认 adaptivePlatformDensity=compact 会把输入框/按钮压矮 8px,
// 与原型 px 规格(.input h38 等)和 golden(测试环境=standard)不一致——
// 真机曾因此输入框只有 ~30 高。锁 standard,三端渲染与原型同几何。
visualDensity: VisualDensity.standard,
// ── 对话框/输入框/按钮的 Material 默认样式钉到 ds 真相源 ──
// 原型 .modalsurface / border / r-xl / 标题 fs-h2 heading
dialogTheme: DialogThemeData(
backgroundColor: t.surface,
surfaceTintColor: Colors.transparent,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(AppDims.rXl),
side: BorderSide(color: t.border),
),
titleTextStyle: TextStyle(
fontSize: AppDims.fsH2,
fontWeight: FontWeight.w700,
color: t.heading),
contentTextStyle: TextStyle(fontSize: AppDims.fsBody, color: t.text),
),
// 原型 .inputh38 盒式(surface/1px border/r-md/pad 0 11),聚焦主色边。
// 全局兜底——未显式给 decoration 边框的 TextField/DropdownButtonFormField
// 一律盒式,禁止 Material 默认下划线再出现。
inputDecorationTheme: InputDecorationTheme(
isDense: true,
filled: true,
fillColor: t.surface,
hintStyle: TextStyle(fontSize: AppDims.fsBody, color: t.faint),
labelStyle: TextStyle(fontSize: AppDims.fsSm, color: t.muted),
contentPadding: const EdgeInsets.symmetric(horizontal: 11, vertical: 9),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(AppDims.rMd),
borderSide: BorderSide(color: t.border),
),
disabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(AppDims.rMd),
borderSide: BorderSide(color: t.border),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(AppDims.rMd),
borderSide: BorderSide(color: t.primary),
),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(AppDims.rMd),
borderSide: BorderSide(color: t.border),
),
),
// 原型 .btn.primaryprimary 底 / onPrimary 字 / h38 / r-md / w600 / 无阴影
elevatedButtonTheme: ElevatedButtonThemeData(
style: ElevatedButton.styleFrom(
backgroundColor: t.primary,
foregroundColor: t.onPrimary,
elevation: 0,
minimumSize: const Size(0, 38),
padding: const EdgeInsets.symmetric(horizontal: 16),
textStyle: const TextStyle(
fontSize: AppDims.fsBody, fontWeight: FontWeight.w600),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(AppDims.rMd)),
),
),
filledButtonTheme: FilledButtonThemeData(
style: FilledButton.styleFrom(
backgroundColor: t.primary,
foregroundColor: t.onPrimary,
minimumSize: const Size(0, 38),
padding: const EdgeInsets.symmetric(horizontal: 16),
textStyle: const TextStyle(
fontSize: AppDims.fsBody, fontWeight: FontWeight.w600),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(AppDims.rMd)),
),
),
// TextButton 兼作行内链接,不加边框;只统一字号字重与圆角
textButtonTheme: TextButtonThemeData(
style: TextButton.styleFrom(
minimumSize: const Size(0, 38),
textStyle: const TextStyle(
fontSize: AppDims.fsBody, fontWeight: FontWeight.w600),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(AppDims.rMd)),
),
),
// 字体走系统默认(macOS/iOS=PingFang SC,与原型 --font 一致);不强制 Noto。
// Noto 仅 golden 测试加载(CI 无中文字体),见 test/support/golden_harness.dart。
extensions: <ThemeExtension<dynamic>>[t],