This commit is contained in:
Ivan Neplokhov 2026-02-03 13:54:28 +04:00
parent 27bac2ef1b
commit 37410dff97

View File

@ -28,6 +28,7 @@ function AccountsTab({
moveAccountToTask moveAccountToTask
}) { }) {
const [membershipModal, setMembershipModal] = useState(null); const [membershipModal, setMembershipModal] = useState(null);
const [usageModal, setUsageModal] = useState(null);
const openMembershipModal = (title, lines) => { const openMembershipModal = (title, lines) => {
setMembershipModal({ title, lines }); setMembershipModal({ title, lines });
@ -36,6 +37,9 @@ function AccountsTab({
const closeMembershipModal = () => { const closeMembershipModal = () => {
setMembershipModal(null); setMembershipModal(null);
}; };
const closeUsageModal = () => {
setUsageModal(null);
};
const buildAccountLabel = (account) => `${account.username ? `@${account.username}` : "—"} (${account.user_id || "—"})`; const buildAccountLabel = (account) => `${account.username ? `@${account.username}` : "—"} (${account.user_id || "—"})`;
@ -336,10 +340,32 @@ function AccountsTab({
<div className="account-header"> <div className="account-header">
<div> <div>
<div className="account-phone">{formatAccountLabel(account)}</div> <div className="account-phone">{formatAccountLabel(account)}</div>
<div className={`status ${account.status}`}>{formatAccountStatus(account.status)}</div> <div className={`status ${account.status}`}>{formatAccountStatus(account.status)}</div>
<div className="account-status-pill busy">Занят</div> <div className="account-status-pill busy">
</div> Занят
<button
type="button"
className="ghost tiny"
onClick={() => setUsageModal({
title: `Занятость аккаунта — ${formatAccountLabel(account)}`,
lines: assignedTasks.length
? assignedTasks.map((item) => {
const name = accountBuckets.taskNameMap.get(item.taskId) || `Задача #${item.taskId}`;
const roles = [
item.roleMonitor ? "Мониторинг" : null,
item.roleInvite ? "Инвайт" : null,
item.roleConfirm ? "Подтверждение" : null
].filter(Boolean).join(", ");
return `${name}${roles ? `${roles}` : ""}`;
})
: ["Не найдено активных назначений."]
})}
>
Где занят
</button>
</div> </div>
</div>
</div>
<div className="role-badges"> <div className="role-badges">
{roles.monitor && <span className="role-pill">Мониторинг</span>} {roles.monitor && <span className="role-pill">Мониторинг</span>}
{roles.invite && <span className="role-pill">Инвайт</span>} {roles.invite && <span className="role-pill">Инвайт</span>}
@ -428,6 +454,25 @@ function AccountsTab({
</div> </div>
</div> </div>
)} )}
{usageModal && (
<div className="modal-overlay" onClick={closeUsageModal}>
<div className="modal" onClick={(event) => event.stopPropagation()}>
<div className="row-header">
<h3>{usageModal.title}</h3>
<button className="ghost" type="button" onClick={closeUsageModal}>Закрыть</button>
</div>
{usageModal.lines && usageModal.lines.length > 0 ? (
<div className="modal-list">
{usageModal.lines.map((line) => (
<div key={line} className="modal-list-item">{line}</div>
))}
</div>
) : (
<div className="status-text">Нет данных.</div>
)}
</div>
</div>
)}
</section> </section>
); );
} }