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:
@@ -5,7 +5,8 @@ import '../models/product_option.dart';
|
||||
import '../providers/connectivity_provider.dart';
|
||||
import '../repositories/product_option_repository.dart';
|
||||
|
||||
final productOptionRepositoryProvider = Provider<ProductOptionRepository>((ref) {
|
||||
final productOptionRepositoryProvider =
|
||||
Provider<ProductOptionRepository>((ref) {
|
||||
return ProductOptionRepository(ref.watch(apiClientProvider));
|
||||
});
|
||||
|
||||
@@ -55,7 +56,8 @@ final productSeriesListProvider =
|
||||
ProductSeriesListNotifier.new,
|
||||
);
|
||||
|
||||
class ProductSeriesListNotifier extends AsyncNotifier<List<ProductSeriesOption>> {
|
||||
class ProductSeriesListNotifier
|
||||
extends AsyncNotifier<List<ProductSeriesOption>> {
|
||||
@override
|
||||
Future<List<ProductSeriesOption>> build() async {
|
||||
ref.watch(authStateProvider.select((s) => s.user?.shopId));
|
||||
@@ -133,7 +135,8 @@ final productOriginListProvider =
|
||||
ProductOriginListNotifier.new,
|
||||
);
|
||||
|
||||
class ProductOriginListNotifier extends AsyncNotifier<List<ProductOriginOption>> {
|
||||
class ProductOriginListNotifier
|
||||
extends AsyncNotifier<List<ProductOriginOption>> {
|
||||
@override
|
||||
Future<List<ProductOriginOption>> build() async {
|
||||
ref.watch(authStateProvider.select((s) => s.user?.shopId));
|
||||
@@ -167,12 +170,13 @@ class ProductOriginListNotifier extends AsyncNotifier<List<ProductOriginOption>>
|
||||
|
||||
// ── 保质期 ────────────────────────────────────────────────────
|
||||
|
||||
final productShelfLifeListProvider =
|
||||
AsyncNotifierProvider<ProductShelfLifeListNotifier, List<ProductShelfLifeOption>>(
|
||||
final productShelfLifeListProvider = AsyncNotifierProvider<
|
||||
ProductShelfLifeListNotifier, List<ProductShelfLifeOption>>(
|
||||
ProductShelfLifeListNotifier.new,
|
||||
);
|
||||
|
||||
class ProductShelfLifeListNotifier extends AsyncNotifier<List<ProductShelfLifeOption>> {
|
||||
class ProductShelfLifeListNotifier
|
||||
extends AsyncNotifier<List<ProductShelfLifeOption>> {
|
||||
@override
|
||||
Future<List<ProductShelfLifeOption>> build() async {
|
||||
ref.watch(authStateProvider.select((s) => s.user?.shopId));
|
||||
@@ -206,12 +210,13 @@ class ProductShelfLifeListNotifier extends AsyncNotifier<List<ProductShelfLifeOp
|
||||
|
||||
// ── 储存方式 ──────────────────────────────────────────────────
|
||||
|
||||
final productStorageListProvider =
|
||||
AsyncNotifierProvider<ProductStorageListNotifier, List<ProductStorageOption>>(
|
||||
final productStorageListProvider = AsyncNotifierProvider<
|
||||
ProductStorageListNotifier, List<ProductStorageOption>>(
|
||||
ProductStorageListNotifier.new,
|
||||
);
|
||||
|
||||
class ProductStorageListNotifier extends AsyncNotifier<List<ProductStorageOption>> {
|
||||
class ProductStorageListNotifier
|
||||
extends AsyncNotifier<List<ProductStorageOption>> {
|
||||
@override
|
||||
Future<List<ProductStorageOption>> build() async {
|
||||
ref.watch(authStateProvider.select((s) => s.user?.shopId));
|
||||
@@ -245,12 +250,13 @@ class ProductStorageListNotifier extends AsyncNotifier<List<ProductStorageOption
|
||||
|
||||
// ── 描述文档 ──────────────────────────────────────────────────
|
||||
|
||||
final productDescriptionDocListProvider =
|
||||
AsyncNotifierProvider<ProductDescriptionDocListNotifier, List<ProductDescriptionDoc>>(
|
||||
final productDescriptionDocListProvider = AsyncNotifierProvider<
|
||||
ProductDescriptionDocListNotifier, List<ProductDescriptionDoc>>(
|
||||
ProductDescriptionDocListNotifier.new,
|
||||
);
|
||||
|
||||
class ProductDescriptionDocListNotifier extends AsyncNotifier<List<ProductDescriptionDoc>> {
|
||||
class ProductDescriptionDocListNotifier
|
||||
extends AsyncNotifier<List<ProductDescriptionDoc>> {
|
||||
@override
|
||||
Future<List<ProductDescriptionDoc>> build() async {
|
||||
ref.watch(authStateProvider.select((s) => s.user?.shopId));
|
||||
@@ -272,7 +278,9 @@ class ProductDescriptionDocListNotifier extends AsyncNotifier<List<ProductDescri
|
||||
}
|
||||
|
||||
Future<void> updateItem(int id, Map<String, dynamic> data) async {
|
||||
await ref.read(productOptionRepositoryProvider).updateDescriptionDoc(id, data);
|
||||
await ref
|
||||
.read(productOptionRepositoryProvider)
|
||||
.updateDescriptionDoc(id, data);
|
||||
reload();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user