feat: Интеграция создания черновика заявки в Step2EventType
- ✅ Вызов n8n webhook после выбора типа события - ✅ Формирование title из event_type + voucher - ✅ Передача всех данных: claim_id, contact_id, project_id, event_type - ✅ Сохранение ticket_id и ticket_number в formData - ✅ Loading состояние кнопки - ✅ Debug события для отслеживания
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { Form, Select, Button, Card, Alert } from 'antd';
|
||||
import { Form, Select, Button, Card, Alert, message } from 'antd';
|
||||
import { ThunderboltOutlined } from '@ant-design/icons';
|
||||
import { useState } from 'react';
|
||||
|
||||
@@ -9,6 +9,7 @@ interface Props {
|
||||
updateFormData: (data: any) => void;
|
||||
onNext: () => void;
|
||||
onPrev: () => void;
|
||||
addDebugEvent?: (type: string, status: string, message: string, data?: any) => void;
|
||||
}
|
||||
|
||||
// Типы страховых случаев
|
||||
@@ -22,15 +23,61 @@ const EVENT_TYPES = [
|
||||
{ value: 'delay_ferry', label: 'Задержка/отмена парома/круиза', icon: '⛴️' },
|
||||
];
|
||||
|
||||
const Step2EventType: React.FC<Props> = ({ formData, updateFormData, onNext, onPrev }) => {
|
||||
const Step2EventType: React.FC<Props> = ({ formData, updateFormData, onNext, onPrev, addDebugEvent }) => {
|
||||
const [form] = Form.useForm();
|
||||
const [selectedEventType, setSelectedEventType] = useState<string | undefined>(formData.eventType);
|
||||
const [loading, setLoading] = useState(false);
|
||||
|
||||
const handleSubmit = () => {
|
||||
form.validateFields().then(values => {
|
||||
updateFormData({ eventType: values.eventType });
|
||||
onNext();
|
||||
});
|
||||
const handleSubmit = async () => {
|
||||
try {
|
||||
const values = await form.validateFields();
|
||||
setLoading(true);
|
||||
|
||||
addDebugEvent?.('claim', 'pending', `📝 Создаю черновик заявки для типа: ${values.eventType}`);
|
||||
|
||||
// Формируем title из типа события и номера полиса
|
||||
const eventLabel = EVENT_TYPES.find(e => e.value === values.eventType)?.label || values.eventType;
|
||||
const title = `${eventLabel} - ${formData.voucher || 'полис не указан'}`;
|
||||
|
||||
// Вызываем n8n webhook для создания черновика заявки
|
||||
const response = await fetch('https://n8n.clientright.pro/webhook/d5bf4ca6-9e44-44b9-9714-3186ea703e7d', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({
|
||||
claim_id: formData.claim_id,
|
||||
contact_id: formData.contact_id,
|
||||
project_id: formData.project_id,
|
||||
event_type: values.eventType,
|
||||
title: title,
|
||||
voucher: formData.voucher,
|
||||
session_id: formData.session_id
|
||||
})
|
||||
});
|
||||
|
||||
const result = await response.json();
|
||||
|
||||
if (response.ok && result.success) {
|
||||
addDebugEvent?.('claim', 'success', `✅ Черновик заявки создан`, result);
|
||||
|
||||
// Сохраняем данные заявки
|
||||
updateFormData({
|
||||
eventType: values.eventType,
|
||||
ticket_id: result.result?.ticket_id,
|
||||
ticket_number: result.result?.ticket_number
|
||||
});
|
||||
|
||||
message.success(`Черновик заявки создан: ${result.result?.ticket_number || 'N/A'}`);
|
||||
onNext();
|
||||
} else {
|
||||
addDebugEvent?.('claim', 'error', `❌ Ошибка создания черновика`, result);
|
||||
message.error('Ошибка создания черновика заявки');
|
||||
}
|
||||
} catch (error: any) {
|
||||
addDebugEvent?.('claim', 'error', `❌ Ошибка соединения`, { error: error.message });
|
||||
message.error('Ошибка соединения с сервером');
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
};
|
||||
|
||||
const selectedEvent = EVENT_TYPES.find(e => e.value === selectedEventType);
|
||||
@@ -86,11 +133,11 @@ const Step2EventType: React.FC<Props> = ({ formData, updateFormData, onNext, onP
|
||||
)}
|
||||
|
||||
<div style={{ display: 'flex', gap: 12 }}>
|
||||
<Button onClick={onPrev} size="large">
|
||||
<Button onClick={onPrev} size="large" disabled={loading}>
|
||||
← Назад
|
||||
</Button>
|
||||
<Button type="primary" htmlType="submit" size="large" style={{ flex: 1 }}>
|
||||
Далее: Загрузка документов →
|
||||
<Button type="primary" htmlType="submit" size="large" style={{ flex: 1 }} loading={loading}>
|
||||
{loading ? 'Создаю черновик заявки...' : 'Далее: Загрузка документов →'}
|
||||
</Button>
|
||||
</div>
|
||||
</Form>
|
||||
|
||||
@@ -193,7 +193,7 @@ export default function ClaimForm() {
|
||||
),
|
||||
});
|
||||
|
||||
// Шаг 2: Event Type Selection (всегда)
|
||||
// Шаг 3: Event Type Selection (всегда)
|
||||
stepsArray.push({
|
||||
title: 'Тип события',
|
||||
description: 'Выбор случая',
|
||||
@@ -203,6 +203,7 @@ export default function ClaimForm() {
|
||||
updateFormData={updateFormData}
|
||||
onNext={nextStep}
|
||||
onPrev={prevStep}
|
||||
addDebugEvent={addDebugEvent}
|
||||
/>
|
||||
),
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user