diff --git a/src/renderer/styles/app.css b/src/renderer/styles/app.css
index 7863331..b96afe9 100644
--- a/src/renderer/styles/app.css
+++ b/src/renderer/styles/app.css
@@ -516,7 +516,7 @@ body {
inset: 0;
background: rgba(15, 23, 42, 0.4);
display: flex;
- align-items: center;
+ align-items: flex-start;
justify-content: center;
z-index: 20;
padding: 20px;
@@ -527,6 +527,8 @@ body {
border-radius: 16px;
padding: 24px;
width: min(640px, 100%);
+ max-height: 80vh;
+ overflow: auto;
display: flex;
flex-direction: column;
gap: 16px;
@@ -607,7 +609,7 @@ body {
.task-columns {
display: grid;
- grid-template-columns: minmax(0, 1.2fr) minmax(0, 0.8fr);
+ grid-template-columns: minmax(0, 1fr);
gap: 20px;
width: 100%;
}
diff --git a/src/renderer/tabs/LogsTab.jsx b/src/renderer/tabs/LogsTab.jsx
index e12fda1..387f5b8 100644
--- a/src/renderer/tabs/LogsTab.jsx
+++ b/src/renderer/tabs/LogsTab.jsx
@@ -101,6 +101,19 @@ function LogsTab({
if (value === "group") return "группа";
return value;
};
+ const formatErrorWithExplain = (value) => {
+ if (!value) return "—";
+ const code = String(value);
+ const explanation = explainInviteError(code.split(/[:(]/, 1)[0].trim());
+ if (!explanation) return code;
+ if (code.includes("(")) return code;
+ return `${code} (${explanation})`;
+ };
+ const explainRawError = (value) => {
+ if (!value) return "";
+ const code = String(value).split(/[:(]/, 1)[0].trim();
+ return explainInviteError(code);
+ };
const getDurationMs = (start, finish) => {
const startMs = new Date(start).getTime();
@@ -434,19 +447,14 @@ function LogsTab({
return account ? formatAccountLabel(account) : (invite.watcherPhone || "—");
})()}
{invite.skippedReason && invite.skippedReason !== "" && (
- Пропуск: {invite.skippedReason}
+ Результат: {formatErrorWithExplain(invite.skippedReason)}
)}
{invite.error && invite.error !== "" && (
- Причина: {invite.error}
- )}
- {invite.error && (
-
- Вероятная причина: {explainInviteError(invite.error) || "Причина не определена"}
-
+ Ошибка: {formatErrorWithExplain(invite.error)}
)}
{invite.confirmError && (
- Подтверждение: {invite.confirmError}
+ Проверка участия: {formatErrorWithExplain(invite.confirmError)}
)}
{invite.strategy && (
@@ -478,14 +486,14 @@ function LogsTab({
Тип цели: {formatTargetType(invite.targetType)}
Действие: {invite.action || "invite"}
Статус: {formatInviteStatus(invite.status)}
- Пропуск: {invite.skippedReason || "—"}
- Ошибка: {invite.error || "—"}
- Подтверждение: {invite.confirmError || "—"}
+ Результат: {formatErrorWithExplain(invite.skippedReason)}
+ Ошибка: {formatErrorWithExplain(invite.error)}
+ Проверка участия: {formatErrorWithExplain(invite.confirmError)}
{invite.watcherAccountId && invite.accountId && invite.watcherAccountId !== invite.accountId
&& selectedTask && selectedTask.randomAccounts && hasBothRoles(invite.watcherAccountId) && (
Примечание: у наблюдателя стоят обе роли, но включен случайный выбор — инвайт выполнен другим аккаунтом.
)}
- Вероятная причина: {explainInviteError(invite.error) || "Причина не определена"}
+ Пояснение: {explainRawError(invite.error) || explainRawError(invite.confirmError) || "Причина не определена"}
Стратегия: {invite.strategy || "—"}
{invite.strategyMeta ? `Стратегии:\n${formatStrategies(invite.strategyMeta)}` : "Стратегии: —"}