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