feat: нумерация и сортировка вариантов конфигурации по дате создания

Список вариантов в выпадающем меню теперь сортируется по created_at
(старый сверху) и нумеруется; исправлен наследуемый крупный жирный
шрифт в выпадашке.
This commit is contained in:
2026-07-20 20:05:43 +03:00
parent 472333a47e
commit 20e25927f2
2 changed files with 18 additions and 16 deletions
+2
View File
@@ -1555,6 +1555,7 @@ func setupRouter(cfg *config.Config, local *localdb.LocalDB, connMgr *db.Connect
Variant string `json:"variant"` Variant string `json:"variant"`
Name string `json:"name"` Name string `json:"name"`
IsActive bool `json:"is_active"` IsActive bool `json:"is_active"`
CreatedAt time.Time `json:"created_at"`
} }
simplified := make([]ProjectSimple, 0, len(allProjects)) simplified := make([]ProjectSimple, 0, len(allProjects))
@@ -1565,6 +1566,7 @@ func setupRouter(cfg *config.Config, local *localdb.LocalDB, connMgr *db.Connect
Variant: p.Variant, Variant: p.Variant,
Name: derefString(p.Name), Name: derefString(p.Name),
IsActive: p.IsActive, IsActive: p.IsActive,
CreatedAt: p.CreatedAt,
}) })
} }
+6 -6
View File
@@ -22,8 +22,8 @@
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"></path> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"></path>
</svg> </svg>
</button> </button>
<div id="project-variant-menu" class="absolute left-0 mt-2 min-w-[10rem] rounded-lg border border-gray-200 bg-white shadow-lg hidden z-10"> <div id="project-variant-menu" class="absolute left-0 mt-2 w-max max-w-xs min-w-[12rem] rounded-lg border border-gray-200 bg-white shadow-lg hidden z-10 text-sm font-normal">
<div id="project-variant-list" class="py-1"></div> <div id="project-variant-list" class="py-1 max-h-72 overflow-y-auto"></div>
</div> </div>
</div> </div>
<button onclick="openNewVariantModal()" class="inline-flex w-full sm:w-auto justify-center items-center px-3 py-1.5 text-sm font-medium bg-purple-600 text-white rounded-lg hover:bg-purple-700"> <button onclick="openNewVariantModal()" class="inline-flex w-full sm:w-auto justify-center items-center px-3 py-1.5 text-sm font-medium bg-purple-600 text-white rounded-lg hover:bg-purple-700">
@@ -380,8 +380,8 @@ async function loadVariantsForCode(code) {
} }
projectVariants = allProjects projectVariants = allProjects
.filter(p => (p.code || '').trim() === code && p.is_active !== false) .filter(p => (p.code || '').trim() === code && p.is_active !== false)
.map(p => ({uuid: p.uuid, variant: (p.variant || '').trim()})); .map(p => ({uuid: p.uuid, variant: (p.variant || '').trim(), createdAt: p.created_at || ''}));
projectVariants.sort((a, b) => normalizeVariantLabel(a.variant).localeCompare(normalizeVariantLabel(b.variant))); projectVariants.sort((a, b) => new Date(a.createdAt) - new Date(b.createdAt));
} catch (e) { } catch (e) {
// ignore // ignore
} }
@@ -397,7 +397,7 @@ function renderVariantSelect() {
list.innerHTML = ''; list.innerHTML = '';
const variants = projectVariants.length ? projectVariants : [{uuid: projectUUID, variant: (project && project.variant) || ''}]; const variants = projectVariants.length ? projectVariants : [{uuid: projectUUID, variant: (project && project.variant) || ''}];
let mainUUID = ''; let mainUUID = '';
variants.forEach(item => { variants.forEach((item, index) => {
const variantLabel = normalizeVariantLabel(item.variant); const variantLabel = normalizeVariantLabel(item.variant);
if (variantLabel === 'main' && !mainUUID) { if (variantLabel === 'main' && !mainUUID) {
mainUUID = item.uuid; mainUUID = item.uuid;
@@ -410,7 +410,7 @@ function renderVariantSelect() {
label.textContent = variantLabel; label.textContent = variantLabel;
document.title = (project && project.code ? project.code : '—') + ' / ' + variantLabel + ' — OFS'; document.title = (project && project.code ? project.code : '—') + ' / ' + variantLabel + ' — OFS';
} }
option.textContent = variantLabel; option.textContent = (index + 1) + '. ' + variantLabel;
option.onclick = function() { option.onclick = function() {
menu.classList.add('hidden'); menu.classList.add('hidden');
if (item.uuid && item.uuid !== projectUUID) { if (item.uuid && item.uuid !== projectUUID) {