fix(小宝预警): 剩余工作量展示天数换算

This commit is contained in:
Script Generator
2026-06-30 09:35:47 +08:00
parent bf4b32f17d
commit 50e76c8068
4 changed files with 24 additions and 3 deletions

View File

@@ -1,7 +1,7 @@
import assert from 'node:assert/strict';
import test from 'node:test';
import type { VersionWithContext } from './derive';
import { filterXiaobaoWarningVersions } from './xiaobao-warning-view';
import { filterXiaobaoWarningVersions, formatRemainingWork } from './xiaobao-warning-view';
function version(patch: Partial<VersionWithContext> = {}): VersionWithContext {
return {
@@ -45,3 +45,10 @@ test('filterXiaobaoWarningVersions limits non-managers to versions where they ar
assert.deepEqual(result.map((item) => item.id), ['ver-1']);
});
test('formatRemainingWork keeps hours and adds work-day conversion', () => {
assert.equal(formatRemainingWork(0), '0h / 0天');
assert.equal(formatRemainingWork(8), '8h / 1天');
assert.equal(formatRemainingWork(12), '12h / 1.5天');
assert.equal(formatRemainingWork(0.5), '0.5h / 0.1天');
});

View File

@@ -1,4 +1,5 @@
import type { VersionWithContext } from './derive';
import { WORK_HOURS } from './work-hours';
const UNFINISHED_VERSION_STATUSES = new Set(['planned', 'developing', 'paused']);
@@ -18,3 +19,14 @@ export function filterXiaobaoWarningVersions(
return (version.members ?? []).some((member) => member.name === filter.userName);
});
}
export function formatRemainingWork(hours: number): string {
const safeHours = Number.isFinite(hours) && hours > 0 ? hours : 0;
const days = safeHours / WORK_HOURS.hoursPerDay;
return `${formatNumber(safeHours)}h / ${formatNumber(days)}`;
}
function formatNumber(value: number): string {
if (Number.isInteger(value)) return String(value);
return value.toFixed(1).replace(/\.0$/, '');
}