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:
 255→    // 保持两位数格式
 256→    return nextNum < 10 ? `0${nextNum}` : String(nextNum);
 257→  };
 258→
 259→  // 选择产品建议
 260→  const selectProductSuggestion = async (suggestion: ProductSuggestion) => {
 261→    // 获取该产品的纱线配比
 262→    const ratios = productRatios[suggestion.id] || [];
 263→
 264→    // 提取产品码前缀并生成新的产品码
 265→    let newFabricCode = '';
 266→    const match = suggestion.fabric_code.match(/^(.*?)(\d+)$/);
 267→    if (match && companyId) {
 268→      const prefix = match[1];
 269→      newFabricCode = await generateNextFabricCode(companyId, prefix);
 270→    } else {
 271→      newFabricCode = suggestion.fabric_code;
 272→    }
 273→
 274→    setFormData(prev => ({
 275→      ...prev,
 276→      product_name: suggestion.product_name,
 277→      // 自动填写克重
 278→      total_weight: suggestion.total_weight ? String(suggestion.total_weight) : '',
 279→      warp_weight: suggestion.warp_weight ? String(suggestion.warp_weight) : '',
 280→      weft_weight: suggestion.weft_weight ? String(suggestion.weft_weight) : '',
 281→      // 颜色需要用户自己输入，不自动填写
 282→      color: '',
 283→      // 产品码自动生成（基于数据库最大值+1）
 284→      fabric_code: newFabricCode,
 285→      // 色号自动生成（递增）
 286→      color_code: generateNextColorCode(suggestion.color_code),
 287→      // 自动填写生产采购价
 288→      production_price: suggestion.production_price ? String(suggestion.production_price) : '',
 289→      // 自动填写纱线配比
 290→      yarn_ratios: ratios.length > 0
 291→        ? ratios.map(r => ({ yarn_name: r.yarn_name, ratio: r.ratio, yarn_type: (r.yarn_type as 'warp' | 'weft' | 'all') || 'all' }))
 292→        : [{ yarn_name: '', ratio: 100, yarn_type: 'all' }],
 293→      image_url: suggestion.image_url || undefined
 294→    }));
 295→
 296→    if (suggestion.image_url) {
 297→      setPreviewUrl(suggestion.image_url);
 298→    }
 299→
 300→    setShowProductSuggestions(false);
 301→
 302→    // 加载该产品的克重建议
 303→    searchWeights(suggestion.product_name);
 304→  };
 305→
 306→  // 处理总克重输入
 307→  const handleTotalWeightChange = (value: string) => {
 308→    setFormData(prev => ({ ...prev, total_weight: value }));
 309→