观影详情卡:对齐、去「写评价」、补编辑入口与完整编辑 (#80)
用户:评价与评论和上面的观影照片对齐吗?下面的写评价不要了,三个字。
另外一个,是不是得有个地方放编辑按钮啊?观影其实可以编辑……后面会补几张照片。
但编辑这个功能应该还是有的。
① 对齐:FbSectionTitle 自带 padding left:4,简介/观影照片是裸 Text 无内边距,
实测评价与评论起点 111 vs 观影照片 99(差 4vp)。用 margin left:-4 抵消。
不改用裸 Text —— 那样会丢掉全站统一的字号/字重/字距/胶囊按钮口径。
② 去「写评价」:FbMovieReviewSheet 加 hideFormTitle;无评价时整行不画,
但有评价时保留那一行(右边的修改/删除/收起按钮在那)。
③ 编辑入口 + 完整编辑(用户选定:按钮放卡片最底部、做完整编辑):
- 服务端 PATCH /api/v1/movies/<id> 本来就有(movieData 支持缺省回退原值),
这轮只补端上缺的那层;
- FbMovieRepo 新增 updateMovie() → PATCH,成功后重拉列表回写本地库;
- FbMovieNewSheet 加 editingId/editingDetail,aboutToAppear 走 prefill 回填,
submit 按模式分派 POST/PATCH;标题/按钮文案随模式切换;
- 宿主(首页 + 电影页)详情卡 onEdit → 关卡 + 同一张表单编辑;
- 编辑时不发 poster_key(发空串会清掉已有海报);
海报区显示「当前海报 / 不选新图就保持不变」,避免用户以为图丢了白传一次。
两个真坑:
1) if/else if 条件里不能调方法:curPoster() 探针打出来是对的,
界面却一直走 else —— ArkUI V2 只对字段/参数建依赖。改读 @Local 字段。
2) Row { Text().width(100%); Row {...} } 会内层挤出:posterField 原来就是这个结构,
标签吃满整行 ⇒ 内层塌成 0 高、完全不渲染(症状是图/字凭空消失)。
按全局表单规范改两排。
验证(真机 5NC0225B27004718):评价与评论 x 起点 98 vs 观影照片 99 已对齐;
「写评价」不再出现;编辑按钮在 y=1987;点开标题为「编辑观影记录」,
片名/时间(10月9日 16:20)/简介全部回填;海报区三行文案齐全,
缩略图区域色数 13567(真图)。hvigorw assembleHap BUILD SUCCESSFUL。
This commit is contained in:
@@ -55,6 +55,18 @@ export struct FbMovieReviewSheet {
|
||||
* 加一个开关,两条路径共用同一套逻辑与 DOM。
|
||||
*/
|
||||
@Param embedded: boolean = false;
|
||||
/**
|
||||
* 隐藏表单顶部的「写评价 / 我的评价」标题行(2026-11-06)。
|
||||
*
|
||||
* 🔴 用户:「下面的写评价不要了,三个字。」
|
||||
* ⇒ 内嵌到详情卡后,上面已经有「评价与评论」这个区块标题,
|
||||
* 再出现一行「写评价」是重复的。
|
||||
*
|
||||
* ⚠️ 只隐藏**标题文字那一段**,右边「修改 / 删除 / 收起」三颗动作按钮
|
||||
* 仍然保留 —— 有评价时用户就是靠它们改和删,删掉整行会失去功能。
|
||||
* 没有评价时那一行本来就只剩标题,于是整行自然消失。
|
||||
*/
|
||||
@Param hideFormTitle: boolean = false;
|
||||
/** 保存/删除后通知宿主(列表的平均分可能要刷新) */
|
||||
@Event onChanged: () => void = (): void => {};
|
||||
|
||||
@@ -492,32 +504,40 @@ export struct FbMovieReviewSheet {
|
||||
@Builder
|
||||
myReviewForm() {
|
||||
Column({ space: 8 }) {
|
||||
Row({ space: 8 }) {
|
||||
Text(this.mine !== null ? '我的评价' : '写评价')
|
||||
.fontSize(FbMetric.fontSmall)
|
||||
.fontWeight(FontWeight.Bold)
|
||||
.fontColor(this.accent)
|
||||
.letterSpacing(0.6)
|
||||
Blank()
|
||||
if (this.mine !== null) {
|
||||
Text('收起')
|
||||
.fontSize(FbMetric.fontTiny)
|
||||
.fontColor(FbColors.muted)
|
||||
.padding({ left: 6, right: 4, top: 4, bottom: 4 })
|
||||
.onClick((): void => {
|
||||
this.myFormOpen = false;
|
||||
})
|
||||
Text('删除')
|
||||
.fontSize(FbMetric.fontTiny)
|
||||
.fontColor(FbColors.red)
|
||||
.padding({ left: 8, right: 2, top: 4, bottom: 4 })
|
||||
.onClick((): void => {
|
||||
this.deleteReview();
|
||||
})
|
||||
/* 🔴 用户 2026-11-06:「下面的写评价不要了,三个字。」
|
||||
⇒ 整行只在「有评价(要显示改/删/收起)」或「没要求隐藏标题」时才画。
|
||||
内嵌 + 未评过 = 整行不存在,直接从「评分」开始,不浪费一行高度。
|
||||
⚠️ 有评价时**不能**整行删掉:修改/删除/收起三颗按钮就在这行右边。 */
|
||||
if (this.mine !== null || !this.hideFormTitle) {
|
||||
Row({ space: 8 }) {
|
||||
if (!this.hideFormTitle) {
|
||||
Text(this.mine !== null ? '我的评价' : '写评价')
|
||||
.fontSize(FbMetric.fontSmall)
|
||||
.fontWeight(FontWeight.Bold)
|
||||
.fontColor(this.accent)
|
||||
.letterSpacing(0.6)
|
||||
}
|
||||
Blank()
|
||||
if (this.mine !== null) {
|
||||
Text('收起')
|
||||
.fontSize(FbMetric.fontTiny)
|
||||
.fontColor(FbColors.muted)
|
||||
.padding({ left: 6, right: 4, top: 4, bottom: 4 })
|
||||
.onClick((): void => {
|
||||
this.myFormOpen = false;
|
||||
})
|
||||
Text('删除')
|
||||
.fontSize(FbMetric.fontTiny)
|
||||
.fontColor(FbColors.red)
|
||||
.padding({ left: 8, right: 2, top: 4, bottom: 4 })
|
||||
.onClick((): void => {
|
||||
this.deleteReview();
|
||||
})
|
||||
}
|
||||
}
|
||||
.width('100%')
|
||||
.alignItems(VerticalAlign.Center)
|
||||
}
|
||||
.width('100%')
|
||||
.alignItems(VerticalAlign.Center)
|
||||
|
||||
// 打分(1-10 颗星)
|
||||
Column({ space: 6 }) {
|
||||
|
||||
Reference in New Issue
Block a user