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:
@@ -547,3 +547,4 @@ Last commit: c049ed6 - "fix: Добавлены n8n webhook URLs в docker-compo
|
|||||||
**Последнее обновление:** 1 ноября 2025, 13:39 MSK
|
**Последнее обновление:** 1 ноября 2025, 13:39 MSK
|
||||||
**Автор:** Фёдор + AI Assistant (Claude Sonnet 4.5)
|
**Автор:** Фёдор + AI Assistant (Claude Sonnet 4.5)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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 { ThunderboltOutlined } from '@ant-design/icons';
|
||||||
import { useState } from 'react';
|
import { useState } from 'react';
|
||||||
|
|
||||||
@@ -9,6 +9,7 @@ interface Props {
|
|||||||
updateFormData: (data: any) => void;
|
updateFormData: (data: any) => void;
|
||||||
onNext: () => void;
|
onNext: () => void;
|
||||||
onPrev: () => 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: '⛴️' },
|
{ 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 [form] = Form.useForm();
|
||||||
const [selectedEventType, setSelectedEventType] = useState<string | undefined>(formData.eventType);
|
const [selectedEventType, setSelectedEventType] = useState<string | undefined>(formData.eventType);
|
||||||
|
const [loading, setLoading] = useState(false);
|
||||||
|
|
||||||
const handleSubmit = () => {
|
const handleSubmit = async () => {
|
||||||
form.validateFields().then(values => {
|
try {
|
||||||
updateFormData({ eventType: values.eventType });
|
const values = await form.validateFields();
|
||||||
onNext();
|
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);
|
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 }}>
|
<div style={{ display: 'flex', gap: 12 }}>
|
||||||
<Button onClick={onPrev} size="large">
|
<Button onClick={onPrev} size="large" disabled={loading}>
|
||||||
← Назад
|
← Назад
|
||||||
</Button>
|
</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>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
</Form>
|
</Form>
|
||||||
|
|||||||
@@ -193,7 +193,7 @@ export default function ClaimForm() {
|
|||||||
),
|
),
|
||||||
});
|
});
|
||||||
|
|
||||||
// Шаг 2: Event Type Selection (всегда)
|
// Шаг 3: Event Type Selection (всегда)
|
||||||
stepsArray.push({
|
stepsArray.push({
|
||||||
title: 'Тип события',
|
title: 'Тип события',
|
||||||
description: 'Выбор случая',
|
description: 'Выбор случая',
|
||||||
@@ -203,6 +203,7 @@ export default function ClaimForm() {
|
|||||||
updateFormData={updateFormData}
|
updateFormData={updateFormData}
|
||||||
onNext={nextStep}
|
onNext={nextStep}
|
||||||
onPrev={prevStep}
|
onPrev={prevStep}
|
||||||
|
addDebugEvent={addDebugEvent}
|
||||||
/>
|
/>
|
||||||
),
|
),
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user