diff --git a/src/pages/purchaser/NewPlan.tsx b/src/pages/purchaser/NewPlan.tsx index c76b18e..08b46a1 100644 --- a/src/pages/purchaser/NewPlan.tsx +++ b/src/pages/purchaser/NewPlan.tsx @@ -2,7 +2,6 @@ import React, { useState, useEffect, useMemo } from 'react'; import { useNavigate } from 'react-router-dom'; import { useAuth } from '../../contexts/AuthContext'; import { purchaserApi } from '../../api'; -import { http } from '../../api'; import { ArrowLeft, Plus, Trash2, Search, X, ChevronDown } from 'lucide-react'; import { motion, AnimatePresence } from 'framer-motion'; import { useErrorHandler } from '../../hooks/useErrorHandler'; @@ -88,29 +87,30 @@ export function NewPlan() { if (!auth.company) return; setLoading(true); - const res = await purchaserApi.listProducts(); - const prodData = res.data; + try { + const res = await purchaserApi.listProducts(); + const prodData = res.data || []; - if (prodData) { setProducts(prodData as Product[]); - const productIds = prodData.map(p => p.id); - if (productIds.length > 0) { - const ratiosRes = await http.get('/purchaser/products/yarn-ratios', { - product_ids: productIds.join(',') - }); - - if (ratiosRes.data) { - const ratiosMap: Record = {}; - ratiosRes.data.forEach((r: any) => { - if (!ratiosMap[r.product_id]) ratiosMap[r.product_id] = []; - ratiosMap[r.product_id].push(r as ProductYarnRatio); - }); - setProductRatios(ratiosMap); + const ratiosMap: Record = {}; + prodData.forEach((p: any) => { + if (p.yarn_ratios && Array.isArray(p.yarn_ratios)) { + ratiosMap[p.id] = p.yarn_ratios.map((r: any, i: number) => ({ + id: `${p.id}-${i}`, + product_id: p.id, + yarn_name: r.yarn_name, + ratio: r.ratio, + yarn_type: r.yarn_type, + })); } - } + }); + setProductRatios(ratiosMap); + } catch (err) { + handleError(err, { userMessage: '加载产品列表失败' }); + } finally { + setLoading(false); } - setLoading(false); }; const fetchFactories = async () => {