The file /home/project/src/components/warehouse/ProductForm.tsx has been updated. Made 1 replacement. Here's the result of running `cat -n` on a snippet of the edited file: 287→ return '01'; 288→ } 289→ }; 290→ 291→ // 选择产品建议 292→ const selectProductSuggestion = async (suggestion: ProductSuggestion) => { 293→ // 获取该产品的纱线配比 294→ const ratios = productRatios[suggestion.id] || []; 295→ 296→ // 提取产品码前缀并生成新的产品码 297→ let newFabricCode = ''; 298→ const fabricMatch = suggestion.fabric_code.match(/^(.*?)(\d+)$/); 299→ if (fabricMatch && companyId) { 300→ const prefix = fabricMatch[1]; 301→ newFabricCode = await generateNextFabricCode(companyId, prefix); 302→ } else { 303→ newFabricCode = suggestion.fabric_code; 304→ } 305→ 306→ // 生成色号(基于该产品名称-克重-颜色组合的最大值+1) 307→ // 注意:颜色字段为空,因为用户需要手动输入新颜色 308→ // 这里先使用建议产品的颜色来查询色号,实际保存时会用用户输入的颜色 309→ let newColorCode = '01'; 310→ if (companyId) { 311→ newColorCode = await generateNextColorCode( 312→ companyId, 313→ suggestion.product_name, 314→ suggestion.total_weight, 315→ suggestion.color 316→ ); 317→ } 318→ 319→ setFormData(prev => ({ 320→ ...prev, 321→ product_name: suggestion.product_name, 322→ // 自动填写克重 323→ total_weight: suggestion.total_weight ? String(suggestion.total_weight) : '', 324→ warp_weight: suggestion.warp_weight ? String(suggestion.warp_weight) : '', 325→ weft_weight: suggestion.weft_weight ? String(suggestion.weft_weight) : '', 326→ // 颜色需要用户自己输入,不自动填写 327→ color: '', 328→ // 产品码自动生成(基于数据库最大值+1) 329→ fabric_code: newFabricCode, 330→ // 色号自动生成(基于该产品名称-克重-颜色组合的最大值+1) 331→ color_code: newColorCode, 332→ // 自动填写生产采购价 333→ production_price: suggestion.production_price ? String(suggestion.production_price) : '', 334→ // 自动填写纱线配比 335→ yarn_ratios: ratios.length > 0 336→ ? ratios.map(r => ({ yarn_name: r.yarn_name, ratio: r.ratio, yarn_type: (r.yarn_type as 'warp' | 'weft' | 'all') || 'all' })) 337→ : [{ yarn_name: '', ratio: 100, yarn_type: 'all' }], 338→ image_url: suggestion.image_url || undefined 339→ })); 340→ 341→ if (suggestion.image_url) { 342→ setPreviewUrl(suggestion.image_url); 343→ } 344→ 345→ setShowProductSuggestions(false); 346→ 347→ // 加载该产品的克重建议 348→ searchWeights(suggestion.product_name); 349→ }; 350→ 351→ // 处理总克重输入 352→ const handleTotalWeightChange = (value: string) => { 353→ setFormData(prev => ({ ...prev, total_weight: value })); 354→