22f07ed805
- 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>
161 lines
3.8 KiB
Dart
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?,
|
|
);
|
|
}
|