fix campaning
This commit is contained in:
parent
a637020af6
commit
3bd7a22465
@ -1,7 +1,6 @@
|
||||
import React from 'react';
|
||||
import Modal from './Modal';
|
||||
import styles from '../styles/CampaignModal.module.css';
|
||||
import MultiSelect from '../components/MultiSelect';
|
||||
|
||||
export default function CreateCampaignModal({ isOpen, onClose, campaign, groups, versions, smtpServers, loading, onChange, onSave, getVersionName }) {
|
||||
return (
|
||||
@ -9,14 +8,16 @@ export default function CreateCampaignModal({ isOpen, onClose, campaign, groups,
|
||||
<h3 className={styles.title}>Добавить кампанию</h3>
|
||||
<form onSubmit={onSave} className={styles.form}>
|
||||
<label className={styles.label}>Группа
|
||||
<select value={campaign.group_id} onChange={e => onChange({ ...campaign, group_id: Number(e.target.value) })} required className={styles.input}>
|
||||
<select value={campaign.group_id || ''} onChange={e => onChange({ ...campaign, group_id: e.target.value ? Number(e.target.value) : null })} required className={styles.input}>
|
||||
<option value="">Выберите группу</option>
|
||||
{groups.map(g => (
|
||||
<option key={g.id} value={g.id}>{g.name}</option>
|
||||
))}
|
||||
</select>
|
||||
</label>
|
||||
<label className={styles.label}>Версия шаблона
|
||||
<select value={campaign.template_version_id} onChange={e => onChange({ ...campaign, template_version_id: Number(e.target.value) })} required className={styles.input}>
|
||||
<select value={campaign.template_version_id || ''} onChange={e => onChange({ ...campaign, template_version_id: e.target.value ? Number(e.target.value) : null })} required className={styles.input}>
|
||||
<option value="">Выберите версию шаблона</option>
|
||||
{versions.map(v => (
|
||||
<option key={v.id} value={v.id}>{getVersionName(v.id)}</option>
|
||||
))}
|
||||
@ -25,14 +26,13 @@ export default function CreateCampaignModal({ isOpen, onClose, campaign, groups,
|
||||
<label className={styles.label}>Тема
|
||||
<input type="text" value={campaign.subject_override || ''} onChange={e => onChange({ ...campaign, subject_override: e.target.value })} className={styles.input} />
|
||||
</label>
|
||||
<label className={styles.label}>SMTP-серверы
|
||||
<MultiSelect
|
||||
options={smtpServers.map(s => ({ value: s.id, label: `${s.name} (${s.host})` }))}
|
||||
value={campaign.smtp_server_ids || []}
|
||||
onChange={ids => onChange({ ...campaign, smtp_server_ids: ids })}
|
||||
placeholder="Выберите SMTP-серверы"
|
||||
disabled={loading}
|
||||
/>
|
||||
<label className={styles.label}>SMTP-сервер
|
||||
<select value={campaign.smtp_server_id || ''} onChange={e => onChange({ ...campaign, smtp_server_id: e.target.value ? Number(e.target.value) : null })} required className={styles.input}>
|
||||
<option value="">Выберите SMTP-сервер</option>
|
||||
{smtpServers.map(s => (
|
||||
<option key={s.id} value={s.id}>{s.name} ({s.host})</option>
|
||||
))}
|
||||
</select>
|
||||
</label>
|
||||
<label className={styles.label}>Статус
|
||||
<select value={campaign.status} onChange={e => onChange({ ...campaign, status: e.target.value })} required className={styles.input}>
|
||||
@ -43,7 +43,7 @@ export default function CreateCampaignModal({ isOpen, onClose, campaign, groups,
|
||||
</select>
|
||||
</label>
|
||||
<label className={styles.label}>Запланировано на
|
||||
<input type="datetime-local" value={campaign.scheduled_at} onChange={e => onChange({ ...campaign, scheduled_at: e.target.value })} className={styles.input} />
|
||||
<input type="datetime-local" value={campaign.scheduled_at || ''} onChange={e => onChange({ ...campaign, scheduled_at: e.target.value })} className={styles.input} />
|
||||
</label>
|
||||
<div className={styles.actions}>
|
||||
<button type="submit" disabled={loading} className={styles.saveBtn}>{loading ? 'Создание...' : 'Создать'}</button>
|
||||
|
||||
@ -1,22 +1,41 @@
|
||||
import React from 'react';
|
||||
import Modal from './Modal';
|
||||
import styles from '../styles/CampaignModal.module.css';
|
||||
import MultiSelect from '../components/MultiSelect';
|
||||
|
||||
export default function EditCampaignModal({ isOpen, onClose, campaign, groups, versions, smtpServers, loading, onChange, onSave, getVersionName }) {
|
||||
// Получаем ID сервера из различных возможных форматов данных
|
||||
const getSmtpServerId = () => {
|
||||
// Проверяем различные возможные форматы
|
||||
if (campaign.smtp_server_id) {
|
||||
return campaign.smtp_server_id;
|
||||
}
|
||||
if (campaign.smtp_server_ids && campaign.smtp_server_ids.length > 0) {
|
||||
return campaign.smtp_server_ids[0];
|
||||
}
|
||||
if (campaign.CampaignSmtpServer && campaign.CampaignSmtpServer.smtp_server_id) {
|
||||
return campaign.CampaignSmtpServer.smtp_server_id;
|
||||
}
|
||||
if (campaign.SmtpServers && campaign.SmtpServers.length > 0) {
|
||||
return campaign.SmtpServers[0].id;
|
||||
}
|
||||
return '';
|
||||
};
|
||||
|
||||
return (
|
||||
<Modal isOpen={isOpen} onClose={onClose} disabled={loading}>
|
||||
<h3 className={styles.title}>Редактировать кампанию</h3>
|
||||
<form onSubmit={onSave} className={styles.form}>
|
||||
<label className={styles.label}>Группа
|
||||
<select value={campaign.group_id} onChange={e => onChange({ ...campaign, group_id: Number(e.target.value) })} required className={styles.input}>
|
||||
<select value={campaign.group_id || ''} onChange={e => onChange({ ...campaign, group_id: e.target.value ? Number(e.target.value) : null })} required className={styles.input}>
|
||||
<option value="">Выберите группу</option>
|
||||
{groups.map(g => (
|
||||
<option key={g.id} value={g.id}>{g.name}</option>
|
||||
))}
|
||||
</select>
|
||||
</label>
|
||||
<label className={styles.label}>Версия шаблона
|
||||
<select value={campaign.template_version_id} onChange={e => onChange({ ...campaign, template_version_id: Number(e.target.value) })} required className={styles.input}>
|
||||
<select value={campaign.template_version_id || ''} onChange={e => onChange({ ...campaign, template_version_id: e.target.value ? Number(e.target.value) : null })} required className={styles.input}>
|
||||
<option value="">Выберите версию шаблона</option>
|
||||
{versions.map(v => (
|
||||
<option key={v.id} value={v.id}>{getVersionName(v.id)}</option>
|
||||
))}
|
||||
@ -25,14 +44,13 @@ export default function EditCampaignModal({ isOpen, onClose, campaign, groups, v
|
||||
<label className={styles.label}>Тема
|
||||
<input type="text" value={campaign.subject_override || ''} onChange={e => onChange({ ...campaign, subject_override: e.target.value })} className={styles.input} />
|
||||
</label>
|
||||
<label className={styles.label}>SMTP-серверы
|
||||
<MultiSelect
|
||||
options={smtpServers.map(s => ({ value: s.id, label: `${s.name} (${s.host})` }))}
|
||||
value={campaign.smtp_server_ids || []}
|
||||
onChange={ids => onChange({ ...campaign, smtp_server_ids: ids })}
|
||||
placeholder="Выберите SMTP-серверы"
|
||||
disabled={loading}
|
||||
/>
|
||||
<label className={styles.label}>SMTP-сервер
|
||||
<select value={getSmtpServerId()} onChange={e => onChange({ ...campaign, smtp_server_id: e.target.value ? Number(e.target.value) : null })} required className={styles.input}>
|
||||
<option value="">Выберите SMTP-сервер</option>
|
||||
{smtpServers.map(s => (
|
||||
<option key={s.id} value={s.id}>{s.name} ({s.host})</option>
|
||||
))}
|
||||
</select>
|
||||
</label>
|
||||
<label className={styles.label}>Статус
|
||||
<select value={campaign.status} onChange={e => onChange({ ...campaign, status: e.target.value })} required className={styles.input}>
|
||||
|
||||
@ -8,7 +8,7 @@ import styles from '../styles/Common.module.css';
|
||||
const PAGE_SIZE = 10;
|
||||
|
||||
function CampaignPage() {
|
||||
const { token } = useUser();
|
||||
const { token, user } = useUser();
|
||||
const [campaigns, setCampaigns] = useState([]);
|
||||
const [total, setTotal] = useState(0);
|
||||
const [page, setPage] = useState(1);
|
||||
@ -167,7 +167,15 @@ function CampaignPage() {
|
||||
};
|
||||
|
||||
const handleCreate = () => {
|
||||
setCreateCampaign({ group_id: '', template_version_id: '', subject_override: '', status: 'draft', scheduled_at: '' });
|
||||
setCreateCampaign({
|
||||
group_id: null,
|
||||
template_version_id: null,
|
||||
subject_override: '',
|
||||
status: 'draft',
|
||||
scheduled_at: '',
|
||||
smtp_server_id: null,
|
||||
user_id: user?.id // Добавляем user_id
|
||||
});
|
||||
};
|
||||
|
||||
const handleCreateSave = async (e) => {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user