From be4f1ddd78a836b011f01b08c6b53429e6101953 Mon Sep 17 00:00:00 2001 From: API Changelog Bot Date: Tue, 7 Jul 2026 10:32:54 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E5=91=8A=E7=9F=A5=E5=89=8D=E7=AB=AF?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E6=88=BF=E5=8A=A1=E4=BB=B7=E6=A0=BC=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E8=AF=AF=E5=BC=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...房价格同步弹窗误触发-前端待处理-管理后台.md | 91 +++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 changelogs-v2/2026-07/36_房务配房价格同步弹窗误触发-前端待处理-管理后台.md diff --git a/changelogs-v2/2026-07/36_房务配房价格同步弹窗误触发-前端待处理-管理后台.md b/changelogs-v2/2026-07/36_房务配房价格同步弹窗误触发-前端待处理-管理后台.md new file mode 100644 index 0000000..4f217a2 --- /dev/null +++ b/changelogs-v2/2026-07/36_房务配房价格同步弹窗误触发-前端待处理-管理后台.md @@ -0,0 +1,91 @@ +# 房务配房价格同步弹窗误触发(前端待处理) + +## 背景 + +房务「选择酒店」弹窗中,后端候选接口已经返回房型级价格: + +- `roomTypes[].protocolPrice` +- `roomTypes[].settlementPrice` + +测试环境实测示例: + +- 订单:`2074303545149980674` +- 日期:`2026-07-23` +- 房型:`2029944767501012994` +- 接口返回:`protocolPrice = "320.00"`,`settlementPrice = "320.00"` + +但前端未修改任何协议价 / 结算价时,点击「加入」仍弹出: + +- `同步协议价?` +- `同步结算价?` + +## 问题原因 + +当前前端判断逻辑是字符串比较: + +```js +function priceChanged(input, original) { + if (input == null || input === '') return false + return String(input) !== String(original ?? '') +} +``` + +弹窗输入用 `NInputNumber`,接口金额是字符串。 + +例如: + +- 接口原值:`"320.00"` +- 输入控件值:`320` +- `String(320) !== String("320.00")` +- 结果为 `true` + +所以数值未变化也会误判为价格变化。 + +## 前端需要调整 + +只在协议价或结算价的金额数值真实变化时,才弹同步确认。 + +建议把金额归一化后比较,不能直接字符串比较: + +```js +function normalizePrice(value) { + if (value == null || value === '') return null + const n = Number(value) + return Number.isFinite(n) ? Math.round(n * 100) : null +} + +function priceChanged(input, original) { + const next = normalizePrice(input) + const prev = normalizePrice(original) + if (next == null) return false + if (prev == null) return true + return next !== prev +} +``` + +也可以用 decimal 工具统一比较,只要满足: + +- `320` 和 `320.00` 视为相等 +- `320.0` 和 `320.00` 视为相等 +- `320.01` 和 `320.00` 视为变化 +- 原值为空、输入也为空:不弹 +- 原值有值、输入未改:不弹 +- 原值有值、输入改成另一个金额:弹 + +## 触发口径 + +点击「加入」时: + +1. `protocolPrice` 数值变化,才弹 `同步协议价?` +2. `settlementPrice` 数值变化,才弹 `同步结算价?` +3. 两个价格都没变化,不弹任何同步价格确认,直接加入已选配房。 +4. 只改房间数、库存口径、酒店 / 房型选择,不应触发价格同步弹窗。 + +## 验收口径 + +- 后端返回 `protocolPrice = "320.00"`,前端输入框显示 `320`,点击「加入」不弹同步协议价。 +- 后端返回 `settlementPrice = "320.00"`,前端输入框显示 `320`,点击「加入」不弹同步结算价。 +- 手动把协议价改为 `321`,点击「加入」弹同步协议价。 +- 手动把结算价改为 `319`,点击「加入」弹同步结算价。 +- 协议价和结算价都没改时,不出现任何价格同步弹窗。 +