import { useState } from 'react'; import { Col, Divider, Input, Row, Tag, Typography } from 'antd'; import { ProductDetail } from '@/services/product'; import CopyPanel from './CopyPanel'; const { Text } = Typography; interface Props { product: ProductDetail; onSave: (p: Partial) => Promise | void; } /** 产品属性:采集参数只读展示 / 条形码 / 品牌 / 简介 / AI 文案 */ export default function ProductAttributesPanel({ product, onSave }: Props) { const raw = (product.raw ?? {}) as Record; const params = raw.params as Array<{ key: string; value: string }> | undefined; const [descExpanded, setDescExpanded] = useState(false); const updateRaw = (patch: Record) => { onSave({ raw: { ...raw, ...patch } }); }; const sellingPoints = typeof raw.sellingPoints === 'string' ? raw.sellingPoints : ''; const desc = typeof raw.desc === 'string' ? raw.desc : ''; return (
{/* 基础字段:品牌 + 条形码 */} 品牌(Brand) updateRaw({ brand: e.target.value })} placeholder="采集到的品牌名" /> 条形码(Barcode) onSave({ barcode: e.target.value })} placeholder="EAN / UPC / 留空" /> 主题标签(内部备注) updateRaw({ tags: e.target.value })} placeholder="逗号分隔,内部用" /> {/* 俄文简介(来自 AI 生成或手动) */}
俄文简介(description) onSave({ description: e.target.value })} placeholder="Описание товара на русском — можно сгенерировать через AI ниже" />
{/* 采集参数展示(只读,参考用) */} {Array.isArray(params) && params.length > 0 && (
采集参数({params.length} 项,只读参考) {params.length > 8 && ( setDescExpanded(!descExpanded)}> {descExpanded ? '收起' : `展开全部 ${params.length} 项`} )}
{(descExpanded ? params : params.slice(0, 8)).map((p, i) => (
{p.key} {p.value}
))}
{!descExpanded && params.length > 8 && ( 还有 {params.length - 8} 项未显示 )}
)} {/* 采集卖点 / 描述(只读参考) */} {(sellingPoints || desc) && (
{sellingPoints && ( <> 采集卖点(参考) {sellingPoints} )} {desc && ( <> 采集描述(参考) {desc.slice(0, 300)} {desc.length > 300 && '…'} )}
)}
); }