diff --git a/YLErpWeb/wwwroot/Scripts/app/swaptrade/swapTradeEdit.js b/YLErpWeb/wwwroot/Scripts/app/swaptrade/swapTradeEdit.js index 40042d79..61823707 100644 --- a/YLErpWeb/wwwroot/Scripts/app/swaptrade/swapTradeEdit.js +++ b/YLErpWeb/wwwroot/Scripts/app/swaptrade/swapTradeEdit.js @@ -367,16 +367,21 @@ const vue = new Vue({ if (kc === 9 || kc === 35 || kc === 36 || kc === 37 || kc === 39 || kc === 116) return; // Backspace/Delete 改变数值,需清标识 // 数字键/小键盘/小数点/减号 改变数值,需清标识 + console.log('[onBondPriceKeydown] type=' + type + ' kc=' + kc + ' before: driver=' + item.bondDriverType); SwapCalc.applyBondManualEdit(item, type); this.syncBondFlags(item); + console.log('[onBondPriceKeydown] after: driver=' + item.bondDriverType + ' rev=' + JSON.stringify(item.bondRev)); }, //确保 bondDriverType/bondAuto/bondRev 的变更触发 Vue 响应式更新。 //swapCalc.js 的纯函数直接对 state 赋值,但这些属性不在后端数据中(非响应式), - //直接赋值不触发视图更新。用 $set 强制触发,无论属性是否已存在都能正确工作。 + //直接赋值不触发视图更新。$set 设置相同值也不会触发更新,所以每次都创建新对象引用。 syncBondFlags(item) { - this.$set(item, 'bondDriverType', item.bondDriverType); - this.$set(item, 'bondAuto', item.bondAuto); - this.$set(item, 'bondRev', item.bondRev); + // 用全新对象引用强制触发 Vue 2 响应式更新(旧引用相等时 Vue 会跳过更新) + this.$set(item, 'bondDriverType', item.bondDriverType === undefined ? null : item.bondDriverType); + this.$set(item, 'bondAuto', { CP: !!item.bondAuto.CP, DP: !!item.bondAuto.DP, YD: !!item.bondAuto.YD }); + this.$set(item, 'bondRev', { CP: !!item.bondRev.CP, DP: !!item.bondRev.DP, YD: !!item.bondRev.YD }); + // $forceUpdate 确保视图刷新(兜底:即使 $set 因相同值未触发也能更新) + this.$forceUpdate(); }, //全价列:普通标的重算名义本金;债券标的按交互约定3 标 REV(不联动)。 // 回车计算由独立的 v-on:enter="onBondPriceEnter(item,'DP')" 负责。