You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Odoo v9 POS模块商品数量加1方法及自定义快捷键无效问题求解

解决Odoo v9 POS中Ctrl+左箭头增加商品数量的问题

嘿,我能看出你已经走对了一半——成功捕获了快捷键并拿到了目标订单行,但问题出在你只是刷新了界面,却没有实际修改订单行的数量值😉

问题根源

你当前的代码调用了rerender_orderlineupdate_summary,但这两个方法只是负责界面渲染和汇总更新,并没有改变订单行的实际数量。原生的orderline_change函数是在数量已经发生变化后,用来同步界面显示的,它本身不具备修改数量的功能。

修正后的代码

要实现数量加1,你需要先修改订单行的数量,再触发界面更新。这里我们用POS原生的set_quantity方法来修改数量,它会自动处理价格计算、事件触发等逻辑,比直接修改属性更可靠:

// OrderWidget
screens.OrderWidget.include({
    renderElement: function(){
        this._super();
        var self = this;
        
        // 监听Ctrl+左箭头快捷键
        $.ctrl('37', function() {
            var currentOrder = self.pos.get_order();
            if (!currentOrder) return; // 先检查是否有活跃订单
            
            var targetLine = currentOrder.get_last_orderline();
            if (!targetLine) return; // 检查是否有可修改的订单行
            
            // 获取当前数量并加1
            var currentQty = targetLine.get_quantity();
            targetLine.set_quantity(currentQty + 1);
            
            // 可选:手动触发界面更新(set_quantity其实已经会自动触发,但保险起见可以加上)
            self.rerender_orderline(targetLine);
            self.update_summary();
        });
    },
});

关键说明

  • set_quantity是Odoo POS订单行对象的原生方法,调用它不仅会修改数量,还会自动重新计算该商品的总价、触发订单行变更事件,确保数据和界面的一致性。
  • 增加了空值检查(订单不存在、订单行不存在),避免快捷键触发时出现报错。

这样修改后,按下Ctrl+左箭头就能正确让最后一个订单行的数量加1啦!

内容的提问来源于stack exchange,提问作者Pointer

火山引擎 最新活动