fix: reorder journal worklog sections

This commit is contained in:
2026-06-06 02:53:36 +08:00
parent 40c0953904
commit f88376264d
5 changed files with 48 additions and 37 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -19,7 +19,7 @@
background: #13131f;
}
</style>
<script type="module" crossorigin src="/assets/main-DqAK36oG.js"></script>
<script type="module" crossorigin src="/assets/main-DhmtVNHh.js"></script>
<link rel="stylesheet" crossorigin href="/assets/main-N_NpVgn3.css">
</head>
<body>
+33 -33
View File
@@ -3299,7 +3299,40 @@
</div>
{/if}
{:else}
{#if journalSummary}
<div class="journal-summary">
<div class="summary-total">{t('journal.total')}: {Math.floor(journalSummary.totalMinutes / 60)}ч {journalSummary.totalMinutes % 60}м ({journalSummary.totalEntries} {t('worklog.min')})</div>
{#if journalSummary.byDay && journalSummary.byDay.length > 0}
<div class="summary-section">
<div class="summary-label">{t('journal.byDay')}</div>
{#each journalSummary.byDay as g}
<div class="summary-row"><span>{g.label}</span><span>{Math.floor(g.minutes / 60)}ч {g.minutes % 60}м</span><span class="summary-count">{g.count}</span></div>
{/each}
</div>
{/if}
{#if journalSummary.byNode && journalSummary.byNode.length > 0}
<div class="summary-section">
<div class="summary-label">{t('journal.byNode')}</div>
{#each journalSummary.byNode as g}
<div class="summary-row"><span>{g.label}</span><span>{Math.floor(g.minutes / 60)}ч {g.minutes % 60}м</span><span class="summary-count">{g.count}</span></div>
{/each}
</div>
{/if}
</div>
{/if}
<div class="journal-header">
<div class="journal-export-section">
<div class="journal-export-heading">{t('journal.exportHeading')}</div>
<div class="journal-export-row">
<button class="btn btn-sm" on:click={() => saveJournalReport('csv')}>{t('journal.exportCSV')}</button>
<button class="btn btn-sm" on:click={() => saveJournalReport('markdown')}>{t('journal.exportMarkdown')}</button>
<button class="btn btn-sm" on:click={() => saveJournalReport('pdf')}>PDF</button>
{#if journalStatusMsg}
<span class="journal-status-msg">{journalStatusMsg}</span>
{/if}
</div>
</div>
<div class="journal-filter-section">
<div class="journal-filter-heading">{t('journal.filterHeading')}</div>
<div class="journal-filters-row">
@@ -3357,40 +3390,7 @@
<button class="btn btn-sm" on:click={resetJournalFilters}>{t('journal.reset')}</button>
</div>
</div>
<div class="journal-export-section">
<div class="journal-export-heading">{t('journal.exportHeading')}</div>
<div class="journal-export-row">
<button class="btn btn-sm" on:click={() => saveJournalReport('csv')}>{t('journal.exportCSV')}</button>
<button class="btn btn-sm" on:click={() => saveJournalReport('markdown')}>{t('journal.exportMarkdown')}</button>
<button class="btn btn-sm" on:click={() => saveJournalReport('pdf')}>PDF</button>
{#if journalStatusMsg}
<span class="journal-status-msg">{journalStatusMsg}</span>
{/if}
</div>
</div>
</div>
{#if journalSummary}
<div class="journal-summary">
<div class="summary-total">{t('journal.total')}: {Math.floor(journalSummary.totalMinutes / 60)}ч {journalSummary.totalMinutes % 60}м ({journalSummary.totalEntries} {t('worklog.min')})</div>
{#if journalSummary.byDay && journalSummary.byDay.length > 0}
<div class="summary-section">
<div class="summary-label">{t('journal.byDay')}</div>
{#each journalSummary.byDay as g}
<div class="summary-row"><span>{g.label}</span><span>{Math.floor(g.minutes / 60)}ч {g.minutes % 60}м</span><span class="summary-count">{g.count}</span></div>
{/each}
</div>
{/if}
{#if journalSummary.byNode && journalSummary.byNode.length > 0}
<div class="summary-section">
<div class="summary-label">{t('journal.byNode')}</div>
{#each journalSummary.byNode as g}
<div class="summary-row"><span>{g.label}</span><span>{Math.floor(g.minutes / 60)}ч {g.minutes % 60}м</span><span class="summary-count">{g.count}</span></div>
{/each}
</div>
{/if}
</div>
{/if}
{#if journalRows.length === 0}
<div class="empty-state"><p>{t('journal.empty')}</p></div>
+11
View File
@@ -348,6 +348,17 @@ async function runReadyScenario(cdp, url) {
await assertEval(cdp, `!document.querySelector('.journal-screen h2')`, 'journal: screen title is not duplicated inside body')
await clickText(cdp, '.journal-tab', 'Журнал работы')
await screenshot(cdp, 'journal.png')
await assertEval(cdp, `
(() => {
const summary = document.querySelector('.journal-summary');
const exportBlock = document.querySelector('.journal-export-section');
const filterBlock = document.querySelector('.journal-filter-section');
const table = document.querySelector('.journal-table-wrap');
if (!summary || !exportBlock || !filterBlock || !table) return false;
const top = (el) => el.getBoundingClientRect().top;
return top(summary) < top(exportBlock) && top(exportBlock) < top(filterBlock) && top(filterBlock) < top(table);
})()
`, 'journal: summary, export, filters, work list order')
await assertEval(cdp, `document.body.innerText.toLowerCase().includes('фильтры')`, 'journal: filter section visible')
await assertEval(cdp, `document.body.innerText.toLowerCase().includes('экспорт отчёта')`, 'journal: export section visible')