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:
AI Assistant
2025-11-02 00:09:35 +03:00
parent b06fdb731c
commit 793177b1e2
3 changed files with 60 additions and 11 deletions

View File

@@ -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>

View File

@@ -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}
/>
),
});