diff --git a/entry/src/main/ets/components/FbEventEditSheet.ets b/entry/src/main/ets/components/FbEventEditSheet.ets index 5e1d187..77d8044 100644 --- a/entry/src/main/ets/components/FbEventEditSheet.ets +++ b/entry/src/main/ets/components/FbEventEditSheet.ets @@ -647,13 +647,25 @@ export struct FbEventEditSheet { * * ⚠️ 草稿的意义:用户滚了一半又点「取消」⇒ **不写回**(`fStartXxx` 保持原样)。 * 若直接改 `fStartXxx`,"取消"就没法撤销了。 + * + * 🔴🔴 v88(工单 #34,用户 2026-10-30):「日程添加时,选择时间,点上面, + * 修改的反而是结束时间。」 + * + * 根因:这个参数**原来叫 `isEnd`**,而调用方 `dateTimeRow(label, isStart)` + * 传进来的是 `isStart`。名字一换、语义就反了: + * isStart=true(点「开始」)→ isEnd=true → 整条链路按"结束"处理。 + * 而且错得很"自洽"——弹层初值读的是结束时间、写回也写给结束时间、 + * 连标题都显示「选择结束时间」,三个地方一起错,所以看着不像坏。 + * + * ⇒ 参数统一成 `isStart`(**与调用方同名同义**),内部自己取反。 + * 不要图省事在调用处写 `openPicker(!isStart)` —— 双重否定更容易再错一次。 */ - private openPicker(isEnd: boolean): void { - this.pickIsEnd = isEnd; + private openPicker(isStart: boolean): void { + this.pickIsEnd = !isStart; // ⚠️ 草稿值放在宿主,弹层组件 `aboutToAppear` 时从这里读初值 —— // 组件每次挂载都会重新读一次,所以"点开始 → 取消 → 点结束"拿到的是各自的值。 - this.pickDate = fbParseDate(isEnd ? this.fEndDate : this.fStartDate); - const tm: Date = fbParseTime(isEnd ? this.fEndTime : this.fStartTime); + this.pickDate = fbParseDate(isStart ? this.fStartDate : this.fEndDate); + const tm: Date = fbParseTime(isStart ? this.fStartTime : this.fEndTime); this.pickHour = tm.getHours(); this.pickMin = tm.getMinutes(); this.pickOpen = true;