docs: 告知前端修正房务价格同步误弹
这个提交包含在:
父节点
6f1945966e
当前提交
be4f1ddd78
@ -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`,点击「加入」弹同步结算价。
|
||||
- 协议价和结算价都没改时,不出现任何价格同步弹窗。
|
||||
|
||||
正在加载...
x
在新工单中引用
屏蔽一个用户