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:
@@ -46,25 +46,25 @@ class StockOutItem {
|
||||
}
|
||||
|
||||
return StockOutItem(
|
||||
id: json['id'] != null ? (json['id'] as num).toInt() : null,
|
||||
orderId: json['order_id'] != null
|
||||
? (json['order_id'] as num).toInt()
|
||||
: null,
|
||||
productId: (json['product_id'] as num).toInt(),
|
||||
quantity: (json['quantity'] as num).toDouble(),
|
||||
unitPrice: (json['unit_price'] as num).toDouble(),
|
||||
salePrice: (json['sale_price'] as num?)?.toDouble() ?? 0,
|
||||
totalPrice: (json['total_price'] as num).toDouble(),
|
||||
returnedQuantity: (json['returned_quantity'] as num?)?.toDouble() ?? 0,
|
||||
productName: lineOrProduct('product_name', 'name'),
|
||||
productCode: lineOrProduct('product_code', 'code'),
|
||||
productSeries: lineOrProduct('series', 'series'),
|
||||
productSpec: lineOrProduct('spec', 'spec'),
|
||||
productUnit: (json['product'] as Map<String, dynamic>?)?['unit'] as String?,
|
||||
// 批次号/生产日期:优先明细行快照,回退 product 关联(App 新建单据快照列常为空)
|
||||
batchNo: lineOrProduct('batch_no', 'batch_no'),
|
||||
productionDate: lineOrProduct('production_date', 'production_date'),
|
||||
);
|
||||
id: json['id'] != null ? (json['id'] as num).toInt() : null,
|
||||
orderId:
|
||||
json['order_id'] != null ? (json['order_id'] as num).toInt() : null,
|
||||
productId: (json['product_id'] as num).toInt(),
|
||||
quantity: (json['quantity'] as num).toDouble(),
|
||||
unitPrice: (json['unit_price'] as num).toDouble(),
|
||||
salePrice: (json['sale_price'] as num?)?.toDouble() ?? 0,
|
||||
totalPrice: (json['total_price'] as num).toDouble(),
|
||||
returnedQuantity: (json['returned_quantity'] as num?)?.toDouble() ?? 0,
|
||||
productName: lineOrProduct('product_name', 'name'),
|
||||
productCode: lineOrProduct('product_code', 'code'),
|
||||
productSeries: lineOrProduct('series', 'series'),
|
||||
productSpec: lineOrProduct('spec', 'spec'),
|
||||
productUnit:
|
||||
(json['product'] as Map<String, dynamic>?)?['unit'] as String?,
|
||||
// 批次号/生产日期:优先明细行快照,回退 product 关联(App 新建单据快照列常为空)
|
||||
batchNo: lineOrProduct('batch_no', 'batch_no'),
|
||||
productionDate: lineOrProduct('production_date', 'production_date'),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -116,19 +116,23 @@ class StockOutOrder {
|
||||
orderNo: json['order_no'] as String,
|
||||
type: json['type'] as String?,
|
||||
warehouseId: (json['warehouse_id'] as num).toInt(),
|
||||
warehouseName: (json['warehouse'] as Map<String, dynamic>?)?['name'] as String?,
|
||||
warehouseName:
|
||||
(json['warehouse'] as Map<String, dynamic>?)?['name'] as String?,
|
||||
partnerId: json['partner_id'] != null
|
||||
? (json['partner_id'] as num).toInt()
|
||||
: null,
|
||||
partnerName: (json['partner'] as Map<String, dynamic>?)?['name'] as String?,
|
||||
partnerName:
|
||||
(json['partner'] as Map<String, dynamic>?)?['name'] as String?,
|
||||
operatorId: json['operator_id'] != null
|
||||
? (json['operator_id'] as num).toInt()
|
||||
: null,
|
||||
operatorName: (json['operator'] as Map<String, dynamic>?)?['real_name'] as String?,
|
||||
operatorName: (json['operator'] as Map<String, dynamic>?)?['real_name']
|
||||
as String?,
|
||||
reviewerId: json['reviewer_id'] != null
|
||||
? (json['reviewer_id'] as num).toInt()
|
||||
: null,
|
||||
reviewerName: (json['reviewer'] as Map<String, dynamic>?)?['real_name'] as String?,
|
||||
reviewerName: (json['reviewer'] as Map<String, dynamic>?)?['real_name']
|
||||
as String?,
|
||||
status: json['status'] as String,
|
||||
returnState: json['return_state'] as String? ?? 'none',
|
||||
orderDate: json['order_date'] as String?,
|
||||
@@ -140,8 +144,7 @@ class StockOutOrder {
|
||||
remark: json['remark'] as String?,
|
||||
items: json['items'] != null
|
||||
? (json['items'] as List)
|
||||
.map((e) =>
|
||||
StockOutItem.fromJson(e as Map<String, dynamic>))
|
||||
.map((e) => StockOutItem.fromJson(e as Map<String, dynamic>))
|
||||
.toList()
|
||||
: [],
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user