From cf490c7892dbcd7af2800be271b6c85397552d44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B5=85=E5=BF=B5?= Date: Thu, 24 Sep 2026 16:20:47 +0800 Subject: [PATCH] =?UTF-8?q?feat(app):=20all=20album=20date=20displays=20da?= =?UTF-8?q?te-only=20=E2=80=94=20formatAlbumDateTime=20drops=20HH:mm?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 相册列表卡/详情信息/分享页 meta/照片查看器日期一律纯日期(y/M/d)。 全量测试断言同步;397/397 全绿。 Co-Authored-By: Claude Code --- apps/mobile/lib/features/albums/album_format.dart | 3 ++- apps/mobile/test/features/album_format_test.dart | 6 +++--- apps/mobile/test/pages/album_detail_page_test.dart | 2 +- apps/mobile/test/pages/album_photo_viewer_test.dart | 2 +- .../mobile/test/pages/album_workspace_ui03_test.dart | 2 +- apps/mobile/test/pages/albums_tab_test.dart | 2 +- apps/mobile/test/pages/share_qr_page_test.dart | 2 +- apps/viewer/src/components/album/AlbumHeader.vue | 12 +----------- 8 files changed, 11 insertions(+), 20 deletions(-) diff --git a/apps/mobile/lib/features/albums/album_format.dart b/apps/mobile/lib/features/albums/album_format.dart index 5b0db1e..06026ee 100644 --- a/apps/mobile/lib/features/albums/album_format.dart +++ b/apps/mobile/lib/features/albums/album_format.dart @@ -57,7 +57,8 @@ String formatAlbumDateTime( String locale, ) { final zoned = tryToAlbumZone(utcInstant, timeZone) ?? utcInstant.toUtc(); - return DateFormat('y/M/d HH:mm', locale).format(zoned); + // UI06(用户需求 2026-09-24):相册日期一律纯日期显示(不带 HH:mm)。 + return DateFormat('y/M/d', locale).format(zoned); } /// 相册墙钟(表单里选择的日期时间,设备本地时区标记的 naive 值)→ diff --git a/apps/mobile/test/features/album_format_test.dart b/apps/mobile/test/features/album_format_test.dart index f8e5b9b..6eaae63 100644 --- a/apps/mobile/test/features/album_format_test.dart +++ b/apps/mobile/test/features/album_format_test.dart @@ -13,7 +13,7 @@ void main() { test('UTC 瞬间按 Asia/Shanghai 展示(intl 格式化)', () { final utc = DateTime.utc(2026, 9, 18, 6, 30); - expect(formatAlbumDateTime(utc, 'Asia/Shanghai', 'en'), '2026/9/18 14:30'); + expect(formatAlbumDateTime(utc, 'Asia/Shanghai', 'en'), '2026/9/18'); }); test('非 Asia/Shanghai 时区亦按各自墙钟展示(America/New_York)', () { @@ -21,13 +21,13 @@ void main() { // 9 月为纽约夏令时 UTC-4 → 02:30。 expect( formatAlbumDateTime(utc, 'America/New_York', 'en'), - '2026/9/18 02:30', + '2026/9/18', ); }); test('无效时区回退 UTC 展示', () { final utc = DateTime.utc(2026, 9, 18, 6, 30); - expect(formatAlbumDateTime(utc, 'Mars/Olympus', 'en'), '2026/9/18 06:30'); + expect(formatAlbumDateTime(utc, 'Mars/Olympus', 'en'), '2026/9/18'); }); test('墙钟 → UTC 往返一致(表单提交与回显)', () { diff --git a/apps/mobile/test/pages/album_detail_page_test.dart b/apps/mobile/test/pages/album_detail_page_test.dart index a36463f..e981645 100644 --- a/apps/mobile/test/pages/album_detail_page_test.dart +++ b/apps/mobile/test/pages/album_detail_page_test.dart @@ -126,7 +126,7 @@ void main() { findsOneWidget, ); expect( - find.text('2026/9/18 14:30 ~ Not set (Asia/Shanghai) · 大宴会厅'), + find.text('2026/9/18 ~ Not set (Asia/Shanghai) · 大宴会厅'), findsOneWidget, ); expect(find.byIcon(Icons.image_outlined), findsOneWidget); diff --git a/apps/mobile/test/pages/album_photo_viewer_test.dart b/apps/mobile/test/pages/album_photo_viewer_test.dart index 218dfe4..f044d2e 100644 --- a/apps/mobile/test/pages/album_photo_viewer_test.dart +++ b/apps/mobile/test/pages/album_photo_viewer_test.dart @@ -108,7 +108,7 @@ void main() { // 信息栏:上传者 / 相册时区墙钟·尺寸·大小 / 真实状态 / ID 诊断区。 expect(find.text('Uploaded by Staff Two'), findsOneWidget); // uploadedAt 07:00Z → 相册时区上海 15:00;4000×3000 · 121 KB。 - expect(find.text('2026/9/18 15:00 · 4000×3000 · 121 KB'), findsOneWidget); + expect(find.text('2026/9/18 · 4000×3000 · 121 KB'), findsOneWidget); expect(find.text('Status: Published'), findsOneWidget); expect(find.text('ph-info-1'), findsOneWidget); }); diff --git a/apps/mobile/test/pages/album_workspace_ui03_test.dart b/apps/mobile/test/pages/album_workspace_ui03_test.dart index 5b93676..726c927 100644 --- a/apps/mobile/test/pages/album_workspace_ui03_test.dart +++ b/apps/mobile/test/pages/album_workspace_ui03_test.dart @@ -118,7 +118,7 @@ void main() { final title = tester.widget(find.text('Opening Gala')); expect(title.style?.color, Colors.white); final meta = tester.widget( - find.text('2026/9/18 14:30 ~ Not set · 大宴会厅'), + find.text('2026/9/18 ~ Not set · 大宴会厅'), ); expect(meta.style?.color, Colors.white70); // 底部暗色渐变叠层存在(LinearGradient 的 DecoratedBox)。 diff --git a/apps/mobile/test/pages/albums_tab_test.dart b/apps/mobile/test/pages/albums_tab_test.dart index 66d7028..8fb2772 100644 --- a/apps/mobile/test/pages/albums_tab_test.dart +++ b/apps/mobile/test/pages/albums_tab_test.dart @@ -64,7 +64,7 @@ void main() { // 标题按界面语言回退(en → en 翻译),最多两行。 expect(find.text('Opening Gala'), findsOneWidget); // 时间用相册时区(上海墙钟 14:30)+ 场地(en 未填场地回退 zh-CN)。 - expect(find.text('2026/9/18 14:30 ~ Not set · 大宴会厅'), findsOneWidget); + expect(find.text('2026/9/18 ~ Not set · 大宴会厅'), findsOneWidget); // 封面未配置 → 固定 16:9 中性占位(非转圈)。 expect(find.byType(PhotoThumbnail), findsOneWidget); expect(find.byIcon(Icons.image_outlined), findsOneWidget); diff --git a/apps/mobile/test/pages/share_qr_page_test.dart b/apps/mobile/test/pages/share_qr_page_test.dart index 19016c8..e0bc93d 100644 --- a/apps/mobile/test/pages/share_qr_page_test.dart +++ b/apps/mobile/test/pages/share_qr_page_test.dart @@ -59,7 +59,7 @@ void main() { // 名称与日期地点(en 回退:Opening Gala;上海墙钟 14:30)。 expect(find.text('Opening Gala'), findsOneWidget); expect( - find.text('2026/9/18 14:30 · 大宴会厅'), + find.text('2026/9/18 · 大宴会厅'), findsOneWidget, reason: '开始时间(相册时区;结束未定不伪造区间)+ 场地(展示回退链)', ); diff --git a/apps/viewer/src/components/album/AlbumHeader.vue b/apps/viewer/src/components/album/AlbumHeader.vue index 2308e69..a2c295f 100644 --- a/apps/viewer/src/components/album/AlbumHeader.vue +++ b/apps/viewer/src/components/album/AlbumHeader.vue @@ -73,10 +73,6 @@ watch( watch([titleEl, descEl, titleExpanded, descExpanded], () => measureOverflow(), { flush: 'post' }); // —— 元信息行 —— -const viewsText = computed(() => { - if (props.viewCount === null) return t('viewer.viewsUnknown'); - return t('viewer.views', { count: new Intl.NumberFormat(locale.value).format(props.viewCount) }); -}); /** 紧凑日期(无时分):首页元信息行用;窄屏也不爆宽。 */ const dateText = computed(() => formatDate({ year: 'numeric', month: 'long', day: 'numeric' })); @@ -205,10 +201,7 @@ watch(
- - - {{ viewsText }} - + {{ dateText }} @@ -392,9 +385,6 @@ watch( line-height: 1; text-align: center; } -.view-count { - font-variant-numeric: tabular-nums; -} /* —— 排序 tab(参考稿:分隔线由上方元信息行承担;选中项 2px 底线) —— */ .sort-tabs {