import { productcontrollerCreateproduct } from '@/servers/api/product'; import { templatecontrollerRendertemplate } from '@/servers/api/template'; import { ModalForm, ProFormText } from '@ant-design/pro-components'; import { App, Descriptions, Form, Tag } from 'antd'; import React, { useEffect } from 'react'; interface CreateModalProps { visible: boolean; onClose: () => void; onSuccess: () => void; category: { id: number; name: string } | null; permutation: Record; attributes: any[]; // The attribute definitions } const capitalize = (s: string) => s.charAt(0).toLocaleUpperCase() + s.slice(1); const CreateModal: React.FC = ({ visible, onClose, onSuccess, category, permutation, attributes, }) => { const { message } = App.useApp(); const [form] = Form.useForm(); // Helper to generate default name based on attributes const generateDefaultName = () => { if (!category) return ''; const parts = [category.name]; attributes.forEach((attr) => { const val = permutation[attr.name]; if (val) parts.push(val.name); }); return parts.join(' - '); }; useEffect(() => { if (visible && permutation) { const generateSku = async () => { try { // Extract values from permutation based on known keys // Keys in permutation are dict names (e.g. 'brand', 'strength') const brand = permutation['brand']?.name || ''; const strength = permutation['strength']?.name || ''; const flavor = permutation['flavor']?.name || ''; const humidity = permutation['humidity']?.name || ''; const model = permutation['model']?.name || ''; const variables = { brand, strength, flavor, model, humidity: humidity ? capitalize(humidity) : '', }; const { success, data: rendered } = await templatecontrollerRendertemplate( { name: 'product.sku' }, variables, ); if (success && rendered) { form.setFieldValue('sku', rendered); } } catch (error) { console.error('Failed to generate SKU', error); } }; generateSku(); form.setFieldValue('name', generateDefaultName()); } }, [visible, permutation, category]); return ( { if (!category) return false; // Construct attributes payload // Expected format: [{ dictName: 'Size', name: 'S' }, ...] const payloadAttributes = attributes .filter((attr) => permutation[attr.name]) .map((attr) => ({ dictName: attr.name, name: permutation[attr.name].name, })); const payload = { name: values.name, sku: values.sku, categoryId: category.id, attributes: payloadAttributes, type: 'single', // Default to single }; try { const { success, message: errMsg } = await productcontrollerCreateproduct(payload as any); if (success) { message.success('产品创建成功'); onSuccess(); return true; } else { message.error(errMsg || '创建产品失败'); return false; } } catch (error) { message.error('发生错误'); return false; } }} > {category?.name} {attributes.map((attr) => { const val = permutation[attr.name]; if (!val) return null; return ( {attr.title || attr.name}: {val.name} ); })} ); }; export default CreateModal;