- Исправлены TypeScript ошибки в Step3Payment.tsx (типизация, неиспользуемые импорты) - Добавлены недостающие зависимости: aiomysql, pymysql, python-multipart - Обновлен requirements.txt с актуальными версиями - Добавлены новые API endpoints: policy check, file upload - Добавлен policy_service для работы с MySQL - Все сервисы успешно запущены и работают - Обновлен SESSION_LOG с документацией процесса
101 lines
3.3 KiB
TypeScript
101 lines
3.3 KiB
TypeScript
import { Form, Button, Select, message } from 'antd';
|
||
import { QrcodeOutlined } from '@ant-design/icons';
|
||
import { useState } from 'react';
|
||
|
||
const { Option } = Select;
|
||
|
||
interface Props {
|
||
formData: any;
|
||
updateFormData: (data: any) => void;
|
||
onPrev: () => void;
|
||
onSubmit: () => void;
|
||
}
|
||
|
||
export default function Step3Payment({ formData, updateFormData, onPrev, onSubmit }: Props) {
|
||
const [form] = Form.useForm();
|
||
const [submitting, setSubmitting] = useState(false);
|
||
|
||
const handleSubmit = async () => {
|
||
try {
|
||
const values = await form.validateFields();
|
||
updateFormData(values);
|
||
|
||
setSubmitting(true);
|
||
await onSubmit();
|
||
} catch (error) {
|
||
message.error('Заполните все обязательные поля');
|
||
} finally {
|
||
setSubmitting(false);
|
||
}
|
||
};
|
||
|
||
return (
|
||
<Form
|
||
form={form}
|
||
layout="vertical"
|
||
initialValues={formData}
|
||
style={{ marginTop: 24 }}
|
||
>
|
||
<Form.Item
|
||
label="Способ выплаты"
|
||
name="paymentMethod"
|
||
initialValue="sbp"
|
||
>
|
||
<div style={{ padding: '12px', background: '#f0f9ff', borderRadius: '8px', border: '1px solid #91d5ff' }}>
|
||
<QrcodeOutlined style={{ fontSize: 20, color: '#1890ff', marginRight: 8 }} />
|
||
<strong>СБП (Система быстрых платежей)</strong>
|
||
<p style={{ margin: '8px 0 0 0', color: '#666', fontSize: 13 }}>
|
||
Выплата поступит на ваш счет в течение нескольких минут
|
||
</p>
|
||
</div>
|
||
</Form.Item>
|
||
|
||
<Form.Item
|
||
label="Выберите ваш банк"
|
||
name="bankName"
|
||
rules={[{ required: true, message: 'Выберите банк для получения выплаты' }]}
|
||
>
|
||
<Select
|
||
placeholder="Выберите банк"
|
||
size="large"
|
||
showSearch
|
||
filterOption={(input: string, option: any) => {
|
||
const children = option?.children;
|
||
if (typeof children === 'string') {
|
||
return children.toLowerCase().includes(input.toLowerCase());
|
||
}
|
||
return false;
|
||
}}
|
||
>
|
||
<Option value="sberbank">🟢 Сбербанк</Option>
|
||
<Option value="tinkoff">🟡 Тинькофф</Option>
|
||
<Option value="vtb">🔵 ВТБ</Option>
|
||
<Option value="alfabank">🔴 Альфа-Банк</Option>
|
||
<Option value="raiffeisen">🟡 Райффайзенбанк</Option>
|
||
<Option value="gazprombank">🔵 Газпромбанк</Option>
|
||
<Option value="rosbank">🔴 Росбанк</Option>
|
||
<Option value="sovcombank">🟢 Совкомбанк</Option>
|
||
<Option value="otkritie">🔵 Открытие</Option>
|
||
<Option value="other">💳 Другой банк</Option>
|
||
</Select>
|
||
</Form.Item>
|
||
|
||
<Form.Item>
|
||
<div style={{ display: 'flex', gap: 8, marginTop: 32 }}>
|
||
<Button onClick={onPrev}>Назад</Button>
|
||
<Button
|
||
type="primary"
|
||
onClick={handleSubmit}
|
||
loading={submitting}
|
||
style={{ flex: 1 }}
|
||
size="large"
|
||
>
|
||
Отправить заявку
|
||
</Button>
|
||
</div>
|
||
</Form.Item>
|
||
</Form>
|
||
);
|
||
}
|
||
|