重构(后台金额): 抽出统一的元金额格式化

- shared AdminFormat 新增 formatAdminCurrencyCents(分 → ¥x.xx)并从 components 导出
- AdminUserDetailDialog / AdminMembershipPlanPage / AdminRechargeOrderPage / AdminRechargeProductPage 删除各自重复的 formatMoney/formatPrice
- 补充 formatAdminCurrencyCents 单测,避免后台各页面金额格式漂移
This commit is contained in:
2026-10-05 18:12:22 +08:00
parent 87a3794423
commit b8309eb3ae
7 changed files with 74 additions and 35 deletions
@@ -1,6 +1,10 @@
import { describe, expect, test } from 'vitest';
import { formatAdminDate, formatAdminDateTime } from './AdminFormat';
import {
formatAdminCurrencyCents,
formatAdminDate,
formatAdminDateTime,
} from './AdminFormat';
describe('formatAdminDateTime', () => {
test('把后端的 seconds.microsZ 口径当成同一时刻渲染', () => {
@@ -44,3 +48,11 @@ describe('formatAdminDate', () => {
expect(formatAdminDate('1791008678.817257Z')).not.toBe('-');
});
});
describe('formatAdminCurrencyCents', () => {
test('分转成带两位小数的元', () => {
expect(formatAdminCurrencyCents(0)).toBe('¥0.00');
expect(formatAdminCurrencyCents(600)).toBe('¥6.00');
expect(formatAdminCurrencyCents(1234)).toBe('¥12.34');
});
});
@@ -54,6 +54,11 @@ export function formatAdminDateTime(
}
}
/** 后台统一的金额展示:分 → `¥12.34`;避免各后台页面各自实现导致格式漂移。 */
export function formatAdminCurrencyCents(cents: number): string {
return `¥${(cents / 100).toFixed(2)}`;
}
/** 后台统一的日期展示(不含时分秒):同样接受 `seconds.microsZ` 口径。 */
export function formatAdminDate(
value: string | number | Date | null | undefined,
@@ -19,7 +19,11 @@ export type {
AdminFormRowProps,
} from './AdminField';
export { AdminField, AdminFieldGroup, AdminFormRow } from './AdminField';
export { formatAdminDate, formatAdminDateTime } from './AdminFormat';
export {
formatAdminCurrencyCents,
formatAdminDate,
formatAdminDateTime,
} from './AdminFormat';
export type {
AdminInfoItemProps,
AdminInfoListEntry,