Files
2026-05-18 17:29:18 +08:00

64 lines
3.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# WarmIsland 主题白屏及 API 错误彻底修复 Spec
## Why
主题中使用了 Halo 2.24.2 不存在的 Finder API 方法(`momentFinder.list()``photoFinder.listGroups()``photoFinder.listByGroupName()`),以及 Thymeleaf 不支持的 Groovy 闭包语法(`.groupBy { ... }`),导致模板渲染时抛出 `SpelEvaluationException`HTTP 响应流中断,产生 `ERR_INCOMPLETE_CHUNKED_ENCODING 200` 白屏错误。同时 `MomentSpec` 中不存在 `media` 字段,媒体数据实际在 `content.medium` 中。
## What Changes
- **修复 `momentFinder.list()` 调用**:改为 `momentFinder.list(1, 50)`(返回 `Mono<ListResult<MomentVo>>`),需通过 `.items` 获取列表
- **修复 `photoFinder.listGroups()` 调用**:改为 `photoFinder.groupBy()`(返回 `Flux<PhotoGroupVo>`),`PhotoGroupVo` 已包含 `photos` 列表
- **修复 `photoFinder.listByGroupName()` 调用**:改为 `photoFinder.listBy(groupName)`(返回 `Flux<PhotoVo>`),或直接使用 `groupBy()` 返回的 `PhotoGroupVo.photos`
- **修复 `moment.spec.media` 引用**:改为 `moment.spec.content.medium``MomentContent.medium``List<MomentMedia>`
- **修复 `TimelineSection.astro` 中的 Groovy 闭包语法**`.groupBy { it.spec.publishTime?.getYear() }` 在 Thymeleaf 中不可用,需改用 `postFinder.list({page: 1, size: 50})` 获取文章后手动按年分组
- **修复 `Navbar.astro``Header.astro` 中的 `menuItem.spec.target?.value`**:改为 `menuItem.spec.target``target` 是字符串而非对象)
## Impact
- Affected code:
- `src/pages/moments.astro` - 瞬间页面(白屏根因)
- `src/pages/photos.astro` - 图库页面(白屏根因)
- `src/components/MomentsSection.astro` - 首页瞬间区块(首页白屏根因)
- `src/components/PhotosSection.astro` - 首页图库区块
- `src/components/TimelineSection.astro` - 首页时间线区块
- `src/components/Navbar.astro` - 导航栏 target 属性
- `src/components/Header.astro` - 头部导航 target 属性
## ADDED Requirements
### Requirement: 正确使用 momentFinder API
系统 SHALL 使用 `momentFinder.list(page, size)` 替代不存在的 `momentFinder.list()`,返回 `ListResult` 对象需通过 `.items` 获取列表数据。
#### Scenario: 瞬间页面正常渲染
- **WHEN** 用户访问 `/moments`
- **THEN** 页面正常显示瞬间列表,无 `ERR_INCOMPLETE_CHUNKED_ENCODING` 错误
#### Scenario: 首页瞬间区块正常渲染
- **WHEN** 用户访问首页且启用了瞬间区块
- **THEN** 首页正常显示,瞬间区块展示最近的瞬间
### Requirement: 正确使用 photoFinder API
系统 SHALL 使用 `photoFinder.groupBy()` 替代不存在的 `photoFinder.listGroups()``PhotoGroupVo` 已包含 `photos` 列表,无需额外调用 `listByGroupName`
#### Scenario: 图库页面正常渲染
- **WHEN** 用户访问 `/photos`
- **THEN** 页面正常显示图库分组和照片,无白屏错误
### Requirement: 正确引用 Moment 媒体数据
系统 SHALL 使用 `moment.spec.content.medium` 替代不存在的 `moment.spec.media``MomentMedia` 对象包含 `type``url``originType` 字段。
#### Scenario: 瞬间包含媒体时正常显示
- **WHEN** 瞬间包含图片媒体
- **THEN** 图片正常显示在瞬间卡片中
### Requirement: 不使用 Thymeleaf 不支持的语法
系统 SHALL 不在 Thymeleaf 表达式中使用 Groovy 闭包语法(如 `.groupBy { ... }`),TimelineSection 需改用 `postFinder.list({...})` 获取文章列表。
#### Scenario: 首页时间线区块正常渲染
- **WHEN** 用户访问首页且启用了时间线区块
- **THEN** 首页正常显示,时间线区块按年展示文章
### Requirement: 正确引用菜单项 target 属性
系统 SHALL 使用 `menuItem.spec.target` 替代 `menuItem.spec.target?.value``target` 是字符串类型。
#### Scenario: 导航链接在新标签页打开
- **WHEN** 菜单项配置了在新标签页打开
- **THEN** 链接正确设置 target 属性