import 'product_image.dart'; class Product { final int id; final String publicId; final String code; final String? barcode; final String name; final String? series; final String? spec; final String unit; final int? categoryId; final String? brand; final double? purchasePrice; final double? salePrice; final int? minStock; final String? description; final String? remark; final Map? customFields; final List images; // 产地/保质期/储存方式/分类名称(Detail 接口 Preload 后填充) final String? originName; final String? shelfLifeName; final String? storageName; final String? categoryName; // 描述文档(关联的字典记录) final String? descriptionDocTitle; final String? descriptionDocContent; const Product({ required this.id, this.publicId = '', required this.code, this.barcode, required this.name, this.series, this.spec, required this.unit, this.categoryId, this.brand, this.purchasePrice, this.salePrice, this.minStock, this.description, this.remark, this.customFields, this.images = const [], this.originName, this.shelfLifeName, this.storageName, this.categoryName, this.descriptionDocTitle, this.descriptionDocContent, }); factory Product.fromJson(Map json) => Product( id: (json['id'] as num).toInt(), publicId: json['public_id'] as String? ?? '', code: json['code'] as String? ?? '', barcode: json['barcode'] as String?, name: json['name'] as String, series: json['series'] as String?, spec: json['spec'] as String?, unit: json['unit'] as String? ?? '个', categoryId: json['category_id'] != null ? (json['category_id'] as num).toInt() : null, brand: json['brand'] as String?, purchasePrice: json['purchase_price'] != null ? (json['purchase_price'] as num).toDouble() : null, salePrice: json['sale_price'] != null ? (json['sale_price'] as num).toDouble() : null, minStock: json['min_stock'] != null ? (json['min_stock'] as num).toInt() : null, description: json['description'] as String?, remark: json['remark'] as String?, customFields: json['custom_fields'] as Map?, images: (json['images'] as List?) ?.map((e) => ProductImage.fromJson(e as Map)) .toList() ?? [], originName: (json['origin'] as Map?)?['name'] as String?, shelfLifeName: (json['shelf_life'] as Map?)?['name'] as String?, storageName: (json['storage'] as Map?)?['name'] as String?, categoryName: (json['category'] as Map?)?['name'] as String?, descriptionDocTitle: (json['description_doc'] as Map?)?['title'] as String?, descriptionDocContent: (json['description_doc'] as Map?)?['content'] as String?, ); Map toJson() => { 'code': code, if (barcode != null) 'barcode': barcode, 'name': name, if (series != null) 'series': series, if (spec != null) 'spec': spec, 'unit': unit, if (categoryId != null) 'category_id': categoryId, if (brand != null) 'brand': brand, if (purchasePrice != null) 'purchase_price': purchasePrice, if (salePrice != null) 'sale_price': salePrice, if (minStock != null) 'min_stock': minStock, 'description': description ?? '', if (remark != null) 'remark': remark, }; }