Files
jiu/client/lib/models/product_option.dart
T
wangjia 22f07ed805 feat(client): 入库表单关联商品属性字典(产地/保质期/储存方式/描述文档)
- product_option.dart: 新增 4 个字典 model(Origin/ShelfLife/Storage/DescriptionDoc)
- product_option_repository.dart: 新增 4 个 list 方法(listOrigins/ShelfLives/Storages/DescriptionDocs)
- product_option_provider.dart: 新增 4 个 FutureProvider 供表单使用
- product_repository.dart: findOrCreate 加 originId/shelfLifeId/storageId/descriptionDocId 可选参数
- stock_in_form_screen.dart: _ItemRow 加 4 个可选 ID 字段;新增 4 个 SearchableOptionField 方法;移动端卡片视图增加 4 个可选字段;提交时传入属性 ID

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 07:03:07 +08:00

161 lines
3.8 KiB
Dart

class ProductNameOption {
final int id;
final String? code;
final String name;
final String? remark;
const ProductNameOption({
required this.id,
this.code,
required this.name,
this.remark,
});
factory ProductNameOption.fromJson(Map<String, dynamic> json) =>
ProductNameOption(
id: (json['id'] as num).toInt(),
code: json['code'] as String?,
name: json['name'] as String,
remark: json['remark'] as String?,
);
}
class ProductSeriesOption {
final int id;
final String? code;
final String name;
final String? remark;
const ProductSeriesOption({
required this.id,
this.code,
required this.name,
this.remark,
});
factory ProductSeriesOption.fromJson(Map<String, dynamic> json) =>
ProductSeriesOption(
id: (json['id'] as num).toInt(),
code: json['code'] as String?,
name: json['name'] as String,
remark: json['remark'] as String?,
);
}
class ProductSpecOption {
final int id;
final String? code;
final String name;
final int quantity;
final String? remark;
const ProductSpecOption({
required this.id,
this.code,
required this.name,
this.quantity = 0,
this.remark,
});
factory ProductSpecOption.fromJson(Map<String, dynamic> json) =>
ProductSpecOption(
id: (json['id'] as num).toInt(),
code: json['code'] as String?,
name: json['name'] as String,
quantity: (json['quantity'] as num?)?.toInt() ?? 0,
remark: json['remark'] as String?,
);
}
// ── 商品属性字典(产地/保质期/储存方式) ─────────────────────────
class ProductOriginOption {
final int id;
final String? code;
final String name;
final String? remark;
const ProductOriginOption({
required this.id,
this.code,
required this.name,
this.remark,
});
factory ProductOriginOption.fromJson(Map<String, dynamic> json) =>
ProductOriginOption(
id: (json['id'] as num).toInt(),
code: json['code'] as String?,
name: json['name'] as String,
remark: json['remark'] as String?,
);
}
class ProductShelfLifeOption {
final int id;
final String? code;
final String name;
final String? remark;
const ProductShelfLifeOption({
required this.id,
this.code,
required this.name,
this.remark,
});
factory ProductShelfLifeOption.fromJson(Map<String, dynamic> json) =>
ProductShelfLifeOption(
id: (json['id'] as num).toInt(),
code: json['code'] as String?,
name: json['name'] as String,
remark: json['remark'] as String?,
);
}
class ProductStorageOption {
final int id;
final String? code;
final String name;
final String? remark;
const ProductStorageOption({
required this.id,
this.code,
required this.name,
this.remark,
});
factory ProductStorageOption.fromJson(Map<String, dynamic> json) =>
ProductStorageOption(
id: (json['id'] as num).toInt(),
code: json['code'] as String?,
name: json['name'] as String,
remark: json['remark'] as String?,
);
}
// ── 描述文档 ─────────────────────────────────────────────────────
class ProductDescriptionDoc {
final int id;
final String title;
final String? content;
final String? remark;
const ProductDescriptionDoc({
required this.id,
required this.title,
this.content,
this.remark,
});
factory ProductDescriptionDoc.fromJson(Map<String, dynamic> json) =>
ProductDescriptionDoc(
id: (json['id'] as num).toInt(),
title: json['title'] as String,
content: json['content'] as String?,
remark: json['remark'] as String?,
);
}