From 14d32d93c3aa71269b2f40d00cb46fa0a9e4518d Mon Sep 17 00:00:00 2001 From: "Zimin A.N." Date: Mon, 4 May 2026 04:27:44 +0300 Subject: [PATCH] =?UTF-8?q?fix(admin-ui):=20=D0=BA=D0=BE=D1=80=D1=80=D0=B5?= =?UTF-8?q?=D0=BA=D1=82=D0=BD=D1=8B=D0=B5=20=D0=B1=D0=B5=D0=B9=D0=B4=D0=B6?= =?UTF-8?q?=D0=B8=20=D0=B2=20=D0=B8=D1=81=D1=82=D0=BE=D1=80=D0=B8=D0=B8=20?= =?UTF-8?q?=E2=80=94=20future/active/expired=20=D0=BF=D0=BE=20=D1=80=D0=B5?= =?UTF-8?q?=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=BC=D1=83=20=D0=B2=D1=80=D0=B5?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Раньше любую запись с validTo<9999 помечал 'закрыта'. Но запись с validTo в будущем — не закрытая, а либо ЗАПЛАНИРОВАННАЯ (validFrom > now), либо АКТИВНАЯ (validFrom <= now < validTo). User видел 'закрыта' на v3 которая ещё не настала. Теперь: - future: validFrom > now → бейдж 'запланирована' (info), точка orbit/horizon - active: validFrom <= now < validTo → бейдж 'активна' (success) если не latest - expired: validTo <= now → 'закрыта' (neutral), точка пустая - latest active: 'текущая' (primary), точка ultramarain Бессрочная запись (validTo year>=9999) больше не показывает 'действует до:' — у бессрочной нет конечной даты, отображение его смущало. i18n: новые ключи history.active / history.scheduled (RU/EN). --- .../components/record/RecordHistoryDrawer.tsx | 39 +++++++++++++------ ordinis-admin-ui/src/i18n.ts | 4 ++ 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/ordinis-admin-ui/src/components/record/RecordHistoryDrawer.tsx b/ordinis-admin-ui/src/components/record/RecordHistoryDrawer.tsx index 0f527bc..40722f9 100644 --- a/ordinis-admin-ui/src/components/record/RecordHistoryDrawer.tsx +++ b/ordinis-admin-ui/src/components/record/RecordHistoryDrawer.tsx @@ -35,33 +35,50 @@ export const RecordHistoryDrawer = ({ open, onClose, dictionaryName, businessKey
    {data.map((rec, idx) => { const isLatest = idx === 0 - const closed = new Date(rec.validTo).getFullYear() < 9999 - // Нумерация по позиции в timeline: total..1, новая запись = total. - // rec.version (JPA optimistic lock) растёт на UPDATE и у нескольких - // закрытых может совпасть → дубли в UI. Index — стабильный 1-based счётчик. const displayVersion = data.length - idx + const now = new Date() + const from = new Date(rec.validFrom) + const to = new Date(rec.validTo) + const farFuture = to.getFullYear() >= 9999 + // Статус по реальному времени: + // future — validFrom ещё впереди (запланирована) + // active — сейчас в её диапазоне + // expired — validTo уже прошла (закрыта) + const status = from > now + ? 'future' + : !farFuture && to <= now + ? 'expired' + : 'active' return (
  1. v{displayVersion} - {isLatest && {t('history.current')}} - {!isLatest && closed && {t('history.closed')}} + {isLatest && status === 'active' && ( + {t('history.current')} + )} + {status === 'future' && {t('history.scheduled')}} + {status === 'expired' && {t('history.closed')}} + {status === 'active' && !isLatest && ( + {t('history.active')} + )}
    {t('history.validFrom')}:{' '} {new Date(rec.validFrom).toLocaleString()}
    - {closed && ( + {!farFuture && (
    {t('history.validTo')}:{' '} {new Date(rec.validTo).toLocaleString()} diff --git a/ordinis-admin-ui/src/i18n.ts b/ordinis-admin-ui/src/i18n.ts index 177c386..3a0e776 100644 --- a/ordinis-admin-ui/src/i18n.ts +++ b/ordinis-admin-ui/src/i18n.ts @@ -85,6 +85,8 @@ i18n 'history.title': 'История версий', 'history.empty': 'История пуста', 'history.current': 'текущая', + 'history.active': 'активна', + 'history.scheduled': 'запланирована', 'history.closed': 'закрыта', 'history.validFrom': 'действует с', 'history.validTo': 'действует до', @@ -202,6 +204,8 @@ i18n 'history.title': 'Version history', 'history.empty': 'No history', 'history.current': 'current', + 'history.active': 'active', + 'history.scheduled': 'scheduled', 'history.closed': 'closed', 'history.validFrom': 'valid from', 'history.validTo': 'valid to',